From 453426a5e5edc759f954b5a65068f031752e9641 Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Thu, 11 Jun 2020 00:06:44 -0500 Subject: [PATCH 1/7] Add xwing-data files --- pyxwb2/data/actions/actions.json | 67 + pyxwb2/data/conditions/conditions.json | 44 + pyxwb2/data/damage-decks/core.json | 88 + pyxwb2/data/factions/factions.json | 44 + pyxwb2/data/ffg-xws.json | 768 ++++++++ pyxwb2/data/manifest.json | 149 ++ .../first-order/tie-ba-interceptor.json | 118 ++ .../pilots/first-order/tie-fo-fighter.json | 210 +++ .../pilots/first-order/tie-sf-fighter.json | 205 ++ .../pilots/first-order/tie-vn-silencer.json | 170 ++ .../upsilon-class-command-shuttle.json | 208 +++ .../alpha-class-star-wing.json | 122 ++ .../lambda-class-t-4a-shuttle.json | 96 + .../galactic-empire/tie-advanced-v1.json | 127 ++ .../galactic-empire/tie-advanced-x1.json | 167 ++ .../galactic-empire/tie-ag-aggressor.json | 120 ++ .../galactic-empire/tie-ca-punisher.json | 115 ++ .../galactic-empire/tie-d-defender.json | 134 ++ .../galactic-empire/tie-in-interceptor.json | 113 ++ .../galactic-empire/tie-ln-fighter.json | 240 +++ .../galactic-empire/tie-ph-phantom.json | 114 ++ .../pilots/galactic-empire/tie-reaper.json | 120 ++ .../pilots/galactic-empire/tie-sa-bomber.json | 204 ++ .../galactic-empire/tie-sk-striker.json | 147 ++ .../galactic-empire/vt-49-decimator.json | 139 ++ .../arc-170-starfighter.json | 146 ++ .../galactic-republic/btl-b-y-wing.json | 253 +++ .../delta-7-aethersprite.json | 216 +++ .../naboo-royal-n-1-starfighter.json | 153 ++ .../v-19-torrent-starfighter.json | 143 ++ .../pilots/rebel-alliance/a-sf-01-b-wing.json | 160 ++ .../rebel-alliance/arc-170-starfighter.json | 126 ++ .../pilots/rebel-alliance/attack-shuttle.json | 120 ++ .../rebel-alliance/auzituck-gunship.json | 82 + .../pilots/rebel-alliance/btl-a4-y-wing.json | 177 ++ .../pilots/rebel-alliance/btl-s8-k-wing.json | 107 ++ pyxwb2/data/pilots/rebel-alliance/e-wing.json | 126 ++ .../hwk-290-light-freighter.json | 127 ++ .../modified-yt-1300-light-freighter.json | 159 ++ .../pilots/rebel-alliance/rz-1-a-wing.json | 115 ++ .../sheathipede-class-shuttle.json | 119 ++ .../pilots/rebel-alliance/t-65-x-wing.json | 288 +++ .../pilots/rebel-alliance/tie-ln-fighter.json | 99 + .../pilots/rebel-alliance/ut-60d-u-wing.json | 232 +++ .../vcx-100-light-freighter.json | 186 ++ .../yt-2400-light-freighter.json | 118 ++ .../rebel-alliance/z-95-af4-headhunter.json | 96 + pyxwb2/data/pilots/resistance/fireball.json | 152 ++ .../resistance/mg-100-starfortress-sf-17.json | 205 ++ .../resistance/resistance-transport-pod.json | 105 ++ .../resistance/resistance-transport.json | 132 ++ .../data/pilots/resistance/rz-2-a-wing.json | 189 ++ .../pilots/resistance/scavenged-yt-1300.json | 134 ++ .../data/pilots/resistance/t-70-x-wing.json | 314 ++++ .../aggressor-assault-fighter.json | 158 ++ .../scum-and-villainy/btl-a4-y-wing.json | 131 ++ .../customized-yt-1300-light-freighter.json | 139 ++ .../scum-and-villainy/escape-craft.json | 122 ++ .../scum-and-villainy/fang-fighter.json | 157 ++ .../firespray-class-patrol-craft.json | 187 ++ .../scum-and-villainy/g-1a-starfighter.json | 95 + .../hwk-290-light-freighter.json | 137 ++ .../scum-and-villainy/jumpmaster-5000.json | 170 ++ .../scum-and-villainy/kihraxz-fighter.json | 164 ++ .../lancer-class-pursuit-craft.json | 121 ++ .../m12-l-kimogila-fighter.json | 118 ++ .../scum-and-villainy/m3-a-interceptor.json | 209 +++ .../modified-tie-ln-fighter.json | 148 ++ .../quadrijet-transfer-spacetug.json | 114 ++ .../scum-and-villainy/scurrg-h-6-bomber.json | 110 ++ .../starviper-class-attack-platform.json | 153 ++ .../yv-666-light-freighter.json | 142 ++ .../z-95-af4-headhunter.json | 132 ++ .../belbullab-22-starfighter.json | 135 ++ .../hyena-class-droid-bomber.json | 188 ++ .../nantex-class-starfighter.json | 150 ++ .../separatist-alliance/sith-infiltrator.json | 146 ++ .../vulture-class-droid-fighter.json | 152 ++ pyxwb2/data/quick-builds/first-order.json | 426 +++++ pyxwb2/data/quick-builds/galactic-empire.json | 1126 +++++++++++ .../data/quick-builds/galactic-republic.json | 476 +++++ pyxwb2/data/quick-builds/rebel-alliance.json | 1195 ++++++++++++ pyxwb2/data/quick-builds/resistance.json | 528 ++++++ .../data/quick-builds/scum-and-villainy.json | 1307 +++++++++++++ .../quick-builds/separatist-alliance.json | 275 +++ pyxwb2/data/stats/stats.json | 65 + pyxwb2/data/translation.json | 666 +++++++ pyxwb2/data/upgrades/astromech.json | 448 +++++ pyxwb2/data/upgrades/cannon.json | 127 ++ pyxwb2/data/upgrades/cargo.json | 62 + pyxwb2/data/upgrades/command.json | 188 ++ pyxwb2/data/upgrades/configuration.json | 344 ++++ pyxwb2/data/upgrades/crew.json | 1644 +++++++++++++++++ pyxwb2/data/upgrades/device.json | 226 +++ pyxwb2/data/upgrades/force-power.json | 210 +++ pyxwb2/data/upgrades/gunner.json | 428 +++++ pyxwb2/data/upgrades/hardpoint.json | 131 ++ pyxwb2/data/upgrades/illicit.json | 186 ++ pyxwb2/data/upgrades/missile.json | 284 +++ pyxwb2/data/upgrades/modification.json | 369 ++++ pyxwb2/data/upgrades/sensor.json | 94 + pyxwb2/data/upgrades/tactical-relay.json | 96 + pyxwb2/data/upgrades/talent.json | 581 ++++++ pyxwb2/data/upgrades/team.json | 181 ++ pyxwb2/data/upgrades/tech.json | 158 ++ pyxwb2/data/upgrades/title.json | 875 +++++++++ pyxwb2/data/upgrades/torpedo.json | 106 ++ pyxwb2/data/upgrades/turret.json | 66 + pyxwb2/data/xws_schema.json | 91 + 109 files changed, 25045 insertions(+) create mode 100644 pyxwb2/data/actions/actions.json create mode 100644 pyxwb2/data/conditions/conditions.json create mode 100644 pyxwb2/data/damage-decks/core.json create mode 100644 pyxwb2/data/factions/factions.json create mode 100644 pyxwb2/data/ffg-xws.json create mode 100644 pyxwb2/data/manifest.json create mode 100644 pyxwb2/data/pilots/first-order/tie-ba-interceptor.json create mode 100644 pyxwb2/data/pilots/first-order/tie-fo-fighter.json create mode 100644 pyxwb2/data/pilots/first-order/tie-sf-fighter.json create mode 100644 pyxwb2/data/pilots/first-order/tie-vn-silencer.json create mode 100644 pyxwb2/data/pilots/first-order/upsilon-class-command-shuttle.json create mode 100644 pyxwb2/data/pilots/galactic-empire/alpha-class-star-wing.json create mode 100644 pyxwb2/data/pilots/galactic-empire/lambda-class-t-4a-shuttle.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-advanced-v1.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-advanced-x1.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-ag-aggressor.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-ca-punisher.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-d-defender.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-in-interceptor.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-ln-fighter.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-ph-phantom.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-reaper.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-sa-bomber.json create mode 100644 pyxwb2/data/pilots/galactic-empire/tie-sk-striker.json create mode 100644 pyxwb2/data/pilots/galactic-empire/vt-49-decimator.json create mode 100644 pyxwb2/data/pilots/galactic-republic/arc-170-starfighter.json create mode 100644 pyxwb2/data/pilots/galactic-republic/btl-b-y-wing.json create mode 100644 pyxwb2/data/pilots/galactic-republic/delta-7-aethersprite.json create mode 100644 pyxwb2/data/pilots/galactic-republic/naboo-royal-n-1-starfighter.json create mode 100644 pyxwb2/data/pilots/galactic-republic/v-19-torrent-starfighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/a-sf-01-b-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/arc-170-starfighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/attack-shuttle.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/auzituck-gunship.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/btl-a4-y-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/btl-s8-k-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/e-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/hwk-290-light-freighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/modified-yt-1300-light-freighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/rz-1-a-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/sheathipede-class-shuttle.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/t-65-x-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/tie-ln-fighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/ut-60d-u-wing.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/vcx-100-light-freighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/yt-2400-light-freighter.json create mode 100644 pyxwb2/data/pilots/rebel-alliance/z-95-af4-headhunter.json create mode 100644 pyxwb2/data/pilots/resistance/fireball.json create mode 100644 pyxwb2/data/pilots/resistance/mg-100-starfortress-sf-17.json create mode 100644 pyxwb2/data/pilots/resistance/resistance-transport-pod.json create mode 100644 pyxwb2/data/pilots/resistance/resistance-transport.json create mode 100644 pyxwb2/data/pilots/resistance/rz-2-a-wing.json create mode 100644 pyxwb2/data/pilots/resistance/scavenged-yt-1300.json create mode 100644 pyxwb2/data/pilots/resistance/t-70-x-wing.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/aggressor-assault-fighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/btl-a4-y-wing.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/customized-yt-1300-light-freighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/escape-craft.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/fang-fighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/firespray-class-patrol-craft.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/g-1a-starfighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/hwk-290-light-freighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/jumpmaster-5000.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/kihraxz-fighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/lancer-class-pursuit-craft.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/m12-l-kimogila-fighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/m3-a-interceptor.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/modified-tie-ln-fighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/quadrijet-transfer-spacetug.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/scurrg-h-6-bomber.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/starviper-class-attack-platform.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/yv-666-light-freighter.json create mode 100644 pyxwb2/data/pilots/scum-and-villainy/z-95-af4-headhunter.json create mode 100644 pyxwb2/data/pilots/separatist-alliance/belbullab-22-starfighter.json create mode 100644 pyxwb2/data/pilots/separatist-alliance/hyena-class-droid-bomber.json create mode 100644 pyxwb2/data/pilots/separatist-alliance/nantex-class-starfighter.json create mode 100644 pyxwb2/data/pilots/separatist-alliance/sith-infiltrator.json create mode 100644 pyxwb2/data/pilots/separatist-alliance/vulture-class-droid-fighter.json create mode 100644 pyxwb2/data/quick-builds/first-order.json create mode 100644 pyxwb2/data/quick-builds/galactic-empire.json create mode 100644 pyxwb2/data/quick-builds/galactic-republic.json create mode 100644 pyxwb2/data/quick-builds/rebel-alliance.json create mode 100644 pyxwb2/data/quick-builds/resistance.json create mode 100644 pyxwb2/data/quick-builds/scum-and-villainy.json create mode 100644 pyxwb2/data/quick-builds/separatist-alliance.json create mode 100644 pyxwb2/data/stats/stats.json create mode 100644 pyxwb2/data/translation.json create mode 100644 pyxwb2/data/upgrades/astromech.json create mode 100644 pyxwb2/data/upgrades/cannon.json create mode 100644 pyxwb2/data/upgrades/cargo.json create mode 100644 pyxwb2/data/upgrades/command.json create mode 100644 pyxwb2/data/upgrades/configuration.json create mode 100644 pyxwb2/data/upgrades/crew.json create mode 100644 pyxwb2/data/upgrades/device.json create mode 100644 pyxwb2/data/upgrades/force-power.json create mode 100644 pyxwb2/data/upgrades/gunner.json create mode 100644 pyxwb2/data/upgrades/hardpoint.json create mode 100644 pyxwb2/data/upgrades/illicit.json create mode 100644 pyxwb2/data/upgrades/missile.json create mode 100644 pyxwb2/data/upgrades/modification.json create mode 100644 pyxwb2/data/upgrades/sensor.json create mode 100644 pyxwb2/data/upgrades/tactical-relay.json create mode 100644 pyxwb2/data/upgrades/talent.json create mode 100644 pyxwb2/data/upgrades/team.json create mode 100644 pyxwb2/data/upgrades/tech.json create mode 100644 pyxwb2/data/upgrades/title.json create mode 100644 pyxwb2/data/upgrades/torpedo.json create mode 100644 pyxwb2/data/upgrades/turret.json create mode 100644 pyxwb2/data/xws_schema.json diff --git a/pyxwb2/data/actions/actions.json b/pyxwb2/data/actions/actions.json new file mode 100644 index 0000000..276b0bf --- /dev/null +++ b/pyxwb2/data/actions/actions.json @@ -0,0 +1,67 @@ +[ + { + "name": "Boost", + "xws": "boost", + "ffg": 1 + }, + { + "name": "Focus", + "xws": "focus", + "ffg": 2 + }, + { + "name": "Evade", + "xws": "evade", + "ffg": 3 + }, + { + "name": "Lock", + "xws": "lock", + "ffg": 4 + }, + { + "name": "Barrel Roll", + "xws": "barrelroll", + "ffg": 5 + }, + { + "name": "Reinforce", + "xws": "reinforce", + "ffg": 6 + }, + { + "name": "Cloak", + "xws": "cloak", + "ffg": 7 + }, + { + "name": "Coordinate", + "xws": "coordinate", + "ffg": 8 + }, + { + "name": "Calculate", + "xws": "calculate", + "ffg": 9 + }, + { + "name": "Jam", + "xws": "jam", + "ffg": 10 + }, + { + "name": "Reload", + "xws": "reload", + "ffg": 12 + }, + { + "name": "Slam", + "xws": "slam", + "ffg": 13 + }, + { + "name": "Rotate Arc", + "xws": "rotatearc", + "ffg": 14 + } +] diff --git a/pyxwb2/data/conditions/conditions.json b/pyxwb2/data/conditions/conditions.json new file mode 100644 index 0000000..7940174 --- /dev/null +++ b/pyxwb2/data/conditions/conditions.json @@ -0,0 +1,44 @@ +[ + { + "name": "Hunted", + "ability": "After you are destroyed, you must choose another friendly ship and assign this condition to it, if able.", + "xws": "hunted" + }, + { + "name": "I'll Show You the Dark Side", + "ability": "When this card is assigned, if there is no faceup damage card on it, the player who assigned it searches the damage deck for 1 Pilot damage card and places it faceup on this card. Then shuffle the damage deck. When you would suffer 1 [Critical Hit] damage, you are instead dealt the faceup damage card on this card. Then, remove this card.", + "xws": "illshowyouthedarkside", + "image": "https://images-cdn.fantasyflightgames.com/filer_public/d1/43/d143413b-c3ee-4eca-b489-9ca1f463980a/swz18_ill-show-you_a3.png" + }, + { + "name": "Listening Device", + "ability": "During the System Phase, if an enemy ship with the Informant upgrade is at range 0-2, flip your dial faceup.", + "xws": "listeningdevice" + }, + { + "name": "Optimized Prototype", + "ability": "While you perform a [Front Arc] primary attack against a ship locked by a friendly ship with the Director Krennic upgrade, you may spend 1 [Hit], [Critical Hit], or [Focus] result. If you do, choose one: the defender loses 1 shield, or the defender flips 1 of its facedown damage cards.", + "xws": "optimizedprototype", + "image": "https://images-cdn.fantasyflightgames.com/filer_public/0d/94/0d94dd35-08eb-493c-b4bd-c077be0e2292/swx75_card2_optimized-prototype.png" + }, + { + "name": "Rattled", + "ability": "After a bomb or mine at range 0-1 detonates, suffer 1 [Critical Hit] damage. Then, remove this card. ACTION: If there are no bombs or mines at range 0-1, remove this card.", + "xws": "rattled" + }, + { + "name": "Suppressive Fire", + "ability": "While you perform an attack against a ship other than Captain Rex, roll 1 fewer attack die. After Captain Rex defends, remove this card. At the end of the Combat phase, if Captain Rex did not perform an attack this phase, remove this card. After Captain Rex is destroyed, remove this card.", + "xws": "suppressivefire" + }, + { + "name": "Decoyed", + "ability": "While you defend, each friendly Naboo Handmaiden in the attack arc may spend 1 evade token to change one of your results to an [Evade] result. If you are a Naboo Royal N-1 Starfighter, each friendly Naboo Handmaiden in the attack may spend 1 evade token to add 1 [Evade] result instead.", + "xws": "decoyed" + }, + { + "name": "Compromising Intel", + "ability": "During the System Phase, if the enemy Vi Moradi is at range 0-3, flip your dial faceup. While you defend or perform an attack against the enemy Vi Moradi, you cannot spend focus tokens.", + "xws": "compromisingintel" + } +] diff --git a/pyxwb2/data/damage-decks/core.json b/pyxwb2/data/damage-decks/core.json new file mode 100644 index 0000000..38e6496 --- /dev/null +++ b/pyxwb2/data/damage-decks/core.json @@ -0,0 +1,88 @@ +{ + "cards": [ + { + "title": "Panicked Pilot", + "amount": 2, + "type": "Pilot", + "text": "Gain 2 stress tokens. Then repair this card." + }, + { + "title": "Blinded Pilot", + "amount": 2, + "type": "Pilot", + "text": "While you perform an attack, you can modify your dice only by spending [Force] for their default effect. Action: Repair this card." + }, + { + "title": "Wounded Pilot", + "amount": 2, + "type": "Pilot", + "text": "After you perform an action, roll 1 attack die. On a [Hit] or [Critical Hit] result, gain 1 stress token. Action: Repair this card." + }, + { + "title": "Stunned Pilot", + "amount": 2, + "type": "Pilot", + "text": "After you execute a maneuver, if you moved through or overlapped an obstacle, suffer 1 [Hit] damage." + }, + { + "title": "Console Fire", + "amount": 2, + "type": "Ship", + "text": "Before you engage, roll 1 attack die. On a [Hit] result, suffer 1 [Hit] damage. Action: Repair this card." + }, + { + "title": "Damaged Engine", + "amount": 2, + "type": "Ship", + "text": "Increase the difficulty of you turn maneuvers ([Turn Left] and [Turn Right])." + }, + { + "title": "Weapons Failure", + "amount": 2, + "type": "Ship", + "text": "While you perform an attack, roll 1 fewer attack die. Action: Repair this card." + }, + { + "title": "Hull Breach", + "amount": 2, + "type": "Ship", + "text": "Before you would suffer 1 or more [Hit] damage, suffer that much [Critical Hit] damage instead. Action: Repair this card." + }, + { + "title": "Structural Damage", + "amount": 2, + "type": "Ship", + "text": "While you defend, roll 1 fewer defense die." + }, + { + "title": "Damaged Sensor Array", + "amount": 2, + "type": "Ship", + "text": "You cannot perform any actions except the [Focus] action and actions from damage cards. Action: Repair this card." + }, + { + "title": "Loose Stabilizer", + "amount": 2, + "type": "Ship", + "text": "After you execute a non-straight maneuver ([Straight]), suffer 1 [Hit] damage and repair this card. Action: Repair this card." + }, + { + "title": "Disabled Power Regulator", + "amount": 2, + "type": "Ship", + "text": "Before you engage, gain 1 ion token. After you execute an ion maneuver, repair this card." + }, + { + "title": "Fuel Leak", + "amount": 4, + "type": "Ship", + "text": "After you suffer 1 [Critical Hit] damage, suffer 1 [Hit] damage and repair this card. Action: Repair this card." + }, + { + "title": "Direct Hit!", + "amount": 5, + "type": "Ship", + "text": "Suffer 1 [Hit] damage. Then repair this card." + } + ] +} diff --git a/pyxwb2/data/factions/factions.json b/pyxwb2/data/factions/factions.json new file mode 100644 index 0000000..cce3f8c --- /dev/null +++ b/pyxwb2/data/factions/factions.json @@ -0,0 +1,44 @@ +[ + { + "name": "Rebel Alliance", + "xws": "rebelalliance", + "ffg": 1, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/Rebel.png" + }, + { + "name": "Galactic Empire", + "xws": "galacticempire", + "ffg": 2, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/Imperial.png" + }, + { + "name": "Scum and Villainy", + "xws": "scumandvillainy", + "ffg": 3, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/Scum.png" + }, + { + "name": "Resistance", + "xws": "resistance", + "ffg": 4, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/ResistanceIcon.png" + }, + { + "name": "First Order", + "xws": "firstorder", + "ffg": 5, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/FirstOrderIcon.png" + }, + { + "name": "Galactic Republic", + "xws": "galacticrepublic", + "ffg": 6, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/RepublicIcon.png" + }, + { + "name": "Separatist Alliance", + "xws": "separatistalliance", + "ffg": 7, + "icon": "https://sb-cdn.fantasyflightgames.com/factions/SeparatistIcon.png" + } +] diff --git a/pyxwb2/data/ffg-xws.json b/pyxwb2/data/ffg-xws.json new file mode 100644 index 0000000..9b68484 --- /dev/null +++ b/pyxwb2/data/ffg-xws.json @@ -0,0 +1,768 @@ +{ + "pilots": { + "1": "wedgeantilles", + "2": "lukeskywalker", + "3": "thanekyrell", + "4": "garvendreis-t65xwing", + "5": "jekporkins", + "6": "kullbeesperado", + "7": "biggsdarklighter", + "8": "leevantenza", + "9": "edriotwotubes", + "10": "redsquadronveteran", + "11": "bluesquadronescort", + "12": "cavernangelszealot", + "13": "norrawexley-btla4ywing", + "14": "dutchvander", + "15": "hortonsalm", + "16": "evaanverlaine", + "17": "goldsquadronveteran", + "18": "graysquadronbomber", + "19": "jakefarrell", + "20": "arvelcrynyd", + "21": "greensquadronpilot", + "22": "phoenixsquadronpilot", + "23": "braylenstramm", + "24": "tennumb", + "25": "bladesquadronveteran", + "26": "bluesquadronpilot", + "27": "airencracken", + "28": "lieutenantblount", + "29": "talasquadronpilot", + "30": "banditsquadronpilot", + "31": "wullffwarro", + "32": "lowhhrick", + "33": "kashyyykdefender", + "34": "herasyndulla", + "35": "sabinewren", + "36": "ezrabridger", + "37": "zeborrelios", + "38": "fennrau-sheathipedeclassshuttle", + "39": "ezrabridger-sheathipedeclassshuttle", + "40": "zeborrelios-sheathipedeclassshuttle", + "41": "ap5", + "42": "janors", + "43": "kylekatarn", + "44": "roarkgarnet", + "45": "rebelscout", + "46": "ezrabridger-tielnfighter", + "47": "sabinewren-tielnfighter", + "48": "captainrex", + "49": "zeborrelios-tielnfighter", + "50": "corranhorn", + "51": "gavindarklighter", + "52": "roguesquadronescort", + "53": "knavesquadronescort", + "54": "bodhirook", + "55": "sawgerrera", + "56": "cassianandor", + "57": "magvayarro", + "58": "benthictwotubes", + "59": "hefftobber", + "60": "bluesquadronscout", + "61": "partisanrenegade", + "62": "mirandadoni", + "63": "esegetuketu", + "64": "wardensquadronpilot", + "65": "norrawexley", + "66": "garvendreis", + "67": "sharabey", + "68": "ibtisam", + "69": "hansolo-modifiedyt1300lightfreighter", + "70": "landocalrissian-modifiedyt1300lightfreighter", + "71": "chewbacca", + "72": "outerrimsmuggler", + "73": "herasyndulla-vcx100lightfreighter", + "74": "kananjarrus", + "75": "chopper", + "76": "lothalrebel", + "77": "dashrendar", + "78": "leebo", + "79": "wildspacefringer", + "80": "maulermithel", + "81": "howlrunner", + "82": "scourgeskutu", + "83": "idenversio", + "84": "gideonhask", + "85": "delmeeko", + "86": "seynmarana", + "87": "valenrudor", + "88": "nightbeast", + "89": "wampa", + "90": "blacksquadronace", + "91": "obsidiansquadronpilot", + "92": "academypilot", + "93": "darthvader", + "94": "maarekstele", + "95": "vedfoslo", + "96": "zertikstrom", + "97": "stormsquadronace", + "98": "tempestsquadronpilot", + "99": "grandinquisitor", + "100": "seventhsister", + "101": "baronoftheempire", + "102": "inquisitor", + "103": "soontirfel", + "104": "turrphennir", + "105": "sabersquadronace", + "106": "alphasquadronpilot", + "107": "tomaxbren", + "108": "captainjonus", + "109": "majorrhymer", + "110": "deathfire", + "111": "gammasquadronace", + "112": "scimitarsquadronpilot", + "113": "majorvermeil", + "114": "captainferoph", + "115": "vizier", + "116": "scarifbasepilot", + "117": "duchess", + "118": "countdown", + "119": "puresabacc", + "120": "blacksquadronscout", + "121": "planetarysentinel", + "122": "rexlerbrath", + "123": "colonelvessery", + "124": "countessryad", + "125": "onyxsquadronace", + "126": "deltasquadronpilot", + "127": "lieutenantkestal", + "128": "doubleedge", + "129": "onyxsquadronscout", + "130": "sienarspecialist", + "131": "whisper", + "132": "echo", + "133": "sigmasquadronace", + "134": "imdaartestpilot", + "135": "majorvynder", + "136": "lieutenantkarsabi", + "137": "rhosquadronpilot", + "138": "nusquadronpilot", + "139": "redline", + "140": "deathrain", + "141": "cutlasssquadronpilot", + "142": "captainkagi", + "143": "coloneljendon", + "144": "lieutenantsai", + "145": "omicrongrouppilot", + "146": "captainoicunn", + "147": "rearadmiralchiraneau", + "148": "patrolleader", + "149": "bobafett", + "150": "emonazzameen", + "151": "kathscarlet", + "152": "koshkafrost", + "153": "krassistrelix", + "154": "bountyhunter", + "155": "fennrau", + "156": "oldteroch", + "157": "joyrekkoff", + "158": "kadsolus", + "159": "skullsquadronpilot", + "160": "zealousrecruit", + "161": "constablezuvio", + "162": "sarcoplank", + "163": "unkarplutt", + "164": "jakkugunrunner", + "165": "kavil", + "166": "drearenthal", + "167": "hiredgun", + "168": "crymorahgoon", + "169": "ndrusuhlak", + "170": "kaatoleeachos", + "171": "nashtahpup", + "172": "blacksunsoldier", + "173": "binayrepirate", + "174": "dacebonearm", + "175": "palobgodalhi", + "176": "torkilmux", + "177": "spicerunner", + "178": "guri", + "179": "dalanoberos-starviperclassattackplatform", + "180": "princexizor", + "181": "blacksunassassin", + "182": "blacksunenforcer", + "183": "serissu", + "184": "genesisred", + "185": "laetinashera", + "186": "quinnjast", + "187": "inaldra", + "188": "sunnybounder", + "189": "tansariipointveteran", + "190": "cartelspacer", + "191": "talonbanecobra", + "192": "graz", + "193": "viktorhel", + "194": "captainjostero", + "195": "blacksunace", + "196": "cartelmarauder", + "197": "ig88a", + "198": "ig88b", + "199": "ig88c", + "200": "ig88d", + "201": "4lom", + "202": "zuckuss", + "203": "gandfindsman", + "204": "captainnym", + "205": "solsixxa", + "206": "lokrevenant", + "207": "toranikulda", + "208": "dalanoberos", + "209": "cartelexecutioner", + "210": "bossk", + "211": "moraloeval", + "212": "lattsrazzi", + "213": "trandoshanslaver", + "214": "dengar", + "215": "manaroo", + "216": "teltrevura", + "217": "contractedscout", + "218": "ketsuonyo", + "219": "asajjventress", + "220": "sabinewren-lancerclasspursuitcraft", + "221": "shadowporthunter", + "222": "hansolo", + "223": "landocalrissian", + "224": "l337", + "225": "freightercaptain", + "226": "landocalrissian-escapecraft", + "227": "outerrimpioneer", + "228": "l337-escapecraft", + "229": "autopilotdrone", + "397": "midnight", + "398": "scorch", + "399": "static", + "400": "longshot", + "401": "muse", + "402": "null", + "403": "omegasquadronace", + "404": "zetasquadronpilot", + "405": "epsilonsquadroncadet", + "406": "quickdraw", + "407": "backdraft", + "408": "omegasquadronexpert", + "409": "zetasquadronsurvivor", + "410": "majorstridan", + "411": "lieutenanttavson", + "412": "lieutenantdormitz", + "413": "starkillerbasepilot", + "414": "kyloren", + "415": "blackout", + "416": "firstordertestpilot", + "417": "sienarjaemusengineer", + "418": "poedameron", + "419": "elloasty", + "420": "niennunb", + "421": "karekun", + "422": "temminwexley", + "423": "jessikapava", + "424": "jophseastriker", + "425": "redsquadronexpert", + "426": "bluesquadronrookie", + "427": "hansolo-scavengedyt1300", + "428": "rey", + "429": "chewbacca-scavengedyt1300", + "430": "resistancesympathizer", + "431": "finchdallow", + "432": "benteene", + "433": "cat", + "434": "cobaltsquadronbomber", + "435": "lulolampar", + "436": "tallissanlintra", + "437": "greersonnel", + "438": "zaribangel", + "439": "greensquadronexpert", + "440": "bluesquadronrecruit", + "441": "foremanproach", + "442": "ahhav", + "443": "captainseevor", + "444": "overseeryushyn", + "445": "miningguildsurveyor", + "446": "miningguildsentry", + "447": "edonkappehl", + "448": "vennie", + "449": "lieutenantbastian", + "450": "jaycristubbs", + "451": "blacksquadronace-t70xwing", + "452": "commandermalarus", + "453": "tn3465", + "454": "lieutenantrivas", + "455": "recoil", + "456": "avenger", + "457": "captaincardinal", + "458": "pettyofficerthanisson", + "492": "generalgrievous", + "493": "wattambor", + "494": "captainsear", + "495": "skakoanace", + "496": "feethanottrawautopilot", + "497": "separatistdrone", + "498": "tradefederationdrone", + "499": "dfs081", + "500": "precisehunter", + "501": "dfs311", + "502": "haorchallprototype", + "503": "darthmaul", + "504": "countdooku", + "505": "066", + "506": "darkcourier", + "507": "anakinskywalker", + "508": "luminaraunduli", + "509": "barrissoffee", + "510": "ahsokatano", + "511": "obiwankenobi", + "512": "macewindu", + "513": "plokoon", + "514": "saeseetiin", + "515": "jediknight", + "516": "oddball", + "517": "kickback", + "518": "axe", + "519": "swoop", + "520": "tucker", + "521": "bluesquadronprotector", + "522": "goldsquadrontrooper", + "523": "oddball-arc170starfighter", + "524": "wolffe", + "525": "jag", + "526": "sinker", + "527": "squadsevenveteran", + "528": "104thbattalionpilot", + "557": "ricolie", + "558": "anakinskywalker-nabooroyaln1starfighter", + "559": "padmeamidala", + "560": "dineeellberger", + "561": "naboohandmaiden", + "562": "bravoflightofficer", + "563": "dbs404", + "564": "dbs32c", + "565": "bombardmentdrone", + "566": "baktoidprototype", + "567": "separatistbomber", + "568": "technounionbomber", + "569": "covanell", + "570": "pammichnerrogoode", + "571": "nodinchavdri", + "572": "logisticsdivisionpilot", + "573": "bb8", + "574": "rosetico", + "575": "finn", + "576": "vimoradi", + "596": "anakinskywalker-btlbywing", + "597": "oddball-btlbywing", + "598": "matchstick", + "599": "broadside", + "600": "r2d2", + "601": "goji", + "602": "shadowsquadronveteran", + "603": "redsquadronbomber", + "604": "sunfac", + "605": "berwerkret", + "606": "chertek", + "607": "gorgol", + "608": "petranakiarenaace", + "609": "stalgasinhiveguard", + "620": "jarekyeager", + "621": "kazudaxiono", + "622": "r1j5", + "623": "colossusstationmechanic", + "624": "majorvonreg", + "625": "holo", + "626": "ember", + "627": "firstorderprovocateur", + "628": "ginamoonsong", + "629": "k2so", + "630": "leiaorgana", + "631": "alexsandrkallus", + "632": "fifthbrother", + "633": "vagabond", + "634": "mornakee", + "635": "bossk-z95af4headhunter", + "636": "g4rgorvm", + "637": "nomlumb", + "638": "zizitlo", + "639": "ronithblario", + "640": "paigetico", + "641": "lieutenantlehuse", + "642": "captainphasma", + "643": "rush" + }, + "upgrades": { + "230": "crackshot", + "231": "daredevil", + "232": "debrisgambit", + "233": "elusive", + "234": "experthandling", + "235": "fearless", + "236": "intimidation", + "237": "juke", + "238": "lonewolf", + "239": "marksmanship", + "240": "outmaneuver", + "241": "predator", + "242": "ruthless", + "243": "saturationsalvo", + "244": "selfless", + "245": "squadleader", + "246": "swarmtactics", + "247": "trickshot", + "248": "heightenedperception", + "249": "instinctiveaim", + "250": "sense", + "251": "supernaturalreflexes", + "252": "advancedsensors", + "253": "collisiondetector", + "254": "firecontrolsystem", + "255": "trajectorysimulator", + "256": "heavylasercannon", + "257": "ioncannon", + "258": "jammingbeam", + "259": "tractorbeam", + "260": "dorsalturret", + "261": "ioncannonturret", + "262": "advprotontorpedoes", + "263": "iontorpedoes", + "264": "protontorpedoes", + "265": "barragerockets", + "266": "clustermissiles", + "267": "concussionmissiles", + "268": "homingmissiles", + "269": "ionmissiles", + "270": "protonrockets", + "271": "freelanceslicer", + "272": "gnkgonkdroid", + "273": "informant", + "274": "novicetechnician", + "275": "perceptivecopilot", + "276": "seasonednavigator", + "277": "tacticalofficer", + "278": "hotshotgunner", + "279": "skilledbombardier", + "280": "veterantailgunner", + "281": "veteranturretgunner", + "282": "r2astromech", + "283": "r3astromech", + "284": "r4astromech", + "285": "r5astromech", + "286": "cloakingdevice", + "287": "contrabandcybernetics", + "288": "deadmansswitch", + "289": "feedbackarray", + "290": "inertialdampeners", + "291": "riggedcargochute", + "292": "ablativeplating", + "293": "advancedslam", + "294": "afterburners", + "295": "electronicbaffle", + "296": "engineupgrade", + "297": "hullupgrade", + "298": "munitionsfailsafe", + "299": "shieldupgrade", + "300": "staticdischargevanes", + "301": "stealthdevice", + "302": "tacticalscrambler", + "303": "bazemalbus", + "304": "c3po", + "305": "cassianandor", + "306": "chewbacca", + "307": "chopper-crew", + "308": "herasyndulla", + "309": "jynerso", + "310": "kananjarrus", + "311": "landocalrissian", + "312": "leiaorgana", + "313": "magvayarro", + "314": "niennunb", + "315": "r2d2-crew", + "316": "sabinewren", + "317": "sawgerrera", + "318": "zeborrelios", + "319": "bistan", + "320": "ezrabridger", + "321": "hansolo", + "322": "lukeskywalker", + "323": "chopper", + "324": "r2d2", + "325": "r5d8", + "326": "ghost", + "327": "millenniumfalcon", + "328": "moldycrow", + "329": "outrider", + "330": "phantom", + "331": "pivotwing", + "332": "pivotwing", + "333": "servomotorsfoils", + "334": "servomotorsfoils", + "335": "admiralsloane", + "336": "agentkallus", + "337": "cienaree", + "338": "darthvader", + "339": "deathtroopers", + "340": "directorkrennic", + "341": "emperorpalpatine", + "342": "grandinquisitor", + "343": "grandmofftarkin", + "344": "isbslicer", + "345": "ministertua", + "346": "moffjerjerrod", + "347": "seventhsister", + "348": "fifthbrother", + "349": "dauntless", + "350": "os1arsenalloadout", + "351": "xg1assaultconfiguration", + "352": "000", + "353": "4lom", + "354": "bobafett", + "355": "cadbane", + "356": "cikatrovizago", + "357": "ig88d", + "358": "jabbathehutt", + "359": "ketsuonyo", + "360": "lattsrazzi", + "361": "maul", + "362": "unkarplutt", + "363": "zuckuss", + "364": "bossk", + "365": "bt1", + "366": "dengar", + "367": "greedo", + "368": "genius", + "369": "r5p8", + "370": "r5tk", + "371": "andrasta", + "372": "havoc", + "373": "houndstooth", + "374": "ig2000", + "375": "marauder", + "376": "misthunter", + "377": "punishingone", + "378": "shadowcaster", + "379": "slavei", + "380": "virago", + "381": "composure", + "382": "chewbacca-crew", + "383": "l337", + "384": "l337", + "385": "landocalrissian-crew", + "386": "tobiasbeckett", + "387": "qira", + "388": "agilegunner", + "389": "hansolo-gunner", + "390": "landosmillenniumfalcon", + "391": "st321", + "392": "bombletgenerator", + "393": "connernets", + "394": "protonbombs", + "395": "proximitymines", + "396": "seismiccharges", + "459": "fanatical", + "460": "advancedoptics", + "461": "hyperspacetrackingdata", + "462": "patternanalyzer", + "463": "primedthrusters", + "464": "targetingsynchronizer", + "465": "captainphasma", + "466": "generalhux", + "467": "kyloren", + "468": "pettyofficerthanisson", + "469": "supremeleadersnoke", + "470": "specialforcesgunner", + "471": "heroic", + "472": "c3po-crew", + "473": "chewbacca-crew-swz19", + "474": "hansolo-crew", + "475": "rosetico", + "476": "finn", + "477": "paigetico", + "478": "rey-gunner", + "479": "bb8", + "480": "bbastromech", + "481": "m9g8", + "482": "r2ha", + "483": "r5x3", + "484": "blackone", + "485": "reysmillenniumfalcon", + "486": "integratedsfoils", + "487": "integratedsfoils", + "488": "ferrospherepaint", + "489": "hate", + "490": "predictiveshot", + "491": "biohexacryptcodes", + "529": "treacherous", + "530": "tv94", + "531": "kraken", + "532": "energyshellcharges", + "533": "soullessone", + "534": "imperviumplating", + "535": "grapplingstruts", + "536": "brilliantevasion", + "537": "k2b4", + "538": "chancellorpalpatine", + "539": "countdooku", + "540": "generalgrievous", + "541": "drk1probedroids", + "542": "scimitar", + "543": "discordmissiles", + "544": "dedicated", + "545": "battlemeditation", + "546": "r4pastromech", + "547": "r4p17", + "548": "delta7b", + "549": "calibratedlasertargeting", + "550": "sparepartscanisters", + "551": "r4p44", + "552": "clonecommandercody", + "553": "seventhfleetgunner", + "554": "synchronizedconsole", + "555": "grapplingstruts", + "556": "chancellorpalpatine", + "577": "passivesensors", + "578": "autoblasters", + "579": "plasmatorpedoes", + "580": "diamondboronmissiles", + "581": "amilynholdo", + "582": "ga97", + "583": "kaydelconnix", + "584": "korrsella", + "585": "larmadacy", + "586": "leiaorgana-resistance", + "587": "pz4co", + "588": "r2a6", + "589": "r2c4", + "590": "ta175", + "591": "electroprotonbomb", + "592": "delayedfuses", + "593": "angleddeflectors", + "594": "landingstruts", + "595": "landingstruts", + "610": "ensnare", + "611": "graviticdeflection", + "612": "snapshot", + "613": "foresight", + "614": "precognitivereflexes", + "615": "ahsokatano", + "616": "c3po-republic", + "617": "c110p", + "618": "c110p", + "619": "targetingcomputer", + "644": "r1j5", + "645": "stabilizedsfoils", + "646": "stabilizedsfoils", + "647": "k2so", + "648": "clustermines", + "649": "ionbombs", + "650": "coaxiumhyperfuel", + "651": "magpulsewarheads", + "652": "proudtradition", + "653": "proudtradition", + "654": "deuteriumpowercells", + "655": "kazsfireball" + }, + "factions": { + "1": "rebelalliance", + "2": "galacticempire", + "3": "scumandvillainy", + "4": "resistance", + "5": "firstorder", + "6": "galacticrepublic", + "7": "separatistalliance" + }, + "ships": { + "1": "modifiedyt1300lightfreighter", + "3": "starviperclassattackplatform", + "4": "scurrgh6bomber", + "5": "yt2400lightfreighter", + "6": "auzituckgunship", + "7": "kihraxzfighter", + "8": "sheathipedeclassshuttle", + "9": "quadrijettransferspacetug", + "10": "firesprayclasspatrolcraft", + "11": "tielnfighter", + "12": "btla4ywing", + "13": "tieadvancedx1", + "14": "alphaclassstarwing", + "15": "ut60duwing", + "16": "tieskstriker", + "17": "asf01bwing", + "18": "tieddefender", + "19": "tiesabomber", + "20": "tiecapunisher", + "21": "aggressorassaultfighter", + "22": "g1astarfighter", + "23": "vcx100lightfreighter", + "24": "yv666lightfreighter", + "25": "tieadvancedv1", + "26": "lambdaclasst4ashuttle", + "27": "tiephphantom", + "28": "vt49decimator", + "29": "tieagaggressor", + "30": "btls8kwing", + "31": "arc170starfighter", + "32": "attackshuttle", + "33": "t65xwing", + "34": "hwk290lightfreighter", + "35": "rz1awing", + "36": "fangfighter", + "38": "z95af4headhunter", + "39": "m12lkimogilafighter", + "40": "ewing", + "41": "tieininterceptor", + "42": "lancerclasspursuitcraft", + "43": "tiereaper", + "44": "m3ainterceptor", + "45": "jumpmaster5000", + "47": "customizedyt1300lightfreighter", + "48": "escapecraft", + "49": "tiefofighter", + "50": "tiesffighter", + "51": "upsilonclassshuttle", + "52": "tievnsilencer", + "53": "t70xwing", + "54": "rz2awing", + "55": "mg100starfortress", + "56": "modifiedtielnfighter", + "57": "scavengedyt1300", + "58": "belbullab22starfighter", + "59": "vultureclassdroidfighter", + "60": "sithinfiltrator", + "61": "delta7aethersprite", + "62": "v19torrentstarfighter", + "63": "nabooroyaln1starfighter", + "64": "resistancetransport", + "65": "resistancetransportpod", + "66": "hyenaclassdroidbomber", + "67": "nantexclassstarfighter", + "68": "btlbywing", + "69": "tiebainterceptor", + "70": "fireball" + }, + "actions": { + "1": "boost", + "2": "focus", + "3": "evade", + "4": "lock", + "5": "barrelroll", + "6": "reinforce", + "7": "cloak", + "8": "coordinate", + "9": "calculate", + "10": "jam", + "12": "reload", + "13": "slam", + "14": "rotatearc" + }, + "stats": { + "1": "agility", + "2": "hull", + "3": "shields", + "4": "force", + "7": "charge", + "8": "doubleturretarc", + "9": "fullfrontarc", + "10": "frontarc", + "11": "bullseyearc", + "12": "singleturretarc", + "14": "reararc", + "20": "weaponrangenobonus" + } +} diff --git a/pyxwb2/data/manifest.json b/pyxwb2/data/manifest.json new file mode 100644 index 0000000..0f73fd4 --- /dev/null +++ b/pyxwb2/data/manifest.json @@ -0,0 +1,149 @@ +{ + "version": "1.21.0", + "damagedecks": ["data/damage-decks/core.json"], + "factions": ["data/factions/factions.json"], + "stats": ["data/stats/stats.json"], + "actions": ["data/actions/actions.json"], + "pilots": [ + { + "faction": "rebelalliance", + "ships": [ + "data/pilots/rebel-alliance/a-sf-01-b-wing.json", + "data/pilots/rebel-alliance/arc-170-starfighter.json", + "data/pilots/rebel-alliance/attack-shuttle.json", + "data/pilots/rebel-alliance/auzituck-gunship.json", + "data/pilots/rebel-alliance/btl-a4-y-wing.json", + "data/pilots/rebel-alliance/btl-s8-k-wing.json", + "data/pilots/rebel-alliance/e-wing.json", + "data/pilots/rebel-alliance/hwk-290-light-freighter.json", + "data/pilots/rebel-alliance/modified-yt-1300-light-freighter.json", + "data/pilots/rebel-alliance/rz-1-a-wing.json", + "data/pilots/rebel-alliance/sheathipede-class-shuttle.json", + "data/pilots/rebel-alliance/t-65-x-wing.json", + "data/pilots/rebel-alliance/tie-ln-fighter.json", + "data/pilots/rebel-alliance/ut-60d-u-wing.json", + "data/pilots/rebel-alliance/vcx-100-light-freighter.json", + "data/pilots/rebel-alliance/yt-2400-light-freighter.json", + "data/pilots/rebel-alliance/z-95-af4-headhunter.json" + ] + }, + { + "faction": "scumandvillainy", + "ships": [ + "data/pilots/scum-and-villainy/aggressor-assault-fighter.json", + "data/pilots/scum-and-villainy/btl-a4-y-wing.json", + "data/pilots/scum-and-villainy/customized-yt-1300-light-freighter.json", + "data/pilots/scum-and-villainy/escape-craft.json", + "data/pilots/scum-and-villainy/fang-fighter.json", + "data/pilots/scum-and-villainy/firespray-class-patrol-craft.json", + "data/pilots/scum-and-villainy/g-1a-starfighter.json", + "data/pilots/scum-and-villainy/hwk-290-light-freighter.json", + "data/pilots/scum-and-villainy/jumpmaster-5000.json", + "data/pilots/scum-and-villainy/kihraxz-fighter.json", + "data/pilots/scum-and-villainy/lancer-class-pursuit-craft.json", + "data/pilots/scum-and-villainy/m12-l-kimogila-fighter.json", + "data/pilots/scum-and-villainy/m3-a-interceptor.json", + "data/pilots/scum-and-villainy/modified-tie-ln-fighter.json", + "data/pilots/scum-and-villainy/quadrijet-transfer-spacetug.json", + "data/pilots/scum-and-villainy/scurrg-h-6-bomber.json", + "data/pilots/scum-and-villainy/starviper-class-attack-platform.json", + "data/pilots/scum-and-villainy/yv-666-light-freighter.json", + "data/pilots/scum-and-villainy/z-95-af4-headhunter.json" + ] + }, + { + "faction": "galacticempire", + "ships": [ + "data/pilots/galactic-empire/alpha-class-star-wing.json", + "data/pilots/galactic-empire/lambda-class-t-4a-shuttle.json", + "data/pilots/galactic-empire/tie-advanced-v1.json", + "data/pilots/galactic-empire/tie-advanced-x1.json", + "data/pilots/galactic-empire/tie-in-interceptor.json", + "data/pilots/galactic-empire/tie-reaper.json", + "data/pilots/galactic-empire/tie-d-defender.json", + "data/pilots/galactic-empire/tie-ag-aggressor.json", + "data/pilots/galactic-empire/tie-ca-punisher.json", + "data/pilots/galactic-empire/tie-ln-fighter.json", + "data/pilots/galactic-empire/tie-ph-phantom.json", + "data/pilots/galactic-empire/tie-sa-bomber.json", + "data/pilots/galactic-empire/tie-sk-striker.json", + "data/pilots/galactic-empire/vt-49-decimator.json" + ] + }, + { + "faction": "resistance", + "ships": [ + "data/pilots/resistance/mg-100-starfortress-sf-17.json", + "data/pilots/resistance/scavenged-yt-1300.json", + "data/pilots/resistance/rz-2-a-wing.json", + "data/pilots/resistance/t-70-x-wing.json", + "data/pilots/resistance/resistance-transport.json", + "data/pilots/resistance/resistance-transport-pod.json", + "data/pilots/resistance/fireball.json" + ] + }, + { + "faction": "firstorder", + "ships": [ + "data/pilots/first-order/tie-ba-interceptor.json", + "data/pilots/first-order/tie-fo-fighter.json", + "data/pilots/first-order/tie-sf-fighter.json", + "data/pilots/first-order/tie-vn-silencer.json", + "data/pilots/first-order/upsilon-class-command-shuttle.json" + ] + }, + { + "faction": "separatistalliance", + "ships": [ + "data/pilots/separatist-alliance/vulture-class-droid-fighter.json", + "data/pilots/separatist-alliance/belbullab-22-starfighter.json", + "data/pilots/separatist-alliance/sith-infiltrator.json", + "data/pilots/separatist-alliance/hyena-class-droid-bomber.json", + "data/pilots/separatist-alliance/nantex-class-starfighter.json" + ] + }, + { + "faction": "galacticrepublic", + "ships": [ + "data/pilots/galactic-republic/arc-170-starfighter.json", + "data/pilots/galactic-republic/delta-7-aethersprite.json", + "data/pilots/galactic-republic/v-19-torrent-starfighter.json", + "data/pilots/galactic-republic/naboo-royal-n-1-starfighter.json", + "data/pilots/galactic-republic/btl-b-y-wing.json" + ] + } + ], + "upgrades": [ + "data/upgrades/astromech.json", + "data/upgrades/cannon.json", + "data/upgrades/cargo.json", + "data/upgrades/command.json", + "data/upgrades/configuration.json", + "data/upgrades/crew.json", + "data/upgrades/device.json", + "data/upgrades/force-power.json", + "data/upgrades/gunner.json", + "data/upgrades/hardpoint.json", + "data/upgrades/illicit.json", + "data/upgrades/missile.json", + "data/upgrades/modification.json", + "data/upgrades/sensor.json", + "data/upgrades/tactical-relay.json", + "data/upgrades/talent.json", + "data/upgrades/team.json", + "data/upgrades/tech.json", + "data/upgrades/title.json", + "data/upgrades/torpedo.json", + "data/upgrades/turret.json" + ], + "conditions": "data/conditions/conditions.json", + "quick-builds": [ + "data/quick-builds/first-order.json", + "data/quick-builds/galactic-empire.json", + "data/quick-builds/galactic-republic.json", + "data/quick-builds/rebel-alliance.json", + "data/quick-builds/resistance.json", + "data/quick-builds/scum-and-villainy.json", + "data/quick-builds/separatist-alliance.json" + ] +} diff --git a/pyxwb2/data/pilots/first-order/tie-ba-interceptor.json b/pyxwb2/data/pilots/first-order/tie-ba-interceptor.json new file mode 100644 index 0000000..537be83 --- /dev/null +++ b/pyxwb2/data/pilots/first-order/tie-ba-interceptor.json @@ -0,0 +1,118 @@ +{ + "name": "TIE/ba Interceptor", + "xws": "tiebainterceptor", + "ffg": 69, + "size": "Small", + "dial": [ + "1TB", + "1BB", + "1NB", + "1YB", + "2LR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2PR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FB", + "5FW", + "5KR" + ], + "dialCodes": [ + "VT" + ], + "faction": "First Order", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Vonregs-First-Order-TIE-Interceptor.png", + "pilots": [ + { + "name": "Major Vonreg", + "caption": "Red Baron", + "initiative": 6, + "limited": 1, + "cost": 57, + "xws": "majorvonreg", + "ability": "During the System Phase, you may choose 1 enemy ship in your [Bullseye Arc]. That ship gains 1 deplete or strain token of your choice.", + "shipAbility": { + "name": "Fine-Tuned Thrusters", + "text": "After you fully execute a maneuver, if you are not depleted or strained, you may gain 1 deplete or strain token to perform a [Lock] or [Barrel Roll] action." + }, + "slots": ["Talent", "Tech", "Missile", "Modification"], + "hyperspace": true, + "ffg": 624, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4d8fdab1a5317159fcd56f722b6d73e5.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e95d46ad3a22ad0790cfd18a7e10cf81.png" + }, + { + "name": "\"Holo\"", + "caption": "Trick of the Light", + "initiative": 5, + "limited": 1, + "cost": 54, + "xws": "holo", + "ability": "At the start of the Engagement Phase, you must transfer 1 of your tokens to another friendly ship at range 0-2.", + "shipAbility": { + "name": "Fine-Tuned Thrusters", + "text": "After you fully execute a maneuver, if you are not depleted or strained, you may gain 1 deplete or strain token to perform a [Lock] or [Barrel Roll] action." + }, + "slots": ["Talent", "Tech", "Missile", "Modification"], + "hyperspace": true, + "ffg": 625, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/61d81abede1ce312b0de7d16623c2e60.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ee53482be8e59ff44f272e76c4e8123d.png" + }, + { + "name": "\"Ember\"", + "caption": "Dying Flame", + "initiative": 4, + "limited": 1, + "cost": 52, + "xws": "ember", + "ability": "While you perform an attack, if there is a damaged ship friendly to the defender at range 0-1 of the defender, the defender cannot spend focus or calculate tokens.", + "shipAbility": { + "name": "Fine-Tuned Thrusters", + "text": "After you fully execute a maneuver, if you are not depleted or strained, you may gain 1 deplete or strain token to perform a [Lock] or [Barrel Roll] action." + }, + "slots": ["Talent", "Tech", "Missile", "Modification"], + "hyperspace": true, + "ffg": 626, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/47fd0abc0fa4cea1508a800e75d18ebe.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4de956edddeacb92ef3e4f94e0a63db3.png" + }, + { + "name": "First Order Provocateur", + "initiative": 3, + "limited": 0, + "cost": 45, + "xws": "firstorderprovocateur", + "text": "Major Vonreg's vision guided the enhancement of proven designs while engineering this one-of-a-kind precise and lethal craft from Sienar-Jaemus Fleet Systems.", + "shipAbility": { + "name": "Fine-Tuned Thrusters", + "text": "After you fully execute a maneuver, if you are not depleted or strained, you may gain 1 deplete or strain token to perform a [Lock] or [Barrel Roll] action." + }, + "slots": ["Talent", "Tech", "Missile", "Modification"], + "hyperspace": true, + "ffg": 627, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/947aa948233f6a5fe5833dcf45cf8f01.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c834c2c4722b60e67292130d40c7ec19.png" + } + ] +} diff --git a/pyxwb2/data/pilots/first-order/tie-fo-fighter.json b/pyxwb2/data/pilots/first-order/tie-fo-fighter.json new file mode 100644 index 0000000..4e35736 --- /dev/null +++ b/pyxwb2/data/pilots/first-order/tie-fo-fighter.json @@ -0,0 +1,210 @@ +{ + "name": "TIE/fo Fighter", + "xws": "tiefofighter", + "ffg": 49, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2LR", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "2PR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "Tfo" + ], + "faction": "First Order", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEfo.png", + "pilots": [ + { + "name": "\"Midnight\"", + "caption": "Omega Leader", + "initiative": 6, + "limited": 1, + "cost": 42, + "xws": "midnight", + "ability": "While you defend or perform an attack, if you have a lock on the enemy ship, that ship's dice cannot be modified.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c7994885b38757f92bdf3a98c37b3c96.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c6a43d25d22d4112dd7e968cab4eb3d5.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 397, + "hyperspace": true + }, + { + "name": "Commander Malarus", + "caption": "First Order Enforcer", + "initiative": 5, + "limited": 1, + "cost": 38, + "xws": "commandermalarus", + "ability": "At the start of the Engagement Phase, you may spend 1 [Charge] and gain 1 stress token. If you do, until the end of the round, while you defend or perform an attack, you may change all of your [Focus] results to [Evade] or [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f7506ec739f5580d484ff0ee49b041f3.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d9cfa6aacc29d55a47aaa0d9f75d362e.jpg", + "slots": ["Talent", "Modification", "Tech"], + "charges": { "value": 2, "recovers": 0 }, + "ffg": 452, + "hyperspace": true + }, + { + "name": "\"Scorch\"", + "caption": "Zeta Leader", + "initiative": 4, + "limited": 1, + "cost": 33, + "xws": "scorch", + "ability": "While you perform a primary attack, if you are not stressed, you may gain 1 stress token to roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9dd11d408bb869cb947663fc29622833.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/dd225b2dab46b921e622dca6d799591f.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 398, + "hyperspace": true + }, + { + "name": "\"Static\"", + "caption": "Omega Ace", + "initiative": 4, + "limited": 1, + "cost": 33, + "xws": "static", + "ability": "While you perform a primary attack, you may spend your lock on the defender and a focus token to change all of your results to [Critical Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/2481fe5d98026e086a901d83dbe87018.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/30e0837d4877df289c220ea0ae174078.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 399, + "hyperspace": true + }, + { + "name": "\"Longshot\"", + "caption": "Zeta Ace", + "initiative": 3, + "limited": 1, + "cost": 31, + "xws": "longshot", + "ability": "While you perform a primary attack at attack range 3, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d0e698f59696c15b60d7eaa1e2d51eeb.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/31ad38b2fc0d39f37ad82e1c70f62135.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 400, + "hyperspace": true + }, + { + "name": "Omega Squadron Ace", + "initiative": 3, + "limited": 0, + "cost": 28, + "xws": "omegasquadronace", + "text": "Only pilots who have demonstrated both exceptional skill and unwavering dedication are rewarded with coveted positions in the First Order squadrons operating secretly against the New Republic during the Cold War.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/97e72d0f5dc8c2dd21a355e3258f37dd.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4e5010f7b60902288dac36bf646dcde9.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 403, + "hyperspace": true + }, + { + "name": "\"Muse\"", + "caption": "Epsilon Leader", + "initiative": 2, + "limited": 1, + "cost": 30, + "xws": "muse", + "ability": "At the start of the Engagement Phase, you may choose a friendly ship at range 0-1. If you do, that ship removes 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/7de4e91de0906eb548bfe3a08a1b6abe.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d3f8b9baf0bbd8a7d2b785a616dacbcf.jpg", + "slots": ["Talent", "Modification", "Tech"], + "ffg": 401, + "hyperspace": true + }, + { + "name": "TN-3465", + "caption": "Loose End", + "initiative": 2, + "limited": 1, + "cost": 28, + "xws": "tn3465", + "ability": "While another friendly ship performs an attack, if you are at range 0-1 of the defender, you may suffer 1 [Critical Hit] damage to change 1 of the attacker's results to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/333cbf0da8849edb38c4e93944d8fe57.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/9fce0e75539a225e9ff1536e466c3c13.jpg", + "slots": ["Modification", "Tech"], + "ffg": 453, + "hyperspace": true + }, + { + "name": "Zeta Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 26, + "xws": "zetasquadronpilot", + "text": "Unhampered by a cumbersome galactic bureaucracy, technologies originally researched by the Empire's TIE Advanced program are now mass-produced on First Order starfighters. As a result, TIE/fo pilots enjoy higher survival rates than their predecessors in the Galactic Empire.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/be1062b6a7a8e4644223146342990a02.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d20d6cc2a052afc783d535c802874d23.jpg", + "slots": ["Modification", "Tech"], + "ffg": 404, + "hyperspace": true + }, + { + "name": "Epsilon Squadron Cadet", + "initiative": 1, + "limited": 0, + "cost": 25, + "xws": "epsilonsquadroncadet", + "text": "Trained from childhood aboard Resurgent-class Star Destroyers in deep space, many First Order TIE pilots have never even set foot on a planet's surface.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e911cd18f04225bbd36c48114b56f3cc.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/610cb198e4cda75aab0207841c6e4a87.jpg", + "slots": ["Modification", "Tech"], + "ffg": 405, + "hyperspace": true + }, + { + "name": "Lieutenant Rivas", + "caption": "Inconvenient Witness", + "initiative": 1, + "limited": 1, + "cost": 27, + "xws": "lieutenantrivas", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/7188ec2eb699261dbd47a15df6164f4c.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/66f969d008fc995bd940bf1ab647109f.jpg", + "ability": "After a ship at range 1-2 gains a red or orange token, if you do not have that ship locked, you may acquire a lock on that ship.", + "slots": ["Modification", "Tech"], + "ffg": 454, + "hyperspace": true + }, + { + "name": "\"Null\"", + "caption": "Epsilon Ace", + "initiative": 0, + "limited": 1, + "cost": 30, + "xws": "null", + "ability": "While you are not damaged, treat your initiative value as 7.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/79a9d780d3540647af1e057113869294.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/eb788d9622d096c6d96c96cf20dc1939.jpg", + "slots": ["Modification", "Tech"], + "ffg": 402, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/first-order/tie-sf-fighter.json b/pyxwb2/data/pilots/first-order/tie-sf-fighter.json new file mode 100644 index 0000000..28dc040 --- /dev/null +++ b/pyxwb2/data/pilots/first-order/tie-sf-fighter.json @@ -0,0 +1,205 @@ +{ + "name": "TIE/sf Fighter", + "xws": "tiesffighter", + "ffg": 50, + "size": "Small", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FW", + "5FW" + ], + "dialCodes": [ + "Tsf" + ], + "faction": "First Order", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "White", "type": "Rotate Arc" }, + "type": "Focus" + }, + { + "difficulty": "White", + "linked": { "difficulty": "White", "type": "Rotate Arc" }, + "type": "Evade" + }, + { + "difficulty": "White", + "linked": { "difficulty": "White", "type": "Rotate Arc" }, + "type": "Lock" + }, + { + "difficulty": "White", + "linked": { "difficulty": "White", "type": "Rotate Arc" }, + "type": "Barrel Roll" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEsf.png", + "pilots": [ + { + "name": "\"Quickdraw\"", + "caption": "Defiant Duelist", + "initiative": 6, + "limited": 1, + "cost": 45, + "xws": "quickdraw", + "ability": "After you lose a shield, you may spend 1 [Charge]. If you do, you may perform a bonus primary attack.", + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "slots": [ + "Talent", + "Sensor", + "Missile", + "Modification", + "Gunner", + "Tech" + ], + "charges": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d038dadd7a62bbe2de89d3866e1a3639.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/86f8ccc959081a43dc4d0dbeb921d0ba.jpg", + "ffg": 406, + "hyperspace": false + }, + { + "name": "\"Backdraft\"", + "caption": "Fiery Fanatic", + "initiative": 4, + "limited": 1, + "cost": 39, + "xws": "backdraft", + "ability": "While you perform a [Single Turret Arc] primary attack, if the defender is in your [Rear Arc], roll 1 additional die.", + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "slots": [ + "Talent", + "Sensor", + "Missile", + "Modification", + "Gunner", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/317cc5350980277f1d389ed618030d85.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6c3a06877712596601ba1cc4ec533626.jpg", + "ffg": 407, + "hyperspace": true + }, + { + "name": "Omega Squadron Expert", + "initiative": 3, + "limited": 0, + "cost": 34, + "xws": "omegasquadronexpert", + "text": "The TIE/sf is a versatile starfighter that carries specialized armament and experimental systems for long-range operations by First Order Special Forces.", + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "slots": [ + "Talent", + "Sensor", + "Missile", + "Modification", + "Gunner", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/784d00f653ff7cd58cb634c7a59e47c1.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2caf1312bd6aba3630ef6edc1ff81f53.jpg", + "ffg": 408, + "hyperspace": true + }, + { + "name": "Zeta Squadron Survivor", + "initiative": 2, + "limited": 0, + "cost": 32, + "xws": "zetasquadronsurvivor", + "text": "Humiliated by their failure, the remaining pilots from Starkiller Base are eager to prove their worth in pursuit of the Resistance.", + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "slots": ["Sensor", "Missile", "Modification", "Gunner", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/848db1993150bda19217e2c14b3c3df6.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/55f72ce4974962db5b2ab3fac316b896.jpg", + "ffg": 409, + "hyperspace": true + }, + { + "name": "Lieutenant LeHuse", + "xws": "lieutenantlehuse", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "caption": "Unflinching Executioner", + "hyperspace": true, + "slots": [ + "Talent", + "Sensor", + "Tech", + "Missile", + "Gunner", + "Modification" + ], + "ability": "While you perform an attack, you may spend another friendly ship's lock on the defender to reroll any number of your results.", + "cost": 39, + "ffg": 641, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e359738e224a6b5509fe19ee0cbf253c.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/b823438eb2b32a407bf6a757a4ecb7d5.png" + }, + { + "name": "Captain Phasma", + "xws": "captainphasma", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Heavy Weapon Turret", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. You must treat the [Front Arc] requirement of your equipped [Missile] upgrades as [Single Turret Arc]." + }, + "caption": "Scyre Survivor", + "hyperspace": true, + "slots": [ + "Talent", + "Sensor", + "Tech", + "Missile", + "Gunner", + "Modification" + ], + "ability": "While you defend, after the Neutralize Results step, another friendly ship at range 0-1 must suffer 1 [Hit]/[Critical Hit] damage to cancel 1 matching result.", + "cost": 39, + "ffg": 642, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c771d32332787ea1c723a78abb463cb4.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/7c0bc32446e17991aff226d0fcab7b19.png" + } + ] +} diff --git a/pyxwb2/data/pilots/first-order/tie-vn-silencer.json b/pyxwb2/data/pilots/first-order/tie-vn-silencer.json new file mode 100644 index 0000000..0e72fa3 --- /dev/null +++ b/pyxwb2/data/pilots/first-order/tie-vn-silencer.json @@ -0,0 +1,170 @@ +{ + "name": "TIE/vn Silencer", + "xws": "tievnsilencer", + "ffg": 52, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "3ER", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3RR", + "4FB", + "4KR", + "5FB" + ], + "dialCodes": [ + "Tvn" + ], + "faction": "First Order", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIESilencer.png", + "pilots": [ + { + "name": "\"Blackout\"", + "xws": "blackout", + "caption": "Ill-Fated Test Pilot", + "initiative": 5, + "limited": 1, + "cost": 63, + "ability": "While you perform an attack, if the attack is obstructed by an obstacle, the defender rolls 2 fewer defense dice.", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Torpedo", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c5659b210e13b4e11fdd5f1396f2847c.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/20308b5887fb20d6b8ecdb3ede0bede3.jpg", + "ffg": 415, + "hyperspace": true + }, + { + "name": "Kylo Ren", + "xws": "kyloren", + "caption": "Tormented Apprentice", + "initiative": 5, + "limited": 1, + "cost": 76, + "ability": "After you defend, you may spend 1 [Force] to assign the I'll Show You the Dark Side condition to the attacker.", + "force": { "value": 2, "recovers": 1, "side": ["dark"] }, + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "conditions": ["illshowyouthedarkside"], + "slots": ["Torpedo", "Missile", "Force Power", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/71dbde337b9ff5aab897781d40d8f653.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/80b87be22656fc01742fca490193d440.jpg", + "ffg": 414, + "hyperspace": true + }, + { + "name": "First Order Test Pilot", + "xws": "firstordertestpilot", + "initiative": 4, + "limited": 0, + "cost": 56, + "text": "Engineered for incredible speed and precise handling, the TIE Silencer is devastating in the hands of those who can unlock its full potential. Any lesser pilot could easily be overwhelmed and lose control of the nimble craft.", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Torpedo", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/568abbcd68bb174173da4e7ee92051e3.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/86349c032fc169cb2000d3db7c9fbef4.jpg", + "ffg": 416, + "hyperspace": true + }, + { + "name": "\"Recoil\"", + "xws": "recoil", + "caption": "Quantity Over Quality", + "initiative": 4, + "limited": 1, + "cost": 57, + "ability": "While you are stressed, you may treat enemy ships in your [Front Arc] at range 0-1 as being in your [Bullseye Arc].", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Torpedo", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ab11858b2b9ac5c8bbfb2dc21023ba34.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c4590088696ecc687f5c0f004d1d97ab.jpg", + "ffg": 455, + "hyperspace": true + }, + { + "name": "\"Avenger\"", + "xws": "avenger", + "caption": "Wrathful Wingmate", + "initiative": 3, + "limited": 1, + "cost": 56, + "ability": "After another friendly ship is destroyed, you may perform an action, even while stressed.", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Torpedo", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d90d3057ead18b5df5f6de55a199a4cd.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3778411ec66e33951231314e909b981d.jpg", + "ffg": 456, + "hyperspace": true + }, + { + "name": "Sienar-Jaemus Engineer", + "xws": "sienarjaemusengineer", + "initiative": 1, + "limited": 0, + "cost": 51, + "text": "Developed by Sienar-Jaemus Fleet Systems as a successor to the vaunted TIE Defender, the TIE/vn Silencer incorporates bleeding-edge technologies developed at research facilities hidden in the Unknown Regions.", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Tech", "Torpedo", "Missile"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8f7c4680fbc001169baf6538ab259e9b.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/18b2a1b00b2f8c6669b6b1d1b278dcf2.jpg", + "ffg": 417, + "hyperspace": true + }, + { + "name": "\"Rush\"", + "xws": "rush", + "initiative": 2, + "limited": 1, + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "caption": "Adrenaline Junkie", + "hyperspace": true, + "slots": ["Tech", "Torpedo", "Missile"], + "ability": "While you are damaged, treat your initiative as 6.", + "cost": 57, + "ffg": 643, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3b748daed26df2870694ab9dc679c5ee.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/886d715885da65bdf10ad7c68e4d0a93.png" + } + ] +} diff --git a/pyxwb2/data/pilots/first-order/upsilon-class-command-shuttle.json b/pyxwb2/data/pilots/first-order/upsilon-class-command-shuttle.json new file mode 100644 index 0000000..a1fe45f --- /dev/null +++ b/pyxwb2/data/pilots/first-order/upsilon-class-command-shuttle.json @@ -0,0 +1,208 @@ +{ + "name": "Upsilon-class command shuttle", + "xws": "upsilonclassshuttle", + "ffg": 51, + "size": "Large", + "dial": [ + "0OR", + "1TR", + "1BW", + "1FB", + "1NW", + "1YR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR" + ], + "dialCodes": [ + "Ups" + ], + "faction": "First Order", + "stats": [ + { "type": "attack", "value": 4, "arc": "Front Arc" }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 6 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Reinforce" }, + { "difficulty": "White", "type": "Coordinate" }, + { "difficulty": "White", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_UpsilonShuttle.png", + "pilots": [ + { + "name": "Lieutenant Dormitz", + "caption": "Hypercomms Specialist", + "initiative": 2, + "limited": 1, + "cost": 70, + "xws": "lieutenantdormitz", + "ability": "Setup: After you are placed, other friendly ships can be placed anywhere in the play area at range 0-2 of you.", + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e4acd80da2c39e25d4f999cb7c314fe5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4505cb1930309673fe5592dbc112d733.jpg", + "ffg": 412, + "hyperspace": false + }, + { + "name": "Major Stridan", + "caption": "Stentorian Commander", + "initiative": 4, + "limited": 1, + "cost": 61, + "xws": "majorstridan", + "ability": "While you coordinate or resolve the effect of one of your upgrades, you may treat friendly ships at range 2-3 as being at range 0 or range 1.", + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8420beca035dedf1596c7c99255fb2e7.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/862f9dcc1ce9809f9a394d8f0b05f268.jpg", + "ffg": 410, + "hyperspace": false + }, + { + "name": "Petty Officer Thanisson", + "xws": "pettyofficerthanisson", + "caption": "Alert Flight Controller", + "initiative": 1, + "limited": 1, + "cost": 59, + "charges": { "value": 1, "recovers": 1 }, + "ability": "During the Activation or Engagement Phase, after a ship in your [Front Arc] at range 0-2 gains 1 stress token, you may spend 1 [Charge]. If you do, that ship gains 1 tractor token.", + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3a2232a5238d8bf5e7538fe1d6003dbc.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/24a40f6ec1875bfae9e7531b02252993.jpg", + "ffg": 458, + "hyperspace": false + }, + { + "name": "Starkiller Base Pilot", + "xws": "starkillerbasepilot", + "initiative": 2, + "limited": 0, + "cost": 58, + "text": "The Upsilon-class command shuttle serves as a base of operations for many of the First Order's senior officers and agents. Its powerful sensors and communications equipment allow them to orchestrate the spread of terror across the galaxy.", + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/41f6d936f14a058ed1c5e6ac12de37c2.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1ea0266ea42691778e8ecff6a5b50e45.jpg", + "ffg": 413, + "hyperspace": false + }, + { + "name": "Lieutenant Tavson", + "caption": "Obedient Shuttle Pilot", + "initiative": 3, + "limited": 1, + "cost": 64, + "xws": "lieutenanttavson", + "ability": "After you suffer damage, you may spend 1 [Charge] to perform an action.", + "charges": { "value": 2, "recovers": 1 }, + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/20fbf3ed79c50d2082cdb44caac26064.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/151154b50732a6dd42b411fc312137b9.jpg", + "ffg": 411, + "hyperspace": false + }, + { + "name": "Captain Cardinal", + "caption": "Principled Instructor", + "initiative": 4, + "limited": 1, + "cost": 62, + "xws": "captaincardinal", + "ability": "While a friendly ship at range 1-2 with lower initiative than you defends or performs an attack, if you have at least 1 [Charge], that ship may reroll 1 [Focus] result. After an enemy ship at range 0-3 is destroyed, lose 1 [Charge].", + "shipAbility": { + "name": "Linked Battery", + "text": "While you perform a [Cannon] attack, roll 1 additional die." + }, + "charges": { "value": 2, "recovers": 0 }, + "slots": [ + "Sensor", + "Cannon", + "Crew", + "Crew", + "Crew", + "Modification", + "Tech", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/be29a69f75726ad48f607eecca671e01.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a88822cc408323e561efd9e2acb83f2a.jpg", + "ffg": 457, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/alpha-class-star-wing.json b/pyxwb2/data/pilots/galactic-empire/alpha-class-star-wing.json new file mode 100644 index 0000000..f90201a --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/alpha-class-star-wing.json @@ -0,0 +1,122 @@ +{ + "name": "Alpha-class Star Wing", + "xws": "alphaclassstarwing", + "ffg": 14, + "size": "Small", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FW", + "3NW", + "3YW", + "4FR" + ], + "dialCodes": [ + "SW" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "SLAM" }, + { "difficulty": "White", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_AlphaStarwing.png", + "pilots": [ + { + "name": "Lieutenant Karsabi", + "caption": "Brash Noble", + "initiative": 3, + "limited": 1, + "cost": 37, + "xws": "lieutenantkarsabi", + "ability": "After you gain a disarm token, if you are not stressed, you may gain 1 stress token to remove 1 disarm token.", + "slots": [ + "Talent", + "Sensor", + "Torpedo", + "Missile", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_136.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_136.jpg", + "ffg": 136, + "hyperspace": false + }, + { + "name": "Major Vynder", + "caption": "Pragmatic Survivor", + "initiative": 4, + "limited": 1, + "cost": 41, + "xws": "majorvynder", + "ability": "While you defend, if you are disarmed, roll 1 additional defense die.", + "slots": [ + "Talent", + "Sensor", + "Torpedo", + "Missile", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_135.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_135.jpg", + "ffg": 135, + "hyperspace": false + }, + { + "name": "Nu Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 32, + "xws": "nusquadronpilot", + "text": "With a design inspired by other Cygnus Spaceworks vessels, the Alpha-class star wing is a versatile craft assigned to Imperial Navy specialist units that need a starfighter they can outfit for multiple roles.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_138.png", + "slots": [ + "Sensor", + "Torpedo", + "Missile", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_138.jpg", + "ffg": 138, + "hyperspace": false + }, + { + "name": "Rho Squadron Pilot", + "initiative": 3, + "limited": 0, + "cost": 35, + "xws": "rhosquadronpilot", + "text": "The elite pilots of Rho Squadron instill terror in the Rebellion, using both the Xg-1 assault configuration and Os-1 arsenal loadout of the Alpha-class star wing to devastating effect.", + "slots": [ + "Talent", + "Sensor", + "Torpedo", + "Missile", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_137.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_137.jpg", + "ffg": 137, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/lambda-class-t-4a-shuttle.json b/pyxwb2/data/pilots/galactic-empire/lambda-class-t-4a-shuttle.json new file mode 100644 index 0000000..f7b8fbe --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/lambda-class-t-4a-shuttle.json @@ -0,0 +1,96 @@ +{ + "name": "Lambda-class T-4a Shuttle", + "xws": "lambdaclasst4ashuttle", + "ffg": 26, + "size": "Large", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TR", + "2BW", + "2FB", + "2NW", + "2YR", + "3BR", + "3FW", + "3NR" + ], + "dialCodes": [ + "LS" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Rear Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Reinforce" }, + { "difficulty": "White", "type": "Coordinate" }, + { "difficulty": "Red", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Lambda.png", + "pilots": [ + { + "name": "Captain Kagi", + "caption": "The Emperor's Shuttle Pilot", + "initiative": 4, + "limited": 1, + "cost": 48, + "xws": "captainkagi", + "ability": "At the start of the Engagement Phase, you may choose 1 or more friendly ships at range 0-3. If you do, transfer all enemy lock tokens from the chosen ships to you.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_142.png", + "slots": ["Sensor", "Cannon", "Crew", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_142.jpg", + "ffg": 142, + "hyperspace": false + }, + { + "name": "Colonel Jendon", + "caption": "Darth Vader's Shuttle Pilot", + "initiative": 3, + "limited": 1, + "cost": 48, + "xws": "coloneljendon", + "ability": "At the start of the Activation Phase, you may spend 1 [Charge]. If you do, while friendly ships acquire locks this round, they must acquire locks beyond range 3 instead of at range 0-3.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_143.png", + "charges": { "value": 2, "recovers": 0 }, + "slots": ["Sensor", "Cannon", "Crew", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_143.jpg", + "ffg": 143, + "hyperspace": false + }, + { + "name": "Lieutenant Sai", + "caption": "Death Squadron Veteran", + "initiative": 3, + "limited": 1, + "cost": 47, + "xws": "lieutenantsai", + "ability": "After you a perform a [Coordinate] action, if the ship you chose performed an action on your action bar, you may perform that action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_144.png", + "slots": ["Sensor", "Cannon", "Crew", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_144.jpg", + "ffg": 144, + "hyperspace": false + }, + { + "name": "Omicron Group Pilot", + "initiative": 1, + "limited": 0, + "cost": 43, + "xws": "omicrongrouppilot", + "text": "Noted for its tri-wing design and advanced sensor suite, the Lambda-class shuttle serves a critical role as a light utility craft in the Imperial Navy.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_145.png", + "slots": ["Sensor", "Cannon", "Crew", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_145.jpg", + "ffg": 145, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-advanced-v1.json b/pyxwb2/data/pilots/galactic-empire/tie-advanced-v1.json new file mode 100644 index 0000000..9fe30b6 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-advanced-v1.json @@ -0,0 +1,127 @@ +{ + "name": "TIE Advanced v1", + "xws": "tieadvancedv1", + "ffg": 25, + "size": "Small", + "dial": [ + "1TB", + "1BB", + "1NB", + "1YB", + "2ER", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "2RR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "TAv" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Boost" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEAdvancedPrototype.png", + "pilots": [ + { + "name": "Baron of the Empire", + "initiative": 3, + "limited": 0, + "cost": 30, + "xws": "baronoftheempire", + "text": "Sienar Fleet System's TIE Advanced v1 is a groundbreaking starfighter design, featuring upgraded engines, a missile launcher, and folding s-foils.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_101.png", + "slots": ["Talent", "Sensor", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_101.jpg", + "ffg": 101, + "hyperspace": false + }, + { + "name": "Grand Inquisitor", + "caption": "Master of the Inquisitorious", + "initiative": 5, + "limited": 1, + "cost": 52, + "xws": "grandinquisitor", + "ability": "While you defend at attack range 1, you may spend 1 [Force] to prevent the range 1 bonus. While you perform an attack against a defender at attack range 2-3, you may spend 1 [Force] to apply the range 1 bonus.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_99.png", + "force": { "value": 2, "recovers": 1, "side": ["dark"] }, + "slots": ["Sensor", "Missile", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_99.jpg", + "ffg": 99, + "hyperspace": false + }, + { + "name": "Inquisitor", + "initiative": 3, + "limited": 0, + "cost": 35, + "xws": "inquisitor", + "text": "The fearsome Inquisitors are given a great deal of autonomy and access to the Empire's latest technology, like the prototype TIE Advanced v1.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_102.png", + "force": { "value": 1, "recovers": 1, "side": ["dark"] }, + "slots": ["Sensor", "Missile", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_102.jpg", + "ffg": 102, + "hyperspace": false + }, + { + "name": "Seventh Sister", + "caption": "Sadistic Interrogator", + "initiative": 4, + "limited": 1, + "cost": 43, + "xws": "seventhsister", + "ability": "While you perform a primary attack, before the Neutralize Results step, you may spend 2 [Force] to cancel 1 [Evade] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_100.png", + "force": { "value": 2, "recovers": 1, "side": ["dark"] }, + "slots": ["Sensor", "Missile", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_100.jpg", + "ffg": 100, + "hyperspace": false + }, + { + "name": "Fifth Brother", + "xws": "fifthbrother", + "initiative": 4, + "limited": 1, + "caption": "Ruthless Brute", + "hyperspace": false, + "force": { "value": 2, "recovers": 1, "side": ["dark"] }, + "slots": ["Force Power", "Sensor", "Missile"], + "ability": "While you perform an attack, after the Neutralize Results step, if the attack hit, you may spend 2 [Force] to add 1 [Critical Hit] result.", + "cost": 42, + "ffg": 632, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e79e45f2bdb5a2ab6ff6728b42db0b74.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/01a02a00ef5aad21bc1f0a58028136ec.png" + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-advanced-x1.json b/pyxwb2/data/pilots/galactic-empire/tie-advanced-x1.json new file mode 100644 index 0000000..4933715 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-advanced-x1.json @@ -0,0 +1,167 @@ +{ + "name": "TIE Advanced x1", + "xws": "tieadvancedx1", + "ffg": 13, + "size": "Small", + "dial": [ + "1BB", + "1FW", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3ER", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3RR", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "TAx" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Barrel Roll" }, + "type": "Focus" + }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEAdvanced.png", + "pilots": [ + { + "name": "Darth Vader", + "caption": "Black Leader", + "initiative": 6, + "limited": 1, + "cost": 67, + "xws": "darthvader", + "ability": "After you perform an action, you may spend 1 [Force] to perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_93.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/24/0a/240a5d21-309c-4d3d-aef9-5dab25564b7b/op18xu_card_altart2.png", + "source": "European and North American Championship 2018" + } + ], + "force": { "value": 3, "recovers": 1, "side": ["dark"] }, + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Sensor", "Missile", "Modification", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_93.jpg", + "ffg": 93, + "hyperspace": true + }, + { + "name": "Maarek Stele", + "caption": "Servant of the Empire", + "initiative": 5, + "limited": 1, + "cost": 45, + "xws": "maarekstele", + "ability": "While you perform an attack, if the defender would be dealt a faceup damage card, instead draw 3 damage cards, choose 1, and discard the rest.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_94.png", + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Talent", "Sensor", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_94.jpg", + "ffg": 94, + "hyperspace": true + }, + { + "name": "Storm Squadron Ace", + "initiative": 3, + "limited": 0, + "cost": 39, + "xws": "stormsquadronace", + "text": "The TIE Advanced x1 was produced in limited quantities, but Sienar engineers incorporated many of its best qualities into their next TIE model: the TIE Interceptor.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_97.png", + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Talent", "Sensor", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_97.jpg", + "ffg": 97, + "hyperspace": true + }, + { + "name": "Tempest Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 36, + "xws": "tempestsquadronpilot", + "text": "The TIE Advanced improved on the popular TIE/ln design by adding shielding, better weapons systems, curved solar panels, and a hyperdrive.", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/19/d5/19d5865e-09d1-4bad-b8ac-8e0c5124745a/op18xu_card_plastic2.png", + "source": "European and North American Championship 2018" + } + ], + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Sensor", "Missile", "Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_98.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_98.jpg", + "ffg": 98, + "hyperspace": true + }, + { + "name": "Ved Foslo", + "caption": "Ambitious Engineer", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "vedfoslo", + "ability": "While you execute a maneuver, you may execute a maneuver of the same bearing and difficulty of a speed 1 higher or lower instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_95.png", + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Talent", "Sensor", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_95.jpg", + "ffg": 95, + "hyperspace": true + }, + { + "name": "Zertik Strom", + "caption": "Pitiless Administrator", + "initiative": 3, + "limited": 1, + "cost": 41, + "xws": "zertikstrom", + "ability": "During the End Phase, you may spend a lock you have on an enemy ship to expose 1 of that ship's damage cards.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_96.png", + "shipAbility": { + "name": "Advanced Targeting Computer", + "text": "While you perform a primary attack against a defender you have locked, roll 1 additional attack die and change 1 [Hit] result to a [Critical Hit] result." + }, + "slots": ["Sensor", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_96.jpg", + "ffg": 96, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-ag-aggressor.json b/pyxwb2/data/pilots/galactic-empire/tie-ag-aggressor.json new file mode 100644 index 0000000..3a2ff50 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-ag-aggressor.json @@ -0,0 +1,120 @@ +{ + "name": "TIE/ag Aggressor", + "xws": "tieagaggressor", + "ffg": 29, + "size": "Small", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW", + "4KR" + ], + "dialCodes": [ + "TAg" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Evade" }, + "type": "Barrel Roll" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEAggressor.png", + "pilots": [ + { + "name": "\"Double Edge\"", + "caption": "Contingency Planner", + "initiative": 2, + "limited": 1, + "cost": 29, + "xws": "doubleedge", + "ability": "After you perform a [Turret] or [Missile] attack that misses, you may perform a bonus attack using a different weapon.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_128.png", + "slots": [ + "Talent", + "Turret", + "Missile", + "Missile", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_128.jpg", + "ffg": 128, + "hyperspace": false + }, + { + "name": "Lieutenant Kestal", + "caption": "Innate Deadeye", + "initiative": 4, + "limited": 1, + "cost": 31, + "xws": "lieutenantkestal", + "ability": "While you perform an attack, after the defender rolls defense dice, you may spend 1 focus token to cancel all of the defender's blank/[Focus] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_127.png", + "slots": [ + "Talent", + "Turret", + "Missile", + "Missile", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_127.jpg", + "ffg": 127, + "hyperspace": false + }, + { + "name": "Onyx Squadron Scout", + "initiative": 3, + "limited": 0, + "cost": 28, + "xws": "onyxsquadronscout", + "text": "Designed for extended engagements, the TIE/ag is flown primarily by elite pilots trained to leverage both its unique weapons loadout and its maneuverability to full effect.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_129.png", + "slots": [ + "Talent", + "Turret", + "Missile", + "Missile", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_129.jpg", + "ffg": 129, + "hyperspace": false + }, + { + "name": "Sienar Specialist", + "initiative": 2, + "limited": 0, + "cost": 26, + "xws": "sienarspecialist", + "text": "During the development of the TIE aggressor, Sienar Fleet Systems valued performance and versatility over raw cost efficiency.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_130.png", + "slots": ["Turret", "Missile", "Missile", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_130.jpg", + "ffg": 130, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-ca-punisher.json b/pyxwb2/data/pilots/galactic-empire/tie-ca-punisher.json new file mode 100644 index 0000000..c066871 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-ca-punisher.json @@ -0,0 +1,115 @@ +{ + "name": "TIE/ca Punisher", + "xws": "tiecapunisher", + "ffg": 20, + "size": "Medium", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4KR" + ], + "dialCodes": [ + "TPu" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Lock" }, + "type": "Boost" + }, + { "difficulty": "White", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEPunisher.png", + "pilots": [ + { + "name": "\"Deathrain\"", + "caption": "Dexterous Bombardier", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "deathrain", + "ability": "After you drop or launch a device, you may perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_140.png", + "slots": [ + "Sensor", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_140.jpg", + "ffg": 140, + "hyperspace": false + }, + { + "name": "\"Redline\"", + "caption": "Adrenaline Junkie", + "initiative": 5, + "limited": 1, + "cost": 52, + "xws": "redline", + "ability": "You can maintain up to 2 locks. After you perform an action, you may acquire a lock.", + "slots": [ + "Sensor", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_139.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_139.jpg", + "ffg": 139, + "hyperspace": false + }, + { + "name": "Cutlass Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 36, + "xws": "cutlasssquadronpilot", + "text": "The TIE punisher's design builds upon the success of the TIE bomber, adding shielding, a second bomb chute, and three additional ordnance pods, each equipped with a twin ion engine.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_141.png", + "slots": [ + "Sensor", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_141.jpg", + "ffg": 141, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-d-defender.json b/pyxwb2/data/pilots/galactic-empire/tie-d-defender.json new file mode 100644 index 0000000..8f9a891 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-d-defender.json @@ -0,0 +1,134 @@ +{ + "name": "TIE/D Defender", + "xws": "tieddefender", + "ffg": 18, + "size": "Small", + "dial": [ + "1TR", + "1BB", + "1NB", + "1YR", + "2TR", + "2BW", + "2FB", + "2NW", + "2YR", + "2KR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FB", + "4KW", + "5FB" + ], + "dialCodes": [ + "TD" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEDefender.png", + "pilots": [ + { + "name": "Colonel Vessery", + "caption": "Contemplative Commander", + "initiative": 4, + "limited": 1, + "cost": 84, + "xws": "colonelvessery", + "ability": "While you perform an attack against a locked ship, after you roll attack dice, you may acquire a lock on the defender.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_123.png", + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "slots": ["Talent", "Sensor", "Cannon", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_123.jpg", + "ffg": 123, + "hyperspace": false + }, + { + "name": "Countess Ryad", + "caption": "Cutthroat Politico", + "initiative": 4, + "limited": 1, + "cost": 82, + "xws": "countessryad", + "ability": "While you would execute a [Straight] maneuver, you may increase the difficulty of the maneuver. If you do, execute it as a [Koiogran Turn] maneuver instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_124.png", + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "slots": ["Talent", "Sensor", "Cannon", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_124.jpg", + "ffg": 124, + "hyperspace": false + }, + { + "name": "Delta Squadron Pilot", + "initiative": 1, + "limited": 0, + "cost": 67, + "xws": "deltasquadronpilot", + "text": "In addition to its missile launchers and six wingtip laser cannons, the formidable TIE defender is equipped with deflector shields and a hyperdrive.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_126.png", + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "slots": ["Sensor", "Cannon", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_126.jpg", + "ffg": 126, + "hyperspace": false + }, + { + "name": "Onyx Squadron Ace", + "initiative": 4, + "limited": 0, + "cost": 74, + "xws": "onyxsquadronace", + "text": "The experimental TIE defender outclasses all other contemporary starfighters, though its size, speed, and array of weapons come at a tremendous cost in credits.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_125.png", + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "slots": ["Talent", "Sensor", "Cannon", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_125.jpg", + "ffg": 125, + "hyperspace": false + }, + { + "name": "Rexler Brath", + "caption": "Onyx Leader", + "initiative": 5, + "limited": 1, + "cost": 81, + "xws": "rexlerbrath", + "ability": "After you perform an attack that hits, if you are evading, expose 1 of the defender's damage cards.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_122.png", + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "slots": ["Talent", "Sensor", "Cannon", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_122.jpg", + "ffg": 122, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-in-interceptor.json b/pyxwb2/data/pilots/galactic-empire/tie-in-interceptor.json new file mode 100644 index 0000000..5f1181e --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-in-interceptor.json @@ -0,0 +1,113 @@ +{ + "name": "TIE/in Interceptor", + "xws": "tieininterceptor", + "ffg": 41, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FB", + "4KR", + "5FW" + ], + "dialCodes": [ + "TI" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEInterceptor.png", + "pilots": [ + { + "name": "Alpha Squadron Pilot", + "initiative": 1, + "limited": 0, + "cost": 31, + "xws": "alphasquadronpilot", + "text": "Sienar Fleet Systems designed the TIE interceptor with four wing-mounted laser cannons, a dramatic increase in firepower over its predecessors.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_106.png", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Modification", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_106.jpg", + "ffg": 106, + "hyperspace": false + }, + { + "name": "Saber Squadron Ace", + "initiative": 4, + "limited": 0, + "cost": 36, + "xws": "sabersquadronace", + "text": "Led by Baron Soontir Fel, the pilots of Saber Squadron are among the Empire's best. Their TIE interceptors are marked with red stripes to designate pilots with at least ten confirmed kills.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_105.png", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Modification", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_105.jpg", + "ffg": 105, + "hyperspace": false + }, + { + "name": "Soontir Fel", + "caption": "Ace of Legend", + "initiative": 6, + "limited": 1, + "cost": 53, + "xws": "soontirfel", + "ability": "At the start of the Engagement Phase, if there is an enemy ship in your [Bullseye Arc], gain 1 focus token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_103.png", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Modification", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_103.jpg", + "ffg": 103, + "hyperspace": false + }, + { + "name": "Turr Phennir", + "caption": "Ambitious Ace", + "initiative": 4, + "limited": 1, + "cost": 42, + "xws": "turrphennir", + "ability": "After you perform an attack, you may perform a [Barrel Roll] or [Boost] action, even if you are stressed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_104.png", + "shipAbility": { + "name": "Autothrusters", + "text": "After you perform an action, you may perform a red [Barrel Roll] or red [Boost] action." + }, + "slots": ["Talent", "Modification", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_104.jpg", + "ffg": 104, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-ln-fighter.json b/pyxwb2/data/pilots/galactic-empire/tie-ln-fighter.json new file mode 100644 index 0000000..029bbbd --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-ln-fighter.json @@ -0,0 +1,240 @@ +{ + "name": "TIE/ln Fighter", + "xws": "tielnfighter", + "ffg": 11, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "TF" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEFighter.png", + "pilots": [ + { + "name": "\"Howlrunner\"", + "caption": "Obsidian Leader", + "initiative": 5, + "limited": 1, + "cost": 46, + "xws": "howlrunner", + "ability": "While a friendly ship at range 0-1 performs a primary attack, that ship may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_81.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_81.jpg", + "ffg": 81, + "hyperspace": false + }, + { + "name": "\"Mauler\" Mithel", + "caption": "Black Two", + "initiative": 5, + "limited": 1, + "cost": 31, + "xws": "maulermithel", + "ability": "While you perform an attack at attack range 1, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_80.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_80.jpg", + "ffg": 80, + "hyperspace": true + }, + { + "name": "\"Night Beast\"", + "caption": "Obsidian Two", + "initiative": 2, + "limited": 1, + "cost": 25, + "xws": "nightbeast", + "ability": "After you fully execute a blue maneuver, you may perform a [Focus] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_88.png", + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_88.jpg", + "ffg": 88, + "hyperspace": false + }, + { + "name": "\"Scourge\" Skutu", + "caption": "Seasoned Veteran", + "initiative": 5, + "limited": 1, + "cost": 31, + "xws": "scourgeskutu", + "ability": "While you perform an attack against a defender in your [Bullseye Arc], roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_82.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_82.jpg", + "ffg": 82, + "hyperspace": true + }, + { + "name": "\"Wampa\"", + "caption": "Black Eleven", + "initiative": 1, + "limited": 1, + "cost": 29, + "xws": "wampa", + "ability": "While you perform an attack, you may spend 1 [Charge] to roll 1 additional attack die. After defending, lose 1 [Charge].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_89.png", + "charges": { "value": 1, "recovers": 1 }, + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_89.jpg", + "ffg": 89, + "hyperspace": false + }, + { + "name": "Academy Pilot", + "initiative": 1, + "limited": 0, + "cost": 22, + "xws": "academypilot", + "text": "The Galactic Empire uses the fast and agile TIE/ln, developed by Sienar Fleet Systems and produced in staggering quantity, as its primary starfighter.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_92.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/c9/4e/c94efa45-9cf7-4167-8e41-50d27d300f12/op066-academy-pilot.png", + "source": "X-Wing Second Edition Launch Party" + } + ], + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_92.jpg", + "ffg": 92, + "hyperspace": true + }, + { + "name": "Black Squadron Ace", + "initiative": 3, + "limited": 0, + "cost": 25, + "xws": "blacksquadronace", + "text": "The elite TIE/ln pilots of Black Squadron accompanied Darth Vader on a devastating strike against the Rebel forces at the Battle of Yavin.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_90.png", + "slots": ["Talent", "Modification"], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/fe/2b/fe2b0b19-b983-4665-aa8a-769fc2e03f64/op086-obsidian-squadron-pilot.png", + "source": "Gen Con Indy 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_90.jpg", + "ffg": 90, + "hyperspace": true + }, + { + "name": "Del Meeko", + "caption": "Inferno Three", + "initiative": 4, + "limited": 1, + "cost": 30, + "xws": "delmeeko", + "ability": "While a friendly ship at range 0-2 defends against a damaged attacker, the defender may reroll 1 defense die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_85.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_85.jpg", + "ffg": 85, + "hyperspace": true + }, + { + "name": "Gideon Hask", + "caption": "Inferno Two", + "initiative": 4, + "limited": 1, + "cost": 30, + "xws": "gideonhask", + "ability": "While you perform an attack against a damaged defender, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_84.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_84.jpg", + "ffg": 84, + "hyperspace": true + }, + { + "name": "Iden Versio", + "caption": "Inferno Leader", + "initiative": 4, + "limited": 1, + "cost": 41, + "xws": "idenversio", + "ability": "Before a friendly TIE/ln fighter at range 0-1 would suffer 1 or more damage, you may spend 1 [Charge]. If you do, prevent that damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_83.png", + "charges": { "value": 1, "recovers": 0 }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_83.jpg", + "ffg": 83, + "hyperspace": true + }, + { + "name": "Obsidian Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 23, + "xws": "obsidiansquadronpilot", + "text": "The TIE fighter's Twin Ion Engine system was designed for speed, making the TIE/ln one of the most maneuverable starships ever mass-produced.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_91.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/12/55/12552f53-decc-49ff-8fe2-e4285d4ff31e/op066-obsidian-squadron-pilot.png", + "source": "X-Wing Second Edition Launch Party" + } + ], + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_91.jpg", + "ffg": 91, + "hyperspace": true + }, + { + "name": "Seyn Marana", + "caption": "Inferno Four", + "initiative": 4, + "limited": 1, + "cost": 30, + "xws": "seynmarana", + "ability": "While you perform an attack, you may spend 1 [Critical Hit] result. If you do, deal 1 facedown damage card to the defender, then cancel your remaining results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_86.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_86.jpg", + "ffg": 86, + "hyperspace": true + }, + { + "name": "Valen Rudor", + "caption": "Braggadocious Baron", + "initiative": 3, + "limited": 1, + "cost": 27, + "xws": "valenrudor", + "ability": "After a friendly ship at range 0-1 defends (after damage is resolved, if any), you may perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_87.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_87.jpg", + "ffg": 87, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-ph-phantom.json b/pyxwb2/data/pilots/galactic-empire/tie-ph-phantom.json new file mode 100644 index 0000000..e2b1ece --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-ph-phantom.json @@ -0,0 +1,114 @@ +{ + "name": "TIE/ph Phantom", + "xws": "tiephphantom", + "ffg": 27, + "size": "Small", + "dial": [ + "1TW", + "1BW", + "1NW", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "4KR" + ], + "dialCodes": [ + "TPh" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Cloak" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEPhantom.png", + "pilots": [ + { + "name": "\"Echo\"", + "caption": "Slippery Trickster", + "initiative": 4, + "limited": 1, + "cost": 51, + "xws": "echo", + "ability": "While you decloak, you must use the [2 [Bank Left]] or [2 [Bank Right]] template instead of the [2 [Straight]] template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_132.png", + "shipAbility": { + "name": "Stygium Array", + "text": "After you decloak, you may perform an [Evade] action. At the start of the End Phase, you may spend 1 evade token to gain 1 cloak token." + }, + "slots": ["Talent", "Sensor", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_132.jpg", + "ffg": 132, + "hyperspace": false + }, + { + "name": "\"Whisper\"", + "caption": "Soft-Spoken Slayer", + "initiative": 5, + "limited": 1, + "cost": 57, + "xws": "whisper", + "ability": "After you perform an attack that hits, gain 1 evade token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_131.png", + "shipAbility": { + "name": "Stygium Array", + "text": "After you decloak, you may perform an [Evade] action. At the start of the End Phase, you may spend 1 evade token to gain 1 cloak token." + }, + "slots": ["Talent", "Sensor", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_131.jpg", + "ffg": 131, + "hyperspace": false + }, + { + "name": "Imdaar Test Pilot", + "initiative": 3, + "limited": 0, + "cost": 43, + "xws": "imdaartestpilot", + "text": "The primary result of a hidden research facility on Imdaar Alpha, the TIE phantom achieves what many thought was impossible: a small starfighter equipped with an advanced cloaking device.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_134.png", + "shipAbility": { + "name": "Stygium Array", + "text": "After you decloak, you may perform an [Evade] action. At the start of the End Phase, you may spend 1 evade token to gain 1 cloak token." + }, + "slots": ["Sensor", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_134.jpg", + "ffg": 134, + "hyperspace": false + }, + { + "name": "Sigma Squadron Ace", + "initiative": 4, + "limited": 0, + "cost": 48, + "xws": "sigmasquadronace", + "text": "Featuring a hyperdrive and shields, the TIE phantom is also equipped with five laser cannons, giving it substantial firepower for an Imperial fighter.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_133.png", + "shipAbility": { + "name": "Stygium Array", + "text": "After you decloak, you may perform an [Evade] action. At the start of the End Phase, you may spend 1 evade token to gain 1 cloak token." + }, + "slots": ["Talent", "Sensor", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_133.jpg", + "ffg": 133, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-reaper.json b/pyxwb2/data/pilots/galactic-empire/tie-reaper.json new file mode 100644 index 0000000..2b4efdb --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-reaper.json @@ -0,0 +1,120 @@ +{ + "name": "TIE Reaper", + "xws": "tiereaper", + "ffg": 43, + "size": "Medium", + "dial": [ + "0OR", + "1LR", + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "1PR", + "2TR", + "2BW", + "2FB", + "2NW", + "2YR", + "3BW", + "3FB", + "3NW" + ], + "dialCodes": [ + "TR" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "Red", "type": "Coordinate" }, + { "difficulty": "White", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEReaper.png", + "pilots": [ + { + "name": "\"Vizier\"", + "caption": "Ruthless Tactician", + "initiative": 2, + "limited": 1, + "cost": 45, + "xws": "vizier", + "ability": "After you fully execute a speed 1 maneuver using your Adaptive Ailerons ship ability, you may perform a [Coordinate] action. If you do, skip your Perform Action step.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_115.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_115.jpg", + "ffg": 115, + "hyperspace": true + }, + { + "name": "Captain Feroph", + "caption": "Imperial Courier", + "initiative": 3, + "limited": 1, + "cost": 47, + "xws": "captainferoph", + "ability": "While you defend, if the attacker does not have any green tokens, you may change 1 of your blank or [Focus] results to an [Evade] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_114.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_114.jpg", + "ffg": 114, + "hyperspace": true + }, + { + "name": "Major Vermeil", + "caption": "Veteran of Scarif", + "initiative": 4, + "limited": 1, + "cost": 49, + "xws": "majorvermeil", + "ability": "While you perform an attack, if the defender does not have any green tokens, you may change 1 of your blank or [Focus] results to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_113.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_113.jpg", + "ffg": 113, + "hyperspace": true + }, + { + "name": "Scarif Base Pilot", + "initiative": 1, + "limited": 0, + "cost": 39, + "xws": "scarifbasepilot", + "text": "The TIE reaper was designed to ferry elite troops to flashpoints on the battlefield, notably carrying Director Krennic's dreaded death troopers at the Battle of Scarif.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_116.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/d3/22/d3220543-7735-44fc-80a8-90507ca363c8/g18x2-scarif-base-pilot-2.png", + "source": "Season Two 2018" + } + ], + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_116.jpg", + "ffg": 116, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-sa-bomber.json b/pyxwb2/data/pilots/galactic-empire/tie-sa-bomber.json new file mode 100644 index 0000000..704bc89 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-sa-bomber.json @@ -0,0 +1,204 @@ +{ + "name": "TIE/sa Bomber", + "xws": "tiesabomber", + "ffg": 19, + "size": "Small", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "5KR" + ], + "dialCodes": [ + "TB" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 6 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Lock" }, + "type": "Barrel Roll" + }, + { "difficulty": "Red", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEBomber.png", + "pilots": [ + { + "name": "\"Deathfire\"", + "caption": "Unflinching Diehard", + "initiative": 2, + "limited": 1, + "cost": 32, + "xws": "deathfire", + "ability": "After you are destroyed, before you are removed, you may perform an attack and drop or launch 1 device.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_110.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_110.jpg", + "ffg": 110, + "hyperspace": false + }, + { + "name": "Captain Jonus", + "caption": "Disciplined Instructor", + "initiative": 4, + "limited": 1, + "cost": 45, + "xws": "captainjonus", + "ability": "While a friendly ship at range 0-1 performs a [Torpedo] or [Missile] attack, that ship may reroll up to 2 attack dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_108.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_108.jpg", + "ffg": 108, + "hyperspace": false + }, + { + "name": "Gamma Squadron Ace", + "initiative": 3, + "limited": 0, + "cost": 30, + "xws": "gammasquadronace", + "text": "Though it sacrifices a degree of speed and maneuverability compared to a TIE/ln, the TIE bomber's increased payload can carry enough firepower to destroy virtually any enemy target.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_111.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_111.jpg", + "ffg": 111, + "hyperspace": false + }, + { + "name": "Major Rhymer", + "caption": "Scimitar Leader", + "initiative": 4, + "limited": 1, + "cost": 37, + "xws": "majorrhymer", + "ability": "While you perform a [Torpedo] or [Missile] attack, you may increase or decrease the range requirement by 1, to a limit of 0-3.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_109.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_109.jpg", + "ffg": 109, + "hyperspace": false + }, + { + "name": "Scimitar Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 27, + "xws": "scimitarsquadronpilot", + "text": "The TIE/sa is exceptionally nimble for a bomber, allowing it to pinpoint its target while avoiding excessive collateral damage to the surrounding area.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_112.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_112.jpg", + "ffg": 112, + "hyperspace": false + }, + { + "name": "Tomax Bren", + "caption": "Brash Maverick", + "initiative": 5, + "limited": 1, + "cost": 35, + "xws": "tomaxbren", + "ability": "After you perform a [Reload] action, you may recover 1 [Charge] token on 1 of your equipped [Talent] upgrade cards.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_107.png", + "shipAbility": { + "name": "Nimble Bomber", + "text": "If you would drop a device using a [Straight] template, you may use a [Bank Left] or [Bank Right] template of the same speed instead." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Missile", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_107.jpg", + "ffg": 107, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/tie-sk-striker.json b/pyxwb2/data/pilots/galactic-empire/tie-sk-striker.json new file mode 100644 index 0000000..87cfa9a --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/tie-sk-striker.json @@ -0,0 +1,147 @@ +{ + "name": "TIE/sk Striker", + "xws": "tieskstriker", + "ffg": 16, + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "1KR", + "2LR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2PR", + "3BW", + "3FB", + "3NW" + ], + "dialCodes": [ + "TS" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEStriker.png", + "pilots": [ + { + "name": "\"Countdown\"", + "caption": "Death Defier", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "countdown", + "ability": "While you defend, after the Neutralize Results step, if you are not stressed, you may suffer 1 [Hit] damage and gain 1 stress token. If you do, cancel all dice results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_118.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Device", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_118.jpg", + "ffg": 118, + "hyperspace": true + }, + { + "name": "\"Duchess\"", + "caption": "Urbane Ace", + "initiative": 5, + "limited": 1, + "cost": 42, + "xws": "duchess", + "ability": "You may choose not to use your Adaptive Ailerons. You may use your Adaptive Ailerons even while stressed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_117.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Device", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_117.jpg", + "ffg": 117, + "hyperspace": true + }, + { + "name": "\"Pure Sabacc\"", + "caption": "Confident Gambler", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "puresabacc", + "ability": "While you perform an attack, if you have 1 or fewer damage cards, you may roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_119.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Device", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_119.jpg", + "ffg": 119, + "hyperspace": true + }, + { + "name": "Black Squadron Scout", + "initiative": 3, + "limited": 0, + "cost": 34, + "xws": "blacksquadronscout", + "text": "These heavily armed atmospheric craft employ their specialized moveable wings to gain additional speed and maneuverability.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_120.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Talent", "Device", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_120.jpg", + "ffg": 120, + "hyperspace": true + }, + { + "name": "Planetary Sentinel", + "initiative": 1, + "limited": 0, + "cost": 31, + "xws": "planetarysentinel", + "text": "To protect its many military installations, the Empire requires a swift and vigilant defense force.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_121.png", + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "slots": ["Device", "Modification", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_121.jpg", + "ffg": 121, + "hyperspace": true + }, + { + "name": "\"Vagabond\"", + "xws": "vagabond", + "initiative": 2, + "limited": 1, + "shipAbility": { + "name": "Adaptive Ailerons", + "text": "Before you reveal your dial, if you are not stressed, you must execute a white [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] maneuver." + }, + "caption": "Destitute Demolitionist", + "hyperspace": true, + "slots": ["Talent", "Gunner", "Device", "Modification"], + "ability": "After you fully execute a maneuver using your Adaptive Ailerons, if you are not stressed, you may drop 1 device.", + "cost": 35, + "ffg": 633, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/308e253711036e143e22857365bcb7ca.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e1b12f8287593ebaf960561c2febffe4.png" + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-empire/vt-49-decimator.json b/pyxwb2/data/pilots/galactic-empire/vt-49-decimator.json new file mode 100644 index 0000000..00d6d76 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-empire/vt-49-decimator.json @@ -0,0 +1,139 @@ +{ + "name": "VT-49 Decimator", + "xws": "vt49decimator", + "ffg": 28, + "size": "Large", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TW", + "3BW", + "3FW", + "3NW", + "3YW", + "4FW" + ], + "dialCodes": [ + "Dec" + ], + "faction": "Galactic Empire", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 0 }, + { "type": "hull", "value": 12 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Reinforce" }, + { "difficulty": "White", "type": "Rotate Arc" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Decimator.png", + "pilots": [ + { + "name": "Captain Oicunn", + "caption": "Inspired Tactician", + "initiative": 3, + "limited": 1, + "cost": 74, + "xws": "captainoicunn", + "ability": "You can perform primary attacks at range 0.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_146.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_146.jpg", + "ffg": 146, + "hyperspace": true + }, + { + "name": "Patrol Leader", + "initiative": 2, + "limited": 0, + "cost": 67, + "xws": "patrolleader", + "text": "To be granted command of a VT-49 Decimator is seen as a significant promotion for a middling officer of the Imperial Navy.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_148.png", + "slots": [ + "Torpedo", + "Crew", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_148.jpg", + "ffg": 148, + "hyperspace": false + }, + { + "name": "Rear Admiral Chiraneau", + "caption": "Advisor to Admiral Piett", + "initiative": 5, + "limited": 1, + "cost": 76, + "xws": "rearadmiralchiraneau", + "ability": "While you perform an attack, if you are reinforced and the defender is in the [Full Front Arc] or [Full Rear Arc] matching your reinforce token, you may change 1 of your [Focus] results to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_147.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_147.jpg", + "ffg": 147, + "hyperspace": true + }, + { + "name": "Morna Kee", + "xws": "mornakee", + "initiative": 4, + "limited": 1, + "caption": "Determined Attaché", + "hyperspace": true, + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Crew", + "Crew", + "Gunner", + "Device", + "Modification", + "Title" + ], + "charges": { "value": 3, "recovers": 0 }, + "ability": "During the End Phase, you may spend 1 [Charge] to flip 1 of your reinforce tokens to your other full arc instead of removing it.", + "cost": 75, + "ffg": 634, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/296bcef6b8b45cae418c80825f6eb512.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/5a913f54447ec375ccc1403769438f81.png" + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-republic/arc-170-starfighter.json b/pyxwb2/data/pilots/galactic-republic/arc-170-starfighter.json new file mode 100644 index 0000000..1e075e0 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-republic/arc-170-starfighter.json @@ -0,0 +1,146 @@ +{ + "name": "ARC-170 Starfighter", + "xws": "arc170starfighter", + "size": "Medium", + "ffg": 31, + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FR", + "4KR" + ], + "dialCodes": [ + "AR" + ], + "faction": "Galactic Republic", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Rear Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Arc-170.png", + "pilots": [ + { + "name": "\"Sinker\"", + "caption": "Wolfpack Veteran", + "initiative": 3, + "limited": 1, + "xws": "sinker", + "ability": "While a friendly ship at range 1-2 in your [Left Arc] or [Right Arc] performs a primary attack, it may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8297fc7d58ec0a5e6068f8dabbbc00f1.png", + "slots": ["Torpedo", "Crew", "Astromech", "Modification", "Gunner"], + "hyperspace": false, + "cost": 54, + "ffg": 526, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/04b3e18c19a0843f89353949c9ffcb77.jpg" + }, + { + "name": "\"Jag\"", + "xws": "jag", + "cost": 48, + "slots": ["Torpedo", "Crew", "Astromech", "Modification", "Gunner"], + "ffg": 525, + "caption": "CT-55/11-9009", + "initiative": 3, + "limited": 1, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/124b11dde89cf986fcd8bc8e89094cf5.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/28152f1d6ee09d27a4afd2459947dc3d.png", + "ability": "After a friendly ship at range 1-2 in your [Left Arc] or [Right Arc] defends, you may acquire a lock on the attacker.", + "hyperspace": true + }, + { + "name": "\"Odd Ball\"", + "xws": "oddball-arc170starfighter", + "cost": 51, + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "ffg": 523, + "caption": "CC-2237", + "initiative": 5, + "limited": 1, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/597ace7e901187c88d9ff75bb34a1301.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/b0e39e35b57982a9cdffe663ff47b2dc.png", + "ability": "After you fully execute a red maneuver or perform a red action, if there is an enemy ship in your [Bullseye Arc], you may acquire a lock on that ship.", + "hyperspace": true + }, + { + "name": "\"Wolffe\"", + "xws": "wolffe", + "cost": 50, + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "ffg": 524, + "caption": "CC-3636", + "initiative": 4, + "limited": 1, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/933ef28f6a8fda0c5741bd6a9a5f308d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/2a15fd003a7fc1d475b562a958c6c263.png", + "charges": { "value": 1, "recovers": 0 }, + "ability": "While you perform a primary [Front Arc] attack, you may spend 1 [Charge] to reroll 1 attack die. While you perform a primary [Rear Arc] attack, you may recover 1 [Charge] to roll 1 additional attack die.", + "hyperspace": true + }, + { + "name": "104th Battalion Pilot", + "xws": "104thbattalionpilot", + "cost": 42, + "slots": ["Torpedo", "Crew", "Astromech", "Modification", "Gunner"], + "ffg": 528, + "initiative": 2, + "limited": 0, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/5081daee997a2a55de474dad2e8e4a07.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1798ea30f603f073200326864ef9424c.png", + "text": "The ARC-170 was designed as a dominating heavy escort fighter with powerful front and rear lasers, ordnance, and an astromech for navigation. Squadrons of these mighty ships bolster the Republic Navy's presence at any battle where they are deployed.", + "hyperspace": false + }, + { + "name": "Squad Seven Veteran", + "xws": "squadsevenveteran", + "cost": 44, + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "ffg": 527, + "initiative": 3, + "limited": 0, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3c9cad4a6c8cdb6a7749a76e1b42ec23.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0e0fb59b2806b41214275255986965f2.png", + "text": "Clone Flight Seven serves as part of the Open Circle Fleet under legendary Jedi Generals such as Plo Koon and Obi-Wan Kenobi, and won glory at the battles of Coruscant and Cato Neimoidia.", + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/galactic-republic/btl-b-y-wing.json b/pyxwb2/data/pilots/galactic-republic/btl-b-y-wing.json new file mode 100644 index 0000000..a6b2c8b --- /dev/null +++ b/pyxwb2/data/pilots/galactic-republic/btl-b-y-wing.json @@ -0,0 +1,253 @@ +{ + "name": "BTL-B Y-wing", + "xws": "btlbywing", + "size": "Small", + "ffg": 68, + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FR", + "4KR" + ], + "dialCodes": [ + "YwB" + ], + "faction": "Galactic Republic", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Reload" } + ], + "pilots": [ + { + "name": "Shadow Squadron Veteran", + "initiative": 3, + "limited": 0, + "xws": "shadowsquadronveteran", + "text": "Shadow Squadron has served since the early days of the Clone Wars, winning victories at Kadavo and against the flagship of Grievous, Malevolence.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fe59b8b8bd7ca5d4104030b50a30a299.png", + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "hyperspace": true, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/84e5bef1597b232a20e52e1aa28a4c7e.jpg", + "cost": 32, + "ffg": 602, + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + }, + { + "name": "Anakin Skywalker", + "initiative": 6, + "limited": 1, + "xws": "anakinskywalker-btlbywing", + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "force": { "value": 3, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "caption": "Hero of the Republic", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7fc9010418aceb84cd9fb48d34e39ec8.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c7c979a7d90961d2e3afe377a71285df.png", + "ability": "After you fully execute a maneuver, if there is an enemy ship in your [Front Arc] at range 0-1 or in your [Bullseye Arc], you may spend 1 [Force] to remove 1 stress token.", + "cost": 60, + "ffg": 596, + "slots": [ + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner", + "Force Power" + ] + }, + { + "name": "R2-D2", + "xws": "r2d2", + "caption": "Bucket of Bolts", + "cost": 35, + "ffg": 600, + "limited": 1, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/90c3f9aac7f44e4a6a860c81f93aae99.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/b37b960f2e79ab5eb905bc3593de8961.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Reload" } + ], + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "ability": "At the start of the Engagement Phase, if there is an enemy ship in your [Rear Arc], gain 1 calculate token.", + "hyperspace": true, + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Crew", + "Device", + "Modification", + "Gunner" + ], + "initiative": 2 + }, + { + "name": "\"Odd Ball\"", + "xws": "oddball-btlbywing", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "caption": "CC-2237", + "hyperspace": true, + "cost": 44, + "ffg": 597, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/5f37609150489b6d49ca659d1b1caa8a.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3b260355bd12266e08ff25ec16d278fe.png", + "ability": "After you fully execute a red maneuver or perform a red action, if there is an enemy ship in your [Bullseye Arc], you may acquire a lock on that ship.", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + }, + { + "name": "\"Matchstick\"", + "xws": "matchstick", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "hyperspace": true, + "caption": "Shadow Two", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8d8b63edff7a5e9969ca61ebb4456837.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6aa658fe4082ed67500d2ac92c7731a0.png", + "ability": "While you perform a primary or [Single Turret Arc] attack, you may reroll 1 attack die for each red token you have.", + "cost": 43, + "ffg": 598, + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + }, + { + "name": "\"Broadside\"", + "xws": "broadside", + "initiative": 3, + "limited": 1, + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "hyperspace": true, + "caption": "Shadow Three", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d34e3bcb51d765f9dd12a9fc266e7ad9.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1f0842573067d73acd7bb7589707ec4e.png", + "ability": "While you perform a [Single Turret Arc] attack, if your [Single Turret Arc] indicator is in your [Left Arc] or [Right Arc], you may change 1 blank result to a [Focus] result.", + "cost": 36, + "ffg": 599, + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + }, + { + "name": "\"Goji\"", + "xws": "goji", + "initiative": 2, + "limited": 1, + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "hyperspace": false, + "caption": "Payload Specialist", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/026f989543c030d7c8e6757a9aab7a68.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8ac74252d260a910a7990e6e806aa612.png", + "ability": "While a friendly ship at range 0-3 defends, it may roll 1 additional defense die for each friendly bomb at range 0-1 of it.", + "cost": 32, + "ffg": 601, + "slots": [ + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + }, + { + "name": "Red Squadron Bomber", + "xws": "redsquadronbomber", + "initiative": 2, + "limited": 0, + "shipAbility": { + "name": "Plated Hull", + "text": "While you defend, if you are not critically damaged, change 1 [Critical Hit] result to a [Hit] result." + }, + "text": "At the battle of Geonosis, Red Squadron provided vital cover to the LAAT gunships deployed to secure the surface.", + "hyperspace": true, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e91e0d3a30e85c878f7493360d1b668f.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/692a1f1d4b5f5370dad7cacf2f19d699.png", + "cost": 30, + "ffg": 603, + "slots": [ + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ] + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_BTL-B_Ywing.png" +} diff --git a/pyxwb2/data/pilots/galactic-republic/delta-7-aethersprite.json b/pyxwb2/data/pilots/galactic-republic/delta-7-aethersprite.json new file mode 100644 index 0000000..c8eb4fe --- /dev/null +++ b/pyxwb2/data/pilots/galactic-republic/delta-7-aethersprite.json @@ -0,0 +1,216 @@ +{ + "name": "Delta-7 Aethersprite", + "xws": "delta7aethersprite", + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1NB", + "1YW", + "2LR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2PR", + "3BW", + "3FB", + "3NW", + "4FW", + "4KR", + "5FW", + "5KR" + ], + "dialCodes": [ + "D7A" + ], + "faction": "Galactic Republic", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "Purple", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Delta-7.png", + "pilots": [ + { + "name": "Jedi Knight", + "initiative": 3, + "limited": 0, + "xws": "jediknight", + "text": "When the Clone Wars began, the Jedi Knights rallied to the cause of preserving the Republic, assuming command of legions of clone troopers and leading them in battle.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/13d08d0d1131e7a11f6d10fd1626bff9.png", + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "cost": 37, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 515, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d3bf6f2f5482c2b68a4d3d02cd758a68.jpg" + }, + { + "name": "Obi-Wan Kenobi", + "caption": "Guardian of the Republic", + "initiative": 5, + "limited": 1, + "xws": "obiwankenobi", + "ability": "After a friendly ship at range 0-2 spends a focus token, you may spend 1 [Force]. If you do, that ship gains 1 focus token.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fcf515534a722b581bc2f85f36cb5c30.png", + "force": { "value": 3, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "cost": 48, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 511, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f449693ccfd6529244ea7765eed2f83f.jpg" + }, + { + "name": "Plo Koon", + "caption": "Serene Mentor", + "initiative": 5, + "limited": 1, + "xws": "plokoon", + "ability": "At the start of the Engagement Phase, you may spend 1 [Force] and choose another friendly ship at range 0-2. If you do, you may transfer 1 green token to it or transfer one orange token from it to yourself.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c0936c57c897ea7bacadf723cfcbd0b6.png", + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "cost": 44, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 513, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a4f58c67ecedcb9fcfa6ee45613c002e.jpg" + }, + { + "name": "Saesee Tiin", + "caption": "Prophetic Pilot", + "initiative": 4, + "limited": 1, + "xws": "saeseetiin", + "ability": "After a friendly ship at range 0-2 reveals its dial, you may spend 1 [Force]. If you do, set its dial to another maneuver of the same speed and difficulty.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e0fdedf1af8fd1e5b36c2fba17b4f6b0.png", + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "hyperspace": false, + "cost": 43, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 514, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e36d5e616e0b0135b0faa1c9f46992a1.jpg" + }, + { + "name": "Mace Windu", + "caption": "Harsh Traditionalist", + "initiative": 4, + "limited": 1, + "xws": "macewindu", + "ability": "After you fully execute a red maneuver, recover 1 [Force].", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f0c905f162de8d77dd78c3d49cca77f1.png", + "force": { "value": 3, "recovers": 1, "side": ["light"] }, + "hyperspace": false, + "cost": 45, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 512, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ba6c851af3b8f650d8dcb865a05636f2.jpg" + }, + { + "name": "Anakin Skywalker", + "caption": "Hero of the Republic", + "initiative": 6, + "limited": 1, + "xws": "anakinskywalker", + "ability": "After you fully execute a maneuver, if there is an enemy ship in your [Front Arc] at range 0-1 or in your [Bullseye Arc], you may spend 1 [Force] to remove 1 stress token.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "force": { "value": 3, "recovers": 1, "side": ["light"] }, + "hyperspace": false, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d60f4eca355471465ca3f6b99fb98e56.png", + "cost": 62, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 507, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/dc121e1b285f30e4708bda6c0594b55f.jpg" + }, + { + "name": "Ahsoka Tano", + "caption": "\"Snips\"", + "initiative": 3, + "limited": 1, + "xws": "ahsokatano", + "ability": "After you fully execute a maneuver, you may choose a friendly ship at range 0-1 and spend 1 [Force]. That ship may perform an action, even if it is stressed.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/15f6bf84f63970c982dd722a5473217f.png", + "cost": 44, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 510, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0fc229b9b79c9f6c750a587614729293.jpg" + }, + { + "name": "Barriss Offee", + "caption": "Conflicted Padawan", + "initiative": 4, + "limited": 1, + "xws": "barrissoffee", + "ability": "While a friendly ship at range 0-2 performs an attack, if the defender is in its [Bullseye Arc], you may spend 1 [Force] to change 1 [Focus] result to a [Hit] result or 1 [Hit] result to a [Critical Hit] result.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f8f58005da18d7041b1ec2374701465c.png", + "cost": 38, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 509, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6eb248dfda52dc29a8aa4fda7e414eab.jpg" + }, + { + "name": "Luminara Unduli", + "caption": "Wise Protector", + "initiative": 4, + "limited": 1, + "xws": "luminaraunduli", + "ability": "While a friendly ship at range 0-2 defends, if it is not in the attacker's [Bullseye Arc], you may spend 1 [Force]. If you do, change 1 [Critical Hit] result to a [Hit] result or 1 [Hit] result to a [Focus] result.", + "shipAbility": { + "name": "Fine-tuned Controls", + "text": "After you fully execute a maneuver, you may spend 1 [Force] to perform a [Boost] or [Barrel Roll] action." + }, + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "hyperspace": true, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/7f87b6c12631687bedf75a18582af0b0.png", + "cost": 43, + "slots": ["Astromech", "Modification", "Force Power", "Configuration"], + "ffg": 508, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/22519908330c72696863815565a2beda.jpg" + } + ], + "ffg": 61 +} diff --git a/pyxwb2/data/pilots/galactic-republic/naboo-royal-n-1-starfighter.json b/pyxwb2/data/pilots/galactic-republic/naboo-royal-n-1-starfighter.json new file mode 100644 index 0000000..f8e06f0 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-republic/naboo-royal-n-1-starfighter.json @@ -0,0 +1,153 @@ +{ + "name": "Naboo Royal N-1 Starfighter", + "xws": "nabooroyaln1starfighter", + "size": "Small", + "ffg": 63, + "dial": [ + "1BW", + "1FW", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3ER", + "3TW", + "3BB", + "3FB", + "3NB", + "3YW", + "3RR", + "4FW", + "5FW" + ], + "dialCodes": [ + "N1" + ], + "faction": "Galactic Republic", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "pilots": [ + { + "name": "Anakin Skywalker", + "initiative": 4, + "limited": 1, + "xws": "anakinskywalker-nabooroyaln1starfighter", + "hyperspace": true, + "cost": 41, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech"], + "ability": "Before you reveal your maneuver, you may spend 1 [Force] to barrel roll (this is not an action).", + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "ffg": 558, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d9180cc98a1a4384bb2a0e11efbf1311.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/21e28ea4e8784dce5a554a33888d8be0.png", + "caption": "Hero of Naboo" + }, + { + "name": "Ric Olié", + "xws": "ricolie", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "caption": "Bravo Leader", + "hyperspace": true, + "cost": 42, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech"], + "ability": "While you defend or perform a primary attack, if the speed of your revealed maneuver is higher than the enemy ship's, roll 1 additional die.", + "ffg": 557, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/26080de6b705112c0d7d53de48484bb0.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/87829b7b808c535eb1e2c8314b04971a.png" + }, + { + "name": "Padmé Amidala", + "xws": "padmeamidala", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "caption": "Aggressive Negotiator", + "hyperspace": true, + "cost": 45, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech"], + "ability": "While an enemy ship in your [Front Arc] defends or performs an attack, that ship can modify only 1 [Focus] result (other results can still be modified).", + "ffg": 559, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/254a567fa647e783bcd3fb9c09377e3d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3bc6bb14d0c80011145a36c132550298.png" + }, + { + "name": "Dineé Ellberger", + "xws": "dineeellberger", + "caption": "Bravo Five", + "initiative": 3, + "limited": 1, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "hyperspace": true, + "cost": 38, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech"], + "ability": "While you defend or perform an attack, if the speed of your revealed maneuver is the same as the enemy ship's, that ship's dice cannot be modified.", + "ffg": 560, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3f71de47ef3b5986a433757a00f4230b.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/06e0863851b95dba4874b211e05661cc.png" + }, + { + "name": "Bravo Flight Officer", + "xws": "bravoflightofficer", + "initiative": 2, + "limited": 0, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "text": "The volunteer pilots of the Royal Naboo Security Force are dedicated to protecting the people and ideals of their homeworld, and trust their Queen to send them into battle only when all other options have failed.", + "hyperspace": true, + "cost": 33, + "slots": ["Sensor", "Torpedo", "Astromech"], + "ffg": 562, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4e1a2195431b026de73c90f8ce5f7c20.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/274db1f70ed4da939b9440837a30c39a.png" + }, + { + "name": "Naboo Handmaiden", + "xws": "naboohandmaiden", + "caption": "Regal Ruse", + "initiative": 1, + "limited": 2, + "shipAbility": { + "name": "Full Throttle", + "text": "After you fully execute a speed 3-5 maneuver, you may perform an [Evade] action." + }, + "hyperspace": true, + "conditions": ["decoyed"], + "ability": "Setup: After placing forces, assign the Decoyed condition to 1 friendly ship other than Naboo Handmaiden.", + "cost": 42, + "slots": ["Sensor", "Torpedo", "Astromech"], + "ffg": 561, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/afe1521a12124eeff41ed4234e7591ac.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4493fe57050175b6a75e3a13e7553b1e.png" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Royal_Naboo_N-1_Starfighter.png" +} diff --git a/pyxwb2/data/pilots/galactic-republic/v-19-torrent-starfighter.json b/pyxwb2/data/pilots/galactic-republic/v-19-torrent-starfighter.json new file mode 100644 index 0000000..d3f8a16 --- /dev/null +++ b/pyxwb2/data/pilots/galactic-republic/v-19-torrent-starfighter.json @@ -0,0 +1,143 @@ +{ + "name": "V-19 Torrent Starfighter", + "xws": "v19torrentstarfighter", + "size": "Small", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2ER", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "2RR", + "3BR", + "3FB", + "3NR", + "3KR", + "4FW" + ], + "dialCodes": [ + "V19*" + ], + "faction": "Galactic Republic", + "stats": [ + { "type": "attack", "arc": "Front Arc", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 5 } + ], + "actions": [ + { "type": "Focus", "difficulty": "White" }, + { "type": "Evade", "difficulty": "White" }, + { "type": "Lock", "difficulty": "White" }, + { + "type": "Barrel Roll", + "difficulty": "White", + "linked": { "type": "Evade", "difficulty": "Red" } + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_V-19Torrent.png", + "pilots": [ + { + "name": "\"Kickback\"", + "caption": "Blue Four", + "xws": "kickback", + "initiative": 4, + "limited": 1, + "ability": "After you perform a [Barrel Roll] action, you may perform a red [Lock] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/76c1228dd4c70dc4e56ac99284a11b0f.png", + "hyperspace": false, + "cost": 33, + "slots": ["Talent", "Missile", "Modification"], + "ffg": 517, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/50b08d380769e7127b0d3f5dbbd89d1f.jpg" + }, + { + "name": "\"Odd Ball\"", + "caption": "CC-2237", + "xws": "oddball", + "initiative": 5, + "limited": 1, + "ability": "After you fully execute a red maneuver or perform a red action, if there is an enemy ship in your [Bullseye Arc], you may acquire a lock on that ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9ecf7600f20da9a9eff5d3e244934ccb.png", + "hyperspace": false, + "cost": 34, + "slots": ["Talent", "Missile", "Modification"], + "ffg": 516, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2a20c8f88cf55b75df4909f74b0221a2.jpg" + }, + { + "name": "\"Swoop\"", + "caption": "Blue Six", + "xws": "swoop", + "initiative": 3, + "limited": 1, + "ability": "After a friendly small or medium ship fully executes a speed 3-4 maneuver, if it is at range 0-1, it may perform a red [Boost] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8ae255235c0c1d3892344fb43fcab773.png", + "hyperspace": false, + "cost": 31, + "slots": ["Talent", "Missile", "Modification"], + "ffg": 519, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c8c96604a64fce6b953a8b4dc4ff86e6.jpg" + }, + { + "name": "\"Axe\"", + "caption": "Blue Two", + "xws": "axe", + "initiative": 3, + "limited": 1, + "ability": "After you defend or perform an attack, you may choose a friendly ship at range 1-2 in your [Left Arc] or [Right Arc]. If you do, transfer 1 green token to that ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/89ade203dec6b0fa5ed6360aae3b3022.png", + "hyperspace": false, + "cost": 32, + "slots": ["Talent", "Missile", "Modification"], + "ffg": 518, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3129e7fc822115a91a04004c35ceda18.jpg" + }, + { + "name": "\"Tucker\"", + "caption": "Blue Five", + "xws": "tucker", + "initiative": 2, + "limited": 1, + "ability": "After a friendly ship at range 1-2 performs an attack against an enemy ship in your [Front Arc], you may perform a [Focus] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a457cc2ab3038736cb37541ad94b9b34.png", + "hyperspace": false, + "cost": 29, + "slots": ["Missile", "Modification"], + "ffg": 520, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0b24c3261656d83b685ac59e6dfb1817.jpg" + }, + { + "name": "Blue Squadron Protector", + "xws": "bluesquadronprotector", + "initiative": 3, + "limited": 0, + "text": "Blue Squadron's elite clone pilots are trained to fly their V-19s in conjunction with Jedi and often support famous commanders such as Anakin Skywalker and Ahsoka Tano.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/77b2dfdca20865d8d667c41539a7356e.png", + "hyperspace": false, + "cost": 27, + "slots": ["Talent", "Missile", "Modification"], + "ffg": 521, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/74667d2878cb823d14035e91c8773816.jpg" + }, + { + "name": "Gold Squadron Trooper", + "xws": "goldsquadrontrooper", + "initiative": 2, + "limited": 0, + "text": "The V-19 Torrent starfighter was designed to be a light escort to nimble Delta-7 interceptors flown by Jedi Knights, and has a unique flight profile to reflect this role.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ed881318b45485a197e514b2d13e178c.png", + "hyperspace": false, + "cost": 25, + "slots": ["Missile", "Modification"], + "ffg": 522, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e4ba0b540259e9026142e6fa5e837685.jpg" + } + ], + "ffg": 62 +} diff --git a/pyxwb2/data/pilots/rebel-alliance/a-sf-01-b-wing.json b/pyxwb2/data/pilots/rebel-alliance/a-sf-01-b-wing.json new file mode 100644 index 0000000..e99532a --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/a-sf-01-b-wing.json @@ -0,0 +1,160 @@ +{ + "name": "A/SF-01 B-wing", + "xws": "asf01bwing", + "ffg": 17, + "size": "Small", + "dial": [ + "1ER", + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "1RR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "2KR", + "3BR", + "3FB", + "3NR", + "4FR" + ], + "dialCodes": [ + "BW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Barrel Roll" }, + "type": "Focus" + }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_B-wing.png", + "pilots": [ + { + "name": "Blade Squadron Veteran", + "initiative": 3, + "limited": 0, + "cost": 42, + "xws": "bladesquadronveteran", + "text": "A unique gyrostabilization system surrounds the B-wing's cockpit, ensuring that the pilot always remains stationary during flight.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_25.png", + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Torpedo", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_25.jpg", + "ffg": 25, + "hyperspace": true + }, + { + "name": "Blue Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 41, + "xws": "bluesquadronpilot", + "text": "Due to its heavy weapons array and resilient shielding, the B-wing has solidified itself as the Rebel Alliance's most innovative assault fighter.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_26.png", + "slots": [ + "Sensor", + "Cannon", + "Cannon", + "Torpedo", + "Modification", + "Configuration" + ], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/a4/a6/a4a6943b-6af3-4d33-9a04-bff98190d3ee/g18x3-blue-squadron-pilot-2.png", + "source": "Season Three 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_26.jpg", + "ffg": 26, + "hyperspace": true + }, + { + "name": "Braylen Stramm", + "caption": "Blade Leader", + "initiative": 4, + "limited": 1, + "cost": 52, + "xws": "braylenstramm", + "ability": "While you defend or perform an attack, if you are stressed, you may reroll up to 2 of your dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_23.png", + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Torpedo", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_23.jpg", + "ffg": 23, + "hyperspace": true + }, + { + "name": "Ten Numb", + "caption": "Blue Five", + "initiative": 4, + "limited": 1, + "cost": 48, + "xws": "tennumb", + "ability": "While you defend or perform an attack, you may spend 1 stress token to change all of your [Focus] results to [Evade] or [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_24.png", + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Torpedo", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_24.jpg", + "ffg": 24, + "hyperspace": true + }, + { + "name": "Gina Moonsong", + "xws": "ginamoonsong", + "initiative": 5, + "limited": 1, + "caption": "Insubordinate Ace", + "hyperspace": true, + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Torpedo", + "Modification", + "Configuration" + ], + "ability": "At the start of the Engagement Phase, you must transfer 1 of your stress tokens to another friendly ship at range 0-2.", + "cost": 50, + "ffg": 628, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/df07f280040d4284c04c194e18c62c9e.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0fcceeaf64f96b4870146ffbec529dc2.png" + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/arc-170-starfighter.json b/pyxwb2/data/pilots/rebel-alliance/arc-170-starfighter.json new file mode 100644 index 0000000..984ba04 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/arc-170-starfighter.json @@ -0,0 +1,126 @@ +{ + "name": "ARC-170 Starfighter", + "xws": "arc170starfighter", + "ffg": 31, + "size": "Medium", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FR", + "4KR" + ], + "dialCodes": [ + "AR" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Rear Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Arc-170.png", + "pilots": [ + { + "name": "Garven Dreis", + "caption": "Red Leader", + "initiative": 4, + "limited": 1, + "cost": 49, + "xws": "garvendreis", + "ability": "After you spend a focus token, you may choose 1 friendly ship at range 1-3. That ship gains 1 focus token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_66.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_66.jpg", + "ffg": 66, + "hyperspace": false + }, + { + "name": "Ibtisam", + "caption": "Survivor of Endor", + "initiative": 3, + "limited": 1, + "cost": 46, + "xws": "ibtisam", + "ability": "After you fully execute a maneuver, if you are stressed, you may roll 1 attack die. On a [Hit] or [Critical Hit] result, remove 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_68.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_68.jpg", + "ffg": 68, + "hyperspace": false + }, + { + "name": "Norra Wexley", + "caption": "Gold Nine", + "initiative": 5, + "limited": 1, + "cost": 55, + "xws": "norrawexley", + "ability": "While you defend, if there is an enemy ship at range 0-1, you may add 1 [Evade] result to your dice results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_65.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_65.jpg", + "ffg": 65, + "hyperspace": false + }, + { + "name": "Shara Bey", + "caption": "Green Four", + "initiative": 4, + "limited": 1, + "cost": 50, + "xws": "sharabey", + "ability": "While you defend or perform a primary attack, you may spend 1 lock you have on the enemy ship to add 1 [Focus] result to your dice results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_67.png", + "slots": [ + "Talent", + "Torpedo", + "Crew", + "Astromech", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_67.jpg", + "ffg": 67, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/attack-shuttle.json b/pyxwb2/data/pilots/rebel-alliance/attack-shuttle.json new file mode 100644 index 0000000..54d150d --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/attack-shuttle.json @@ -0,0 +1,120 @@ +{ + "name": "Attack Shuttle", + "xws": "attackshuttle", + "ffg": 32, + "size": "Small", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FW", + "4KR" + ], + "dialCodes": [ + "AS" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Evade" }, + "type": "Barrel Roll" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_AttackShuttle.png", + "pilots": [ + { + "name": "\"Zeb\" Orrelios", + "caption": "Spectre-4", + "initiative": 2, + "limited": 1, + "cost": 32, + "xws": "zeborrelios", + "ability": "While you defend, [Critical Hit] results are neutralized before [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_37.png", + "shipAbility": { + "name": "Locked and Loaded", + "text": "While you are docked, after your carrier ship performs a primary [Front Arc] or [Turret] attack, it may perform a bonus primary [Rear Arc] attack." + }, + "slots": ["Turret", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_37.jpg", + "ffg": 37, + "hyperspace": false + }, + { + "name": "Ezra Bridger", + "caption": "Spectre-6", + "initiative": 3, + "limited": 1, + "cost": 40, + "xws": "ezrabridger", + "ability": "While you defend or perform an attack, if you are stressed, you may spend 1 [Force] to change up to 2 of your [Focus] results to [Evade] or [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_36.png", + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "shipAbility": { + "name": "Locked and Loaded", + "text": "While you are docked, after your carrier ship performs a primary [Front Arc] or [Turret] attack, it may perform a bonus primary [Rear Arc] attack." + }, + "slots": ["Turret", "Crew", "Modification", "Title", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_36.jpg", + "ffg": 36, + "hyperspace": false + }, + { + "name": "Hera Syndulla", + "caption": "Spectre-2", + "initiative": 5, + "limited": 1, + "cost": 38, + "xws": "herasyndulla", + "ability": "After you reveal a red or blue maneuver, you may set your dial to another maneuver of the same difficulty.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_34.png", + "shipAbility": { + "name": "Locked and Loaded", + "text": "While you are docked, after your carrier ship performs a primary [Front Arc] or [Turret] attack, it may perform a bonus primary [Rear Arc] attack." + }, + "slots": ["Talent", "Turret", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_34.jpg", + "ffg": 34, + "hyperspace": false + }, + { + "name": "Sabine Wren", + "caption": "Spectre-5", + "initiative": 3, + "limited": 1, + "cost": 41, + "xws": "sabinewren", + "ability": "Before you activate, you may perform a [Barrel Roll] or [Boost] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_35.png", + "shipAbility": { + "name": "Locked and Loaded", + "text": "While you are docked, after your carrier ship performs a primary [Front Arc] or [Turret] attack, it may perform a bonus primary [Rear Arc] attack." + }, + "slots": ["Talent", "Turret", "Crew", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_35.jpg", + "ffg": 35, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/auzituck-gunship.json b/pyxwb2/data/pilots/rebel-alliance/auzituck-gunship.json new file mode 100644 index 0000000..4aef22a --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/auzituck-gunship.json @@ -0,0 +1,82 @@ +{ + "name": "Auzituck Gunship", + "xws": "auzituckgunship", + "ffg": 6, + "size": "Small", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW" + ], + "dialCodes": [ + "Auz" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Full Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Reinforce" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Auzituck.png", + "pilots": [ + { + "name": "Kashyyyk Defender", + "initiative": 1, + "limited": 0, + "cost": 44, + "xws": "kashyyykdefender", + "text": "Equipped with three wide-range Sureggi twin laser cannons, the Auzituck gunship acts as a powerful deterrent to slaver operations in the Kashyyyk system.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_33.png", + "slots": ["Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_33.jpg", + "ffg": 33, + "hyperspace": false + }, + { + "name": "Lowhhrick", + "caption": "Escaped Gladiator", + "initiative": 3, + "limited": 1, + "cost": 52, + "xws": "lowhhrick", + "ability": "After a friendly ship at range 0-1 becomes the defender, you may spend 1 reinforce token. If you do, that ship gains 1 evade token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_32.png", + "slots": ["Talent", "Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_32.jpg", + "ffg": 32, + "hyperspace": false + }, + { + "name": "Wullffwarro", + "caption": "Wookiee Chief", + "initiative": 4, + "limited": 1, + "cost": 56, + "xws": "wullffwarro", + "ability": "While you perform a primary attack, if you are damaged, you may roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_31.png", + "slots": ["Talent", "Crew", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_31.jpg", + "ffg": 31, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/btl-a4-y-wing.json b/pyxwb2/data/pilots/rebel-alliance/btl-a4-y-wing.json new file mode 100644 index 0000000..2b9773e --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/btl-a4-y-wing.json @@ -0,0 +1,177 @@ +{ + "name": "BTL-A4 Y-wing", + "xws": "btla4ywing", + "ffg": 12, + "size": "Small", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FR", + "4KR" + ], + "dialCodes": [ + "YW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Y-wing.png", + "pilots": [ + { + "name": "\"Dutch\" Vander", + "caption": "Gold Leader", + "initiative": 4, + "limited": 1, + "cost": 40, + "xws": "dutchvander", + "ability": "After you perform the [Lock] action, you may choose 1 friendly ship at range 1-3. That ship may acquire a lock on the object you locked, ignoring range restrictions.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_14.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_14.jpg", + "ffg": 14, + "hyperspace": true + }, + { + "name": "Evaan Verlaine", + "caption": "Gold Three", + "initiative": 3, + "limited": 1, + "cost": 35, + "xws": "evaanverlaine", + "ability": "At the start of the Engagement Phase, you may spend 1 focus token to choose a friendly ship at range 0-1. If you do, that ship rolls 1 additional defense die while defending until the end of the round.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_16.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_16.jpg", + "ffg": 16, + "hyperspace": true + }, + { + "name": "Gold Squadron Veteran", + "initiative": 3, + "limited": 0, + "cost": 32, + "xws": "goldsquadronveteran", + "text": "Commanded by Jon \"Dutch\" Vander, Gold Squadron played an instrumental role in the Battles of Scarif and Yavin.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_17.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/6e/42/6e42ac70-c222-4ca5-ad3a-dc9350988933/op086-gold-squadron-veteran.png", + "source": "Gen Con Indy 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_17.jpg", + "ffg": 17, + "hyperspace": true + }, + { + "name": "Gray Squadron Bomber", + "initiative": 2, + "limited": 0, + "cost": 30, + "xws": "graysquadronbomber", + "text": "Long after the Y-wing was phased out by the Galactic Empire, its durability, dependability, and heavy armament help it remain a staple in the Rebel fleet.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_18.png", + "slots": [ + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_18.jpg", + "ffg": 18, + "hyperspace": true + }, + { + "name": "Horton Salm", + "caption": "Gray Leader", + "initiative": 4, + "limited": 1, + "cost": 37, + "xws": "hortonsalm", + "ability": "While you perform an attack, you may reroll 1 attack die for each other friendly ship at range 0-1 of the defender.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_15.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_15.jpg", + "ffg": 15, + "hyperspace": true + }, + { + "name": "Norra Wexley", + "caption": "Gold Nine", + "initiative": 5, + "limited": 1, + "cost": 41, + "xws": "norrawexley-btla4ywing", + "ability": "While you defend, if there is an enemy ship at range 0-1, add 1 [Evade] result to your dice results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_13.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_13.jpg", + "ffg": 13, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/btl-s8-k-wing.json b/pyxwb2/data/pilots/rebel-alliance/btl-s8-k-wing.json new file mode 100644 index 0000000..dc1f95d --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/btl-s8-k-wing.json @@ -0,0 +1,107 @@ +{ + "name": "BTL-S8 K-wing", + "xws": "btls8kwing", + "ffg": 30, + "size": "Medium", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3BW", + "3FW", + "3NW" + ], + "dialCodes": [ + "KW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "SLAM" }, + { "difficulty": "White", "type": "Rotate Arc" }, + { "difficulty": "White", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_K-wing.png", + "pilots": [ + { + "name": "Esege Tuketu", + "caption": "Selfless Hero", + "initiative": 3, + "limited": 1, + "cost": 44, + "xws": "esegetuketu", + "ability": "While a friendly ship at range 0-2 defends or performs an attack, it may spend your focus tokens as if that ship has them.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_63.png", + "slots": [ + "Torpedo", + "Missile", + "Missile", + "Crew", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_63.jpg", + "ffg": 63, + "hyperspace": false + }, + { + "name": "Miranda Doni", + "caption": "Heavy Hitter", + "initiative": 4, + "limited": 1, + "cost": 42, + "xws": "mirandadoni", + "ability": "While you perform a primary attack, you may either spend 1 shield to roll 1 additional attack die or, if you are not shielded, you may roll 1 fewer attack die to recover 1 shield.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_62.png", + "slots": [ + "Torpedo", + "Missile", + "Missile", + "Crew", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_62.jpg", + "ffg": 62, + "hyperspace": false + }, + { + "name": "Warden Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 38, + "xws": "wardensquadronpilot", + "text": "Koensayr Manufacturing's K-wing boasts an advanced SubLight Acceleration Motor and an unprecedented 18 hard points, granting it unrivaled speed and firepower.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_64.png", + "slots": [ + "Torpedo", + "Missile", + "Missile", + "Crew", + "Device", + "Device", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_64.jpg", + "ffg": 64, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/e-wing.json b/pyxwb2/data/pilots/rebel-alliance/e-wing.json new file mode 100644 index 0000000..a407e70 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/e-wing.json @@ -0,0 +1,126 @@ +{ + "name": "E-wing", + "xws": "ewing", + "ffg": 40, + "size": "Small", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FB", + "4KR", + "5FW" + ], + "dialCodes": [ + "EW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Lock" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Lock" }, + "type": "Boost" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_E-wing.png", + "pilots": [ + { + "name": "Corran Horn", + "caption": "Tenacious Investigator", + "initiative": 5, + "limited": 1, + "cost": 66, + "xws": "corranhorn", + "ability": "At initiative 0, you may perform a bonus primary attack against an enemy ship in your [Bullseye Arc]. If you do, at the start of the next Planning Phase, gain 1 disarm token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_50.png", + "shipAbility": { + "name": "Experimental Scanners", + "text": "You can acquire locks beyond range 3. You cannot acquire locks at range 1." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_50.jpg", + "ffg": 50, + "hyperspace": false + }, + { + "name": "Gavin Darklighter", + "caption": "Bold Wingman", + "initiative": 4, + "limited": 1, + "cost": 61, + "xws": "gavindarklighter", + "ability": "While a friendly ship performs an attack, if the defender is in your [Front Arc], the attacker may change 1 [Hit] result to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_51.png", + "shipAbility": { + "name": "Experimental Scanners", + "text": "You can acquire locks beyond range 3. You cannot acquire locks at range 1." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_51.jpg", + "ffg": 51, + "hyperspace": false + }, + { + "name": "Knave Squadron Escort", + "initiative": 2, + "limited": 0, + "cost": 50, + "xws": "knavesquadronescort", + "text": "Designed to combine the best features of the X-wing series with the A-wing series, the E-wing boasts superior firepower, speed, and maneuverability.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_53.png", + "shipAbility": { + "name": "Experimental Scanners", + "text": "You can acquire locks beyond range 3. You cannot acquire locks at range 1." + }, + "slots": ["Sensor", "Torpedo", "Astromech", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_53.jpg", + "ffg": 53, + "hyperspace": false + }, + { + "name": "Rogue Squadron Escort", + "initiative": 4, + "limited": 0, + "cost": 53, + "xws": "roguesquadronescort", + "text": "The elite pilots of Rogue Squadron are among the Rebellion's very best.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_52.png", + "shipAbility": { + "name": "Experimental Scanners", + "text": "You can acquire locks beyond range 3. You cannot acquire locks at range 1." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Astromech", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_52.jpg", + "ffg": 52, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/hwk-290-light-freighter.json b/pyxwb2/data/pilots/rebel-alliance/hwk-290-light-freighter.json new file mode 100644 index 0000000..2748970 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/hwk-290-light-freighter.json @@ -0,0 +1,127 @@ +{ + "name": "HWK-290 Light Freighter", + "xws": "hwk290lightfreighter", + "ffg": 34, + "size": "Small", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FB", + "3NW", + "3YR", + "4FW" + ], + "dialCodes": [ + "HK" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Focus" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Lock" + }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "White", "type": "Rotate Arc" }, + { "difficulty": "Red", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_HWK-290.png", + "pilots": [ + { + "name": "Jan Ors", + "caption": "Espionage Expert", + "initiative": 5, + "limited": 1, + "cost": 41, + "xws": "janors", + "ability": "While a friendly ship in your firing arc performs a primary attack, if you are not stressed, you may gain 1 stress token. If you do, that ship may roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_42.png", + "slots": [ + "Talent", + "Crew", + "Device", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_42.jpg", + "ffg": 42, + "hyperspace": false + }, + { + "name": "Kyle Katarn", + "caption": "Relentless Operative", + "initiative": 3, + "limited": 1, + "cost": 34, + "xws": "kylekatarn", + "ability": "At the start of the Engagement Phase, you may transfer 1 of your focus tokens to a friendly ship in your firing arc.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_43.png", + "slots": [ + "Talent", + "Crew", + "Device", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_43.jpg", + "ffg": 43, + "hyperspace": false + }, + { + "name": "Rebel Scout", + "initiative": 2, + "limited": 0, + "cost": 30, + "xws": "rebelscout", + "text": "Designed to look like a bird in flight by the Corellian Engineering Corporation, \"hawk\" series ships are exemplary transport craft. Swift and rugged, the HWK-290 is often employed by Rebel agents as a mobile base of operations.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_45.png", + "slots": ["Crew", "Device", "Modification", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_45.jpg", + "ffg": 45, + "hyperspace": false + }, + { + "name": "Roark Garnet", + "caption": "Good-Hearted Smuggler", + "initiative": 4, + "limited": 1, + "cost": 38, + "xws": "roarkgarnet", + "ability": "At the start of the Engagement Phase, you may choose 1 ship in your firing arc. If you do, it engages at initiative 7 instead of its standard initiative value this phase.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_44.png", + "slots": [ + "Talent", + "Crew", + "Device", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_44.jpg", + "ffg": 44, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/modified-yt-1300-light-freighter.json b/pyxwb2/data/pilots/rebel-alliance/modified-yt-1300-light-freighter.json new file mode 100644 index 0000000..ed82773 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/modified-yt-1300-light-freighter.json @@ -0,0 +1,159 @@ +{ + "name": "Modified YT-1300 Light Freighter", + "xws": "modifiedyt1300lightfreighter", + "ffg": 1, + "size": "Large", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FW", + "4KR" + ], + "dialCodes": [ + "YT13" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 8 }, + { "type": "shields", "value": 5 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Falcon.png", + "pilots": [ + { + "name": "Chewbacca", + "caption": "The Mighty", + "initiative": 4, + "limited": 1, + "cost": 71, + "xws": "chewbacca", + "ability": "Before you would be dealt a faceup damage card, you may spend 1 [Charge] to be dealt the card facedown instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_71.png", + "charges": { "value": 1, "recovers": 1 }, + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Modification", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_71.jpg", + "ffg": 71, + "hyperspace": true + }, + { + "name": "Han Solo", + "caption": "Scoundrel for Hire", + "initiative": 6, + "limited": 1, + "cost": 80, + "xws": "hansolo-modifiedyt1300lightfreighter", + "ability": "After you roll dice, if you are at range 0-1 of an obstacle, you may reroll all of your dice. This does not count as rerolling for the purpose of other effects.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_69.png", + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Modification", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_69.jpg", + "ffg": 69, + "hyperspace": true + }, + { + "name": "Lando Calrissian", + "caption": "General of the Alliance", + "initiative": 5, + "limited": 1, + "cost": 79, + "xws": "landocalrissian-modifiedyt1300lightfreighter", + "ability": "After you fully execute a blue maneuver, you may choose a friendly ship at range 0-3. That ship may perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_70.png", + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Modification", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_70.jpg", + "ffg": 70, + "hyperspace": true + }, + { + "name": "Outer Rim Smuggler", + "initiative": 1, + "limited": 0, + "cost": 67, + "xws": "outerrimsmuggler", + "text": "Known for its durability and modular design, the YT-1300 is one of the most popular, widely used, and extensively customized freighters in the galaxy.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_72.png", + "slots": [ + "Missile", + "Crew", + "Crew", + "Modification", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_72.jpg", + "ffg": 72, + "hyperspace": false + }, + { + "name": "Leia Organa", + "xws": "leiaorgana", + "initiative": 5, + "limited": 1, + "caption": "There Is Another", + "hyperspace": true, + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "slots": [ + "Force Power", + "Missile", + "Crew", + "Crew", + "Gunner", + "Modification", + "Modification", + "Title" + ], + "ability": "After a friendly ship fully executes a red maneuver, if it is at range 0-3, you may spend 1 [Force]. If you do, that ship gains 1 focus token or recovers 1 [Force].", + "cost": 79, + "ffg": 630, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/dc207b5c5f00a98e0fad8dc3905373f9.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/677d75036109127dc27d524b902b35ae.png" + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/rz-1-a-wing.json b/pyxwb2/data/pilots/rebel-alliance/rz-1-a-wing.json new file mode 100644 index 0000000..4ccb9e4 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/rz-1-a-wing.json @@ -0,0 +1,115 @@ +{ + "name": "RZ-1 A-wing", + "xws": "rz1awing", + "ffg": 35, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FB", + "5FB", + "5KR" + ], + "dialCodes": [ + "AW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_A-wing.png", + "pilots": [ + { + "name": "Arvel Crynyd", + "caption": "Green Leader", + "initiative": 3, + "limited": 1, + "cost": 34, + "xws": "arvelcrynyd", + "ability": "You can perform primary attacks at range 0. If you would fail a [Boost] action by overlapping another ship, resolve it as though you were partially executing a maneuver instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_20.png", + "shipAbility": { + "name": "Vectored Thrusters", + "text": "After you perform an action, you may perform a red [Boost] action." + }, + "slots": ["Talent", "Talent", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_20.jpg", + "ffg": 20, + "hyperspace": true + }, + { + "name": "Green Squadron Pilot", + "initiative": 3, + "limited": 0, + "cost": 32, + "xws": "greensquadronpilot", + "text": "Due to its sensitive controls and high maneuverability, only the most talented pilots belong in an A-wing cockpit.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_21.png", + "shipAbility": { + "name": "Vectored Thrusters", + "text": "After you perform an action, you may perform a red [Boost] action." + }, + "slots": ["Talent", "Talent", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_21.jpg", + "ffg": 21, + "hyperspace": true + }, + { + "name": "Jake Farrell", + "caption": "Sage Instructor", + "initiative": 4, + "limited": 1, + "cost": 36, + "xws": "jakefarrell", + "ability": "After you perform a [Barrel Roll] or [Boost] action, you may choose a friendly ship at range 0-1. That ship may perform a [Focus] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_19.png", + "shipAbility": { + "name": "Vectored Thrusters", + "text": "After you perform an action, you may perform a red [Boost] action." + }, + "slots": ["Talent", "Talent", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_19.jpg", + "ffg": 19, + "hyperspace": true + }, + { + "name": "Phoenix Squadron Pilot", + "initiative": 1, + "limited": 0, + "cost": 29, + "xws": "phoenixsquadronpilot", + "text": "Led by Commander Jun Sato, the brave but inexperienced pilots of Phoenix Squadron face staggering odds in their battle against the Galactic Empire.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_22.png", + "shipAbility": { + "name": "Vectored Thrusters", + "text": "After you perform an action, you may perform a red [Boost] action." + }, + "slots": ["Talent", "Missile"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_22.jpg", + "ffg": 22, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/sheathipede-class-shuttle.json b/pyxwb2/data/pilots/rebel-alliance/sheathipede-class-shuttle.json new file mode 100644 index 0000000..f298fa8 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/sheathipede-class-shuttle.json @@ -0,0 +1,119 @@ +{ + "name": "Sheathipede-class Shuttle", + "xws": "sheathipedeclassshuttle", + "ffg": 8, + "size": "Small", + "dial": [ + "1SR", + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TR", + "3BW", + "3FB", + "3NW", + "3YR", + "3KR", + "4FR" + ], + "dialCodes": [ + "ShS" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "arc": "Rear Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Coordinate" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Sheathipede.png", + "pilots": [ + { + "name": "\"Zeb\" Orrelios", + "caption": "Spectre-4", + "initiative": 2, + "limited": 1, + "cost": 34, + "xws": "zeborrelios-sheathipedeclassshuttle", + "ability": "While you defend, [Critical Hit] results are neutralized before [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_40.png", + "shipAbility": { + "name": "Comms Shuttle", + "text": "While you are docked, your carrier ship gains [Coordinate]. Before your carrier ship activates, it may perform a [Coordinate] action." + }, + "slots": ["Talent", "Crew", "Astromech", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_40.jpg", + "ffg": 40, + "hyperspace": false + }, + { + "name": "AP-5", + "caption": "Escaped Analyst Droid", + "initiative": 1, + "limited": 1, + "cost": 32, + "xws": "ap5", + "ability": "While you coordinate, if you chose a ship with exactly 1 stress token, it can perform actions.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_41.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Coordinate" } + ], + "shipAbility": { + "name": "Comms Shuttle", + "text": "While you are docked, your carrier ship gains [Coordinate]. Before your carrier ship activates, it may perform a [Coordinate] action." + }, + "slots": ["Talent", "Crew", "Astromech", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_41.jpg", + "ffg": 41, + "hyperspace": false + }, + { + "name": "Ezra Bridger", + "caption": "Spectre-6", + "initiative": 3, + "limited": 1, + "cost": 42, + "xws": "ezrabridger-sheathipedeclassshuttle", + "ability": "While you defend or perform an attack, if you are stressed, you may spend 1 [Force] to change up to 2 of your [Focus] results to [Evade]/[Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_39.png", + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "shipAbility": { + "name": "Comms Shuttle", + "text": "While you are docked, your carrier ship gains [Coordinate]. Before your carrier ship activates, it may perform a [Coordinate] action." + }, + "slots": ["Crew", "Astromech", "Modification", "Title", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_39.jpg", + "ffg": 39, + "hyperspace": false + }, + { + "name": "Fenn Rau", + "caption": "Reluctant Rebel", + "initiative": 6, + "limited": 1, + "cost": 50, + "xws": "fennrau-sheathipedeclassshuttle", + "ability": "Before an enemy ship in your firing arc engages, if you are not stressed, you may gain 1 stress token. If you do, that ship cannot spend tokens to modify dice while it performs an attack during this phase.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_38.png", + "shipAbility": { + "name": "Comms Shuttle", + "text": "While you are docked, your carrier ship gains [Coordinate]. Before your carrier ship activates, it may perform a [Coordinate] action." + }, + "slots": ["Talent", "Crew", "Astromech", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_38.jpg", + "ffg": 38, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/t-65-x-wing.json b/pyxwb2/data/pilots/rebel-alliance/t-65-x-wing.json new file mode 100644 index 0000000..56bae6c --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/t-65-x-wing.json @@ -0,0 +1,288 @@ +{ + "name": "T-65 X-wing", + "xws": "t65xwing", + "ffg": 33, + "size": "Small", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3ER", + "3TW", + "3BW", + "3FW", + "3NW", + "3YW", + "3RR", + "4FW", + "4KR" + ], + "dialCodes": [ + "XW", + "T65" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_X-wing-T65.png", + "pilots": [ + { + "name": "Biggs Darklighter", + "caption": "Red Three", + "initiative": 3, + "limited": 1, + "cost": 48, + "xws": "biggsdarklighter", + "ability": "While another friendly ship at range 0-1 defends, before the Neutralize Results step, if you are in the attack arc, you may suffer 1 [Hit] or [Critical Hit] damage to cancel 1 matching result.", + "slots": ["Torpedo", "Astromech", "Modification", "Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_7.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_7.jpg", + "ffg": 7, + "hyperspace": false + }, + { + "name": "Blue Squadron Escort", + "initiative": 2, + "limited": 0, + "cost": 40, + "xws": "bluesquadronescort", + "text": "Designed by Incom Corporation, the T-65 X-wing quickly proved to be one of the most effective and versatile military vehicles in the galaxy and a boon to the Rebellion.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_11.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_11.jpg", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/9c/1a/9c1ad7ef-dfb1-427c-b700-747d857f53fc/op066-blue-squadron-pilot.png", + "source": "X-Wing Second Edition Launch Party" + } + ], + "slots": ["Torpedo", "Astromech", "Modification", "Configuration"], + "ffg": 11, + "hyperspace": true + }, + { + "name": "Cavern Angels Zealot", + "initiative": 1, + "limited": 0, + "cost": 39, + "xws": "cavernangelszealot", + "text": "Unlike most Rebel cells, Saw Gerrera's partisans are willing to use extreme methods to undermine the Galactic Empire's objectives in brutal battles that raged from Geonosis to Jedha.", + "slots": [ + "Torpedo", + "Astromech", + "Illicit", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_12.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_12.jpg", + "ffg": 12, + "hyperspace": false + }, + { + "name": "Edrio Two Tubes", + "caption": "Cavern Angels Veteran", + "initiative": 2, + "limited": 1, + "cost": 43, + "xws": "edriotwotubes", + "ability": "Before you activate, if you are focused, you may perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_9.png", + "slots": [ + "Torpedo", + "Astromech", + "Illicit", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_9.jpg", + "ffg": 9, + "hyperspace": false + }, + { + "name": "Garven Dreis", + "caption": "Red Leader", + "initiative": 4, + "limited": 1, + "cost": 47, + "xws": "garvendreis-t65xwing", + "ability": "After you spend a focus token, you may choose 1 friendly ship at range 1-3. That ship gains 1 focus token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_4.png", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_4.jpg", + "ffg": 4, + "hyperspace": true + }, + { + "name": "Jek Porkins", + "caption": "Red Six", + "initiative": 4, + "limited": 1, + "cost": 45, + "xws": "jekporkins", + "ability": "After you receive a stress token, you may roll 1 attack die to remove it. On a [Hit] result, suffer 1 [Hit] damage.", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_5.jpg", + "ffg": 5, + "hyperspace": true + }, + { + "name": "Kullbee Sperado", + "caption": "Enigmatic Gunslinger", + "initiative": 4, + "limited": 1, + "cost": 46, + "xws": "kullbeesperado", + "ability": "After you perform a [Barrel Roll] or [Boost] action, you may flip your equipped [Configuration] upgrade card.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_6.png", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Illicit", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_6.jpg", + "ffg": 6, + "hyperspace": false + }, + { + "name": "Leevan Tenza", + "caption": "Rebel Alliance Defector", + "initiative": 3, + "limited": 1, + "cost": 44, + "xws": "leevantenza", + "ability": "After you perform a [Barrel Roll] or [Boost] action, you may perform a red [Evade] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_8.png", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Illicit", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_8.jpg", + "ffg": 8, + "hyperspace": false + }, + { + "name": "Luke Skywalker", + "caption": "Red Five", + "initiative": 5, + "limited": 1, + "cost": 62, + "xws": "lukeskywalker", + "ability": "After you become the defender (before dice are rolled), you may recover 1 [Force].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_2.png", + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/5b/aa/5baa3742-b7b2-47d7-9bec-07f02fafaf1c/op066-luke-skywalker.png", + "source": "X-Wing Second Edition Launch Party" + }, + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/ab/5d/ab5d5131-0043-4b74-9549-5e959aaaf47a/op086-luke-skywalker.png", + "source": "Gen Con Indy 2018" + } + ], + "slots": [ + "Torpedo", + "Astromech", + "Modification", + "Force Power", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_2.jpg", + "ffg": 2, + "hyperspace": true + }, + { + "name": "Red Squadron Veteran", + "initiative": 3, + "limited": 0, + "cost": 41, + "xws": "redsquadronveteran", + "text": "Created as an elite starfighter squad, Red Squadron includes some of the best pilots in the Rebel Alliance.", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_10.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_10.jpg", + "ffg": 10, + "hyperspace": true + }, + { + "name": "Thane Kyrell", + "caption": "Corona Four", + "initiative": 5, + "limited": 1, + "cost": 48, + "xws": "thanekyrell", + "ability": "While you perform an attack, you may spend 1 [Focus], [Hit], or [Critical Hit] result to look at the defender's facedown damage cards, choose 1, and expose it.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_3.png", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_3.jpg", + "ffg": 3, + "hyperspace": true + }, + { + "name": "Wedge Antilles", + "caption": "Red Two", + "initiative": 6, + "limited": 1, + "cost": 55, + "xws": "wedgeantilles", + "ability": "While you perform an attack, the defender rolls 1 fewer defense die.", + "slots": [ + "Talent", + "Torpedo", + "Astromech", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_1.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_1.jpg", + "ffg": 1, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/tie-ln-fighter.json b/pyxwb2/data/pilots/rebel-alliance/tie-ln-fighter.json new file mode 100644 index 0000000..c1ba20a --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/tie-ln-fighter.json @@ -0,0 +1,99 @@ +{ + "name": "TIE/ln Fighter", + "xws": "tielnfighter", + "ffg": 11, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "TF" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_TIEFighter.png", + "pilots": [ + { + "name": "\"Zeb\" Orrelios", + "caption": "Spectre-4", + "initiative": 2, + "limited": 1, + "cost": 24, + "xws": "zeborrelios-tielnfighter", + "ability": "While you defend, [Critical Hit] results are neutralized before [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_49.png", + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_49.jpg", + "ffg": 49, + "hyperspace": false + }, + { + "name": "Captain Rex", + "caption": "Clone Wars Veteran", + "initiative": 2, + "limited": 1, + "cost": 30, + "xws": "captainrex", + "ability": "After you perform an attack, assign the Suppressive Fire condition to the defender.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_48.png", + "conditions": ["suppressivefire"], + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_48.jpg", + "ffg": 48, + "hyperspace": false + }, + { + "name": "Ezra Bridger", + "caption": "Spectre-6", + "initiative": 3, + "limited": 1, + "cost": 31, + "xws": "ezrabridger-tielnfighter", + "ability": "While you defend or perform an attack, if you are stressed, you may spend 1 [Force] to change up to 2 of your [Focus] results to [Evade] or [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_46.png", + "force": { "value": 1, "recovers": 1, "side": ["light"] }, + "slots": ["Modification", "Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_46.jpg", + "ffg": 46, + "hyperspace": false + }, + { + "name": "Sabine Wren", + "caption": "Spectre-5", + "initiative": 3, + "limited": 1, + "cost": 29, + "xws": "sabinewren-tielnfighter", + "ability": "Before you activate, you may perform a [Barrel Roll] or [Boost] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_47.png", + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_47.jpg", + "ffg": 47, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/ut-60d-u-wing.json b/pyxwb2/data/pilots/rebel-alliance/ut-60d-u-wing.json new file mode 100644 index 0000000..65bc919 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/ut-60d-u-wing.json @@ -0,0 +1,232 @@ +{ + "name": "UT-60D U-wing", + "xws": "ut60duwing", + "ffg": 15, + "size": "Medium", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3BW", + "3FW", + "3NW", + "4FW" + ], + "dialCodes": [ + "UW" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_U-wing.png", + "pilots": [ + { + "name": "Benthic Two Tubes", + "caption": "Cavern Angels Marksman", + "initiative": 2, + "limited": 1, + "cost": 46, + "xws": "benthictwotubes", + "ability": "After you perform a [Focus] action, you may transfer 1 of your focus tokens to a friendly ship at range 1-2.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_58.png", + "slots": [ + "Sensor", + "Crew", + "Crew", + "Illicit", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_58.jpg", + "ffg": 58, + "hyperspace": false + }, + { + "name": "Blue Squadron Scout", + "initiative": 2, + "limited": 0, + "cost": 43, + "xws": "bluesquadronscout", + "text": "Used for deploying troops under the cover of darkness or into the heat of battle, the UT-60D U-wing fulfills the Rebellion's need for a swift and hardy troop transport.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_60.png", + "slots": ["Sensor", "Crew", "Crew", "Modification", "Configuration"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_60.jpg", + "ffg": 60, + "hyperspace": false + }, + { + "name": "Bodhi Rook", + "caption": "Imperial Defector", + "initiative": 4, + "limited": 1, + "cost": 48, + "xws": "bodhirook", + "ability": "Friendly ships can acquire locks onto objects at range 0-3 of any friendly ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_54.png", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_54.jpg", + "ffg": 54, + "hyperspace": false + }, + { + "name": "Cassian Andor", + "caption": "Raised by the Rebellion", + "initiative": 3, + "limited": 1, + "cost": 51, + "xws": "cassianandor", + "ability": "At the start of the Activation Phase, you may choose 1 friendly ship at range 1-3. If you do, that ship removes 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_56.png", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_56.jpg", + "ffg": 56, + "hyperspace": false + }, + { + "name": "Heff Tobber", + "caption": "Blue Eight", + "initiative": 2, + "limited": 1, + "cost": 44, + "xws": "hefftobber", + "ability": "After an enemy ship executes a maneuver, if it is at range 0, you may perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_59.png", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_59.jpg", + "ffg": 59, + "hyperspace": false + }, + { + "name": "Magva Yarro", + "caption": "Cavern Angels Spotter", + "initiative": 3, + "limited": 1, + "cost": 50, + "xws": "magvayarro", + "ability": "While a friendly ship at range 0-2 defends, the attacker cannot reroll more than 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_57.png", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Illicit", + "Modification", + "Configuration" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_57.jpg", + "ffg": 57, + "hyperspace": false + }, + { + "name": "Partisan Renegade", + "initiative": 1, + "limited": 0, + "cost": 43, + "xws": "partisanrenegade", + "text": "Saw Gerrera's partisans were first established to oppose Separatist forces on Onderon during the Clone Wars and continued to wage war against galactic tyranny as the Empire rose to power.", + "slots": [ + "Sensor", + "Crew", + "Crew", + "Illicit", + "Modification", + "Configuration" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_61.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_61.jpg", + "ffg": 61, + "hyperspace": false + }, + { + "name": "Saw Gerrera", + "caption": "Obsessive Outlaw", + "initiative": 4, + "limited": 1, + "cost": 52, + "xws": "sawgerrera", + "ability": "While a damaged friendly ship at range 0-3 performs an attack, it may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_55.png", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Illicit", + "Modification", + "Configuration" + ], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/fe/0c/fe0cdda5-8529-4331-a508-bde68b627e65/g18x2-saw-gerrera-2.png", + "source": "Season Two 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_55.jpg", + "ffg": 55, + "hyperspace": false + }, + { + "name": "K-2SO", + "caption": "Cassian Said I Had To", + "initiative": 3, + "limited": 1, + "xws": "k2so", + "ability": "After you gain a stress token, gain 1 calculate token.", + "slots": [ + "Talent", + "Sensor", + "Crew", + "Crew", + "Modification", + "Configuration" + ], + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "hyperspace": false, + "cost": 46, + "ffg": 629, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/eeb6e9aeefe6f988949aff17e7e7986d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c65da3d5378ec32bd024325dbd80b3d6.png" + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/vcx-100-light-freighter.json b/pyxwb2/data/pilots/rebel-alliance/vcx-100-light-freighter.json new file mode 100644 index 0000000..60bb690 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/vcx-100-light-freighter.json @@ -0,0 +1,186 @@ +{ + "name": "VCX-100 Light Freighter", + "xws": "vcx100lightfreighter", + "ffg": 23, + "size": "Large", + "dial": [ + "1TR", + "1BW", + "1FB", + "1NW", + "1YR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FW", + "4KR" + ], + "dialCodes": [ + "VCX" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 4 }, + { "type": "agility", "value": 0 }, + { "type": "hull", "value": 10 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Reinforce" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Ghost.png", + "pilots": [ + { + "name": "\"Chopper\"", + "caption": "Spectre-3", + "initiative": 2, + "limited": 1, + "cost": 68, + "xws": "chopper", + "ability": "At the start of the Engagement Phase, each enemy ship at range 0 gains 2 jam tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_75.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Reinforce" } + ], + "shipAbility": { + "name": "Tail Gun", + "text": "While you have a docked ship, you have a primary [Rear Arc] weapon with an attack value equal to your docked ship's primary [Front Arc] attack value." + }, + "slots": [ + "Sensor", + "Turret", + "Torpedo", + "Crew", + "Crew", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_75.jpg", + "ffg": 75, + "hyperspace": false + }, + { + "name": "Hera Syndulla", + "caption": "Spectre-2", + "initiative": 5, + "limited": 1, + "cost": 72, + "xws": "herasyndulla-vcx100lightfreighter", + "ability": "After you reveal a red or blue maneuver, you may set your dial to another maneuver of the same difficulty.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_73.png", + "shipAbility": { + "name": "Tail Gun", + "text": "While you have a docked ship, you have a primary [Rear Arc] weapon with an attack value equal to your docked ship's primary [Front Arc] attack value." + }, + "slots": [ + "Talent", + "Sensor", + "Turret", + "Torpedo", + "Crew", + "Crew", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_73.jpg", + "ffg": 73, + "hyperspace": false + }, + { + "name": "Kanan Jarrus", + "caption": "Spectre-1", + "initiative": 3, + "limited": 1, + "cost": 80, + "xws": "kananjarrus", + "ability": "While a friendly ship in your firing arc defends, you may spend 1 [Force]. If you do, the attacker rolls 1 fewer attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_74.png", + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "shipAbility": { + "name": "Tail Gun", + "text": "While you have a docked ship, you have a primary [Rear Arc] weapon with an attack value equal to your docked ship's primary [Front Arc] attack value." + }, + "slots": [ + "Sensor", + "Turret", + "Torpedo", + "Crew", + "Crew", + "Modification", + "Title", + "Gunner", + "Force Power" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_74.jpg", + "ffg": 74, + "hyperspace": false + }, + { + "name": "Lothal Rebel", + "initiative": 2, + "limited": 0, + "cost": 67, + "xws": "lothalrebel", + "text": "Another successful Corellian Engineering Corporation freighter design, the VCX-100 is larger than the ubiquitous YT-series, boasting more living space and customizability.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_76.png", + "shipAbility": { + "name": "Tail Gun", + "text": "While you have a docked ship, you have a primary [Rear Arc] weapon with an attack value equal to your docked ship's primary [Front Arc] attack value." + }, + "slots": [ + "Sensor", + "Turret", + "Torpedo", + "Crew", + "Crew", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_76.jpg", + "ffg": 76, + "hyperspace": false + }, + { + "name": "Alexsandr Kallus", + "xws": "alexsandrkallus", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Tail Gun", + "text": "While you have a docked ship, you have a primary [Rear Arc] weapon with an attack value equal to your docked ship's primary [Front Arc] attack value." + }, + "caption": "Fulcrum", + "hyperspace": false, + "slots": [ + "Talent", + "Sensor", + "Turret", + "Torpedo", + "Crew", + "Crew", + "Gunner", + "Modification", + "Title" + ], + "ability": "While you defend, if the attacker modified any attack dice, you may roll 1 additional defense die.", + "cost": 69, + "ffg": 631, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/af4c16c8955bddf75d5eb7723c7a5f2d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f78c33b746f35f6848708327178dec80.png" + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/yt-2400-light-freighter.json b/pyxwb2/data/pilots/rebel-alliance/yt-2400-light-freighter.json new file mode 100644 index 0000000..d3e7979 --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/yt-2400-light-freighter.json @@ -0,0 +1,118 @@ +{ + "name": "YT-2400 Light Freighter", + "xws": "yt2400lightfreighter", + "ffg": 5, + "size": "Large", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TW", + "3BW", + "3FW", + "3NW", + "3YW", + "4FW", + "4KR" + ], + "dialCodes": [ + "YT24" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 4 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_YT-2400.png", + "pilots": [ + { + "name": "\"Leebo\"", + "caption": "Dry-Witted Droid", + "initiative": 3, + "limited": 1, + "cost": 81, + "xws": "leebo", + "ability": "After you defend or perform an attack, if you spent a calculate token, gain 1 calculate token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_78.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "shipAbility": { + "name": "Sensor Blindspot", + "text": "While you perform a primary attack at attack range 0-1, do not apply the range 0-1 bonus and roll 1 fewer attack die." + }, + "slots": ["Missile", "Illicit", "Modification", "Title", "Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_78.jpg", + "ffg": 78, + "hyperspace": false + }, + { + "name": "Dash Rendar", + "caption": "Hotshot Mercenary", + "initiative": 5, + "limited": 1, + "cost": 91, + "xws": "dashrendar", + "ability": "While you move, you ignore obstacles.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_77.png", + "shipAbility": { + "name": "Sensor Blindspot", + "text": "While you perform a primary attack at attack range 0-1, do not apply the range 0-1 bonus and roll 1 fewer attack die." + }, + "slots": [ + "Talent", + "Missile", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_77.jpg", + "ffg": 77, + "hyperspace": false + }, + { + "name": "Wild Space Fringer", + "initiative": 1, + "limited": 0, + "cost": 77, + "xws": "wildspacefringer", + "text": "Although stock YT-2400 light freighters have plenty of room for cargo, that space is often annexed to support modified weapon systems and oversized engines.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_79.png", + "shipAbility": { + "name": "Sensor Blindspot", + "text": "While you perform a primary attack at attack range 0-1, do not apply the range 0-1 bonus and roll 1 fewer attack die." + }, + "slots": [ + "Missile", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_79.jpg", + "ffg": 79, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/rebel-alliance/z-95-af4-headhunter.json b/pyxwb2/data/pilots/rebel-alliance/z-95-af4-headhunter.json new file mode 100644 index 0000000..86d6a1d --- /dev/null +++ b/pyxwb2/data/pilots/rebel-alliance/z-95-af4-headhunter.json @@ -0,0 +1,96 @@ +{ + "name": "Z-95-AF4 Headhunter", + "xws": "z95af4headhunter", + "ffg": 38, + "size": "Small", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "4KR" + ], + "dialCodes": [ + "Z95" + ], + "faction": "Rebel Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Z-95.png", + "pilots": [ + { + "name": "Airen Cracken", + "caption": "Intelligence Chief", + "initiative": 5, + "limited": 1, + "cost": 36, + "xws": "airencracken", + "ability": "After you perform an attack, you may choose 1 friendly ship at range 1. That ship may perform an action, treating it as red.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_27.png", + "slots": ["Talent", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_27.jpg", + "ffg": 27, + "hyperspace": false + }, + { + "name": "Bandit Squadron Pilot", + "initiative": 1, + "limited": 0, + "cost": 22, + "xws": "banditsquadronpilot", + "text": "The Z-95 Headhunter was the primary inspiration for Incom Corporation's exemplary T-65 X-wing starfighter. Though it is considered outdated by modern standards, it remains a versatile and potent snub fighter.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_30.png", + "slots": ["Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_30.jpg", + "ffg": 30, + "hyperspace": false + }, + { + "name": "Lieutenant Blount", + "caption": "Team Player", + "initiative": 4, + "limited": 1, + "cost": 30, + "xws": "lieutenantblount", + "ability": "While you perform a primary attack, if there is at least 1 other friendly ship at range 0-1 of the defender, you may roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_28.png", + "slots": ["Talent", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_28.jpg", + "ffg": 28, + "hyperspace": false + }, + { + "name": "Tala Squadron Pilot", + "initiative": 2, + "limited": 0, + "cost": 24, + "xws": "talasquadronpilot", + "text": "The AF4 series is the latest in a long line of Headhunter designs. Cheap and relatively durable, it is a favorite among independent outfits like the Rebellion.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_29.png", + "slots": ["Talent", "Missile", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_29.jpg", + "ffg": 29, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/resistance/fireball.json b/pyxwb2/data/pilots/resistance/fireball.json new file mode 100644 index 0000000..f70b54a --- /dev/null +++ b/pyxwb2/data/pilots/resistance/fireball.json @@ -0,0 +1,152 @@ +{ + "name": "Fireball", + "xws": "fireball", + "ffg": 70, + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3ER", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "3RR", + "4FR" + ], + "dialCodes": [ + "FB" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 0 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "SLAM" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Fireball.png", + "pilots": [ + { + "name": "Colossus Station Mechanic", + "initiative": 2, + "limited": 0, + "xws": "colossusstationmechanic", + "shipAbility": { + "name": "Explosion with Wings", + "text": "Setup: You are dealt 1 facedown damage card. After you perform a [SLAM] action, you may expose 1 damage card to remove 1 disarm token." + }, + "slots": [ + "Missile", + "Astromech", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "hyperspace": true, + "cost": 26, + "text": "Some ambitious and talented pilots begin their racing careers as ground crew, working around the clock to keep cobbled-together ships in the sky on far-flung worlds like Castilon.", + "ffg": 623, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a8a4a52f9ced88c0bb7b9e90e0e75a18.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/533ab83e881838eb8006c8f8dcf19145.png" + }, + { + "name": "Jarek Yeager", + "xws": "jarekyeager", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Explosion with Wings", + "text": "Setup: You are dealt 1 facedown damage card. After you perform a [SLAM] action, you may expose 1 damage card to remove 1 disarm token." + }, + "hyperspace": true, + "slots": [ + "Talent", + "Missile", + "Astromech", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "cost": 33, + "ability": "While you have 2 or fewer stress tokens, if you are damaged, you can execute red basic maneuvers even while stressed; if you are critically damaged, you can execute red advanced maneuvers even while stressed.", + "caption": "Too Old for This", + "ffg": 620, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/21bd6c9d7e36c873f88b0fad11ff8fe6.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cc580fd073ea51094b881e37775ef1f0.png" + }, + { + "name": "Kazuda Xiono", + "xws": "kazudaxiono", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Explosion with Wings", + "text": "Setup: You are dealt 1 facedown damage card. After you perform a [SLAM] action, you may expose 1 damage card to remove 1 disarm token." + }, + "caption": "Best Pilot in the Galaxy", + "hyperspace": true, + "slots": [ + "Talent", + "Missile", + "Astromech", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "ability": "While you defend or perform a primary attack, if the enemy ship's initiative is higher than the number of damage cards you have, you may roll 1 additional die.", + "cost": 40, + "ffg": 621, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4ffdf7cc8ed023322ccf4217ff64b4d2.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ee98b839cf64d8d5d6f4948947abd70b.png" + }, + { + "name": "R1-J5", + "xws": "r1j5", + "initiative": 1, + "limited": 1, + "shipAbility": { + "name": "Explosion with Wings", + "text": "Setup: You are dealt 1 facedown damage card. After you perform a [SLAM] action, you may expose 1 damage card to remove 1 disarm token." + }, + "caption": "Bucket", + "hyperspace": true, + "slots": [ + "Missile", + "Crew", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "ability": "Before you expose 1 of your damage cards, you may look at your facedown damage cards, choose 1, and expose that card instead.", + "cost": 29, + "ffg": 622, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/686597246669987fe1b938f1419e598d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c5cfd1d89a204722ff95e9a4b134e7f1.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "SLAM" } + ] + } + ] +} diff --git a/pyxwb2/data/pilots/resistance/mg-100-starfortress-sf-17.json b/pyxwb2/data/pilots/resistance/mg-100-starfortress-sf-17.json new file mode 100644 index 0000000..902d374 --- /dev/null +++ b/pyxwb2/data/pilots/resistance/mg-100-starfortress-sf-17.json @@ -0,0 +1,205 @@ +{ + "name": "MG-100 StarFortress", + "xws": "mg100starfortress", + "ffg": 55, + "size": "Large", + "dial": [ + "0OR", + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3BR", + "3FW", + "3NR" + ], + "dialCodes": [ + "MG1" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Double Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 9 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Rotate Arc" }, + { "difficulty": "White", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_StarFortress.png", + "pilots": [ + { + "name": "Cobalt Squadron Bomber", + "initiative": 1, + "limited": 0, + "xws": "cobaltsquadronbomber", + "text": "Whether the ordnance silos of their StarFortresses are loaded with proton bombs or relief supplies, the heroic crews of Cobalt Squadron dedicate their lives to making a difference in the galaxy.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6b6a3bb8049699e2d66fe09531e8bc00.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/514351d5c41a8341ea5da5673269d917.jpg", + "cost": 52, + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 434, + "hyperspace": false + }, + { + "name": "Cat", + "caption": "Cobalt Wasp", + "initiative": 1, + "limited": 1, + "xws": "cat", + "ability": "While you perform a primary attack, if the defender is at range 0-1 of at least 1 friendly device, roll 1 additional die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/b386dc25736682ebc785b15551de903b.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d927ccf08a9444340378449fe71e9f70.jpg", + "cost": 54, + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 433, + "hyperspace": false + }, + { + "name": "Vennie", + "caption": "Crimson Cutter", + "initiative": 2, + "limited": 1, + "xws": "vennie", + "ability": "While you defend, if the attacker is in a friendly ship's [Single Turret Arc], you may add 1 [Focus] result to your roll.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0d494986a24e6c55efae066a43161b0d.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/511b878f719e9fa59a50cdf980d10ead.jpg", + "cost": 56, + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 448, + "hyperspace": false + }, + { + "name": "Ben Teene", + "caption": "Crimson Bolide", + "initiative": 3, + "limited": 1, + "xws": "benteene", + "ability": "After you perform an attack, if the defender is in your [Single Turret Arc], assign the Rattled condition to the defender.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c9189c7e510b4d734d4d78c4f595010f.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/74ca7444aec38cb0034b67b04f6aaa76.jpg", + "cost": 58, + "conditions": ["rattled"], + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 432, + "hyperspace": false + }, + { + "name": "Edon Kappehl", + "caption": "Crimson Hailstorm", + "initiative": 3, + "limited": 1, + "xws": "edonkappehl", + "ability": "After you fully execute a blue or white maneuver, if you have not dropped or launched a device this round, you may drop 1 device.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f58fe0b57dc4a9c878627f0fea9cf1ef.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bbac51ca4ba44f26d90a53b6c5db5e2c.jpg", + "cost": 60, + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 447, + "hyperspace": false + }, + { + "name": "Finch Dallow", + "caption": "Cobalt Hammer", + "initiative": 4, + "limited": 1, + "xws": "finchdallow", + "ability": "Before you would drop a bomb, you may place it in the play area touching you instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/43d9a0555f719a4cbe1ffe905fd38c46.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/dafd2937accc362f766ca0da3308ccbc.jpg", + "cost": 60, + "slots": [ + "Sensor", + "Crew", + "Device", + "Device", + "Modification", + "Gunner", + "Gunner", + "Tech" + ], + "ffg": 431, + "hyperspace": false + }, + { + "name": "Paige Tico", + "xws": "paigetico", + "initiative": 5, + "limited": 1, + "caption": "Hero", + "hyperspace": false, + "charges": { "value": 1, "recovers": 1 }, + "slots": [ + "Talent", + "Sensor", + "Tech", + "Crew", + "Gunner", + "Gunner", + "Device", + "Device", + "Modification" + ], + "ability": "After you drop a device, you may spend 1 [Charge] to drop an additional device.", + "cost": 60, + "ffg": 640, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2bd70a86ef09e15aa93b165a56f32834.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fab73e7af97d9d6169f0f504b60d34c2.png" + } + ] +} diff --git a/pyxwb2/data/pilots/resistance/resistance-transport-pod.json b/pyxwb2/data/pilots/resistance/resistance-transport-pod.json new file mode 100644 index 0000000..a846412 --- /dev/null +++ b/pyxwb2/data/pilots/resistance/resistance-transport-pod.json @@ -0,0 +1,105 @@ +{ + "name": "Resistance Transport Pod", + "xws": "resistancetransportpod", + "size": "Small", + "ffg": 65, + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3BR", + "3FW", + "3NR", + "3KR", + "4FR" + ], + "dialCodes": [ + "RTP" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "Red", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Jam" } + ], + "pilots": [ + { + "name": "BB-8", + "xws": "bb8", + "initiative": 3, + "limited": 1, + "hyperspace": true, + "cost": 26, + "slots": ["Talent", "Tech", "Crew", "Modification"], + "ability": "During the System Phase, you may perform a red [Barrel Roll] or [Boost] action.", + "ffg": 573, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bbe37aa13822e8c94d9b0950cdd9cdb0.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4d2201d40635299aa134acd52c9587af.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "Red", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Jam" } + ], + "caption": "Full of Surprises" + }, + { + "name": "Rose Tico", + "xws": "rosetico", + "initiative": 3, + "limited": 1, + "caption": "Earnest Engineer", + "hyperspace": true, + "cost": 26, + "slots": ["Talent", "Tech", "Crew", "Modification"], + "ability": "While you defend or perform an attack, you may reroll up to 1 of your results for each other friendly ship in the attack arc.", + "ffg": 574, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/40cba6527802ef9afa41e4009265873c.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1dbf7b355d60f5b3f278522eb702f99f.png" + }, + { + "name": "Vi Moradi", + "xws": "vimoradi", + "initiative": 1, + "limited": 1, + "caption": "Starling", + "hyperspace": true, + "cost": 27, + "slots": ["Tech", "Crew", "Modification"], + "ability": "Setup: After placing forces, assign the Compromising Intel condition to 1 enemy ship.", + "conditions": ["compromisingintel"], + "ffg": 576, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f13328acfd703dc5489fa2249b9f675e.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/14139a2d20ff13b01bd5810371a89064.png" + }, + { + "name": "Finn", + "xws": "finn", + "initiative": 2, + "limited": 1, + "caption": "Big Deal", + "hyperspace": false, + "cost": 29, + "slots": ["Talent", "Tech", "Crew", "Modification"], + "ability": "While you defend or perform an attack, you may add 1 blank result, or you may gain 1 strain token to add 1 focus result instead.", + "ffg": 575, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6e5fea21ac8a7ee345fd07f1c42cc81d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/311d88e51a039b79e9a422ab3c475288.png" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Resistance_Transport_Cockpit_Pod.png" +} diff --git a/pyxwb2/data/pilots/resistance/resistance-transport.json b/pyxwb2/data/pilots/resistance/resistance-transport.json new file mode 100644 index 0000000..e9c288c --- /dev/null +++ b/pyxwb2/data/pilots/resistance/resistance-transport.json @@ -0,0 +1,132 @@ +{ + "name": "Resistance Transport", + "xws": "resistancetransport", + "size": "Small", + "ffg": 64, + "dial": [ + "0OR", + "1AR", + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "1DR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3BR", + "3FW", + "3NR", + "4FR" + ], + "dialCodes": [ + "RT" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Coordinate" }, + { "difficulty": "Red", "type": "Jam" } + ], + "pilots": [ + { + "name": "Cova Nell", + "xws": "covanell", + "initiative": 4, + "limited": 1, + "hyperspace": true, + "cost": 38, + "slots": [ + "Talent", + "Tech", + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Astromech", + "Modification" + ], + "ability": "While you defend or perform a primary attack, if your revealed maneuver is red, roll 1 additional die.", + "ffg": 569, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/27956dc3600e6e06bf26f9a981205410.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a9ae63785f4cadaa28a74858ff1d1bc4.png", + "caption": "Evacuation Escort" + }, + { + "name": "Pammich Nerro Goode", + "xws": "pammichnerrogoode", + "initiative": 3, + "limited": 1, + "caption": "D'Qar Dispatcher", + "hyperspace": true, + "cost": 36, + "slots": [ + "Tech", + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Astromech", + "Modification" + ], + "ability": "While you have 2 or fewer stress tokens, you may execute red maneuvers even while stressed.", + "ffg": 570, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e5f2e692fcaf63d513cd5c7c1294283e.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9d7dd5d0851911412dd5c86603a0ea91.png" + }, + { + "name": "Nodin Chavdri", + "xws": "nodinchavdri", + "initiative": 2, + "limited": 1, + "hyperspace": true, + "cost": 36, + "slots": [ + "Tech", + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Astromech", + "Modification" + ], + "ability": "After you coordinate or are coordinated, if you have 2 or fewer stress tokens, you may perform 1 action on your action bar as a red action, even if you are stressed.", + "ffg": 571, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/b0179494a00c2538a4467793e722db3e.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9f41de269cb1ff091487554fb53b2374.png", + "caption": "Insubordinate Insurgent" + }, + { + "name": "Logistics Division Pilot", + "xws": "logisticsdivisionpilot", + "initiative": 1, + "limited": 0, + "text": "Without the support of the New Republic, members of the Resistance often pull double duty as transport pilots or mechanics, putting their skills and technical knowledge to use in the fight against the First Order.", + "hyperspace": false, + "cost": 32, + "slots": [ + "Tech", + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Astromech", + "Modification" + ], + "ffg": 572, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/005545edf9fc1c82464f52edad236b27.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/57ea37cdb13f52ec3f3e0b745fc9d630.png" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Resistance_Transport.png" +} diff --git a/pyxwb2/data/pilots/resistance/rz-2-a-wing.json b/pyxwb2/data/pilots/resistance/rz-2-a-wing.json new file mode 100644 index 0000000..cc64b40 --- /dev/null +++ b/pyxwb2/data/pilots/resistance/rz-2-a-wing.json @@ -0,0 +1,189 @@ +{ + "name": "RZ-2 A-wing", + "xws": "rz2awing", + "ffg": 54, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "3LR", + "3TW", + "3BB", + "3FB", + "3NB", + "3YW", + "3PR", + "4FB", + "5FB", + "5KR" + ], + "dialCodes": [ + "RZ2" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_RZ-2_A-wing.png", + "pilots": [ + { + "name": "L'ulo L'ampar", + "caption": "Luminous Mentor", + "initiative": 5, + "limited": 1, + "cost": 43, + "xws": "lulolampar", + "ability": "While you defend or perform a primary attack, if you are stressed, you must roll 1 fewer defense die or 1 additional attack die.", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "slots": ["Talent", "Talent", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e15d3e2a2fc082b95a64a83df0c96f7f.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/b97a025a7859f54bbc68374ff5d8116e.jpg", + "ffg": 435, + "hyperspace": false + }, + { + "name": "Tallissan Lintra", + "caption": "Deadly Approach", + "initiative": 5, + "limited": 1, + "cost": 36, + "xws": "tallissanlintra", + "ability": "While an enemy ship in your [Bullseye Arc] performs an attack, you may spend 1 [Charge]. If you do, the defender rolls 1 additional die.", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/72cb6c4e50b0ad24af0bb84ce0aa53f0.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ee8c3c26ce6432d7581c5f61392597bc.jpg", + "charges": { "value": 1, "recovers": 1 }, + "slots": ["Talent", "Talent", "Missile", "Tech"], + "ffg": 436, + "hyperspace": true + }, + { + "name": "Zari Bangel", + "caption": "Aerial Exhibitionist", + "initiative": 3, + "limited": 1, + "cost": 35, + "xws": "zaribangel", + "ability": "You do not skip your Perform Action step after you partially execute a maneuver.", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d7f37dbb86bb706dd535e9a65b69149a.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2fe44e1e5496645c16f4d2189a1746e3.jpg", + "slots": ["Talent", "Talent", "Missile", "Tech"], + "ffg": 438, + "hyperspace": true + }, + { + "name": "Greer Sonnel", + "caption": "Kothan Si", + "initiative": 4, + "limited": 1, + "cost": 36, + "xws": "greersonnel", + "ability": "After you fully execute a maneuver, you may rotate your [Single Turret Arc].", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/7fc7b194b02ad7af6adf4ef9b79108d1.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/84bf1ce21926d4500b54e122da01b162.jpg", + "slots": ["Talent", "Talent", "Missile", "Tech"], + "ffg": 437, + "hyperspace": true + }, + { + "name": "Green Squadron Expert", + "initiative": 3, + "limited": 0, + "cost": 34, + "xws": "greensquadronexpert", + "text": "Years of field-expedient modifications were standardized in the RZ-2 design, but daring pilots see the ship's improved reliability as a challenge to further push the limits of its performance.", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "slots": ["Talent", "Talent", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3f7ad9efb4c5af8b4d1f5c07a3c7538b.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8427bdfb1cf9497a9ab797e2c955ba41.jpg", + "ffg": 439, + "hyperspace": true + }, + { + "name": "Blue Squadron Recruit", + "initiative": 1, + "limited": 0, + "cost": 32, + "xws": "bluesquadronrecruit", + "text": "Young beings across the galaxy have grown up on tales of heroism in the Galactic Civil War, and many learned to fly in the same cockpits from which their parents fought the Empire.", + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "slots": ["Talent", "Missile", "Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e033b2729305ac0b678d6031ada7b2b8.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3df643a75106a59899e5f32ef56e8a5e.jpg", + "ffg": 440, + "hyperspace": true + }, + { + "name": "Zizi Tlo", + "xws": "zizitlo", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "caption": "Committed to the Cause", + "hyperspace": true, + "slots": ["Talent", "Talent", "Tech", "Missile"], + "ability": "After you defend or perform an attack, you may spend 1 [Charge] to gain 1 focus or evade token.", + "cost": 40, + "ffg": 638, + "charges": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7d5b4f0691b55e9c755b1e71bd16a422.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/17b2411d61b671ebca568ca2bb55e2da.png" + }, + { + "name": "Ronith Blario", + "xws": "ronithblario", + "initiative": 2, + "limited": 1, + "shipAbility": { + "name": "Refined Gyrostabilizers", + "text": "You can rotate your [Single Turret Arc] indicator only to your [Front Arc] or [Rear Arc]. After you perform an action, you may perform a red [Boost] or red [Rotate Arc] action." + }, + "caption": "Reckless Rookie", + "hyperspace": true, + "slots": ["Talent", "Tech", "Missile"], + "ability": "While you defend or perform an attack, if the enemy ship is in another friendly ship's [Single Turret Arc], you may spend 1 focus token from that friendly ship to change 1 of your [Focus] results to an [Evade] or [Hit] result.", + "cost": 34, + "ffg": 639, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0930bea45803774f4b0d863b92a64328.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1e861cadd2291ece7a9207cddcdcba39.png" + } + ] +} diff --git a/pyxwb2/data/pilots/resistance/scavenged-yt-1300.json b/pyxwb2/data/pilots/resistance/scavenged-yt-1300.json new file mode 100644 index 0000000..52376d8 --- /dev/null +++ b/pyxwb2/data/pilots/resistance/scavenged-yt-1300.json @@ -0,0 +1,134 @@ +{ + "name": "Scavenged YT-1300", + "xws": "scavengedyt1300", + "ffg": 57, + "size": "Large", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3TW", + "3BW", + "3FW", + "3NW", + "3YW", + "3PR", + "4FR" + ], + "dialCodes": [ + "sYT" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 8 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "Red", "type": "Rotate Arc" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Falcon_Resistance.png", + "pilots": [ + { + "name": "Resistance Sympathizer", + "initiative": 2, + "limited": 0, + "xws": "resistancesympathizer", + "text": "After witnessing the Hosnian Cataclysm, some spacers willingly aided the Resistance with whatever ships they had.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/28411b84c1b15f0bfa9928f2206e44f5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3e567923957881e9a4dbef46789c7fbf.jpg", + "cost": 60, + "slots": [ + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "ffg": 430, + "hyperspace": false + }, + { + "name": "Chewbacca", + "caption": "Loyal Companion", + "initiative": 4, + "limited": 1, + "xws": "chewbacca-scavengedyt1300", + "ability": "After a friendly ship at range 0-3 is destroyed, before that ship is removed, you may perform an action. Then you may perform a bonus attack.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/209a8dece475a265aaf1b5318ba7f08a.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c40ec30b7df138c4510b08f4f02d54b5.jpg", + "cost": 63, + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "ffg": 429, + "hyperspace": false + }, + { + "name": "Han Solo", + "caption": "Jaded Smuggler", + "initiative": 6, + "limited": 1, + "xws": "hansolo-scavengedyt1300", + "ability": "Setup: You can be placed anywhere in the play area beyond range 3 of enemy ships.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/5816bd53c272ed50096e22ae1af2b38a.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/15263defc98e4a54d76ae9224534dacf.jpg", + "cost": 65, + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "ffg": 427, + "hyperspace": false + }, + { + "name": "Rey", + "caption": "Resourceful Scavenger", + "initiative": 5, + "limited": 1, + "xws": "rey", + "ability": "While you defend or perform an attack, if the enemy ship is in your [Front Arc], you may spend 1 [Force] to change 1 of your blank results to an [Evade] or [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0ee7006e6cc51d8c08b784c9b770f1b0.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1ff06aeff0d74773e9c9f3846b38b75d.jpg", + "force": { "value": 2, "recovers": 1, "side": ["light"] }, + "cost": 70, + "slots": [ + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner", + "Force Power" + ], + "ffg": 428, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/resistance/t-70-x-wing.json b/pyxwb2/data/pilots/resistance/t-70-x-wing.json new file mode 100644 index 0000000..541a7f0 --- /dev/null +++ b/pyxwb2/data/pilots/resistance/t-70-x-wing.json @@ -0,0 +1,314 @@ +{ + "name": "T-70 X-wing", + "xws": "t70xwing", + "ffg": 53, + "size": "Small", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3ER", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3RR", + "4FW", + "4KR" + ], + "dialCodes": [ + "T70" + ], + "faction": "Resistance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_X-wing-T70.png", + "pilots": [ + { + "name": "Poe Dameron", + "caption": "Trigger-Happy Flyboy", + "initiative": 6, + "limited": 1, + "xws": "poedameron", + "ability": "After you perform an action, you may spend 1 [Charge] to perform a white action, treating it as red.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/14c504c0815213a66010c4013d9296ee.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/cb8efd0b723b8ceb0c35b7a64b309bf2.jpg", + "cost": 68, + "charges": { "value": 1, "recovers": 1 }, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "ffg": 418, + "hyperspace": true + }, + { + "name": "Blue Squadron Rookie", + "initiative": 1, + "limited": 0, + "xws": "bluesquadronrookie", + "text": "The Incom-FreiTek T-70 X-Wing was designed to improve upon the tactical flexibility of the venerable T-65. The starfighter's advanced droid socket is compatible with a wide array of astromechs, and its modular weapons pods allow ground crews to tailor its payload for specific missions.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a82a39a4c9baf883fbc6ae353abdd2ec.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8ceeaf3d985f16da8b8d5a1ebc49ea2b.jpg", + "cost": 42, + "slots": ["Astromech", "Modification", "Title", "Configuration", "Tech"], + "ffg": 426, + "hyperspace": true + }, + { + "name": "Red Squadron Expert", + "initiative": 3, + "limited": 0, + "xws": "redsquadronexpert", + "text": "Although the bulk of the Resistance Starfighter Corps is made up of young volunteers from the New Republic, their ranks are bolstered by veterans of the Galactic Civil War determined to finish what they started decades ago.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/58967d94cfef285c4df2fdbb77fd0502.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0e847453270afe089ea331316f7b7731.jpg", + "cost": 44, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "ffg": 425, + "hyperspace": true + }, + { + "name": "Black Squadron Ace", + "initiative": 4, + "limited": 0, + "xws": "blacksquadronace-t70xwing", + "text": "During the Cold War, Poe Dameron's Black Squadron conducted daring covert operations against the First Order in defiance of treaties ratified by the New Republic Senate.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d2b6a5166b3fd985df5d1941408b58e1.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e75228d8174f7879c51157fdd9b26e61.jpg", + "cost": 47, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "ffg": 451, + "hyperspace": true + }, + { + "name": "Ello Asty", + "caption": "Born to Ill", + "initiative": 5, + "limited": 1, + "xws": "elloasty", + "ability": "After you reveal a red Tallon Roll [[Tallon Roll Left] or [Tallon Roll Right]] maneuver, if you have 2 or fewer stress tokens, treat that maneuver as white.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "cost": 55, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f77180ae05fd919a0dff2225380246a6.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ff73537d7ab2f063e7a510c05013269e.jpg", + "ffg": 419, + "hyperspace": false + }, + { + "name": "Joph Seastriker", + "caption": "Reckless Bodyguard", + "initiative": 3, + "limited": 1, + "xws": "jophseastriker", + "ability": "After you lose 1 shield, gain 1 evade token.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "cost": 51, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/df85f5b77e16363a05c8f68792440166.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/b5b43d179b039649e764e6bd4f212a29.jpg", + "ffg": 424, + "hyperspace": true + }, + { + "name": "Kare Kun", + "caption": "Woman of Action", + "initiative": 4, + "limited": 1, + "xws": "karekun", + "ability": "While you boost, you may use the [1 [Turn Left]] or [1 [Turn Right]] template instead.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "cost": 51, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6edb8ed4cbf882bf6dbe7a37b5981d85.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f121bc27f2b283258a65d348bcafe40d.jpg", + "ffg": 421, + "hyperspace": true + }, + { + "name": "Lieutenant Bastian", + "caption": "Optimistic Analyst", + "initiative": 2, + "limited": 1, + "xws": "lieutenantbastian", + "ability": "After a ship at range 1-2 is dealt a damage card, you may acquire a lock on that ship.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3f43d6b3c6e87bde6a681e9d4421dec8.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/52f96e7e98dc51c1280052514e303704.jpg", + "cost": 47, + "slots": ["Astromech", "Modification", "Title", "Configuration", "Tech"], + "ffg": 449, + "hyperspace": true + }, + { + "name": "Nien Nunb", + "caption": "Sarcastic Survivor", + "initiative": 5, + "limited": 1, + "xws": "niennunb", + "ability": "After you gain a stress token, if there is an enemy ship in your [Front Arc] at range 0-1, you may remove that stress token.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "cost": 55, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/00a3c393a33b33168bc61e47749e1474.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/5daa441317975eb576396af36e852f74.jpg", + "ffg": 420, + "hyperspace": true + }, + { + "name": "Jaycris Tubbs", + "caption": "Loving Father", + "initiative": 1, + "limited": 1, + "xws": "jaycristubbs", + "ability": "After you fully execute a blue maneuver, you may choose a friendly ship at range 0-1. If you do, that ship removes 1 stress token.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/5f3abacb9a081f5a3ca42f7a30da0e6c.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8874efb312a64da49889c66f96338f9c.jpg", + "cost": 48, + "slots": ["Astromech", "Modification", "Title", "Configuration", "Tech"], + "ffg": 450, + "hyperspace": true + }, + { + "name": "Jessika Pava", + "caption": "The Great Destroyer", + "initiative": 3, + "limited": 1, + "xws": "jessikapava", + "ability": "While you defend or perform an attack, you may spend 1 [Charge] or 1 non-recurring [Charge] from your equipped [Astromech] upgrade to reroll up to 1 of your dice for each other friendly ship at range 0-1.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/bc26d8864f421f1362473aa4982108ba.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/05c48dc381e54c6951d3ee42d3587577.jpg", + "cost": 51, + "charges": { "value": 1, "recovers": 1 }, + "slots": ["Astromech", "Modification", "Title", "Configuration", "Tech"], + "ffg": 423, + "hyperspace": true + }, + { + "name": "Temmin Wexley", + "caption": "Snap", + "initiative": 4, + "limited": 1, + "xws": "temminwexley", + "ability": "After you fully execute a speed 2-4 maneuver, you may perform a [Boost] action.", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/bb98b7ea3a580542b586a9999fd352c9.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6acd118b12a34136d4d1df6c765a0deb.jpg", + "cost": 53, + "slots": [ + "Talent", + "Astromech", + "Modification", + "Title", + "Configuration", + "Tech" + ], + "ffg": 422, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/aggressor-assault-fighter.json b/pyxwb2/data/pilots/scum-and-villainy/aggressor-assault-fighter.json new file mode 100644 index 0000000..ba896c2 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/aggressor-assault-fighter.json @@ -0,0 +1,158 @@ +{ + "name": "Aggressor Assault Fighter", + "xws": "aggressorassaultfighter", + "ffg": 21, + "size": "Medium", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3BB", + "3FB", + "3NB", + "3PR", + "4FW", + "4KR" + ], + "dialCodes": [ + "AgF" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_IG-2000.png", + "pilots": [ + { + "name": "IG-88A", + "caption": "Aggressive Automaton", + "initiative": 4, + "limited": 1, + "cost": 67, + "xws": "ig88a", + "ability": "At the start of the Engagement Phase, you may choose 1 friendly ship with [Calculate] on its action bar at range 1-3. If you do, transfer 1 of your calculate tokens to it.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_197.png", + "shipAbility": { + "name": "Advanced Droid Brain", + "text": "After you perform a [Calculate] action, gain 1 calculate token." + }, + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_197.jpg", + "ffg": 197, + "hyperspace": false + }, + { + "name": "IG-88B", + "caption": "Brutal Battledroid", + "initiative": 4, + "limited": 1, + "cost": 63, + "xws": "ig88b", + "ability": "After you perform an attack that misses, you may perform a bonus [Cannon] attack.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_198.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/26/e9/26e959b8-34a2-4d0d-93b1-2efad56cd573/op067_ig-88d.png", + "source": "Coruscant Invitational 2018" + } + ], + "shipAbility": { + "name": "Advanced Droid Brain", + "text": "After you perform a [Calculate] action, gain 1 calculate token." + }, + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_198.jpg", + "ffg": 198, + "hyperspace": false + }, + { + "name": "IG-88C", + "caption": "Conniving Contraption", + "initiative": 4, + "limited": 1, + "cost": 64, + "xws": "ig88c", + "ability": "After you perform a [Boost] action, you may perform an [Evade] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_199.png", + "shipAbility": { + "name": "Advanced Droid Brain", + "text": "After you perform a [Calculate] action, gain 1 calculate token." + }, + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_199.jpg", + "ffg": 199, + "hyperspace": false + }, + { + "name": "IG-88D", + "caption": "Deadly Device", + "initiative": 4, + "limited": 1, + "cost": 63, + "xws": "ig88d", + "ability": "While you execute a Segnor's Loop ([Segnor's Loop Left] or [Segnor's Loop Right]) maneuver, you may use another template of the same speed instead: either the turn ([Turn Left] or [Turn Right]) of the same direction or the straight ([Straight]) template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_200.png", + "shipAbility": { + "name": "Advanced Droid Brain", + "text": "After you perform a [Calculate] action, gain 1 calculate token." + }, + "slots": [ + "Talent", + "Sensor", + "Cannon", + "Cannon", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_200.jpg", + "ffg": 200, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/btl-a4-y-wing.json b/pyxwb2/data/pilots/scum-and-villainy/btl-a4-y-wing.json new file mode 100644 index 0000000..e623162 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/btl-a4-y-wing.json @@ -0,0 +1,131 @@ +{ + "name": "BTL-A4 Y-wing", + "xws": "btla4ywing", + "ffg": 12, + "size": "Small", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "4FR", + "4KR" + ], + "dialCodes": [ + "YW" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Y-wing.png", + "pilots": [ + { + "name": "Crymorah Goon", + "initiative": 1, + "limited": 0, + "cost": 30, + "xws": "crymorahgoon", + "text": "Though far from nimble, the Y-wing's heavy hull, substantial shielding, and turret-mounted cannons make it an excellent patrol craft.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_168.png", + "slots": [ + "Turret", + "Torpedo", + "Astromech", + "Device", + "Illicit", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_168.jpg", + "ffg": 168, + "hyperspace": false + }, + { + "name": "Drea Renthal", + "caption": "Pirate Lord", + "initiative": 4, + "limited": 1, + "cost": 49, + "xws": "drearenthal", + "ability": "While a friendly non-limited ship performs an attack, if the defender is in your firing arc, the attacker may reroll 1 attack die.", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Illicit", + "Modification", + "Gunner" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_166.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_166.jpg", + "ffg": 166, + "hyperspace": false + }, + { + "name": "Hired Gun", + "initiative": 2, + "limited": 0, + "cost": 32, + "xws": "hiredgun", + "text": "Just the mention of Imperial credits can bring a host of less-than-trustworthy individuals to your side.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_167.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Illicit", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_167.jpg", + "ffg": 167, + "hyperspace": false + }, + { + "name": "Kavil", + "caption": "Callous Corsair", + "initiative": 5, + "limited": 1, + "cost": 43, + "xws": "kavil", + "ability": "While you perform a non-[Front Arc] attack, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_165.png", + "slots": [ + "Talent", + "Turret", + "Torpedo", + "Astromech", + "Device", + "Illicit", + "Modification", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_165.jpg", + "ffg": 165, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/customized-yt-1300-light-freighter.json b/pyxwb2/data/pilots/scum-and-villainy/customized-yt-1300-light-freighter.json new file mode 100644 index 0000000..8e5ad6c --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/customized-yt-1300-light-freighter.json @@ -0,0 +1,139 @@ +{ + "name": "Customized YT-1300 Light Freighter", + "xws": "customizedyt1300lightfreighter", + "ffg": 47, + "size": "Large", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3LR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3PR", + "4FW", + "4KR" + ], + "dialCodes": [ + "CY" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Double Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 8 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_CustomizedYT-1300.png", + "pilots": [ + { + "name": "Freighter Captain", + "initiative": 1, + "limited": 0, + "cost": 46, + "xws": "freightercaptain", + "text": "Many spacers make a living traveling the Outer Rim, where the difference between smuggler and legitimate merchant is often murky. On the outskirts of civilization, buyers are rarely so discerning to ask where merchandise came from, at least as long as the price is low enough.", + "slots": [ + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_225.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_225.jpg", + "ffg": 225, + "hyperspace": false + }, + { + "name": "Han Solo", + "caption": "The Corellian Kid", + "initiative": 6, + "limited": 1, + "cost": 54, + "xws": "hansolo", + "ability": "While you defend or perform a primary attack, if the attack is obstructed by an obstacle, you may roll 1 additional die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_222.png", + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_222.jpg", + "ffg": 222, + "hyperspace": false + }, + { + "name": "L3-37", + "caption": "Droid Revolutionary", + "initiative": 2, + "limited": 1, + "cost": 47, + "xws": "l337", + "ability": "If you are not shielded, decrease the difficulty of your bank ([Bank Left] and [Bank Right]) maneuvers.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_224.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "slots": [ + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_224.jpg", + "ffg": 224, + "hyperspace": false + }, + { + "name": "Lando Calrissian", + "caption": "Smooth-talking Gambler", + "initiative": 4, + "limited": 1, + "cost": 49, + "xws": "landocalrissian", + "ability": "After you roll dice, if you are not stressed, you may gain 1 stress token to reroll all of your blank results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_223.png", + "slots": [ + "Talent", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_223.jpg", + "ffg": 223, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/escape-craft.json b/pyxwb2/data/pilots/scum-and-villainy/escape-craft.json new file mode 100644 index 0000000..3296947 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/escape-craft.json @@ -0,0 +1,122 @@ +{ + "name": "Escape Craft", + "xws": "escapecraft", + "ffg": 48, + "size": "Small", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TR", + "2BW", + "2FB", + "2NW", + "2YR", + "3BW", + "3FW", + "3NW", + "3KR" + ], + "dialCodes": [ + "ES" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_EscapeShuttle.png", + "pilots": [ + { + "name": "Autopilot Drone", + "caption": "Set to Blow", + "initiative": 1, + "limited": 1, + "cost": 12, + "xws": "autopilotdrone", + "text": "Sometimes, manufacturer's warnings are made to be broken.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_229.png", + "charges": { "value": 3, "recovers": 0 }, + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "shipAbility": { + "name": "Rigged Energy Cells", + "text": "During the System Phase, if you are not docked, lose 1 [Charge]. At the end of the Activation Phase, if you have 0 [Charge], you are destroyed. Before you are removed, each ship at range 0-1 suffers 1 [Critical Hit] damage." + }, + "slots": [], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_229.jpg", + "ffg": 229, + "hyperspace": false + }, + { + "name": "L3-37", + "caption": "Droid Revolutionary", + "initiative": 2, + "limited": 1, + "cost": 26, + "xws": "l337-escapecraft", + "ability": "If you are not shielded, decrease the difficulty of your bank ([Bank Left] and [Bank Right]) maneuvers.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_228.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Barrel Roll" }, + { "difficulty": "Red", "type": "Coordinate" } + ], + "shipAbility": { + "name": "Co-Pilot", + "text": "While you are docked, your carrier ship has your pilot ability in addition to its own." + }, + "slots": ["Talent", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_228.jpg", + "ffg": 228, + "hyperspace": false + }, + { + "name": "Lando Calrissian", + "caption": "Smooth-talking Gambler", + "initiative": 4, + "limited": 1, + "cost": 29, + "xws": "landocalrissian-escapecraft", + "ability": "After you roll dice, if you are not stressed, you may gain 1 stress token to reroll all of your blank results.", + "shipAbility": { + "name": "Co-Pilot", + "text": "While you are docked, your carrier ship has your pilot ability in addition to its own." + }, + "slots": ["Talent", "Crew", "Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_226.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_226.jpg", + "ffg": 226, + "hyperspace": false + }, + { + "name": "Outer Rim Pioneer", + "caption": "Skillful Outlaw", + "initiative": 3, + "limited": 1, + "cost": 28, + "xws": "outerrimpioneer", + "ability": "Friendly ships at range 0-1 can perform attacks at range 0 of obstacles.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_227.png", + "shipAbility": { + "name": "Co-Pilot", + "text": "While you are docked, your carrier ship has your pilot ability in addition to its own." + }, + "slots": ["Talent", "Crew", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_227.jpg", + "ffg": 227, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/fang-fighter.json b/pyxwb2/data/pilots/scum-and-villainy/fang-fighter.json new file mode 100644 index 0000000..03a081e --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/fang-fighter.json @@ -0,0 +1,157 @@ +{ + "name": "Fang Fighter", + "xws": "fangfighter", + "ffg": 36, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2ER", + "2TB", + "2BB", + "2FB", + "2NB", + "2YB", + "2RR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW", + "4KR", + "5FW" + ], + "dialCodes": [ + "Fng" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Boost" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_FangFighter.png", + "pilots": [ + { + "name": "Fenn Rau", + "caption": "Skull Leader", + "initiative": 6, + "limited": 1, + "cost": 68, + "xws": "fennrau", + "ability": "While you defend or perform an attack, if the attack range is 1, you may roll 1 additional die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_155.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Talent", "Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_155.jpg", + "ffg": 155, + "hyperspace": true + }, + { + "name": "Joy Rekkoff", + "caption": "Skull Squadron Ace", + "initiative": 4, + "limited": 1, + "cost": 52, + "xws": "joyrekkoff", + "ability": "While you perform an attack, you may spend 1 [Charge] from an equipped [Torpedo] upgrade. If you do, the defender rolls 1 fewer defense die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_157.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Talent", "Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_157.jpg", + "ffg": 157, + "hyperspace": true + }, + { + "name": "Kad Solus", + "caption": "Skilled Commando", + "initiative": 4, + "limited": 1, + "cost": 54, + "xws": "kadsolus", + "ability": "After you fully execute a red maneuver, gain 2 focus tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_158.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Talent", "Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_158.jpg", + "ffg": 158, + "hyperspace": true + }, + { + "name": "Old Teroch", + "caption": "Mandalorian Mentor", + "initiative": 5, + "limited": 1, + "cost": 56, + "xws": "oldteroch", + "ability": "At the start of the Engagement Phase, you may choose 1 enemy ship at range 1. If you do and you are in its [Front Arc], it removes all of its green tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_156.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Talent", "Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_156.jpg", + "ffg": 156, + "hyperspace": false + }, + { + "name": "Skull Squadron Pilot", + "initiative": 4, + "limited": 0, + "cost": 47, + "xws": "skullsquadronpilot", + "text": "The aces of Skull Squadron favor an aggressive approach, using their craft's pivot wing technology to achieve unmatched agility in the pursuit of their quarry.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_159.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Talent", "Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_159.jpg", + "ffg": 159, + "hyperspace": true + }, + { + "name": "Zealous Recruit", + "initiative": 1, + "limited": 0, + "cost": 41, + "xws": "zealousrecruit", + "text": "Mandalorian Fang fighter pilots must master the Concordia Faceoff maneuver, leveraging their ships' narrow attack profile to execute deadly head-on charges.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_160.png", + "shipAbility": { + "name": "Concordia Faceoff", + "text": "While you defend, if the attack range is 1 and you are in the attacker's [Front Arc], change 1 result to an [Evade] result." + }, + "slots": ["Torpedo"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_160.jpg", + "ffg": 160, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/firespray-class-patrol-craft.json b/pyxwb2/data/pilots/scum-and-villainy/firespray-class-patrol-craft.json new file mode 100644 index 0000000..20bec6e --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/firespray-class-patrol-craft.json @@ -0,0 +1,187 @@ +{ + "name": "Firespray-class Patrol Craft", + "xws": "firesprayclasspatrolcraft", + "ffg": 10, + "size": "Medium", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3ER", + "3BW", + "3FB", + "3NW", + "3RR", + "4FW", + "4KR" + ], + "dialCodes": [ + "FPC" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Rear Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Reinforce" }, + { "difficulty": "White", "type": "Boost" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_FIrespray.png", + "pilots": [ + { + "name": "Boba Fett", + "caption": "Notorious Bounty Hunter", + "initiative": 5, + "limited": 1, + "cost": 85, + "xws": "bobafett", + "ability": "While you defend or perform an attack, you may reroll 1 of your dice for each enemy ship at range 0-1.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_149.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/bd/38/bd388799-287f-455e-9624-8078e676fed0/op067_boba-fett.png", + "source": "Coruscant Invitational 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_149.jpg", + "ffg": 149, + "hyperspace": true + }, + { + "name": "Bounty Hunter", + "initiative": 2, + "limited": 0, + "cost": 62, + "xws": "bountyhunter", + "text": "The Firespray-class patrol craft is infamous for its association with the deadly bounty hunters Jango Fett and Boba Fett, who packed their craft with countless deadly armaments.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_154.png", + "slots": [ + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_154.jpg", + "ffg": 154, + "hyperspace": true + }, + { + "name": "Emon Azzameen", + "caption": "Shipping Magnate", + "initiative": 4, + "limited": 1, + "cost": 71, + "xws": "emonazzameen", + "ability": "If you would drop a device using a [1 [Straight]] template, you may use the [3 [Turn Left]], [3 [Straight]], or [3 [Turn Right]] template instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_150.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_150.jpg", + "ffg": 150, + "hyperspace": true + }, + { + "name": "Kath Scarlet", + "caption": "Captain of the Binayre Pirates", + "initiative": 4, + "limited": 1, + "cost": 72, + "xws": "kathscarlet", + "ability": "While you perform a primary attack, if there is at least 1 friendly non-limited ship at range 0 of the defender, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_151.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_151.jpg", + "ffg": 151, + "hyperspace": true + }, + { + "name": "Koshka Frost", + "caption": "Icy Professional", + "initiative": 3, + "limited": 1, + "cost": 70, + "xws": "koshkafrost", + "ability": "While you defend or perform an attack, if the enemy ship is stressed, you may reroll 1 of your dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_152.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_152.jpg", + "ffg": 152, + "hyperspace": true + }, + { + "name": "Krassis Trelix", + "caption": "Imperial Deserter", + "initiative": 3, + "limited": 1, + "cost": 65, + "xws": "krassistrelix", + "ability": "You can perform [Front Arc] special attacks from your [Rear Arc]. While you perform a special attack, you may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_153.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Device", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_153.jpg", + "ffg": 153, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/g-1a-starfighter.json b/pyxwb2/data/pilots/scum-and-villainy/g-1a-starfighter.json new file mode 100644 index 0000000..dd3828f --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/g-1a-starfighter.json @@ -0,0 +1,95 @@ +{ + "name": "G-1A Starfighter", + "xws": "g1astarfighter", + "ffg": 22, + "size": "Medium", + "dial": [ + "0OR", + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "2KR", + "3BR", + "3FW", + "3NR", + "4FR", + "4KR" + ], + "dialCodes": [ + "G1A" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_MistHunter.png", + "pilots": [ + { + "name": "4-LOM", + "caption": "Reprogrammed Protocol Droid", + "initiative": 3, + "limited": 1, + "cost": 49, + "xws": "4lom", + "ability": "After you fully execute a red maneuver, gain 1 calculate token. At the start of the End Phase, you may choose 1 ship at range 0-1. If you do, transfer 1 of your stress tokens to that ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_201.png", + "slots": ["Talent", "Sensor", "Crew", "Illicit", "Modification", "Title"], + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Jam" } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_201.jpg", + "ffg": 201, + "hyperspace": false + }, + { + "name": "Gand Findsman", + "initiative": 1, + "limited": 0, + "cost": 41, + "xws": "gandfindsman", + "text": "The legendary Findsmen of Gand worship the enshrouding mists of their home planet, using signs, augurs, and mystical rituals to track their quarry.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_203.png", + "slots": ["Sensor", "Crew", "Illicit", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_203.jpg", + "ffg": 203, + "hyperspace": false + }, + { + "name": "Zuckuss", + "caption": "Meditative Gand", + "initiative": 3, + "limited": 1, + "cost": 45, + "xws": "zuckuss", + "ability": "While you perform a primary attack, you may roll 1 additional attack die. If you do, the defender rolls 1 additional defense die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_202.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/62/69/6269d549-8a5b-40f6-84cb-6ef6fa47212f/op067_zuckuss.png", + "source": "Coruscant Invitational 2018" + } + ], + "slots": ["Talent", "Sensor", "Crew", "Illicit", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_202.jpg", + "ffg": 202, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/hwk-290-light-freighter.json b/pyxwb2/data/pilots/scum-and-villainy/hwk-290-light-freighter.json new file mode 100644 index 0000000..b25626c --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/hwk-290-light-freighter.json @@ -0,0 +1,137 @@ +{ + "name": "HWK-290 Light Freighter", + "xws": "hwk290lightfreighter", + "ffg": 34, + "size": "Small", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TR", + "3BW", + "3FB", + "3NW", + "3YR", + "4FW" + ], + "dialCodes": [ + "HK" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Focus" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Lock" + }, + { "difficulty": "Red", "type": "Boost" }, + { "difficulty": "White", "type": "Rotate Arc" }, + { "difficulty": "Red", "type": "Jam" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_HWK-290.png", + "pilots": [ + { + "name": "Dace Bonearm", + "caption": "Outer Rim Mercenary", + "initiative": 4, + "limited": 1, + "cost": 33, + "xws": "dacebonearm", + "ability": "After an enemy ship at range 0-3 receives at least 1 ion token, you may spend 3 [Charge]. If you do, that ship gains 2 additional ion tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_174.png", + "charges": { "value": 3, "recovers": 1 }, + "slots": [ + "Talent", + "Crew", + "Device", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_174.jpg", + "ffg": 174, + "hyperspace": false + }, + { + "name": "Palob Godalhi", + "caption": "Tethan Resister", + "initiative": 3, + "limited": 1, + "cost": 40, + "xws": "palobgodalhi", + "ability": "At the start of the Engagement Phase, you may choose 1 enemy ship in your firing arc at range 0-2. If you do, transfer 1 focus or evade token from that ship to yourself.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_175.png", + "slots": [ + "Talent", + "Crew", + "Device", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_175.jpg", + "ffg": 175, + "hyperspace": false + }, + { + "name": "Spice Runner", + "initiative": 1, + "limited": 0, + "cost": 30, + "xws": "spicerunner", + "text": "Though its cargo space is limited compared to other light freighters, the small, swift HWK-290 is a favorite choice of smugglers who specialize in discreetly transporting precious goods.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_177.png", + "slots": [ + "Crew", + "Device", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_177.jpg", + "ffg": 177, + "hyperspace": false + }, + { + "name": "Torkil Mux", + "caption": "Mercenary Miner", + "initiative": 2, + "limited": 1, + "cost": 38, + "xws": "torkilmux", + "ability": "At the start of the Engagement Phase, you may choose 1 ship in your firing arc. If you do, that ship engages at initiative 0 instead of its normal initiative value this round.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_176.png", + "slots": [ + "Crew", + "Device", + "Illicit", + "Modification", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_176.jpg", + "ffg": 176, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/jumpmaster-5000.json b/pyxwb2/data/pilots/scum-and-villainy/jumpmaster-5000.json new file mode 100644 index 0000000..9dd4dc1 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/jumpmaster-5000.json @@ -0,0 +1,170 @@ +{ + "name": "JumpMaster 5000", + "xws": "jumpmaster5000", + "ffg": 45, + "size": "Large", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NW", + "1YR", + "2TW", + "2BB", + "2FB", + "2NW", + "2YR", + "3LR", + "3BB", + "3FB", + "3NW", + "4FW", + "4KR" + ], + "dialCodes": [ + "JM5" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Focus" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Rotate Arc" }, + "type": "Lock" + }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Jumpmaster.png", + "pilots": [ + { + "name": "Contracted Scout", + "initiative": 2, + "limited": 0, + "cost": 41, + "xws": "contractedscout", + "text": "Built for long-distance reconnaissance and plotting new hyperspace routes, the lightly armed JumpMaster 5000 is often extensively retrofitted with custom upgrades.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_217.png", + "slots": [ + "Cannon", + "Torpedo", + "Crew", + "Gunner", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_217.jpg", + "ffg": 217, + "hyperspace": true + }, + { + "name": "Dengar", + "caption": "Vengeful Corellian", + "initiative": 6, + "limited": 1, + "cost": 53, + "xws": "dengar", + "ability": "After you defend, if the attacker is in your [Front Arc], you may spend 1 [Charge] to perform a bonus attack against the attacker.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_214.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/fe/da/feda9a2c-38f4-447a-8b0c-af7e04ace137/op067_dengar.png", + "source": "Coruscant Invitational 2018" + } + ], + "charges": { "value": 1, "recovers": 1 }, + "slots": [ + "Talent", + "Cannon", + "Torpedo", + "Crew", + "Gunner", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_214.jpg", + "ffg": 214, + "hyperspace": true + }, + { + "name": "Manaroo", + "caption": "Graceful Aruzan", + "initiative": 3, + "limited": 1, + "cost": 45, + "xws": "manaroo", + "ability": "At the start of the Engagement Phase, you may choose a friendly ship at range 0-1. If you do, transfer all green tokens assigned to you to that ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_215.png", + "slots": [ + "Talent", + "Cannon", + "Torpedo", + "Crew", + "Gunner", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_215.jpg", + "ffg": 215, + "hyperspace": true + }, + { + "name": "Tel Trevura", + "caption": "Escape Artist", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "teltrevura", + "ability": "If you would be destroyed, you may spend 1 [Charge]. If you do, discard all of your damage cards, suffer 5 [Hit] damage, and place yourself in reserves instead. At the start of the next Planning Phase, place yourself within range 1 of your player edge.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_216.png", + "charges": { "value": 1, "recovers": 0 }, + "slots": [ + "Talent", + "Cannon", + "Torpedo", + "Crew", + "Gunner", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_216.jpg", + "ffg": 216, + "hyperspace": true + }, + { + "name": "Nom Lumb", + "xws": "nomlumb", + "initiative": 1, + "limited": 1, + "caption": "On the Run", + "hyperspace": true, + "slots": [ + "Cannon", + "Torpedo", + "Crew", + "Gunner", + "Illicit", + "Modification", + "Title" + ], + "ability": "After you become the defender, if the attacker is not in your [Single Turret Arc], you must rotate your [Single Turret Arc] indicator to a standard arc the attacker is in.", + "cost": 38, + "ffg": 637, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3de089d708ab1c7d8aee35ef99a1f1ed.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4a13a4b7493d39f53b9c37c6a82edf5a.png" + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/kihraxz-fighter.json b/pyxwb2/data/pilots/scum-and-villainy/kihraxz-fighter.json new file mode 100644 index 0000000..c429be5 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/kihraxz-fighter.json @@ -0,0 +1,164 @@ +{ + "name": "Kihraxz Fighter", + "xws": "kihraxzfighter", + "ffg": 7, + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1NB", + "1YW", + "2ER", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2RR", + "3BW", + "3FB", + "3NW", + "4FW", + "4KR" + ], + "dialCodes": [ + "KXZ" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 5 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Kihraxz.png", + "pilots": [ + { + "name": "Black Sun Ace", + "initiative": 3, + "limited": 0, + "cost": 40, + "xws": "blacksunace", + "text": "The Kihraxz assault fighter was developed specifically for the Black Sun crime syndicate, whose highly paid ace pilots demanded a nimble, powerful ship to match their skills.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_195.png", + "slots": [ + "Talent", + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_195.jpg", + "ffg": 195, + "hyperspace": false + }, + { + "name": "Captain Jostero", + "caption": "Aggressive Opportunist", + "initiative": 3, + "limited": 1, + "cost": 42, + "xws": "captainjostero", + "ability": "After an enemy ship suffers damage, if it is not defending, you may perform a bonus attack against that ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_194.png", + "slots": [ + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_194.jpg", + "ffg": 194, + "hyperspace": false + }, + { + "name": "Cartel Marauder", + "initiative": 2, + "limited": 0, + "cost": 38, + "xws": "cartelmarauder", + "text": "The versatile Kihraxz was modeled after Incom's popular X-wing starfighter, but an array of after-market modification kits ensure a wide variety of designs.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_196.png", + "slots": [ + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_196.jpg", + "ffg": 196, + "hyperspace": false + }, + { + "name": "Graz", + "caption": "The Hunter", + "initiative": 4, + "limited": 1, + "cost": 46, + "xws": "graz", + "ability": "While you defend, if you are behind the attacker, roll 1 additional defense die. While you perform an attack, if you are behind the defender, roll 1 additional attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_192.png", + "slots": [ + "Talent", + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_192.jpg", + "ffg": 192, + "hyperspace": false + }, + { + "name": "Talonbane Cobra", + "caption": "Scourge of Tansarii Point", + "initiative": 5, + "limited": 1, + "cost": 50, + "xws": "talonbanecobra", + "ability": "While you defend at attack range 3 or perform an attack at attack range 1, roll 1 additional die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_191.png", + "slots": [ + "Talent", + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_191.jpg", + "ffg": 191, + "hyperspace": false + }, + { + "name": "Viktor Hel", + "caption": "Storied Bounty Hunter", + "initiative": 4, + "limited": 1, + "cost": 44, + "xws": "viktorhel", + "ability": "After you defend, if you did not roll exactly 2 defense dice, the attacker gains 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_193.png", + "slots": [ + "Talent", + "Missile", + "Illicit", + "Illicit", + "Modification", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_193.jpg", + "ffg": 193, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/lancer-class-pursuit-craft.json b/pyxwb2/data/pilots/scum-and-villainy/lancer-class-pursuit-craft.json new file mode 100644 index 0000000..0537060 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/lancer-class-pursuit-craft.json @@ -0,0 +1,121 @@ +{ + "name": "Lancer-class Pursuit Craft", + "xws": "lancerclasspursuitcraft", + "ffg": 42, + "size": "Large", + "dial": [ + "1BW", + "1FW", + "1NW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3TB", + "3BB", + "3FB", + "3NB", + "3YB", + "4FB", + "5FW", + "5KR" + ], + "dialCodes": [ + "LPC" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 8 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Rotate Arc" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_ShadowCaster.png", + "pilots": [ + { + "name": "Asajj Ventress", + "caption": "Force of Her Own", + "initiative": 4, + "limited": 1, + "cost": 72, + "xws": "asajjventress", + "ability": "At the start of the Engagement Phase, you may choose 1 enemy ship in your [Single Turret Arc] at range 0-2 and spend 1 [Force]. If you do, that ship gains 1 stress token unless it removes 1 green token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_219.png", + "force": { "value": 2, "recovers": 1, "side": ["dark"] }, + "slots": [ + "Crew", + "Illicit", + "Illicit", + "Modification", + "Title", + "Force Power" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_219.jpg", + "ffg": 219, + "hyperspace": false + }, + { + "name": "Ketsu Onyo", + "caption": "Black Sun Contractor", + "initiative": 5, + "limited": 1, + "cost": 69, + "xws": "ketsuonyo", + "ability": "At the start of the Engagement Phase, you may choose 1 ship in both your [Front Arc] and [Single Turret Arc] at range 0-1. If you do, that ship gains 1 tractor token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_218.png", + "slots": [ + "Talent", + "Crew", + "Illicit", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_218.jpg", + "ffg": 218, + "hyperspace": false + }, + { + "name": "Sabine Wren", + "caption": "Artistic Saboteur", + "initiative": 3, + "limited": 1, + "cost": 61, + "xws": "sabinewren-lancerclasspursuitcraft", + "ability": "While you defend, if the attacker is in your [Single Turret Arc] at range 0-2, you may add 1 [Focus] result to your dice results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_220.png", + "slots": [ + "Talent", + "Crew", + "Illicit", + "Illicit", + "Modification", + "Title" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_220.jpg", + "ffg": 220, + "hyperspace": false + }, + { + "name": "Shadowport Hunter", + "initiative": 2, + "limited": 0, + "cost": 56, + "xws": "shadowporthunter", + "text": "Crime syndicates augment the lethal skills of their loyal contractors with the best technology available, like the fast and formidable Lancer-class pursuit craft.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_221.png", + "slots": ["Crew", "Illicit", "Illicit", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_221.jpg", + "ffg": 221, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/m12-l-kimogila-fighter.json b/pyxwb2/data/pilots/scum-and-villainy/m12-l-kimogila-fighter.json new file mode 100644 index 0000000..4ecde28 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/m12-l-kimogila-fighter.json @@ -0,0 +1,118 @@ +{ + "name": "M12-L Kimogila Fighter", + "xws": "m12lkimogilafighter", + "ffg": 39, + "size": "Medium", + "dial": [ + "1TR", + "1BW", + "1FB", + "1NW", + "1YR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4KR" + ], + "dialCodes": [ + "M12" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 7 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" }, + { "difficulty": "White", "type": "Reload" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Kimogila.png", + "pilots": [ + { + "name": "Cartel Executioner", + "initiative": 3, + "limited": 0, + "cost": 41, + "xws": "cartelexecutioner", + "text": "Many veteran pilots in the service of the Hutt kajidics and other criminal operations choose the M12-L Kimogila for its firepower and dreaded reputation alike.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_209.png", + "shipAbility": { + "name": "Dead to Rights", + "text": "While you perform an attack, if the defender is in your [Bullseye Arc], defense dice cannot be modified using green tokens." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Astromech", + "Illicit", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_209.jpg", + "ffg": 209, + "hyperspace": false + }, + { + "name": "Dalan Oberos", + "caption": "Returned from the Grave", + "initiative": 3, + "limited": 1, + "cost": 45, + "xws": "dalanoberos", + "ability": "At the start of the Engagement Phase, you may choose 1 shielded ship in your [Bullseye Arc] and spend 1 [Charge]. If you do, that ship loses 1 shield and you recover 1 shield.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_208.png", + "charges": { "value": 2, "recovers": 0 }, + "shipAbility": { + "name": "Dead to Rights", + "text": "While you perform an attack, if the defender is in your [Bullseye Arc], defense dice cannot be modified using green tokens." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Astromech", + "Illicit", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_208.jpg", + "ffg": 208, + "hyperspace": false + }, + { + "name": "Torani Kulda", + "caption": "Rodian Freelancer", + "initiative": 4, + "limited": 1, + "cost": 48, + "xws": "toranikulda", + "ability": "After you perform an attack, each enemy ship in your [Bullseye Arc] suffers 1 [Hit] damage unless it removes 1 green token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_207.png", + "shipAbility": { + "name": "Dead to Rights", + "text": "While you perform an attack, if the defender is in your [Bullseye Arc], defense dice cannot be modified using green tokens." + }, + "slots": [ + "Talent", + "Torpedo", + "Missile", + "Astromech", + "Illicit", + "Modification" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_207.jpg", + "ffg": 207, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/m3-a-interceptor.json b/pyxwb2/data/pilots/scum-and-villainy/m3-a-interceptor.json new file mode 100644 index 0000000..c0d8467 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/m3-a-interceptor.json @@ -0,0 +1,209 @@ +{ + "name": "M3-A Interceptor", + "xws": "m3ainterceptor", + "ffg": 44, + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1NB", + "1YW", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3BW", + "3FB", + "3NW", + "3KR", + "4FW", + "5FW", + "5KR" + ], + "dialCodes": [ + "M3A" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Scyk.png", + "pilots": [ + { + "name": "Cartel Spacer", + "initiative": 1, + "limited": 0, + "cost": 25, + "xws": "cartelspacer", + "text": "MandalMotors' M3-A \"Scyk\" Interceptor is purchased in large quantities by the Hutt Cartel and the Car'das smugglers due to its low cost and customizability.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_190.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_190.jpg", + "ffg": 190, + "hyperspace": true + }, + { + "name": "Genesis Red", + "caption": "Tansarii Point Crime Lord", + "initiative": 4, + "limited": 1, + "cost": 31, + "xws": "genesisred", + "ability": "After you acquire a lock, you must remove all of your focus and evade tokens. Then, gain the same number of focus and evade tokens that the locked ship has.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_184.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_184.jpg", + "ffg": 184, + "hyperspace": true + }, + { + "name": "Inaldra", + "caption": "Tansarii Point Boss", + "initiative": 2, + "limited": 1, + "cost": 30, + "xws": "inaldra", + "ability": "While you defend or perform an attack, you may suffer 1 [Hit] damage to reroll any number of your dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_187.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_187.jpg", + "ffg": 187, + "hyperspace": true + }, + { + "name": "Laetin A'shera", + "caption": "Car'das Enforcer", + "initiative": 3, + "limited": 1, + "cost": 30, + "xws": "laetinashera", + "ability": "After you defend or perform an attack, if the attack missed, gain 1 evade token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_185.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_185.jpg", + "ffg": 185, + "hyperspace": true + }, + { + "name": "Quinn Jast", + "caption": "Fortune Seeker", + "initiative": 3, + "limited": 1, + "cost": 31, + "xws": "quinnjast", + "ability": "At the start of the Engagement Phase, you may gain 1 disarm token to recover 1 [Charge] on 1 of your equipped upgrades.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_186.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_186.jpg", + "ffg": 186, + "hyperspace": true + }, + { + "name": "Serissu", + "caption": "Flight Instructor", + "initiative": 5, + "limited": 1, + "cost": 41, + "xws": "serissu", + "ability": "While a friendly ship at range 0-1 defends, it may reroll 1 of its dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_183.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_183.jpg", + "ffg": 183, + "hyperspace": true + }, + { + "name": "Sunny Bounder", + "caption": "Incurable Optimist", + "initiative": 1, + "limited": 1, + "cost": 27, + "xws": "sunnybounder", + "ability": "While you defend or perform an attack, after you roll or reroll your dice, if you have the same result on each of your dice, you may add 1 matching result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_188.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_188.jpg", + "ffg": 188, + "hyperspace": true + }, + { + "name": "Tansarii Point Veteran", + "initiative": 3, + "limited": 0, + "cost": 29, + "xws": "tansariipointveteran", + "text": "The defeat of Black Sun ace Talonbane Cobra by Car'das smugglers turned the tide of the Battle of Tansarii Point Station. Survivors of the clash are respected throughout the sector.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_189.png", + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "slots": ["Talent", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_189.jpg", + "ffg": 189, + "hyperspace": true + }, + { + "name": "G4R-G0R V/M", + "xws": "g4rgorvm", + "initiative": 0, + "limited": 1, + "shipAbility": { + "name": "Weapon Hardpoint", + "text": "You can equip 1 [Cannon], [Torpedo], or [Missile] upgrade." + }, + "caption": "Tilted Droid", + "hyperspace": true, + "slots": ["Modification"], + "ability": "After you defend, each other ship at range 0 suffers 1 [Critical Hit] damage.", + "cost": 28, + "ffg": 636, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f1d43e799b5f829b40c091a2274e570f.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/22cf051c016aacea162995df8e9129a2.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "White", "type": "Barrel Roll" } + ] + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/modified-tie-ln-fighter.json b/pyxwb2/data/pilots/scum-and-villainy/modified-tie-ln-fighter.json new file mode 100644 index 0000000..e62e4d5 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/modified-tie-ln-fighter.json @@ -0,0 +1,148 @@ +{ + "name": "Modified TIE/ln Fighter", + "xws": "modifiedtielnfighter", + "ffg": 56, + "size": "Small", + "dial": [ + "1TW", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "5FR" + ], + "dialCodes": [ + "Tmg" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_MiningGuild_TIE.png", + "pilots": [ + { + "name": "Ahhav", + "caption": "Vengeful Survivor", + "initiative": 3, + "limited": 1, + "cost": 30, + "xws": "ahhav", + "ability": "While you defend or perform an attack, if the enemy ship is a larger size than you, roll 1 additional die.", + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d58a0696c8d85a63e90eb8a1e522a54c.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2d162fae88ae58b9eca31f7dc0b7a9da.jpg", + "slots": ["Talent", "Modification"], + "ffg": 442, + "hyperspace": true + }, + { + "name": "Captain Seevor", + "caption": "Noisy Nuisance", + "initiative": 3, + "limited": 1, + "cost": 30, + "xws": "captainseevor", + "ability": "While you defend or perform an attack, before attack dice are rolled, if you are not in the enemy ship's [Bullseye Arc], you may spend 1 [Charge]. If you do, the enemy ship gains 1 jam token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/70b64586cc2eb05d10efc7ba8dfd69d0.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6ead4bbfa14075a19972dc57b90a34e1.jpg", + "charges": { "value": 1, "recovers": 1 }, + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "slots": ["Talent", "Modification"], + "ffg": 443, + "hyperspace": false + }, + { + "name": "Foreman Proach", + "caption": "Slave Driver", + "initiative": 4, + "limited": 1, + "cost": 32, + "xws": "foremanproach", + "ability": "Before you engage, you may choose 1 enemy ship in your [Bullseye Arc] at range 1-2 and gain 1 disarm token. If you do, that ship gains 1 tractor token.", + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cfb3b5fa9d747afc3aa10f3b86f45818.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f789aa53866112fc44fd27ed9e177993.jpg", + "slots": ["Talent", "Modification"], + "ffg": 441, + "hyperspace": false + }, + { + "name": "Mining Guild Surveyor", + "initiative": 2, + "limited": 0, + "cost": 23, + "xws": "miningguildsurveyor", + "text": "With Imperial construction projects consuming raw materials at an unprecedented rate, the Mining Guild ruthlessly exploits newly discovered deposits of doonium ore on worlds such as Batonn, Lothal, and Umbara.", + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3e5872dea32f2015bb6737592c21efaf.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ad058d0b6d46f668f06bf0007207a30a.jpg", + "slots": ["Talent", "Modification"], + "ffg": 445, + "hyperspace": true + }, + { + "name": "Overseer Yushyn", + "caption": "Overbearing Boss", + "initiative": 2, + "limited": 1, + "cost": 26, + "xws": "overseeryushyn", + "ability": "Before a friendly ship at range 1 would gain a disarm token, if that ship is not stressed, you may spend 1 [Charge]. If you do, that ship gains 1 stress token instead.", + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "charges": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6c9268d3e6cc6b671d6db6ac39fcad0f.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1f454eb7c12b572103e59a9a782c3f50.jpg", + "slots": ["Modification"], + "ffg": 444, + "hyperspace": true + }, + { + "name": "Mining Guild Sentry", + "initiative": 1, + "limited": 0, + "cost": 22, + "xws": "miningguildsentry", + "text": "As part of its arrangement with the Empire, the Mining Guild receives modified TIE/ln Fighters to protect its operations. These craft have solar panels removed from their stabilizers for improved visibility, and feature more extensive life support systems for the benefit of their corporate pilots.", + "shipAbility": { + "name": "Notched Stabilizers", + "text": "While you move, you ignore asteroids." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6d67112b15c3c97bd3d4acf2c8d000ed.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/09c955b8008750a30fe398c200431160.jpg", + "slots": ["Modification"], + "ffg": 446, + "hyperspace": true + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/quadrijet-transfer-spacetug.json b/pyxwb2/data/pilots/scum-and-villainy/quadrijet-transfer-spacetug.json new file mode 100644 index 0000000..b8570fb --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/quadrijet-transfer-spacetug.json @@ -0,0 +1,114 @@ +{ + "name": "Quadrijet Transfer Spacetug", + "xws": "quadrijettransferspacetug", + "ffg": 9, + "size": "Small", + "dial": [ + "1AR", + "1DR", + "1TW", + "1BW", + "1FW", + "1NW", + "1YW", + "2SR", + "2LR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2PR", + "3BW", + "3FB", + "3NW" + ], + "dialCodes": [ + "QUA" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 5 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "Red", "type": "Evade" }, + { "difficulty": "White", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Quadjumper.png", + "pilots": [ + { + "name": "Constable Zuvio", + "caption": "Missing Sheriff of Niima Outpost", + "initiative": 4, + "limited": 1, + "cost": 33, + "xws": "constablezuvio", + "ability": "If you would drop a device, you may launch it using a [1 [Straight]] template instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_161.png", + "shipAbility": { + "name": "Spacetug Tractor Array", + "text": "Action: Choose a ship in your [Front Arc] at range 1. That ship gains 1 tractor token, or 2 tractor tokens if it is in your [Bullseye Arc] at range 1." + }, + "slots": ["Talent", "Crew", "Device", "Illicit", "Modification", "Tech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_161.jpg", + "ffg": 161, + "hyperspace": false + }, + { + "name": "Jakku Gunrunner", + "initiative": 1, + "limited": 0, + "cost": 30, + "xws": "jakkugunrunner", + "text": "The Quadrijet transfer spacetug, commonly called a \"Quadjumper,\" is nimble in space and atmosphere alike, making it popular among both smugglers and explorers.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_164.png", + "shipAbility": { + "name": "Spacetug Tractor Array", + "text": "Action: Choose a ship in your [Front Arc] at range 1. That ship gains 1 tractor token, or 2 tractor tokens if it is in your [Bullseye Arc] at range 1." + }, + "slots": ["Crew", "Device", "Illicit", "Modification", "Tech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_164.jpg", + "ffg": 164, + "hyperspace": false + }, + { + "name": "Sarco Plank", + "caption": "The Scavenger", + "initiative": 2, + "limited": 1, + "cost": 32, + "xws": "sarcoplank", + "ability": "While you defend, you may treat your agility value as equal to the speed of the maneuver you executed this round.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_162.png", + "shipAbility": { + "name": "Spacetug Tractor Array", + "text": "Action: Choose a ship in your [Front Arc] at range 1. That ship gains 1 tractor token, or 2 tractor tokens if it is in your [Bullseye Arc] at range 1." + }, + "slots": ["Crew", "Device", "Illicit", "Modification", "Tech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_162.jpg", + "ffg": 162, + "hyperspace": false + }, + { + "name": "Unkar Plutt", + "caption": "Miserly Portion Master", + "initiative": 2, + "limited": 1, + "cost": 30, + "xws": "unkarplutt", + "ability": "At the start of the Engagement Phase, if there are one or more other ships at range 0, you and each other ship at range 0 gain 1 tractor token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_163.png", + "shipAbility": { + "name": "Spacetug Tractor Array", + "text": "Action: Choose a ship in your [Front Arc] at range 1. That ship gains 1 tractor token, or 2 tractor tokens if it is in your [Bullseye Arc] at range 1." + }, + "slots": ["Crew", "Device", "Illicit", "Modification", "Tech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_163.jpg", + "ffg": 163, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/scurrg-h-6-bomber.json b/pyxwb2/data/pilots/scum-and-villainy/scurrg-h-6-bomber.json new file mode 100644 index 0000000..01ff591 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/scurrg-h-6-bomber.json @@ -0,0 +1,110 @@ +{ + "name": "Scurrg H-6 bomber", + "xws": "scurrgh6bomber", + "ffg": 4, + "size": "Medium", + "dial": [ + "1BB", + "1FB", + "1NB", + "2TW", + "2BW", + "2FB", + "2NW", + "2YW", + "3ER", + "3TR", + "3BW", + "3FW", + "3NW", + "3YR", + "3RR", + "4FR" + ], + "dialCodes": [ + "SRG" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Scurrg.png", + "pilots": [ + { + "name": "Captain Nym", + "caption": "Captain of the Lok Revenants", + "initiative": 5, + "limited": 1, + "cost": 48, + "xws": "captainnym", + "ability": "Before a friendly bomb or mine would detonate, you may spend 1 [Charge] to prevent it from detonating. While you defend against an attack obstructed by a bomb or mine, roll 1 additional defense die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_204.png", + "charges": { "value": 1, "recovers": 1 }, + "slots": [ + "Talent", + "Turret", + "Crew", + "Device", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_204.jpg", + "ffg": 204, + "hyperspace": false + }, + { + "name": "Lok Revenant", + "initiative": 2, + "limited": 0, + "cost": 45, + "xws": "lokrevenant", + "text": "The Nubian Design Collective crafted the Scurrg H-6 Bomber with combat versatility in mind, arming it with powerful shields and a bristling array of destructive weaponry.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_206.png", + "slots": [ + "Turret", + "Crew", + "Device", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_206.jpg", + "ffg": 206, + "hyperspace": false + }, + { + "name": "Sol Sixxa", + "caption": "Cunning Commander", + "initiative": 3, + "limited": 1, + "cost": 46, + "xws": "solsixxa", + "ability": "If you would drop a device using a [1 [Straight]] template, you may drop it using any other speed 1 template instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_205.png", + "slots": [ + "Talent", + "Turret", + "Crew", + "Device", + "Device", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_205.jpg", + "ffg": 205, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/starviper-class-attack-platform.json b/pyxwb2/data/pilots/scum-and-villainy/starviper-class-attack-platform.json new file mode 100644 index 0000000..42fc454 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/starviper-class-attack-platform.json @@ -0,0 +1,153 @@ +{ + "name": "StarViper-class Attack Platform", + "xws": "starviperclassattackplatform", + "ffg": 3, + "size": "Small", + "dial": [ + "1TW", + "1BB", + "1FB", + "1NB", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3BW", + "3FB", + "3NW", + "3PR", + "4FW" + ], + "dialCodes": [ + "SV" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 4 }, + { "type": "shields", "value": 1 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Boost" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_StarViper.png", + "pilots": [ + { + "name": "Black Sun Assassin", + "initiative": 3, + "limited": 0, + "cost": 48, + "xws": "blacksunassassin", + "text": "Although assassinations can be handled with a shot in the dark or a dire substance added to a drink, a flaming shuttle tumbling from the sky sends a special kind of message.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_181.png", + "shipAbility": { + "name": "Microthrusters", + "text": "While you perform a barrel roll, you must use the [Bank Left] or [Bank Right] template instead of the [Straight] template." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_181.jpg", + "ffg": 181, + "hyperspace": false + }, + { + "name": "Black Sun Enforcer", + "initiative": 2, + "limited": 0, + "cost": 45, + "xws": "blacksunenforcer", + "text": "Prince Xizor himself collaborated with MandalMotors to design the StarViper-class attack platform, one of the most formidable starfighters in the galaxy.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_182.png", + "shipAbility": { + "name": "Microthrusters", + "text": "While you perform a barrel roll, you must use the [Bank Left] or [Bank Right] template instead of the [Straight] template." + }, + "slots": ["Sensor", "Torpedo", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_182.jpg", + "ffg": 182, + "hyperspace": false + }, + { + "name": "Dalan Oberos", + "caption": "Elite Bounty Hunter", + "initiative": 4, + "limited": 1, + "cost": 54, + "xws": "dalanoberos-starviperclassattackplatform", + "ability": "After you fully execute a maneuver, you may gain 1 stress token to rotate your ship 90°.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_179.png", + "shipAbility": { + "name": "Microthrusters", + "text": "While you perform a barrel roll, you must use the [Bank Left] or [Bank Right] template instead of the [Straight] template." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_179.jpg", + "ffg": 179, + "hyperspace": false + }, + { + "name": "Guri", + "caption": "Prince Xizor's Bodyguard", + "initiative": 5, + "limited": 1, + "cost": 64, + "xws": "guri", + "ability": "At the start of the Engagement Phase, if there is at least 1 enemy ship at range 0-1, you may gain 1 focus token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_178.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Calculate" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Calculate" }, + "type": "Boost" + } + ], + "shipAbility": { + "name": "Microthrusters", + "text": "While you perform a barrel roll, you must use the [Bank Left] or [Bank Right] template instead of the [Straight] template." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_178.jpg", + "ffg": 178, + "hyperspace": false + }, + { + "name": "Prince Xizor", + "caption": "Black Sun Kingpin", + "initiative": 4, + "limited": 1, + "cost": 54, + "xws": "princexizor", + "ability": "While you defend, after the Neutralize Results step, another friendly ship at range 0-1 and in the attack arc may suffer 1 [Hit] or [Critical Hit] damage. If it does, cancel 1 matching result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_180.png", + "shipAbility": { + "name": "Microthrusters", + "text": "While you perform a barrel roll, you must use the [Bank Left] or [Bank Right] template instead of the [Straight] template." + }, + "slots": ["Talent", "Sensor", "Torpedo", "Modification", "Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_180.jpg", + "ffg": 180, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/yv-666-light-freighter.json b/pyxwb2/data/pilots/scum-and-villainy/yv-666-light-freighter.json new file mode 100644 index 0000000..77536a6 --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/yv-666-light-freighter.json @@ -0,0 +1,142 @@ +{ + "name": "YV-666 Light Freighter", + "xws": "yv666lightfreighter", + "ffg": 24, + "size": "Large", + "dial": [ + "0OR", + "1BB", + "1FB", + "1NB", + "2TR", + "2BW", + "2FB", + "2NW", + "2YR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW" + ], + "dialCodes": [ + "YV6" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Full Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 9 }, + { "type": "shields", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Reinforce" }, + { "difficulty": "White", "type": "Lock" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_YV-666.png", + "pilots": [ + { + "name": "Bossk", + "caption": "Fearsome Hunter", + "initiative": 4, + "limited": 1, + "cost": 62, + "xws": "bossk", + "ability": "While you perform a primary attack, after the Neutralize Results step, you may spend 1 [Critical Hit] result to add 2 [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_210.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/f7/65/f765febe-2e28-4f9f-8ee0-1dbc4c013ef3/op067_bossk.png", + "source": "Coruscant Invitational 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_210.jpg", + "ffg": 210, + "hyperspace": false + }, + { + "name": "Latts Razzi", + "caption": "Martial Artist", + "initiative": 3, + "limited": 1, + "cost": 57, + "xws": "lattsrazzi", + "ability": "At the start of the Engagement Phase, you may choose a ship at range 1 and spend a lock you have on that ship. If you do, that ship gains 1 tractor token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_212.png", + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_212.jpg", + "ffg": 212, + "hyperspace": false + }, + { + "name": "Moralo Eval", + "caption": "Criminal Mastermind", + "initiative": 4, + "limited": 1, + "cost": 66, + "xws": "moraloeval", + "ability": "If you would flee, you may spend 1 [Charge]. If you do, place yourself in reserves instead. At the start of the next Planning Phase, place yourself within range 1 of the edge of the play area that you fled from.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_211.png", + "charges": { "value": 2, "recovers": 0 }, + "slots": [ + "Talent", + "Cannon", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_211.jpg", + "ffg": 211, + "hyperspace": false + }, + { + "name": "Trandoshan Slaver", + "initiative": 2, + "limited": 0, + "cost": 52, + "xws": "trandoshanslaver", + "text": "The spacious triple-decker design of the YV-666 makes it popular among bounty hunters and slavers, who often retrofit an entire deck for prisoner transport.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_213.png", + "slots": [ + "Cannon", + "Missile", + "Crew", + "Crew", + "Illicit", + "Modification", + "Title", + "Gunner" + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_213.jpg", + "ffg": 213, + "hyperspace": false + } + ] +} diff --git a/pyxwb2/data/pilots/scum-and-villainy/z-95-af4-headhunter.json b/pyxwb2/data/pilots/scum-and-villainy/z-95-af4-headhunter.json new file mode 100644 index 0000000..fc2a23b --- /dev/null +++ b/pyxwb2/data/pilots/scum-and-villainy/z-95-af4-headhunter.json @@ -0,0 +1,132 @@ +{ + "name": "Z-95-AF4 Headhunter", + "xws": "z95af4headhunter", + "ffg": 38, + "size": "Small", + "dial": [ + "1BW", + "1FB", + "1NW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "3KR", + "4FW", + "4KR" + ], + "dialCodes": [ + "Z95" + ], + "faction": "Scum and Villainy", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 2 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Z-95.png", + "pilots": [ + { + "name": "Binayre Pirate", + "initiative": 1, + "limited": 0, + "cost": 22, + "xws": "binayrepirate", + "text": "Operating from the Double Worlds, Talus and Tralus, Kath Scarlet's gang of smugglers and pirates would never be described as reputable or dependable—even by other criminals.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_173.png", + "slots": ["Missile", "Illicit", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_173.jpg", + "ffg": 173, + "hyperspace": false + }, + { + "name": "Black Sun Soldier", + "initiative": 3, + "limited": 0, + "cost": 24, + "xws": "blacksunsoldier", + "text": "The vast and influential Black Sun crime syndicate can always find a use for talented pilots, provided they aren't particular about how they earn their credits.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_172.png", + "slots": ["Talent", "Missile", "Illicit", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_172.jpg", + "ffg": 172, + "hyperspace": false + }, + { + "name": "Kaa'to Leeachos", + "caption": "Imposing Marauder", + "initiative": 3, + "limited": 1, + "cost": 27, + "xws": "kaatoleeachos", + "ability": "At the start of the Engagement Phase, you may choose 1 friendly ship at range 0-2. If you do, transfer 1 focus or evade token from that ship to yourself.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_170.png", + "slots": ["Talent", "Missile", "Illicit", "Modification"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_170.jpg", + "ffg": 170, + "hyperspace": false + }, + { + "name": "N'dru Suhlak", + "caption": "Hunt Saboteur", + "initiative": 4, + "limited": 1, + "cost": 30, + "xws": "ndrusuhlak", + "ability": "While you perform a primary attack, if there are no other friendly ships at range 0-2, roll 1 additional attack die.", + "slots": ["Talent", "Missile", "Illicit", "Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_169.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_169.jpg", + "ffg": 169, + "hyperspace": false + }, + { + "name": "Nashtah Pup", + "caption": "Contingency Plan", + "initiative": 0, + "limited": 1, + "cost": 6, + "xws": "nashtahpup", + "ability": "You can deploy only via emergency deployment, and you have the name, initiative, pilot ability, and ship [Charge] of the friendly, destroyed Hound's Tooth.", + "shipAbility": { + "name": "Escape Craft", + "text": "Setup: Requires the Hound's Tooth. You must begin the game docked with the Hound's Tooth." + }, + "slots": ["Missile", "Illicit", "Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Pilot_171.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_P_171.jpg", + "ffg": 171, + "hyperspace": false + }, + { + "name": "Bossk", + "caption": "Fearsome Hunter", + "initiative": 4, + "limited": 1, + "xws": "bossk-z95af4headhunter", + "ability": "While you perform a primary attack, after the Neutralize Results step, you may spend 1 [Critical Hit] result to add 2 [Hit] results.", + "shipAbility": { + "name": "Pursuit Craft", + "text": "After you deploy, you may acquire a lock on a ship the friendly Hound's Tooth has locked." + }, + "slots": ["Talent", "Missile", "Illicit", "Modification"], + "hyperspace": false, + "cost": 29, + "ffg": 635, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/48cf03ca0e16baf2f506829f20517b83.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/13a94a5ed78d4629017a439fbf0906ea.png" + } + ] +} diff --git a/pyxwb2/data/pilots/separatist-alliance/belbullab-22-starfighter.json b/pyxwb2/data/pilots/separatist-alliance/belbullab-22-starfighter.json new file mode 100644 index 0000000..0cd528b --- /dev/null +++ b/pyxwb2/data/pilots/separatist-alliance/belbullab-22-starfighter.json @@ -0,0 +1,135 @@ +{ + "name": "Belbullab-22 Starfighter", + "xws": "belbullab22starfighter", + "size": "Small", + "dial": [ + "1TW", + "1BW", + "1NW", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3TR", + "3BW", + "3FB", + "3NW", + "3YR", + "3PR", + "4FW", + "5FW" + ], + "dialCodes": [ + "B22" + ], + "faction": "Separatist Alliance", + "stats": [ + { "type": "attack", "value": 3, "arc": "Front Arc" }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 }, + { "type": "shields", "value": 2 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Focus" }, + "type": "Boost" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Belbullab-22.png", + "pilots": [ + { + "name": "General Grievous", + "caption": "Ambitious Cyborg", + "initiative": 4, + "limited": 1, + "xws": "generalgrievous", + "ability": "While you perform a primary attack, if you are not in the defender's firing arc, you may reroll up to 2 attack dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9e4a215e799a9e7ad1853d19d149dd20.png", + "hyperspace": false, + "cost": 44, + "slots": ["Talent", "Modification", "Title", "Tactical Relay"], + "ffg": 492, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3e4dee70764ead7ebe581246a0d4b85d.jpg" + }, + { + "name": "Wat Tambor", + "caption": "Techno Union Foreman", + "initiative": 3, + "limited": 1, + "xws": "wattambor", + "ability": "While you perform a primary attack, you may reroll 1 attack die for each calculating friendly ship at range 1 of the defender.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/68cbd6082683fe17778f829555f23a26.png", + "hyperspace": false, + "cost": 42, + "slots": ["Talent", "Modification", "Title", "Tactical Relay"], + "ffg": 493, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/95127fa6d286fe64f3070e742dc64a7c.jpg" + }, + { + "name": "Feethan Ottraw Autopilot", + "limited": 0, + "initiative": 1, + "xws": "feethanottrawautopilot", + "text": "Unlike the more disposable fighters it also built for the Separatists, Feethan Ottraw Scalable Assemblies designed the Belbullab-22 with a solid mix of firepower, durability, and speed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/538c4833605af80b226da9e5f800e6ef.png", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Calculate" }, + "type": "Barrel Roll" + }, + { + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Calculate" }, + "type": "Boost" + } + ], + "hyperspace": false, + "cost": 35, + "slots": ["Modification", "Title", "Tactical Relay"], + "ffg": 496, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/91052cb8f4ba464f5ac4572a725f757b.jpg" + }, + { + "name": "Captain Sear", + "caption": "Kage Infiltrator", + "limited": 1, + "initiative": 2, + "xws": "captainsear", + "ability": "While a friendly ship at range 0-3 performs a primary attack, if the defender is in its [Bullseye Arc], before the Neutralize Results step, the friendly ship may spend 1 calculate token to cancel 1 [Evade] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3d3704ab454433a8b4d73ee6bff430b8.png", + "hyperspace": false, + "cost": 45, + "slots": ["Modification", "Title", "Tactical Relay"], + "ffg": 494, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/91a7a38482d28f21b2620d058800a8fe.jpg" + }, + { + "name": "Skakoan Ace", + "xws": "skakoanace", + "cost": 38, + "slots": ["Talent", "Modification", "Title", "Tactical Relay"], + "ffg": 495, + "initiative": 3, + "limited": 0, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/af0e63b7754ef598f1f36ed9a6c4b4ee.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ceb7a3bc406ff17be5dee5de62b39195.png", + "text": "With its powerful engines, devastating triple laser cannons, and high customizability, the Belbullab-22 is the chosen craft of several elite Separatist Alliance pilots, including the infamous General Grievous.", + "hyperspace": false + } + ], + "ffg": 58 +} diff --git a/pyxwb2/data/pilots/separatist-alliance/hyena-class-droid-bomber.json b/pyxwb2/data/pilots/separatist-alliance/hyena-class-droid-bomber.json new file mode 100644 index 0000000..6c8d063 --- /dev/null +++ b/pyxwb2/data/pilots/separatist-alliance/hyena-class-droid-bomber.json @@ -0,0 +1,188 @@ +{ + "name": "Hyena-class Droid Bomber", + "xws": "hyenaclassdroidbomber", + "size": "Small", + "ffg": 66, + "dial": [ + "1TW", + "1BR", + "1FW", + "1NR", + "1YW", + "2ER", + "2TB", + "2BW", + "2FB", + "2NW", + "2YB", + "2RR", + "2KR", + "3TW", + "3FB", + "3YW", + "4FW", + "5FR" + ], + "dialCodes": [ + "HDB" + ], + "faction": "Separatist Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 5 } + ], + "actions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "type": "Barrel Roll", + "linked": { "difficulty": "Red", "type": "Lock" } + }, + { "difficulty": "Red", "type": "Reload" } + ], + "pilots": [ + { + "name": "Techno Union Bomber", + "initiative": 1, + "limited": 0, + "xws": "technounionbomber", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "hyperspace": true, + "cost": 25, + "slots": [ + "Torpedo", + "Missile", + "Device", + "Modification", + "Configuration" + ], + "text": "Baktoid Armor Workshop developed the Hyena as a strike craft compatible with Trade Federation Vulture swarm tactics.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/749bdc89c3da6b8034154780959e9c34.png", + "ffg": 568, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/38a1ea6b53a619fcc6121cc32a91024d.jpg" + }, + { + "name": "Bombardment Drone", + "caption": "Time on Target", + "limited": 3, + "initiative": 3, + "xws": "bombardmentdrone", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "ability": "If you would drop a device, you may launch that device instead, using the same template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/099422de35fb5ad2c2d238237e7dfe2c.png", + "hyperspace": true, + "cost": 29, + "slots": ["Sensor", "Device", "Device", "Modification", "Configuration"], + "ffg": 565, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bc5e862af323dbe8db28d0d6bc6be4ad.jpg" + }, + { + "name": "DBS-404", + "caption": "Preservation Protocol Not Found", + "xws": "dbs404", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "hyperspace": true, + "cost": 30, + "slots": [ + "Torpedo", + "Missile", + "Device", + "Modification", + "Configuration" + ], + "ability": "You can perform primary attacks at range 0. While you perform an attack at attack range 0-1, you must roll 1 additional die. After the attack hits, suffer 1 [Critical Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3e647295c7237a5eb36b94d887eb8e56.png", + "ffg": 563, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fb1f119c8dcd69db43a442fecf25fceb.jpg" + }, + { + "name": "Baktoid Prototype", + "caption": "Function over Form", + "xws": "baktoidprototype", + "initiative": 1, + "limited": 2, + "ability": "While you perform a special attack, if a friendly ship with the Networked Calculations ship ability has a lock on the defender, you may ignore the [Focus], [Calculate], or [Lock] requirement of that attack.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/254bc7be63cc9f4e629198f8d45f2f9b.png", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "hyperspace": true, + "cost": 28, + "slots": [ + "Sensor", + "Missile", + "Missile", + "Modification", + "Configuration" + ], + "ffg": 566, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f1e719d3490aceee6e5d93ac5b2a6cb2.jpg" + }, + { + "name": "Separatist Bomber", + "xws": "separatistbomber", + "initiative": 3, + "limited": 0, + "text": "The droid armies of the Separatists are callous to the plight of civilians and make no effort to limit collateral damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cf510ca885a5f85395542b9aa51fba73.png", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "hyperspace": true, + "cost": 28, + "slots": [ + "Torpedo", + "Missile", + "Device", + "Modification", + "Configuration" + ], + "ffg": 567, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/162821196c9ca9ca7ef8d1cb1acab15b.jpg" + }, + { + "name": "DBS-32C", + "xws": "dbs32c", + "caption": "Droid Control Signal Relay", + "limited": 1, + "initiative": 3, + "ability": "At the start of the Engagement Phase, you may spend 1 calculate token to perform a [Coordinate] action. You cannot coordinate ships that do not have the Networked Calculations ship ability.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1befc5619a02e2ea8b7bfb8df93471a1.png", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "type": "Barrel Roll", + "linked": { "difficulty": "Red", "type": "Lock" } + }, + { "difficulty": "Red", "type": "Jam" } + ], + "hyperspace": true, + "cost": 40, + "slots": ["Sensor", "Tactical Relay", "Modification", "Configuration"], + "ffg": 564, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f58f50898f4fa3900eb1b7d01aec4ae5.jpg" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Hyena.png" +} diff --git a/pyxwb2/data/pilots/separatist-alliance/nantex-class-starfighter.json b/pyxwb2/data/pilots/separatist-alliance/nantex-class-starfighter.json new file mode 100644 index 0000000..ae57832 --- /dev/null +++ b/pyxwb2/data/pilots/separatist-alliance/nantex-class-starfighter.json @@ -0,0 +1,150 @@ +{ + "name": "Nantex-class Starfighter", + "xws": "nantexclassstarfighter", + "size": "Small", + "ffg": 67, + "dial": [ + "1TW", + "1BB", + "1NB", + "1YW", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "3LR", + "3TW", + "3BB", + "3FB", + "3NB", + "3YW", + "3PR", + "4FW", + "5FW", + "5KR" + ], + "dialCodes": [ + "NTX" + ], + "faction": "Separatist Alliance", + "stats": [ + { "arc": "Bullseye Arc", "type": "attack", "value": 3 }, + { "arc": "Single Turret Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Evade" } + ], + "pilots": [ + { + "name": "Stalgasin Hive Guard", + "initiative": 3, + "limited": 0, + "xws": "stalgasinhiveguard", + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "hyperspace": true, + "text": "Designed for the unique physiology of Geonosian pilots, Nantex-class starfighters are capable of maneuvers that would rip most ships—and pilots—apart.", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/62c29b8b7f82e37980d58b39023a800a.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e97a0ae22847e0b71d920a0df9dfcfab.png", + "cost": 34, + "ffg": 609, + "slots": ["Talent"] + }, + { + "name": "Sun Fac", + "initiative": 6, + "limited": 1, + "xws": "sunfac", + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "hyperspace": true, + "caption": "Archduke's Enforcer", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ace32f2bdd974de54020be34bfb85a76.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/42265df53c90026a58ac96b0acd3c1f8.png", + "ability": "While you perform a primary attack, if the defender is tractored, roll 1 additional attack die.", + "cost": 54, + "ffg": 604, + "slots": ["Talent", "Talent"] + }, + { + "name": "Berwer Kret", + "xws": "berwerkret", + "initiative": 5, + "limited": 1, + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "hyperspace": true, + "caption": "Hive Guard Captain", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8466283eeb7d476744913f5d9d69e745.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f1c76ce6ff266c23099686392efef565.png", + "ability": "After you perform an attack that hits, each friendly ship with [Calculate] on its action bar and a lock on the defender may perform a red [Calculate] action.", + "cost": 40, + "ffg": 605, + "slots": ["Talent", "Talent"] + }, + { + "name": "Chertek", + "xws": "chertek", + "initiative": 4, + "limited": 1, + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "hyperspace": true, + "caption": "Opportunistic Ace", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fc7fff6c1e6eb73ff6ae10768f5491a7.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/07504533be45d13cb82d71ea11d234f7.png", + "ability": "While you perform a primary attack, if the defender is tractored, you may reroll up to 2 attack dice.", + "cost": 39, + "ffg": 606, + "slots": ["Talent", "Talent"] + }, + { + "name": "Gorgol", + "caption": "Handy Engineer", + "cost": 36, + "ffg": 607, + "limited": 1, + "initiative": 2, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8749f3b0f17a7c517e8633cc2558792f.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d2d0764f83a2740f407082e934986ff2.png", + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "ability": "During the System Phase, you may gain 1 disarm token and choose a friendly ship at range 1-2. If you do, it gains 1 tractor token, then repairs 1 of its faceup Ship trait damage cards.", + "hyperspace": true, + "slots": ["Talent", "Modification"], + "xws": "gorgol" + }, + { + "name": "Petranaki Arena Ace", + "cost": 38, + "ffg": 608, + "initiative": 4, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/5c32b5d481ad922be7a0ec4a3743d1d6.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d2d62b6070fdf59b58db79aadb845d54.png", + "shipAbility": { + "name": "Pinpoint Tractor Array", + "text": "You cannot rotate your [Single Turret Arc] to your [Rear Arc]. After you execute a maneuver, you may gain 1 tractor token to perform a [Rotate Arc] action." + }, + "text": "The Petranaki Arena is a massive edifice on Geonosis that was a key site in the first battle of the Clone Wars.", + "hyperspace": true, + "limited": 0, + "slots": ["Talent", "Talent"], + "xws": "petranakiarenaace" + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_Nantex_Class_Starfighter.png" +} diff --git a/pyxwb2/data/pilots/separatist-alliance/sith-infiltrator.json b/pyxwb2/data/pilots/separatist-alliance/sith-infiltrator.json new file mode 100644 index 0000000..7edf176 --- /dev/null +++ b/pyxwb2/data/pilots/separatist-alliance/sith-infiltrator.json @@ -0,0 +1,146 @@ +{ + "name": "Sith Infiltrator", + "xws": "sithinfiltrator", + "size": "Large", + "dial": [ + "1TR", + "1BB", + "1FB", + "1NB", + "1YR", + "2LR", + "2TW", + "2BB", + "2FB", + "2NB", + "2YW", + "2PR", + "3TW", + "3BW", + "3FB", + "3NW", + "3YW", + "4FW", + "5KR" + ], + "dialCodes": [ + "SIn" + ], + "faction": "Separatist Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 3 }, + { "type": "agility", "value": 1 }, + { "type": "hull", "value": 6 }, + { "type": "shields", "value": 4 } + ], + "actions": [ + { "difficulty": "White", "type": "Focus" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_SithInfiltrator.png", + "pilots": [ + { + "name": "Darth Maul", + "caption": "Sith Assassin", + "initiative": 5, + "limited": 1, + "xws": "darthmaul", + "force": { "value": 3, "recovers": 1, "side": ["dark"] }, + "ability": "After you perform an attack, you may spend 2 [Force] to perform a bonus primary attack against a different target. If your attack missed, you may perform that bonus primary attack against the same target instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/95428161db7de4adcea6fa8bcbf9de2f.png", + "hyperspace": true, + "cost": 65, + "slots": [ + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Force Power", + "Tactical Relay" + ], + "ffg": 503, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/04b1c1fea3735eb844455dd3278346d0.jpg" + }, + { + "name": "Count Dooku", + "caption": "Darth Tyranus", + "initiative": 3, + "limited": 1, + "xws": "countdooku", + "force": { "value": 3, "recovers": 1, "side": ["dark"] }, + "ability": "After you defend, if the attacker is in your firing arc, you may spend 1 [Force] to remove 1 of your blue or red tokens. After you perform an attack that hits, you may spend 1 [Force] to perform an action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/88959087710ec5a80a16dd93573f149d.png", + "hyperspace": true, + "cost": 63, + "slots": [ + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Force Power", + "Tactical Relay" + ], + "ffg": 504, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/65eabe68c7d1ae072442d8c8808414db.jpg" + }, + { + "name": "Dark Courier", + "initiative": 2, + "limited": 0, + "xws": "darkcourier", + "text": "The vessel called the Scimitar was heavily modified, equipped with stealth technologies and advanced surveillance devices for infiltration and assassination missions.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/132f1957b904c890b94bf3aaf2a944ce.png", + "hyperspace": false, + "cost": 51, + "slots": [ + "Cannon", + "Torpedo", + "Crew", + "Crew", + "Device", + "Modification", + "Title", + "Tactical Relay" + ], + "ffg": 506, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8b9c158df033daab2ea6acecd29c5c0d.jpg" + }, + { + "name": "0-66", + "xws": "066", + "cost": 51, + "slots": [ + "Talent", + "Torpedo", + "Cannon", + "Crew", + "Crew", + "Tactical Relay", + "Device", + "Title", + "Modification" + ], + "ffg": 505, + "caption": "Sinister Automaton", + "initiative": 3, + "limited": 1, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c0a65aa29f085d517d907bc7799e4146.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9edd9bb6846e77723d8f0381bb7909aa.png", + "ability": "After you defend, you may spend 1 calculate token to perform an action.", + "shipActions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { "difficulty": "Red", "type": "Barrel Roll" } + ], + "hyperspace": true + } + ], + "ffg": 60 +} diff --git a/pyxwb2/data/pilots/separatist-alliance/vulture-class-droid-fighter.json b/pyxwb2/data/pilots/separatist-alliance/vulture-class-droid-fighter.json new file mode 100644 index 0000000..cad6bcd --- /dev/null +++ b/pyxwb2/data/pilots/separatist-alliance/vulture-class-droid-fighter.json @@ -0,0 +1,152 @@ +{ + "name": "Vulture-class Droid Fighter", + "xws": "vultureclassdroidfighter", + "size": "Small", + "dial": [ + "1TW", + "1YW", + "1KR", + "2ER", + "2TB", + "2BW", + "2FB", + "2NW", + "2YB", + "2RR", + "3TW", + "3BR", + "3FB", + "3NR", + "3YW", + "4FB", + "5FW" + ], + "dialCodes": [ + "VDF" + ], + "faction": "Separatist Alliance", + "stats": [ + { "arc": "Front Arc", "type": "attack", "value": 2 }, + { "type": "agility", "value": 2 }, + { "type": "hull", "value": 3 } + ], + "actions": [ + { "difficulty": "White", "type": "Calculate" }, + { "difficulty": "White", "type": "Lock" }, + { + "difficulty": "White", + "type": "Barrel Roll", + "linked": { "difficulty": "Red", "type": "Calculate" } + } + ], + "icon": "https://sb-cdn.fantasyflightgames.com/ship_types/I_VultureDroid.png", + "pilots": [ + { + "name": "Trade Federation Drone", + "initiative": 1, + "limited": 0, + "xws": "tradefederationdrone", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "text": "The Trade Federation deployed countless Vulture Droids at the Battle of Naboo, and continues to use these inexpensive starfighters in the Clone Wars.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4d8ed38f907fb4869611add738abda11.png", + "hyperspace": true, + "cost": 19, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 498, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/df075613c4c3dbe7803df6bfa5082262.jpg" + }, + { + "name": "Precise Hunter", + "caption": "Pinpoint Protocols", + "limited": 3, + "initiative": 3, + "xws": "precisehunter", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "ability": "While you perform an attack, if the defender is in your [Bullseye Arc], you may reroll 1 blank result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/44cd712b4db9f34091cff73a4fda4303.png", + "hyperspace": true, + "cost": 23, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 500, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fab82de87d230b77a5e4b2360ea9af93.jpg" + }, + { + "name": "Haor Chall Prototype", + "caption": "Xi Char Offering", + "limited": 2, + "initiative": 1, + "xws": "haorchallprototype", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "ability": "After an enemy ship in your [Bullseye Arc] at range 0-2 declares another friendly ship as the defender, you may perform a [Calculate] or [Lock] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/91421be1f3bbbefd005c1b2682f0bc44.png", + "hyperspace": true, + "cost": 21, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 502, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/18cdc19a9627a38d0ec2783ccd5cb183.jpg" + }, + { + "name": "DFS-081", + "xws": "dfs081", + "initiative": 3, + "limited": 1, + "caption": "Preservation Programming", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "ability": "While a friendly ship at range 0-1 defends, it may spend 1 calculate token to change all [Critical Hit] results to [Hit] results.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/808de8db6d43921b4e3124f01d5d4947.png", + "hyperspace": true, + "cost": 26, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 499, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2d797107c628ebd2ab8e526fcbb6076d.jpg" + }, + { + "name": "Separatist Drone", + "initiative": 3, + "limited": 0, + "xws": "separatistdrone", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "text": "As the Clone Wars escalate, the Separatist Alliance continues to develop the technology of droid starfighters, as well as the tactical droids that command them.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/64e75b9a1024ac0c909634e62e165b2e.png", + "hyperspace": true, + "cost": 21, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 497, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/df638358903b64e7b246b3a56fa68af7.jpg" + }, + { + "name": "DFS-311", + "xws": "dfs311", + "initiative": 1, + "limited": 1, + "caption": "Scouting Drone", + "shipAbility": { + "name": "Networked Calculations", + "text": "While you defend or perform an attack, you may spend 1 calculate token from a friendly ship at range 0-1 to change 1 [Focus] result to an [Evade] or [Hit] result." + }, + "ability": "At the start of the Engagement Phase, you may transfer 1 of your calculate tokens to another friendly ship at range 0-3.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/741f05dbe0f7e56fc9918b86bdb0e3fb.png", + "hyperspace": true, + "cost": 23, + "slots": ["Missile", "Modification", "Configuration"], + "ffg": 501, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/5fb72145f183eeddd8d37ce1a4d114f7.jpg" + } + ], + "ffg": 59 +} diff --git a/pyxwb2/data/quick-builds/first-order.json b/pyxwb2/data/quick-builds/first-order.json new file mode 100644 index 0000000..78e589c --- /dev/null +++ b/pyxwb2/data/quick-builds/first-order.json @@ -0,0 +1,426 @@ +{ + "quick-builds": [ + { + "threat": 2, + "pilots": [ + { + "id": "midnight", + "upgrades": { + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "commandermalarus", + "upgrades": { + "tech": ["advancedoptics"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "scorch", + "upgrades": { + "talent": ["fanatical"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "static", + "upgrades": { + "talent": ["outmaneuver"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "longshot", + "upgrades": { + "talent": ["elusive", "predator"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "omegasquadronace", + "upgrades": { + "talent": ["elusive", "fanatical"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "muse", + "upgrades": { + "talent": ["squadleader"], + "tech": ["advancedoptics"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tn3465", + "upgrades": { + "tech": ["targetingsynchronizer"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zetasquadronpilot", + "upgrades": { + "tech": ["advancedoptics"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "epsilonsquadroncadet", + "upgrades": { + "tech": ["targetingsynchronizer"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "lieutenantrivas" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "null", + "upgrades": { + "talent": ["swarmtactics"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "quickdraw", + "upgrades": { + "talent": ["juke"], + "sensor": ["collisiondetector"], + "gunner": ["hotshotgunner"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zetasquadronsurvivor", + "upgrades": { + "tech": ["patternanalyzer"], + "missile": ["ionmissiles"], + "gunner": ["specialforcesgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zetasquadronsurvivor", + "upgrades": { + "tech": ["advancedoptics"], + "talent": ["proudtradition"], + "sensor": ["passivesensors"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "backdraft", + "upgrades": { + "tech": ["patternanalyzer"], + "missile": ["ionmissiles"], + "sensor": ["collisiondetector"], + "gunner": ["specialforcesgunner"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "omegasquadronexpert", + "upgrades": { + "talent": ["juke"], + "gunner": ["specialforcesgunner"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "kyloren", + "upgrades": { + "force-power": ["hate", "predictiveshot"], + "tech": ["primedthrusters"], + "torpedo": ["advprotontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "recoil", + "upgrades": { + "talent": ["predator"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "firstordertestpilot", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "firstordertestpilot", + "upgrades": { + "talent": ["proudtradition"], + "torpedo": ["plasmatorpedoes"], + "sensor": ["passivesensors"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "blackout", + "upgrades": { + "talent": ["elusive"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "blackout", + "upgrades": { + "talent": ["trickshot"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "avenger", + "upgrades": { + "tech": ["primedthrusters"], + "torpedo": ["advprotontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "sienarjaemusengineer", + "upgrades": { + "talent": ["snapshot"], + "sensor": ["passivesensors"], + "missile": ["magpulsewarheads"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sienarjaemusengineer" + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "lieutenanttavson", + "upgrades": { + "sensor": ["advancedsensors"], + "cannon": ["ioncannon"], + "crew": ["kyloren", "supremeleadersnoke"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "lieutenantdormitz", + "upgrades": { + "tech": ["biohexacryptcodes", "hyperspacetrackingdata"], + "cannon": ["tractorbeam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "starkillerbasepilot" + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "majorstridan", + "upgrades": { + "tech": ["biohexacryptcodes", "patternanalyzer"], + "crew": ["captainphasma", "generalhux"], + "cannon": ["tractorbeam"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "captaincardinal", + "upgrades": { + "crew": ["pettyofficerthanisson"], + "cannon": ["ioncannon"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "pettyofficerthanisson", + "upgrades": { + "crew": ["captainphasma"], + "modification": ["tacticalscrambler"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "captainphasma", + "upgrades": { + "tech": ["advancedoptics"], + "missile": ["ionmissiles"], + "talent": ["outmaneuver"], + "gunner": ["specialforcesgunner"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lieutenantlehuse", + "upgrades": { + "talent": ["elusive"], + "missile": ["magpulsewarheads"], + "modification": ["angleddeflectors"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "rush", + "upgrades": { + "tech": ["primedthrusters"], + "torpedo": ["protontorpedoes"], + "modification": ["angleddeflectors"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/galactic-empire.json b/pyxwb2/data/quick-builds/galactic-empire.json new file mode 100644 index 0000000..3ea40e4 --- /dev/null +++ b/pyxwb2/data/quick-builds/galactic-empire.json @@ -0,0 +1,1126 @@ +{ + "quick-builds": [ + { + "threat": 2, + "pilots": [ + { + "id": "valenrudor", + "upgrades": { + "talent": ["elusive"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksquadronace", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "academypilot" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "idenversio", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "idenversio", + "upgrades": { + "talent": ["lonewolf"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "nightbeast", + "upgrades": { + "talent": ["predator"], + "modification": ["hullupgrade", "shieldupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "obsidiansquadronpilot" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "scourgeskutu", + "upgrades": { + "talent": ["predator"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "wampa", + "upgrades": { + "talent": ["crackshot"], + "modification": ["hullupgrade", "stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksquadronace", + "upgrades": { + "talent": ["crackshot"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "gideonhask", + "upgrades": { + "talent": ["crackshot"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "delmeeko", + "upgrades": { + "talent": ["juke"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "howlrunner", + "upgrades": { + "talent": ["juke"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "seynmarana", + "upgrades": { + "talent": ["marksmanship"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "blacksquadronace", + "upgrades": { + "talent": ["juke"], + "modification": ["stealthdevice"] + } + }, + { + "id": "blacksquadronace", + "upgrades": { + "talent": ["juke"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "obsidiansquadronpilot", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["shieldupgrade"] + } + }, + { + "id": "obsidiansquadronpilot", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "academypilot" + }, + { + "id": "academypilot" + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "darthvader", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "missile": ["clustermissiles"], + "sensor": ["firecontrolsystem"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "maarekstele", + "upgrades": { + "talent": ["ruthless"], + "missile": ["clustermissiles"], + "sensor": ["firecontrolsystem"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "stormsquadronace", + "upgrades": { + "sensor": ["firecontrolsystem"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "vedfoslo", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["clustermissiles"], + "sensor": ["firecontrolsystem"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "zertikstrom", + "upgrades": { + "talent": ["squadleader"], + "missile": ["clustermissiles"], + "sensor": ["firecontrolsystem"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tempestsquadronpilot", + "upgrades": { + "missile": ["clustermissiles"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "coloneljendon", + "upgrades": { + "title": ["st321"], + "cannon": ["ioncannon"], + "sensor": ["collisiondetector"], + "crew": ["darthvader", "freelanceslicer"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "captainkagi", + "upgrades": { + "cannon": ["tractorbeam"], + "sensor": ["collisiondetector"], + "crew": ["emperorpalpatine"], + "modification": ["shieldupgrade", "staticdischargevanes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "lieutenantsai", + "upgrades": { + "cannon": ["jammingbeam"], + "sensor": ["advancedsensors"], + "crew": ["cienaree", "gnkgonkdroid"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "omicrongrouppilot", + "upgrades": { + "cannon": ["jammingbeam"], + "crew": ["admiralsloane"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lieutenantkestal", + "upgrades": { + "talent": ["elusive"], + "missile": ["barragerockets"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "onyxsquadronscout", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["protonrockets"], + "turret": ["dorsalturret"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "doubleedge", + "upgrades": { + "turret": ["ioncannonturret"], + "missile": ["concussionmissiles"], + "gunner": ["hotshotgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sienarspecialist", + "upgrades": { + "turret": ["ioncannonturret"], + "missile": ["homingmissiles"], + "gunner": ["veteranturretgunner"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "whisper", + "upgrades": { + "talent": ["juke"], + "sensor": ["advancedsensors"], + "crew": ["agentkallus"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "sigmasquadronace", + "upgrades": { + "talent": ["predator"], + "sensor": ["advancedsensors"], + "crew": ["grandinquisitor"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "echo", + "upgrades": { + "talent": ["lonewolf"], + "sensor": ["collisiondetector"], + "crew": ["perceptivecopilot"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "imdaartestpilot", + "upgrades": { + "crew": ["moffjerjerrod"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "duchess", + "upgrades": { + "talent": ["outmaneuver"], + "device": ["connernets"], + "modification": ["afterburners", "hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "duchess", + "upgrades": { + "talent": ["trickshot"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksquadronscout", + "upgrades": { + "talent": ["predator"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksquadronscout", + "upgrades": { + "gunner": ["skilledbombardier"], + "device": ["proximitymines"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksquadronscout", + "upgrades": { + "talent": ["snapshot"], + "modification": ["targetingcomputer"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "countdown", + "upgrades": { + "talent": ["elusive"], + "device": ["protonbombs"], + "gunner": ["skilledbombardier"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "countdown", + "upgrades": { + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "puresabacc", + "upgrades": { + "talent": ["trickshot"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "puresabacc", + "upgrades": { + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "planetarysentinel", + "upgrades": { + "gunner": ["skilledbombardier"], + "device": ["protonbombs"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "planetarysentinel", + "upgrades": { + "talent": ["trickshot"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "planetarysentinel", + "upgrades": { + "device": ["connernets"] + } + }, + { + "id": "planetarysentinel", + "upgrades": { + "device": ["connernets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "countessryad", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "onyxsquadronace" + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "rexlerbrath", + "upgrades": { + "talent": ["juke"], + "sensor": ["collisiondetector"], + "missile": ["clustermissiles"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "deltasquadronpilot", + "upgrades": { + "cannon": ["ioncannon"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "colonelvessery", + "upgrades": { + "talent": ["juke"], + "sensor": ["firecontrolsystem"], + "missile": ["clustermissiles"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "onyxsquadronace", + "upgrades": { + "talent": ["elusive"], + "sensor": ["advancedsensors"], + "missile": ["protonrockets"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tomaxbren", + "upgrades": { + "talent": ["crackshot"], + "torpedo": ["protontorpedoes"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "deathfire", + "upgrades": { + "missile": ["clustermissiles"], + "gunner": ["skilledbombardier"], + "device": ["seismiccharges", "proximitymines"], + "modification": ["electronicbaffle"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "majorrhymer", + "upgrades": { + "missile": ["clustermissiles"], + "talent": ["intimidation"], + "torpedo": ["advprotontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "scimitarsquadronpilot", + "upgrades": { + "missile": ["ionmissiles"], + "device": ["protonbombs"] + } + }, + { + "id": "scimitarsquadronpilot", + "upgrades": { + "missile": ["ionmissiles"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "captainjonus", + "upgrades": { + "torpedo": ["protontorpedoes"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "gammasquadronace", + "upgrades": { + "missile": ["concussionmissiles"], + "gunner": ["skilledbombardier"], + "device": ["bombletgenerator"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "grandinquisitor", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "missile": ["concussionmissiles"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "inquisitor", + "upgrades": { + "force-power": ["instinctiveaim"], + "missile": ["clustermissiles"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "inquisitor", + "upgrades": { + "force-power": ["brilliantevasion"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "seventhsister", + "upgrades": { + "missile": ["homingmissiles"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "baronoftheempire", + "upgrades": { + "missile": ["protonrockets"], + "talent": ["crackshot"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "baronoftheempire", + "upgrades": { + "missile": ["magpulsewarheads"], + "talent": ["snapshot"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "soontirfel", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["afterburners", "stealthdevice"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "alphasquadronpilot", + "upgrades": { + "modification": ["ablativeplating"] + } + }, + { + "id": "alphasquadronpilot", + "upgrades": { + "modification": ["ablativeplating"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "turrphennir", + "upgrades": { + "talent": ["daredevil"], + "modification": ["electronicbaffle"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sabersquadronace", + "upgrades": { + "talent": ["predator"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lieutenantkarsabi", + "upgrades": { + "talent": ["outmaneuver"], + "cannon": ["heavylasercannon"], + "configuration": ["xg1assaultconfiguration"], + "modification": ["advancedslam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "nusquadronpilot", + "upgrades": { + "torpedo": ["protontorpedoes"], + "sensor": ["firecontrolsystem"], + "configuration": ["os1arsenalloadout"], + "modification": ["advancedslam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "majorvynder", + "upgrades": { + "missile": ["barragerockets"], + "talent": ["saturationsalvo"], + "configuration": ["os1arsenalloadout"], + "modification": ["advancedslam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "rhosquadronpilot", + "upgrades": { + "missile": ["homingmissiles"], + "sensor": ["firecontrolsystem"], + "cannon": ["ioncannon"], + "configuration": ["xg1assaultconfiguration"], + "modification": ["advancedslam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "deathrain", + "upgrades": { + "missile": ["homingmissiles"], + "sensor": ["trajectorysimulator"], + "device": ["bombletgenerator"], + "modification": ["ablativeplating"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cutlasssquadronpilot", + "upgrades": { + "missile": ["ionmissiles"], + "sensor": ["trajectorysimulator"], + "gunner": ["skilledbombardier"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "redline", + "upgrades": { + "missile": ["clustermissiles"], + "talent": ["debrisgambit"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cutlasssquadronpilot", + "upgrades": { + "missile": ["protonrockets"], + "sensor": ["advancedsensors"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "captainoicunn", + "upgrades": { + "talent": ["intimidation"], + "crew": ["grandmofftarkin"], + "title": ["dauntless"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "rearadmiralchiraneau", + "upgrades": { + "talent": ["swarmtactics"], + "crew": ["ministertua", "tacticalofficer"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "patrolleader", + "upgrades": { + "gunner": ["fifthbrother"], + "crew": ["informant", "seventhsister"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "patrolleader", + "upgrades": { + "modification": ["hullupgrade", "tacticalscrambler"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "vizier", + "upgrades": { + "crew": ["directorkrennic"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "scarifbasepilot", + "upgrades": { + "modification": ["shieldupgrade"], + "crew": ["deathtroopers"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "majorvermeil", + "upgrades": { + "talent": ["swarmtactics"], + "crew": ["tacticalofficer"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "captainferoph", + "upgrades": { + "talent": ["swarmtactics"], + "crew": ["isbslicer"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "fifthbrother", + "upgrades": { + "force-power": ["foresight"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "vagabond", + "upgrades": { + "talent": ["outmaneuver"], + "device": ["protonbombs"], + "gunner": ["skilledbombardier"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "mornakee", + "upgrades": { + "torpedo": ["plasmatorpedoes"], + "device": ["proximitymines"], + "crew": ["gnkgonkdroid"], + "modification": ["shieldupgrade"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/galactic-republic.json b/pyxwb2/data/quick-builds/galactic-republic.json new file mode 100644 index 0000000..5704ea2 --- /dev/null +++ b/pyxwb2/data/quick-builds/galactic-republic.json @@ -0,0 +1,476 @@ +{ + "quick-builds": [ + { + "threat": 3, + "pilots": [ + { + "id": "oddball-arc170starfighter", + "upgrades": { + "talent": ["elusive"], + "gunner": ["clonecommandercody"], + "crew": ["seasonednavigator"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "jag", + "upgrades": { + "talent": ["predator"], + "torpedo": ["iontorpedoes"], + "astromech": ["r2astromech"], + "gunner": ["seventhfleetgunner"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "squadsevenveteran", + "upgrades": { + "talent": ["experthandling"], + "torpedo": ["protontorpedoes"], + "astromech": ["r4pastromech"], + "crew": ["novicetechnician"], + "gunner": ["seventhfleetgunner"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "wolffe", + "upgrades": { + "talent": ["outmaneuver"], + "astromech": ["r4p44"], + "gunner": ["veterantailgunner"], + "crew": ["perceptivecopilot"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sinker", + "upgrades": { + "talent": ["experthandling"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "104thbattalionpilot", + "upgrades": { + "talent": ["dedicated"], + "astromech": ["r4pastromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "anakinskywalker", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "configuration": ["calibratedlasertargeting"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ahsokatano", + "upgrades": { + "force-power": ["battlemeditation"], + "astromech": ["r4pastromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "jediknight", + "upgrades": { + "configuration": ["delta7b"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "luminaraunduli", + "upgrades": { + "force-power": ["brilliantevasion"], + "astromech": ["r4pastromech"], + "configuration": ["delta7b"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "barrissoffee", + "upgrades": { + "force-power": ["sense"], + "astromech": ["r2astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "obiwankenobi", + "upgrades": { + "force-power": ["predictiveshot"], + "astromech": ["r4p17"], + "modification": ["sparepartscanisters"], + "configuration": ["calibratedlasertargeting"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "saeseetiin", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "astromech": ["r4pastromech"], + "configuration": ["delta7b"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "macewindu", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "astromech": ["r2astromech"], + "configuration": ["delta7b"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "plokoon", + "upgrades": { + "force-power": ["battlemeditation", "sense"], + "astromech": ["r4pastromech"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tucker", + "upgrades": { + "missile": ["concussionmissiles"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "goldsquadrontrooper", + "upgrades": { + "missile": ["clustermissiles"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "swoop", + "upgrades": { + "talent": ["composure"], + "missile": ["protonrockets"], + "modification": ["synchronizedconsole"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronprotector", + "upgrades": { + "talent": ["dedicated"], + "modification": ["synchronizedconsole"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "oddball", + "upgrades": { + "talent": ["saturationsalvo"], + "missile": ["clustermissiles"], + "modification": ["afterburners", "munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kickback", + "upgrades": { + "talent": ["crackshot"], + "modification": ["synchronizedconsole"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "axe", + "upgrades": { + "talent": ["juke"], + "missile": ["homingmissiles"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "anakinskywalker-nabooroyaln1starfighter", + "upgrades": { + "talent": ["outmaneuver"], + "sensor": ["collisiondetector"], + "force-power": ["heightenedperception"], + "torpedo": ["protontorpedoes"], + "astromech": ["r2astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ricolie", + "upgrades": { + "talent": ["daredevil"], + "astromech": ["r2a6"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "padmeamidala", + "upgrades": { + "talent": ["elusive"], + "sensor": ["collisiondetector"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dineeellberger", + "upgrades": { + "sensor": ["passivesensors"], + "torpedo": ["plasmatorpedoes"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bravoflightofficer", + "upgrades": { + "sensor": ["passivesensors"], + "torpedo": ["protontorpedoes"], + "astromech": ["r2c4"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "naboohandmaiden", + "upgrades": { + "torpedo": ["plasmatorpedoes"], + "astromech": ["r5astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "shadowsquadronveteran", + "upgrades": { + "talent": ["snapshot"], + "device": ["protonbombs"], + "cannon": ["ioncannon"], + "astromech": ["r5astromech"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "anakinskywalker-btlbywing", + "upgrades": { + "gunner": ["ahsokatano"], + "cannon": ["ioncannon"], + "device": ["protonbombs"], + "force-power": ["precognitivereflexes"], + "torpedo": ["protontorpedoes"], + "astromech": ["r2astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "r2d2", + "upgrades": { + "crew": ["c3po-republic"], + "cannon": ["ioncannon"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "oddball-btlbywing", + "upgrades": { + "talent": ["predator"], + "cannon": ["ioncannon"], + "modification": ["hullupgrade"], + "torpedo": ["protontorpedoes"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "matchstick", + "upgrades": { + "talent": ["elusive"], + "device": ["protonbombs"], + "cannon": ["ioncannon"], + "modification": ["delayedfuses", "shieldupgrade"], + "astromech": ["r2astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "broadside", + "upgrades": { + "talent": ["snapshot"], + "modification": ["hullupgrade"], + "cannon": ["ioncannon"], + "astromech": ["r5astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "goji", + "upgrades": { + "modification": ["afterburners"], + "device": ["electroprotonbomb"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "redsquadronbomber", + "upgrades": { + "device": ["protonbombs"], + "cannon": ["ioncannon"], + "modification": ["delayedfuses"], + "astromech": ["r2astromech"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/rebel-alliance.json b/pyxwb2/data/quick-builds/rebel-alliance.json new file mode 100644 index 0000000..16a2c3d --- /dev/null +++ b/pyxwb2/data/quick-builds/rebel-alliance.json @@ -0,0 +1,1195 @@ +{ + "quick-builds": [ + { + "threat": 3, + "pilots": [ + { + "id": "lukeskywalker", + "upgrades": { + "force-power": ["instinctiveaim"], + "torpedo": ["protontorpedoes"], + "astromech": ["r2d2"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "redsquadronveteran", + "upgrades": { + "talent": ["predator"], + "astromech": ["r5astromech"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "jekporkins", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["afterburners", "hullupgrade"], + "astromech": ["r5d8"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronescort", + "upgrades": { + "torpedo": ["protontorpedoes"], + "astromech": ["r3astromech"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "wedgeantilles", + "upgrades": { + "talent": ["outmaneuver"], + "torpedo": ["protontorpedoes"], + "modification": ["shieldupgrade"], + "astromech": ["r4astromech"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "biggsdarklighter", + "upgrades": { + "talent": ["selfless"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "thanekyrell", + "upgrades": { + "talent": ["elusive"], + "torpedo": ["iontorpedoes"], + "modification": ["afterburners", "hullupgrade"], + "astromech": ["r2astromech"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "thanekyrell", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["stealthdevice"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "garvendreis-t65xwing", + "upgrades": { + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "norrawexley-btla4ywing", + "upgrades": { + "talent": ["experthandling"], + "turret": ["ioncannonturret"], + "astromech": ["r3astromech"], + "gunner": ["veteranturretgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "evaanverlaine", + "upgrades": { + "talent": ["experthandling"], + "turret": ["ioncannonturret"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "goldsquadronveteran", + "upgrades": { + "talent": ["experthandling"], + "torpedo": ["protontorpedoes"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "hortonsalm", + "upgrades": { + "talent": ["outmaneuver"], + "turret": ["ioncannonturret"], + "astromech": ["r5astromech"], + "gunner": ["veteranturretgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dutchvander", + "upgrades": { + "torpedo": ["protontorpedoes"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "graysquadronbomber", + "upgrades": { + "turret": ["ioncannonturret"], + "device": ["protonbombs"], + "astromech": ["r5astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "esegetuketu", + "upgrades": { + "sensor": ["trajectorysimulator"], + "missile": ["ionmissiles"], + "device": ["protonbombs", "connernets"], + "modification": ["advancedslam"], + "crew": ["perceptivecopilot"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "mirandadoni", + "upgrades": { + "device": ["protonbombs"], + "modification": ["advancedslam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "wardensquadronpilot", + "upgrades": { + "missile": ["barragerockets"], + "device": ["bombletgenerator"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "bladesquadronveteran", + "upgrades": { + "talent": ["snapshot"], + "torpedo": ["protontorpedoes"], + "cannon": ["autoblasters"], + "modification": ["angleddeflectors"], + "configuration": ["stabilizedsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bladesquadronveteran", + "upgrades": { + "talent": ["elusive"], + "cannon": ["tractorbeam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bladesquadronveteran", + "upgrades": { + "talent": ["predator"], + "cannon": ["ioncannon"], + "cannon": ["jammingbeam"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronpilot", + "upgrades": { + "sensor": ["advancedsensors"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronpilot", + "upgrades": { + "sensor": ["firecontrolsystem"], + "torpedo": ["advprotontorpedoes"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronpilot", + "upgrades": { + "sensor": ["passivesensors"], + "torpedo": ["plasmatorpedoes"], + "configuration": ["stabilizedsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "braylenstramm", + "upgrades": { + "talent": ["trickshot"], + "cannon": ["jammingbeam"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "braylenstramm", + "upgrades": { + "talent": ["squadleader"], + "cannon": ["jammingbeam"], + "cannon": ["heavylasercannon"], + "modification": ["electronicbaffle"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "tennumb", + "upgrades": { + "talent": ["squadleader"], + "sensor": ["advancedsensors"], + "cannon": ["heavylasercannon"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tennumb", + "upgrades": { + "talent": ["elusive"], + "modification": ["electronicbaffle"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "norrawexley", + "upgrades": { + "talent": ["experthandling"], + "crew": ["seasonednavigator"], + "gunner": ["veterantailgunner"], + "astromech": ["r3astromech"], + "modification": ["ablativeplating", "hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "garvendreis", + "upgrades": { + "talent": ["experthandling"], + "torpedo": ["protontorpedoes"], + "crew": ["perceptivecopilot"], + "gunner": ["veterantailgunner"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "sharabey", + "upgrades": { + "talent": ["experthandling"], + "torpedo": ["protontorpedoes"], + "crew": ["perceptivecopilot"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ibtisam", + "upgrades": { + "talent": ["elusive"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "wullffwarro", + "upgrades": { + "talent": ["selfless"], + "crew": ["gnkgonkdroid", "novicetechnician"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lowhhrick" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kashyyykdefender", + "upgrades": { + "crew": ["novicetechnician"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "corranhorn", + "upgrades": { + "talent": ["outmaneuver"], + "torpedo": ["protontorpedoes"], + "sensor": ["firecontrolsystem"], + "modification": ["afterburners"], + "astromech": ["r2astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "roguesquadronescort", + "upgrades": { + "talent": ["predator"], + "torpedo": ["protontorpedoes"], + "sensor": ["collisiondetector"], + "astromech": ["r3astromech"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "gavindarklighter", + "upgrades": { + "talent": ["crackshot"], + "torpedo": ["iontorpedoes"], + "sensor": ["firecontrolsystem"], + "astromech": ["r4astromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "knavesquadronescort" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "janors", + "upgrades": { + "talent": ["trickshot"], + "crew": ["perceptivecopilot"], + "device": ["seismiccharges"], + "illicit": ["cloakingdevice"], + "modification": ["engineupgrade"], + "title": ["moldycrow"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "roarkgarnet", + "upgrades": { + "talent": ["elusive"], + "device": ["seismiccharges"], + "modification": ["hullupgrade", "shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kylekatarn", + "upgrades": { + "title": ["moldycrow"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "rebelscout", + "upgrades": { + "crew": ["sabinewren"], + "device": ["seismiccharges", "protonbombs"], + "modification": ["engineupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "arvelcrynyd", + "upgrades": { + "missile": ["protonrockets"], + "talent": ["intimidation"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "greensquadronpilot", + "upgrades": { + "missile": ["concussionmissiles"], + "talent": ["daredevil"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "jakefarrell", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["clustermissiles"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "phoenixsquadronpilot", + "upgrades": { + "missile": ["protonrockets"] + } + }, + { + "id": "phoenixsquadronpilot", + "upgrades": { + "missile": ["protonrockets"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "fennrau-sheathipedeclassshuttle", + "upgrades": { + "talent": ["outmaneuver"], + "crew": ["seasonednavigator"], + "astromech": ["r4astromech"], + "title": ["phantom"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ezrabridger-sheathipedeclassshuttle", + "upgrades": { + "force-power": ["heightenedperception"], + "astromech": ["chopper"], + "title": ["phantom"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "captainrex", + "upgrades": { + "talent": ["elusive", "juke"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sabinewren-tielnfighter", + "upgrades": { + "talent": ["outmaneuver"], + "device": ["connernets"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "zeborrelios-tielnfighter" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ezrabridger-tielnfighter", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "crew": ["zeborrelios"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "cassianandor", + "upgrades": { + "sensor": ["firecontrolsystem"], + "crew": ["jynerso", "bazemalbus"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bodhirook", + "upgrades": { + "crew": ["cassianandor"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "hefftobber", + "upgrades": { + "sensor": ["firecontrolsystem"], + "crew": ["perceptivecopilot"], + "gunner": ["bistan"], + "turret": ["ioncannonturret"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronscout", + "upgrades": { + "sensor": ["advancedsensors"], + "crew": ["tacticalofficer"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "hansolo-modifiedyt1300lightfreighter", + "upgrades": { + "talent": ["lonewolf"], + "crew": ["chewbacca"], + "title": ["millenniumfalcon"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "chewbacca", + "upgrades": { + "talent": ["predator"], + "crew": ["leiaorgana", "c3po-crew", "r2d2-crew"], + "gunner": ["hansolo", "lukeskywalker"], + "modification": ["engineupgrade"], + "title": ["millenniumfalcon"] + } + } + ] + }, + { + "threat": 5, + "pilots": [ + { + "id": "landocalrissian-modifiedyt1300lightfreighter", + "upgrades": { + "talent": ["swarmtactics"], + "missile": ["concussionmissiles"], + "crew": ["niennunb"], + "modification": ["engineupgrade"], + "title": ["millenniumfalcon"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "outerrimsmuggler", + "upgrades": { + "missile": ["homingmissiles"], + "crew": ["novicetechnician"], + "gunner": ["veteranturretgunner"], + "modification": ["staticdischargevanes"], + "illicit": ["feedbackarray"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "outerrimsmuggler", + "upgrades": { + "missile": ["homingmissiles"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "talasquadronpilot", + "upgrades": { + "talent": ["selfless"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "airencracken", + "upgrades": { + "missile": ["clustermissiles"], + "talent": ["swarmtactics"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "banditsquadronpilot" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lieutenantblount", + "upgrades": { + "missile": ["protonrockets"], + "talent": ["outmaneuver"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "herasyndulla", + "upgrades": { + "talent": ["elusive"], + "turret": ["ioncannonturret"], + "title": ["phantom"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sabinewren", + "upgrades": { + "talent": ["outmaneuver"], + "turret": ["dorsalturret"], + "title": ["phantom"] + } + } + ] + }, + { + "threat": 5, + "pilots": [ + { + "id": "dashrendar", + "upgrades": { + "talent": ["experthandling", "trickshot"], + "illicit": ["riggedcargochute"], + "crew": ["perceptivecopilot"], + "title": ["outrider"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "leebo", + "upgrades": { + "illicit": ["inertialdampeners"], + "title": ["outrider"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "wildspacefringer", + "upgrades": { + "missile": ["concussionmissiles"], + "gunner": ["veteranturretgunner"], + "illicit": ["contrabandcybernetics"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "magvayarro", + "upgrades": { + "talent": ["elusive"], + "sensor": ["advancedsensors"], + "crew": ["sawgerrera"], + "modification": ["shieldupgrade"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sawgerrera", + "upgrades": { + "crew": ["magvayarro"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "benthictwotubes", + "upgrades": { + "sensor": ["advancedsensors"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "partisanrenegade", + "upgrades": { + "sensor": ["advancedsensors"], + "illicit": ["deadmansswitch"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "partisanrenegade", + "upgrades": { + "crew": ["magvayarro", "sawgerrera"], + "illicit": ["deadmansswitch"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "kullbeesperado", + "upgrades": { + "talent": ["outmaneuver"], + "astromech": ["r2astromech"], + "illicit": ["deadmansswitch"], + "modification": ["afterburners", "hullupgrade"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "edriotwotubes", + "upgrades": { + "talent": ["trickshot"], + "astromech": ["r4astromech"], + "illicit": ["deadmansswitch"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "leevantenza", + "upgrades": { + "talent": ["elusive"], + "astromech": ["r2astromech"], + "illicit": ["deadmansswitch"], + "modification": ["afterburners", "shieldupgrade"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cavernangelszealot", + "upgrades": { + "astromech": ["r2astromech"], + "illicit": ["deadmansswitch"], + "configuration": ["servomotorsfoils"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "kananjarrus", + "upgrades": { + "crew": ["chopper-crew", "herasyndulla"], + "gunner": ["ezrabridger"], + "turret": ["ioncannonturret"], + "title": ["ghost"] + } + }, + { + "id": "zeborrelios", + "upgrades": { + "title": ["phantom"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "herasyndulla-vcx100lightfreighter", + "upgrades": { + "talent": ["elusive"], + "crew": ["kananjarrus"], + "turret": ["dorsalturret"], + "title": ["ghost"] + } + }, + { + "id": "ezrabridger", + "upgrades": { + "force-power": ["supernaturalreflexes"], + "turret": ["dorsalturret"], + "title": ["phantom"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "chopper", + "upgrades": { + "crew": ["zeborrelios"], + "turret": ["ioncannonturret"], + "title": ["ghost"] + } + }, + { + "id": "ap5", + "upgrades": { + "astromech": ["r4astromech"], + "title": ["phantom"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "lothalrebel", + "upgrades": { + "crew": ["landocalrissian"], + "turret": ["dorsalturret"], + "title": ["ghost"] + } + }, + { + "id": "zeborrelios-sheathipedeclassshuttle", + "upgrades": { + "astromech": ["r5astromech"], + "title": ["phantom"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "lothalrebel", + "upgrades": { + "sensor": ["passivesensors"], + "torpedo": ["plasmatorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "ginamoonsong", + "upgrades": { + "talent": ["elusive"], + "sensor": ["passivesensors"], + "cannon": ["autoblasters"], + "modification": ["afterburners"], + "configuration": ["stabilizedsfoils"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "alexsandrkallus", + "upgrades": { + "sensor": ["passivesensors"], + "torpedo": ["protontorpedoes"], + "title": ["ghost"], + "crew": ["zeborrelios"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "k2so", + "upgrades": { + "talent": ["trickshot"], + "sensor": ["passivesensors"], + "modification": ["hullupgrade", "angleddeflectors"], + "configuration": ["pivotwing"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "leiaorgana", + "upgrades": { + "crew": ["landocalrissian", "chewbacca", "r2d2-crew"], + "modification": ["engineupgrade"], + "title": ["millenniumfalcon"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/resistance.json b/pyxwb2/data/quick-builds/resistance.json new file mode 100644 index 0000000..b966fb8 --- /dev/null +++ b/pyxwb2/data/quick-builds/resistance.json @@ -0,0 +1,528 @@ +{ + "quick-builds": [ + { + "threat": 4, + "pilots": [ + { + "id": "poedameron", + "upgrades": { + "torpedo": ["protontorpedoes"], + "astromech": ["bb8"], + "configuration": ["integratedsfoils"], + "modification": ["afterburners"], + "title": ["blackone"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "elloasty", + "upgrades": { + "talent": ["elusive"], + "modification": ["afterburners"], + "configuration": ["integratedsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "niennunb", + "upgrades": { + "talent": ["elusive"], + "modification": ["afterburners"], + "configuration": ["integratedsfoils"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "karekun", + "upgrades": { + "talent": ["predator"], + "configuration": ["integratedsfoils"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "temminwexley", + "upgrades": { + "talent": ["outmaneuver"], + "configuration": ["integratedsfoils"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "jessikapava", + "upgrades": { + "astromech": ["r5astromech"], + "configuration": ["integratedsfoils"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "jophseastriker", + "upgrades": { + "astromech": ["r2astromech"], + "configuration": ["integratedsfoils"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "redsquadronexpert" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "lieutenantbastian", + "upgrades": { + "astromech": ["r3astromech"], + "configuration": ["integratedsfoils"], + "tech": ["targetingsynchronizer"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronrookie", + "upgrades": { + "astromech": ["bbastromech"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "jaycristubbs" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "blacksquadronace-t70xwing", + "upgrades": { + "torpedo": ["protontorpedoes"], + "astromech": ["m9g8"], + "configuration": ["integratedsfoils"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tallissanlintra", + "upgrades": { + "talent": ["predator"], + "tech": ["ferrospherepaint"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lulolampar", + "upgrades": { + "tech": ["primedthrusters"], + "missile": ["homingmissiles"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "greersonnel", + "upgrades": { + "talent": ["elusive"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "greersonnel", + "upgrades": { + "talent": ["marksmanship"], + "tech": ["primedthrusters"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "greensquadronexpert", + "upgrades": { + "talent": ["heroic"], + "tech": ["primedthrusters"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zaribangel", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["protonrockets"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronrecruit", + "upgrades": { + "tech": ["primedthrusters"], + "modification": ["shieldupgrade"], + "missile": ["homingmissiles"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bluesquadronrecruit", + "upgrades": { + "tech": ["primedthrusters"], + "talent": ["composure", "snapshot"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "cobaltsquadronbomber", + "upgrades": { + "sensor": ["trajectorysimulator"], + "modification": ["ablativeplating"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "cobaltsquadronbomber", + "upgrades": { + "sensor": ["passivesensors"], + "modification": ["hullupgrade"], + "device": ["connernets"], + "gunner": ["agilegunner"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "cat", + "upgrades": { + "gunner": ["skilledbombardier"], + "modification": ["electronicbaffle"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "edonkappehl", + "upgrades": { + "tech": ["patternanalyzer"], + "gunner": ["skilledbombardier"], + "crew": ["seasonednavigator"], + "device": ["protonbombs", "connernets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "vennie", + "upgrades": { + "tech": ["advancedoptics"], + "gunner": ["finn"], + "crew": ["rosetico"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "benteene", + "upgrades": { + "device": ["protonbombs", "connernets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "finchdallow", + "upgrades": { + "tech": ["advancedoptics"], + "gunner": ["paigetico"], + "modification": ["hullupgrade", "ablativeplating"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "hansolo-scavengedyt1300", + "upgrades": { + "crew": ["chewbacca-crew-swz19"] + } + } + ] + }, + { + "threat": 5, + "pilots": [ + { + "id": "rey", + "upgrades": { + "gunner": ["finn"], + "astromech": ["bb8"], + "illicit": ["inertialdampeners"], + "modification": ["engineupgrade"], + "title": ["reysmillenniumfalcon"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "chewbacca-scavengedyt1300", + "upgrades": { + "gunner": ["rey-gunner"], + "modification": ["engineupgrade"], + "title": ["reysmillenniumfalcon"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "resistancesympathizer", + "upgrades": { + "crew": ["chewbacca-crew-swz19", "hansolo-crew", "c3po-crew"], + "talent": ["debrisgambit"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bb8", + "upgrades": { + "cannon": ["autoblasters"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "rosetico", + "upgrades": { + "crew": ["pz4co"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "vimoradi", + "upgrades": { + "crew": ["ga97"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "finn", + "upgrades": { + "talent": ["predator"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "covanell", + "upgrades": { + "crew": ["leiaorgana-resistance", "korrsella"], + "talent": ["composure"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "pammichnerrogoode", + "upgrades": { + "crew": ["kaydelconnix"], + "modification": ["sparepartscanisters"], + "cannon": ["autoblasters"], + "astromech": ["r5x3"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "nodinchavdri", + "upgrades": { + "astromech": ["r2ha"], + "modification": ["angleddeflectors"], + "torpedo": ["plasmatorpedoes"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "logisticsdivisionpilot", + "upgrades": { + "crew": ["amilynholdo", "larmadacy"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "paigetico", + "upgrades": { + "crew": ["rosetico"], + "device": ["protonbombs"], + "gunner": ["skilledbombardier"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zizitlo", + "upgrades": { + "talent": ["elusive", "snapshot"], + "tech": ["primedthrusters"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ronithblario", + "upgrades": { + "talent": ["snapshot"], + "tech": ["patternanalyzer"], + "missile": ["magpulsewarheads"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/scum-and-villainy.json b/pyxwb2/data/quick-builds/scum-and-villainy.json new file mode 100644 index 0000000..674bafc --- /dev/null +++ b/pyxwb2/data/quick-builds/scum-and-villainy.json @@ -0,0 +1,1307 @@ +{ + "quick-builds": [ + { + "threat": 5, + "pilots": [ + { + "id": "hansolo", + "upgrades": { + "talent": ["elusive"], + "crew": ["chewbacca-crew"], + "gunner": ["agilegunner"], + "illicit": ["riggedcargochute"], + "modification": ["tacticalscrambler"], + "title": ["landosmillenniumfalcon"] + } + }, + { + "id": "outerrimpioneer", + "upgrades": { + "crew": ["tobiasbeckett"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "landocalrissian", + "upgrades": { + "gunner": ["hansolo-gunner"], + "crew": ["qira"], + "title": ["landosmillenniumfalcon"] + } + }, + { + "id": "l337-escapecraft" + } + ] + }, + { + "threat": 5, + "pilots": [ + { + "id": "l337", + "upgrades": { + "talent": ["outmaneuver"], + "gunner": ["hansolo-gunner"], + "crew": ["qira"], + "modification": ["hullupgrade"], + "title": ["landosmillenniumfalcon"] + } + }, + { + "id": "landocalrissian-escapecraft", + "upgrades": { + "talent": ["elusive"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "freightercaptain", + "upgrades": { + "title": ["landosmillenniumfalcon"] + } + }, + { + "id": "autopilotdrone", + "upgrades": { + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "moraloeval", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["clustermissiles"], + "crew": ["lattsrazzi"], + "gunner": ["dengar"], + "illicit": ["contrabandcybernetics"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "lattsrazzi", + "upgrades": { + "crew": ["bobafett"], + "gunner": ["dengar", "bossk"], + "illicit": ["feedbackarray"], + "modification": ["staticdischargevanes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "trandoshanslaver", + "upgrades": { + "crew": ["jabbathehutt"], + "gunner": ["hotshotgunner"], + "illicit": ["contrabandcybernetics", "riggedcargochute"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "bossk", + "upgrades": { + "talent": ["marksmanship"], + "gunner": ["greedo"], + "title": ["houndstooth"] + } + }, + { + "id": "nashtahpup" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "trandoshanslaver", + "upgrades": { + "illicit": ["deadmansswitch"], + "title": ["houndstooth"] + } + }, + { + "id": "nashtahpup", + "upgrades": { + "missile": ["protonrockets"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "bobafett", + "upgrades": { + "talent": ["lonewolf"], + "crew": ["perceptivecopilot"], + "illicit": ["inertialdampeners"], + "device": ["seismiccharges"], + "title": ["slavei"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "kathscarlet", + "upgrades": { + "title": ["marauder"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "krassistrelix", + "upgrades": { + "missile": ["concussionmissiles"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "emonazzameen", + "upgrades": { + "talent": ["elusive"], + "crew": ["perceptivecopilot"], + "illicit": ["inertialdampeners"], + "device": ["seismiccharges", "proximitymines"], + "title": ["andrasta"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "koshkafrost", + "upgrades": { + "crew": ["perceptivecopilot"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "bountyhunter", + "upgrades": { + "crew": ["perceptivecopilot"], + "illicit": ["inertialdampeners"], + "device": ["seismiccharges"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "fennrau", + "upgrades": { + "talent": ["daredevil"], + "modification": ["afterburners", "hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kadsolus", + "upgrades": { + "talent": ["fearless"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zealousrecruit", + "upgrades": { + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "joyrekkoff", + "upgrades": { + "talent": ["predator"], + "torpedo": ["iontorpedoes"], + "modification": ["afterburners", "hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "oldteroch" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "skullsquadronpilot", + "upgrades": { + "talent": ["fearless"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "skullsquadronpilot", + "upgrades": { + "talent": ["marksmanship"], + "torpedo": ["advprotontorpedoes"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "ketsuonyo", + "upgrades": { + "talent": ["outmaneuver"], + "illicit": ["riggedcargochute"], + "modification": ["shieldupgrade"], + "title": ["shadowcaster"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "sabinewren-lancerclasspursuitcraft", + "upgrades": { + "talent": ["fearless"], + "crew": ["ketsuonyo"], + "title": ["shadowcaster"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "asajjventress", + "upgrades": { + "force-power": ["sense"], + "gunner": ["veteranturretgunner"], + "illicit": ["inertialdampeners", "deadmansswitch"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "shadowporthunter", + "upgrades": { + "crew": ["maul"], + "illicit": ["contrabandcybernetics"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "talonbanecobra", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["clustermissiles"], + "illicit": ["inertialdampeners"], + "modification": [ + "afterburners", + "electronicbaffle", + "shieldupgrade" + ] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "viktorhel", + "upgrades": { + "talent": ["crackshot"], + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "graz", + "upgrades": { + "talent": ["outmaneuver"], + "missile": ["concussionmissiles"], + "illicit": ["contrabandcybernetics"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksunace", + "upgrades": { + "talent": ["predator"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "captainjostero", + "upgrades": { + "missile": ["ionmissiles"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cartelmarauder", + "upgrades": { + "missile": ["concussionmissiles"], + "modification": ["munitionsfailsafe", "hullupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "kavil", + "upgrades": { + "talent": ["experthandling"], + "turret": ["dorsalturret"], + "astromech": ["genius"], + "device": ["protonbombs"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "hiredgun", + "upgrades": { + "talent": ["crackshot"], + "turret": ["ioncannonturret"], + "astromech": ["r3astromech"], + "device": ["connernets"], + "gunner": ["veteranturretgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "drearenthal", + "upgrades": { + "talent": ["experthandling"], + "turret": ["ioncannonturret"], + "gunner": ["hotshotgunner"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "crymorahgoon", + "upgrades": { + "torpedo": ["iontorpedoes"], + "turret": ["dorsalturret"], + "astromech": ["r3astromech"], + "illicit": ["inertialdampeners"], + "device": ["proximitymines"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dacebonearm", + "upgrades": { + "modification": ["staticdischargevanes"], + "illicit": ["feedbackarray"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "palobgodalhi", + "upgrades": { + "talent": ["juke", "debrisgambit"], + "modification": ["stealthdevice"], + "illicit": ["contrabandcybernetics"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "torkilmux", + "upgrades": { + "illicit": ["cloakingdevice"], + "device": ["proximitymines"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "spicerunner", + "upgrades": { + "modification": ["electronicbaffle"], + "illicit": ["deadmansswitch"], + "device": ["protonbombs"] + } + }, + { + "id": "spicerunner", + "upgrades": { + "modification": ["electronicbaffle"], + "illicit": ["deadmansswitch"], + "device": ["protonbombs"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "constablezuvio", + "upgrades": { + "talent": ["outmaneuver"], + "illicit": ["riggedcargochute"], + "modification": ["shieldupgrade"], + "device": ["connernets"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "jakkugunrunner", + "upgrades": { + "modification": ["electronicbaffle"], + "crew": ["novicetechnician"], + "device": ["proximitymines"] + } + }, + { + "id": "jakkugunrunner", + "upgrades": { + "modification": ["electronicbaffle"], + "crew": ["novicetechnician"], + "device": ["proximitymines"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "unkarplutt", + "upgrades": { + "crew": ["novicetechnician"], + "illicit": ["contrabandcybernetics"], + "modification": ["afterburners"], + "device": ["proximitymines"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sarcoplank", + "upgrades": { + "crew": ["unkarplutt"], + "illicit": ["feedbackarray"], + "modification": ["shieldupgrade", "hullupgrade"], + "device": ["seismiccharges"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "princexizor", + "upgrades": { + "talent": ["predator"], + "sensor": ["firecontrolsystem"], + "modification": ["shieldupgrade"], + "title": ["virago"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksunenforcer", + "upgrades": { + "sensor": ["collisiondetector"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "guri", + "upgrades": { + "talent": ["daredevil"], + "sensor": ["advancedsensors"], + "torpedo": ["advprotontorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "dalanoberos-starviperclassattackplatform", + "upgrades": { + "talent": ["outmaneuver"], + "sensor": ["firecontrolsystem"], + "illicit": ["contrabandcybernetics"], + "torpedo": ["protontorpedoes"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksunassassin", + "upgrades": { + "talent": ["fearless"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "serissu", + "upgrades": { + "modification": ["stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "genesisred", + "upgrades": { + "talent": ["juke"], + "missile": ["concussionmissiles"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "quinnjast", + "upgrades": { + "talent": ["crackshot"], + "torpedo": ["advprotontorpedoes"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "laetinashera", + "upgrades": { + "talent": ["juke"], + "missile": ["clustermissiles"], + "modification": ["munitionsfailsafe", "stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "inaldra", + "upgrades": { + "cannon": ["ioncannon"], + "modification": ["hullupgrade", "shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "tansariipointveteran", + "upgrades": { + "talent": ["crackshot"], + "cannon": ["heavylasercannon"] + } + }, + { + "id": "tansariipointveteran", + "upgrades": { + "talent": ["crackshot"], + "cannon": ["heavylasercannon"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "tansariipointveteran", + "upgrades": { + "talent": ["outmaneuver"], + "torpedo": ["plasmatorpedoes"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "sunnybounder", + "upgrades": { + "talent": ["predator"], + "missile": ["clustermissiles"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "cartelspacer", + "upgrades": { + "torpedo": ["iontorpedoes"], + "modification": ["munitionsfailsafe"] + } + }, + { + "id": "cartelspacer", + "upgrades": { + "torpedo": ["iontorpedoes"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cartelspacer", + "upgrades": { + "talent": ["snapshot"], + "cannon": ["autoblasters"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "teltrevura", + "upgrades": { + "talent": ["experthandling"], + "crew": ["gnkgonkdroid"], + "torpedo": ["protontorpedoes"], + "illicit": ["deadmansswitch"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "contractedscout", + "upgrades": { + "torpedo": ["iontorpedoes"], + "illicit": ["inertialdampeners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "contractedscout", + "upgrades": { + "torpedo": ["plasmatorpedoes"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "dengar", + "upgrades": { + "talent": ["experthandling"], + "astromech": ["r4astromech"], + "torpedo": ["protontorpedoes"], + "illicit": ["contrabandcybernetics"], + "title": ["punishingone"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "manaroo", + "upgrades": { + "talent": ["intimidation"], + "crew": ["perceptivecopilot"], + "torpedo": ["protontorpedoes"], + "modification": ["staticdischargevanes"], + "illicit": ["feedbackarray"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ndrusuhlak", + "upgrades": { + "talent": ["crackshot", "outmaneuver"], + "modification": ["hullupgrade", "stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ndrusuhlak", + "upgrades": { + "talent": ["lonewolf"], + "missile": ["homingmissiles"], + "modification": ["hullupgrade"], + "illicit": ["cloakingdevice"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "blacksunsoldier", + "upgrades": { + "talent": ["experthandling"], + "missile": ["concussionmissiles"], + "illicit": ["deadmansswitch"], + "modification": ["hullupgrade"] + } + }, + { + "id": "blacksunsoldier", + "upgrades": { + "talent": ["experthandling"], + "missile": ["concussionmissiles"], + "illicit": ["deadmansswitch"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "blacksunsoldier", + "upgrades": { + "talent": ["crackshot"], + "missile": ["clustermissiles"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "blacksunsoldier", + "upgrades": { + "talent": ["composure"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kaatoleeachos", + "upgrades": { + "talent": ["saturationsalvo"], + "missile": ["clustermissiles", "concussionmissiles"], + "illicit": ["deadmansswitch"], + "modification": ["munitionsfailsafe"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "kaatoleeachos", + "upgrades": { + "talent": ["experthandling"], + "missile": ["clustermissiles"], + "illicit": ["contrabandcybernetics"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "binayrepirate", + "upgrades": { + "talent": ["snapshot"], + "missile": ["concussionmissiles"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "binayrepirate", + "upgrades": { + "illicit": ["deadmansswitch"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "binayrepirate" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "4lom", + "upgrades": { + "talent": ["elusive"], + "sensor": ["advancedsensors"], + "crew": ["000", "zuckuss"], + "gunner": ["bt1"], + "title": ["misthunter"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "zuckuss", + "upgrades": { + "talent": ["lonewolf"], + "crew": ["4lom"], + "cannon": ["tractorbeam"], + "title": ["misthunter"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "gandfindsman", + "upgrades": { + "sensor": ["firecontrolsystem"], + "crew": ["freelanceslicer"], + "illicit": ["deadmansswitch"], + "modification": ["electronicbaffle"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "toranikulda", + "upgrades": { + "talent": ["saturationsalvo"], + "torpedo": ["protontorpedoes"], + "missile": ["clustermissiles"], + "astromech": ["r4astromech"], + "illicit": ["inertialdampeners"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dalanoberos", + "upgrades": { + "talent": ["experthandling"], + "astromech": ["r5tk"], + "illicit": ["inertialdampeners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "cartelexecutioner", + "upgrades": { + "talent": ["crackshot"], + "astromech": ["r5p8"], + "illicit": ["contrabandcybernetics"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "captainnym", + "upgrades": { + "talent": ["squadleader"], + "sensor": ["trajectorysimulator"], + "astromech": ["r4astromech"], + "device": ["bombletgenerator"], + "title": ["havoc"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "solsixxa", + "upgrades": { + "turret": ["ioncannonturret"], + "gunner": ["skilledbombardier"], + "device": ["connernets", "proximitymines"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "lokrevenant", + "upgrades": { + "turret": ["dorsalturret"], + "device": ["bombletgenerator"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "ig88a", + "upgrades": { + "sensor": ["advancedsensors"], + "title": ["ig2000"] + } + }, + { + "id": "ig88d", + "upgrades": { + "sensor": ["advancedsensors"], + "title": ["ig2000"] + } + } + ] + }, + { + "threat": 6, + "pilots": [ + { + "id": "ig88b", + "upgrades": { + "sensor": ["firecontrolsystem"], + "cannon": ["ioncannon"], + "title": ["ig2000"] + } + }, + { + "id": "ig88c", + "upgrades": { + "sensor": ["firecontrolsystem"], + "cannon": ["ioncannon"], + "title": ["ig2000"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "miningguildsurveyor", + "upgrades": { + "talent": ["swarmtactics", "trickshot"], + "modification": ["staticdischargevanes", "shieldupgrade"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "overseeryushyn" + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "captainseevor", + "upgrades": { + "talent": ["outmaneuver"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "ahhav", + "upgrades": { + "talent": ["elusive"], + "modification": ["afterburners", "hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "foremanproach", + "upgrades": { + "talent": ["predator", "swarmtactics"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "foremanproach", + "upgrades": { + "talent": ["crackshot", "fearless"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "miningguildsentry" + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "nomlumb", + "upgrades": { + "talent": ["snapshot"], + "gunner": ["dengar"], + "torpedo": ["protontorpedoes"], + "illicit": ["deadmansswitch"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bossk-z95af4headhunter", + "upgrades": { + "talent": ["snapshot", "predator"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "g4rgorvm", + "upgrades": { + "talent": ["intimidation"], + "cannon": ["autoblasters"], + "illicit": ["deadmansswitch"], + "modification": ["shieldupgrade"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/quick-builds/separatist-alliance.json b/pyxwb2/data/quick-builds/separatist-alliance.json new file mode 100644 index 0000000..3c2e15c --- /dev/null +++ b/pyxwb2/data/quick-builds/separatist-alliance.json @@ -0,0 +1,275 @@ +{ + "quick-builds": [ + { + "threat": 1, + "pilots": [ + { + "id": "dfs311", + "upgrades": { + "configuration": ["grapplingstruts"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dfs081", + "upgrades": { + "configuration": ["grapplingstruts"], + "missile": ["protonrockets"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "precisehunter", + "upgrades": { + "missile": ["concussionmissiles"], + "modification": ["afterburners", "shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "separatistdrone", + "upgrades": { + "configuration": ["grapplingstruts"], + "missile": ["energyshellcharges"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "haorchallprototype", + "upgrades": { + "missile": ["energyshellcharges"], + "modification": ["stealthdevice", "afterburners"] + } + } + ] + }, + { + "threat": 1, + "pilots": [ + { + "id": "tradefederationdrone", + "upgrades": { + "missile": ["energyshellcharges"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "066", + "upgrades": { + "crew": ["chancellorpalpatine"], + "modification": ["shieldupgrade"], + "title": ["scimitar"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "darkcourier", + "upgrades": { + "crew": ["countdooku", "generalgrievous"], + "tactical-relay": ["k2b4"], + "title": ["scimitar"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "darthmaul", + "upgrades": { + "force-power": ["hate"], + "cannon": ["heavylasercannon"], + "crew": ["perceptivecopilot"], + "device": ["drk1probedroids"], + "modification": ["shieldupgrade"], + "title": ["scimitar"] + } + } + ] + }, + { + "threat": 4, + "pilots": [ + { + "id": "countdooku", + "upgrades": { + "force-power": ["brilliantevasion", "predictiveshot"], + "torpedo": ["iontorpedoes"], + "crew": ["generalgrievous"], + "modification": ["hullupgrade"], + "title": ["scimitar"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "captainsear", + "upgrades": { + "talent": ["daredevil"], + "tactical-relay": ["kraken"], + "modification": ["imperviumplating", "stealthdevice"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "feethanottrawautopilot", + "upgrades": { + "tactical-relay": ["tv94"], + "modification": ["imperviumplating"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "generalgrievous", + "upgrades": { + "talent": ["treacherous"], + "tactical-relay": ["tv94"], + "modification": ["imperviumplating"], + "title": ["soullessone"] + } + } + ] + }, + { + "threat": 3, + "pilots": [ + { + "id": "wattambor", + "upgrades": { + "talent": ["intimidation"], + "tactical-relay": ["kraken"], + "modification": ["shieldupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "skakoanace", + "upgrades": { + "talent": ["crackshot"], + "modification": ["afterburners"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "technounionbomber", + "upgrades": { + "torpedo": ["protontorpedoes"], + "device": ["electroprotonbomb"], + "modification": ["delayedfuses"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "bombardmentdrone", + "upgrades": { + "sensor": ["trajectorysimulator"], + "device": ["bombletgenerator"], + "modification": ["delayedfuses"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dbs404", + "upgrades": { + "talent": ["predator"], + "torpedo": ["plasmatorpedoes"], + "modification": ["afterburners"], + "configuration": ["landingstruts"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "baktoidprototype", + "upgrades": { + "sensor": ["passivesensors"], + "missile": ["barragerockets"], + "modification": ["hullupgrade"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "separatistbomber", + "upgrades": { + "sensor": ["passivesensors"], + "missile": ["diamondboronmissiles"] + } + } + ] + }, + { + "threat": 2, + "pilots": [ + { + "id": "dbs32c", + "upgrades": { + "tactical-relay": ["ta175"], + "modification": ["stealthdevice"], + "configuration": ["landingstruts"] + } + } + ] + } + ] +} diff --git a/pyxwb2/data/stats/stats.json b/pyxwb2/data/stats/stats.json new file mode 100644 index 0000000..217aba3 --- /dev/null +++ b/pyxwb2/data/stats/stats.json @@ -0,0 +1,65 @@ +[ + { + "name": "Agility", + "xws": "agility", + "ffg": 1 + }, + { + "name": "Hull", + "xws": "hull", + "ffg": 2 + }, + { + "name": "Shields", + "xws": "shields", + "ffg": 3 + }, + { + "name": "Force", + "xws": "force", + "ffg": 4 + }, + { + "name": "Charge", + "xws": "charge", + "ffg": 7 + }, + { + "name": "Double Turret Arc", + "xws": "doubleturretarc", + "ffg_name": "Dual Mobile Arc", + "ffg": 8 + }, + { + "name": "Full Front Arc", + "xws": "fullfrontarc", + "ffg_name": "Front 180 Arc", + "ffg": 9 + }, + { + "name": "Front Arc", + "xws": "frontarc", + "ffg": 10 + }, + { + "name": "Bullseye Arc", + "xws": "bullseyearc", + "ffg": 11 + }, + { + "name": "Single Turret Arc", + "xws": "singleturretarc", + "ffg_name": "Mobile Arc", + "ffg": 12 + }, + { + "name": "Rear Arc", + "xws": "reararc", + "ffg": 14 + }, + { + "name": "Weapon Range No Bonus", + "xws": "weaponrangenobonus", + "ffg": 20 + } +] diff --git a/pyxwb2/data/translation.json b/pyxwb2/data/translation.json new file mode 100644 index 0000000..90438f5 --- /dev/null +++ b/pyxwb2/data/translation.json @@ -0,0 +1,666 @@ +{ + "000": { + "en": "0-0-0", + "fr": "0-0-0" + }, + "4lom": { + "en": "4-LOM", + "fr": "4-LOM" + }, + "cassianandor": { + "en": "Cassian Andor", + "fr": "Cassian Andor" + }, + "aaylasecura": { + "en": "Aayla Secura", + "fr": "Aayla Secura" + }, + "adaptiveshields": { + "en": "Adaptive Shields", + "fr": "Boucliers Adaptables" + }, + "admiralsloane": { + "en": "Admiral Sloane", + "fr": "Amiral Sloane" + }, + "agentkallus": { + "en": "Agent Kallus", + "fr": "Agent Kallus" + }, + "agentterex": { + "en": "Agent Terex", + "fr": "Agent Terex" + }, + "agilegunner": { + "en": "Agile Gunner", + "fr": "Canonnier Adroit" + }, + "ahsokatano": { + "en": "Ahsoka Tano", + "fr": "Ahsoka Tano" + }, + "amilynholdo": { + "en": "Amilyn Holdo", + "fr": "Amilyn Holdo" + }, + "autoblasters": { + "en": "Autoblasters", + "fr": "Autoblasters" + }, + "battlemeditation": { + "en": "Battle Meditation", + "fr": "Méditation de Bataille" + }, + "bazemalbus": { + "en": "Baze Malbus", + "fr": "Baze Malbus" + }, + "bb8": { + "en": "BB-8", + "fr": "BB-8" + }, + "bbastromech": { + "en": "BB Astromech", + "fr": "Astromech BB" + }, + "bistan": { + "en": "Bistan", + "fr": "Bistan" + }, + "bobafett": { + "en": "Boba Fett", + "fr": "Boba Fett" + }, + "bombletgenerator": { + "en": "Bomblet Generator", + "fr": "Générateur de Sous-Munitions" + }, + "boostedscanners": { + "en": "Boosted Scanners", + "fr": "Scanners Amplifiés" + }, + "bossk": { + "en": "Bossk", + "fr": "Bossk" + }, + "brilliantevasion": { + "en": "Brilliant Evasion", + "fr": "As de la Manœuvre" + }, + "bt1": { + "en": "BT-1", + "fr": "BT-1" + }, + "c110p": { + "en": "C1-10P", + "fr": "C1-10P" + }, + "c3po": { + "en": "C-3PO", + "fr": "C-3PO" + }, + "c3po-crew": { + "en": "C-3PO", + "fr": "C-3PO" + }, + "c3po-republic": { + "en": "C-3PO", + "fr": "C-3PO" + }, + "cadbane": { + "en": "Cad Bane", + "fr": "Cad Bane" + }, + "calibratedlasertargeting": { + "en": "Calibrated Laser Targeting", + "fr": "Visée Laser Calibrée" + }, + "captainphasma": { + "en": "Captain Phasma", + "fr": "Capitaine Phasma" + }, + "chancellorpalpatine": { + "en": "Chancellor Palpatine", + "fr": "Chancelier Palpatine" + }, + "chewbacca": { + "en": "Chewbacca", + "fr": "Chewbacca" + }, + "chewbacca-crew": { + "en": "Chewbacca", + "fr": "Chewbacca" + }, + "chewbacca-crew-swz19": { + "en": "Chewbacca", + "fr": "Chewbacca" + }, + "chopper": { + "en": "Chopper", + "fr": "Chopper" + }, + "chopper-crew": { + "en": "Chopper", + "fr": "Chopper" + }, + "cienaree": { + "en": "Ciena Ree", + "fr": "Ciena Ree" + }, + "cikatrovizago": { + "en": "Cikatro Vizago", + "fr": "Cikatro Vizago" + }, + "clonecommandercody": { + "en": "Clone Commander Cody", + "fr": "Commandant Clone Cody" + }, + "clustermines": { + "en": "Cluster Mines", + "fr": "Mines Groupées" + }, + "connernets": { + "en": "Conner Nets", + "fr": "Filet Conner" + }, + "corsairrefit": { + "en": "Corsair Refit", + "fr": "Reconversion Corsaire" + }, + "countdooku": { + "en": "Count Dooku", + "fr": "Comte Dooku" + }, + "darthvader": { + "en": "Darth Vader", + "fr": "Dark Vador" + }, + "deathtroopers": { + "en": "Death Troopers", + "fr": "Death Troopers" + }, + "delta7b": { + "en": "Delta-7B", + "fr": "Delta-7B" + }, + "dengar": { + "en": "Dengar", + "fr": "Dengar" + }, + "directorkrennic": { + "en": "Director Krennic", + "fr": "Directeur Krennic" + }, + "drk1probedroids": { + "en": "DRK-1 Probe Droids", + "fr": "Droïdes Sondes DRK-1" + }, + "electroprotonbomb": { + "en": "Electro-Proton Bomb", + "fr": "Bombe Électro-Protonique" + }, + "emperorpalpatine": { + "en": "Emperor Palpatine", + "fr": "Empereur Palpatine" + }, + "ezrabridger": { + "en": "Ezra Bridger", + "fr": "Ezra Bridger" + }, + "fifthbrother": { + "en": "Fifth Brother", + "fr": "Le Cinquième Frère" + }, + "finn": { + "en": "Finn", + "fr": "Finn" + }, + "foresight": { + "en": "Foresight", + "fr": "Clairvoyance" + }, + "freelanceslicer": { + "en": "Freelance Slicer", + "fr": "Slicer Free-Lance" + }, + "ga97": { + "en": "GA-97", + "fr": "GA-97" + }, + "generalgrievous": { + "en": "General Grievous", + "fr": "Général Grievous" + }, + "generalhux": { + "en": "General Hux", + "fr": "Général Hux" + }, + "genius": { + "en": "Genius", + "fr": "Genius" + }, + "gnkgonkdroid": { + "en": "GNK \\\"Gonk\\\" Droid", + "fr": "Droïde \"Gonk\" GNK" + }, + "grandinquisitor": { + "en": "Grand Inquisitor", + "fr": "Grand Inquisiteur" + }, + "grandmofftarkin": { + "en": "Grand Moff Tarkin", + "fr": "Grand Moff Tarkin" + }, + "grapplingstruts": { + "en": "Grappling Struts", + "fr": "Supports d'Ancrage" + }, + "greedo": { + "en": "Greedo", + "fr": "Greedo" + }, + "hansolo": { + "en": "Han Solo", + "fr": "Han Solo" + }, + "hansolo-crew": { + "en": "Han Solo", + "fr": "Han Solo" + }, + "hansolo-gunner": { + "en": "Han Solo", + "fr": "Han Solo" + }, + "hate": { + "en": "Hate", + "fr": "Haine" + }, + "heavylasercannon": { + "en": "Heavy Laser Cannon", + "fr": "Canon Laser Lourd" + }, + "heightenedperception": { + "en": "Heightened Perception", + "fr": "Perception Renforcée" + }, + "herasyndulla": { + "en": "Hera Syndulla", + "fr": "Hera Syndulla" + }, + "hotshotgunner": { + "en": "Hotshot Gunner", + "fr": "Artilleur Hors Pair" + }, + "ig88d": { + "en": "IG-88D", + "fr": "IG-88D" + }, + "informant": { + "en": "Informant", + "fr": "Informateur" + }, + "instinctiveaim": { + "en": "Instinctive Aim", + "fr": "Visée Instinctive" + }, + "integratedsfoils": { + "en": "Integrated S-foils", + "fr": "S-Foils Intégrés" + }, + "ionbombs": { + "en": "Ion Bombs", + "fr": "Bombe Ionique" + }, + "ioncannon": { + "en": "Ion Cannon", + "fr": "Canon Ionique" + }, + "ioncannonbattery": { + "en": "Ion Cannon Battery", + "fr": "Batterie à Canons Ioniques" + }, + "isbslicer": { + "en": "ISB Slicer", + "fr": "Slicer du BSI" + }, + "jabbathehutt": { + "en": "Jabba the Hutt", + "fr": "Jabba le Hutt" + }, + "jammingbeam": { + "en": "Jamming Beam", + "fr": "Rayon de Brouillage" + }, + "jynerso": { + "en": "Jyn Erso", + "fr": "Jyn Erso" + }, + "k2so": { + "en": "K-2SO", + "fr": "K-2SO" + }, + "kananjarrus": { + "en": "Kanan Jarrus", + "fr": "Kanan Jarrus" + }, + "kaydelconnix": { + "en": "Kaydel Connix", + "fr": "Kaydel Connix" + }, + "ketsuonyo": { + "en": "Ketsu Onyo", + "fr": "Ketsu Onyo" + }, + "korrsella": { + "en": "Korr Sella", + "fr": "Korr Sella" + }, + "kyloren": { + "en": "Kylo Ren", + "fr": "Kylo Ren" + }, + "l337": { + "en": "L3-37", + "fr": "L3-37" + }, + "landingstruts": { + "en": "Landing Struts", + "fr": "Supports d'Atterrissage" + }, + "landocalrissian": { + "en": "Lando Calrissian", + "fr": "Lando Calrissian" + }, + "landocalrissian-crew": { + "en": "Lando Calrissian", + "fr": "Lando Calrissian" + }, + "larmadacy": { + "en": "Larma D'Acy", + "fr": "Larma D'Acy" + }, + "lattsrazzi": { + "en": "Latts Razzi", + "fr": "Latts Razzi" + }, + "leiaorgana": { + "en": "Leia Organa", + "fr": "Leia Organa" + }, + "leiaorgana-resistance": { + "en": "Leia Organa", + "fr": "Leia Organa" + }, + "lukeskywalker": { + "en": "Luke Skywalker", + "fr": "Luke Skywalker" + }, + "m9g8": { + "en": "M9-G8", + "fr": "M9-G8" + }, + "magvayarro": { + "en": "Magva Yarro", + "fr": "Magva Yarro" + }, + "maul": { + "en": "Maul", + "fr": "Maul" + }, + "ministertua": { + "en": "Minister Tua", + "fr": "Ministre Tua" + }, + "moffjerjerrod": { + "en": "Moff Jerjerrod", + "fr": "Moff Jerjerrod" + }, + "niennunb": { + "en": "Nien Nunb", + "fr": "Nien Nunb" + }, + "novicetechnician": { + "en": "Novice Technician", + "fr": "Apprenti Technicien" + }, + "optimizedpowercore": { + "en": "Optimized Power Core", + "fr": "Noyau d'Énergie Optimisé" + }, + "ordnancetubes": { + "en": "Ordnance Tubes", + "fr": "Tubes d'Artillerie" + }, + "os1arsenalloadout": { + "en": "Os-1 Arsenal Loadout", + "fr": "Arsenal Os-1 Embarqué" + }, + "paigetico": { + "en": "Paige Tico", + "fr": "Paige Tico" + }, + "perceptivecopilot": { + "en": "Perceptive Copilot", + "fr": "Copilote Perspicace" + }, + "pettyofficerthanisson": { + "en": "Petty Officer Thanisson", + "fr": "Sergent Thanisson" + }, + "pivotwing": { + "en": "Pivot Wing", + "fr": "Aile Pivot" + }, + "plokoon": { + "en": "Plo Koon", + "fr": "Plo Koon" + }, + "pointdefensebattery": { + "en": "Point-Defense Battery", + "fr": "Batterie Défensive" + }, + "precognitivereflexes": { + "en": "Precognitive Reflexes", + "fr": "Réflexes Prémonitoires" + }, + "predictiveshot": { + "en": "Predictive Shot", + "fr": "Tir Prophétique" + }, + "protonbombs": { + "en": "Proton Bombs", + "fr": "Bombe à Protons" + }, + "proximitymines": { + "en": "Proximity Mines", + "fr": "Mine de Proximité" + }, + "pz4co": { + "en": "PZ-4CO", + "fr": "PZ-4CO" + }, + "qira": { + "en": "Qi'ra", + "fr": "Qi'ra" + }, + "r1j5": { + "en": "R1-J5", + "fr": "R1-J5" + }, + "r2a6": { + "en": "R2-A6", + "fr": "R2-A6" + }, + "r2astromech": { + "en": "R2 Astromech", + "fr": "Astromech R2" + }, + "r2c4": { + "en": "R2-C4", + "fr": "R2-C4" + }, + "r2d2": { + "en": "R2-D2", + "fr": "R2-D2" + }, + "r2d2-crew": { + "en": "R2-D2", + "fr": "R2-D2" + }, + "r2ha": { + "en": "R2-HA", + "fr": "R2-HA" + }, + "r3astromech": { + "en": "R3 Astromech", + "fr": "Astromech R3" + }, + "r4astromech": { + "en": "R4 Astromech", + "fr": "Astromech R4" + }, + "r4p17": { + "en": "R4-P17", + "fr": "R4-P17" + }, + "r4p44": { + "en": "R4-P44", + "fr": "R4-P44" + }, + "r4pastromech": { + "en": "R4-P Astromech", + "fr": "Astromech R4-P" + }, + "r5astromech": { + "en": "R5 Astromech", + "fr": "Astromech R5" + }, + "r5d8": { + "en": "R5-D8", + "fr": "R5-D8" + }, + "r5p8": { + "en": "R5-P8", + "fr": "R5-P8" + }, + "r5tk": { + "en": "R5-TK", + "fr": "R5-TK" + }, + "r5x3": { + "en": "R5-X3", + "fr": "R5-X3" + }, + "rey-gunner": { + "en": "Rey", + "fr": "Rey" + }, + "rosetico": { + "en": "Rose Tico", + "fr": "Rose Tico" + }, + "sabinewren": { + "en": "Sabine Wren", + "fr": "Sabine Wren" + }, + "sawgerrera": { + "en": "Saw Gerrera", + "fr": "Saw Gerrera" + }, + "seasonednavigator": { + "en": "Seasoned Navigator", + "fr": "Navigateur Chevronné" + }, + "seismiccharges": { + "en": "Seismic Charges", + "fr": "Charges Sismiques" + }, + "sense": { + "en": "Sense", + "fr": "Sens" + }, + "servomotorsfoils": { + "en": "Servomotor S-foils", + "fr": "Servomoteur S-foils" + }, + "seventhfleetgunner": { + "en": "Seventh Fleet Gunner", + "fr": "Artilleur de la Septième Flotte" + }, + "seventhsister": { + "en": "Seventh Sister", + "fr": "La Septième Sœur" + }, + "skilledbombardier": { + "en": "Skilled Bombardier", + "fr": "Bombardier Compétent" + }, + "specialforcesgunner": { + "en": "Special Forces Gunner", + "fr": "Artilleur des Forces Spéciales" + }, + "stabilizedsfoils": { + "en": "Stabilized S-foils", + "fr": "S-foils Stabilisés" + }, + "supernaturalreflexes": { + "en": "Supernatural Reflexes", + "fr": "Réflexes Surnaturels" + }, + "supremeleadersnoke": { + "en": "Supreme Leader Snoke", + "fr": "Suprême Leader Snoke" + }, + "tacticalofficer": { + "en": "Tactical Officer", + "fr": "Officier Tactique" + }, + "targetingbattery": { + "en": "Targeting Battery", + "fr": "Batterie de Ciblage" + }, + "tibannareserves": { + "en": "Tibanna Reserves", + "fr": "Réserves de Tibanna" + }, + "tobiasbeckett": { + "en": "Tobias Beckett", + "fr": "Tobias Beckett" + }, + "torynfarr": { + "en": "Toryn Farr", + "fr": "Toryn Farr" + }, + "tractorbeam": { + "en": "Tractor Beam", + "fr": "Rayon Tracteur" + }, + "turbolaserbattery": { + "en": "Turbolaser Battery", + "fr": "Batterie Turbolaser" + }, + "unkarplutt": { + "en": "Unkar Plutt", + "fr": "Unkar Plutt" + }, + "veterantailgunner": { + "en": "Veteran Tail Gunner", + "fr": "Artilleur de Poupe Vétéran" + }, + "veteranturretgunner": { + "en": "Veteran Turret Gunner", + "fr": "Artilleur de Tourelle Vétéran" + }, + "xg1assaultconfiguration": { + "en": "Xg-1 Assault Configuration", + "fr": "Configuration d’Assaut Xg-1" + }, + "zeborrelios": { + "en": "Zeb\" Orrelios", + "fr": "Zeb\" Orrelios" + }, + "zuckuss": { + "en": "Zuckuss", + "fr": "Zuckuss" + } +} diff --git a/pyxwb2/data/upgrades/astromech.json b/pyxwb2/data/upgrades/astromech.json new file mode 100644 index 0000000..49d484b --- /dev/null +++ b/pyxwb2/data/upgrades/astromech.json @@ -0,0 +1,448 @@ +[ + { + "name": "\"Chopper\"", + "limited": 1, + "xws": "chopper", + "sides": [ + { + "title": "\"Chopper\"", + "type": "Astromech", + "ability": "Action: Spend 1 non-recurring [Charge] from another equipped upgrade to recover 1 shield. Action: Spend 2 shields to recover 1 non-recurring [Charge] on an equipped upgrade.", + "slots": ["Astromech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_99.png", + "ffg": 323, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_99.jpg" + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "\"Genius\"", + "limited": 1, + "xws": "genius", + "sides": [ + { + "title": "\"Genius\"", + "type": "Astromech", + "ability": "After you fully execute a maneuver, if you have not dropped or launched a device this round, you may drop 1 bomb.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_143.png", + "slots": ["Astromech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_143.jpg", + "ffg": 368 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "R2 Astromech", + "limited": 0, + "xws": "r2astromech", + "sides": [ + { + "title": "R2 Astromech", + "type": "Astromech", + "ability": "After you reveal your dial, you may spend 1 [Charge] and gain 1 disarm token to recover 1 shield.", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_53.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_53.jpg", + "ffg": 282 + } + ], + "cost": { + "variable": "agility", + "values": { "0": 3, "1": 5, "2": 7, "3": 9 } + }, + "hyperspace": true + }, + { + "name": "R2-D2", + "limited": 1, + "xws": "r2d2", + "sides": [ + { + "title": "R2-D2", + "type": "Astromech", + "ability": "After you reveal your dial, you may spend 1 [Charge] and gain 1 disarm token to recover 1 shield.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_100.png", + "slots": ["Astromech"], + "charges": { "value": 3, "recovers": 0 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_100.jpg", + "ffg": 324 + } + ], + "cost": { + "variable": "agility", + "values": { "0": 4, "1": 6, "2": 8, "3": 10 } + }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "R3 Astromech", + "limited": 0, + "xws": "r3astromech", + "sides": [ + { + "title": "R3 Astromech", + "type": "Astromech", + "ability": "You can maintain up to 2 locks. Each lock must be on a different object. After you perform a [Lock] action, you may acquire a lock.", + "slots": ["Astromech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_54.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_54.jpg", + "ffg": 283 + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "R4 Astromech", + "limited": 0, + "xws": "r4astromech", + "sides": [ + { + "title": "R4 Astromech", + "type": "Astromech", + "ability": "Decrease the difficulty of your speed 1-2 basic maneuvers ([Turn Left], [Bank Left], [Straight], [Bank Right], [Turn Right]).", + "slots": ["Astromech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_55.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_55.jpg", + "ffg": 284 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "sizes": ["Small"] }], + "hyperspace": true + }, + { + "name": "R5 Astromech", + "limited": 0, + "xws": "r5astromech", + "sides": [ + { + "title": "R5 Astromech", + "type": "Astromech", + "ability": "Action: Spend 1 [Charge] to repair 1 facedown damage card. Action: Repair 1 faceup Ship damage card.", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_56.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_56.jpg", + "ffg": 285 + } + ], + "cost": { "value": 4 }, + "hyperspace": true + }, + { + "name": "R5-D8", + "limited": 1, + "xws": "r5d8", + "sides": [ + { + "title": "R5-D8", + "type": "Astromech", + "ability": "Action: Spend 1 [Charge] to repair 1 facedown damage card. Action: Repair 1 faceup Ship damage card.", + "slots": ["Astromech"], + "charges": { "value": 3, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_101.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_101.jpg", + "ffg": 325 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "R5-P8", + "limited": 1, + "xws": "r5p8", + "sides": [ + { + "title": "R5-P8", + "type": "Astromech", + "ability": "While you perform an attack against a defender in your [Front Arc], you may spend 1 [Charge] to reroll 1 attack die. If the rerolled result is a [Critical Hit] result, suffer 1 [Critical Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_144.png", + "slots": ["Astromech"], + "charges": { "value": 3, "recovers": 0 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_144.jpg", + "ffg": 369 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": true + }, + { + "name": "R5-TK", + "limited": 1, + "xws": "r5tk", + "sides": [ + { + "title": "R5-TK", + "type": "Astromech", + "ability": "You can perform attacks against friendly ships.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_145.png", + "slots": ["Astromech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_145.jpg", + "ffg": 370 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "R5-X3", + "limited": 1, + "xws": "r5x3", + "sides": [ + { + "title": "R5-X3", + "type": "Astromech", + "charges": { "value": 2, "recovers": 0 }, + "ability": "Before you activate or engage, you may spend 1 [Charge] to ignore obstacles until the end of this phase.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/aed4536536b67bae316b260ed151c22a.png", + "slots": ["Astromech"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7361f88154703f61221bc2a775f4a9b6.jpg", + "ffg": 483 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": true + }, + { + "name": "R2-HA", + "limited": 1, + "xws": "r2ha", + "sides": [ + { + "title": "R2-HA", + "type": "Astromech", + "ability": "While you defend, you may spend your lock on the attacker to reroll any number of your defense dice.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/b3e6d35ca6b6fd297312248ddf4e69a7.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d72ab7fa7cd398d614466a98076a2e6b.jpg", + "slots": ["Astromech"], + "ffg": 482 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": true + }, + { + "name": "BB-8", + "limited": 1, + "xws": "bb8", + "sides": [ + { + "title": "BB-8", + "type": "Astromech", + "ability": "Before you execute a blue maneuver, you may spend 1 [Charge] to perform a [Barrel Roll] or [Boost] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/37297ef7839800afd543de5d1a363561.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e8a75e0e143a5857ac3931d56ccde86c.jpg", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "ffg": 479 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 2, "1": 3, "2": 4, "3": 5, "4": 6, "5": 7, "6": 8 } + }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": true + }, + { + "name": "BB Astromech", + "limited": 0, + "xws": "bbastromech", + "sides": [ + { + "title": "BB Astromech", + "type": "Astromech", + "ability": "Before you execute a blue maneuver, you may spend 1 [Charge] to perform a [Barrel Roll] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/010399f4054469aed3b04acba08d41b0.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a2e3aaf77e8690a37e76ef4ae2087180.jpg", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "ffg": 480 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6 } + }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "M9-G8", + "limited": 1, + "xws": "m9g8", + "sides": [ + { + "title": "M9-G8", + "type": "Astromech", + "ability": "While a ship you are locking performs an attack, you may choose 1 attack die. If you do, the attacker rerolls that die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cd67f33e8aa52d2aeb07f432125a8c73.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f810d46699343a134003deea0f423131.jpg", + "slots": ["Astromech"], + "ffg": 481 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "R2-C4", + "limited": 1, + "xws": "r2c4", + "sides": [ + { + "title": "R2-C4", + "type": "Astromech", + "ability": "While you perform an attack, you may spend 1 evade token to change 1 [Focus] result to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8fce75228aa2c4eaaf3e9666c4da8caf.png", + "slots": ["Astromech"], + "ffg": 589, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/db2012557dc9b2953aeeb8c3f98d5052.jpg" + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Galactic Republic"] }], + "hyperspace": false + }, + { + "name": "R4-P Astromech", + "xws": "r4pastromech", + "limited": 0, + "sides": [ + { + "title": "R4-P Astromech", + "type": "Astromech", + "ability": "Before you execute a basic maneuver, you may spend 1 [Charge]. If you do, while you execute that maneuver, reduce its difficulty.", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/26f6dd68ba6bb37fa5315f45a6237c88.png", + "ffg": 546, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/081dbeb7591c8dfd1f752729b27bdf2a.jpg" + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "hyperspace": true, + "cost": { "value": 4 } + }, + { + "name": "R4-P17", + "xws": "r4p17", + "limited": 1, + "sides": [ + { + "title": "R4-P17", + "type": "Astromech", + "ability": "After you fully execute a red maneuver, you may spend 1 [Charge] to perform an action, even while stressed.", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/80c71951bb28b45b9ffdc84c9e7e69f8.png", + "ffg": 547, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7b3b50078bef620079c43a1689bb005a.jpg" + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "hyperspace": true, + "cost": { "value": 5 } + }, + { + "name": "R4-P44", + "xws": "r4p44", + "limited": 1, + "sides": [ + { + "title": "R4-P44", + "type": "Astromech", + "ability": "After you fully execute a red maneuver, if there is an enemy ship in your [Bullseye Arc], gain 1 calculate token.", + "slots": ["Astromech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/749fa54f44bc3327349aa3f8b1742a67.png", + "ffg": 551, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/313d08463a9c2e7c5d9377a39277ef03.jpg" + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "hyperspace": false, + "cost": { "value": 5 } + }, + { + "name": "R2-A6", + "limited": 1, + "xws": "r2a6", + "hyperspace": false, + "sides": [ + { + "ability": "After you reveal your dial, you may set your dial to a maneuver of the same bearing of a speed 1 higher or lower.", + "title": "R2-A6", + "type": "Astromech", + "slots": ["Astromech"], + "ffg": 588, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fe5da38a69cf0f5212d5cb06ea9053de.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1d90c6b2f87d17c061e07a92373310b4.png" + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "cost": { "value": 6 } + }, + { + "name": "C1-10P", + "sides": [ + { + "ffg": 618, + "title": "C1-10P", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/c480434cf330e99e269eaf0fe83e2444.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cde74a191d82775eacf2e273e855ef5f.png", + "ability": "Setup: Equip this side faceup. After you execute a maneuver, you may spend 1 [Charge] to perform a red [Evade] action, even while stressed. During the End Phase, if this card has 0 active [Charge], flip it.", + "slots": ["Astromech"], + "charges": { "value": 2, "recovers": 0 }, + "type": "Astromech" + }, + { + "ffg": 617, + "title": "C1-10P (Erratic)", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/815bfa9be6941de313eb1e318a02b2ae.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/6150404202e627187f39b6092cdf702c.png", + "ability": "After you execute a maneuver, you must choose a ship at range 0-1. It gains 1 jam token.", + "slots": ["Astromech"], + "type": "Astromech" + } + ], + "cost": { "value": 7 }, + "limited": 1, + "hyperspace": false, + "xws": "c110p" + }, + { + "name": "R1-J5", + "limited": 1, + "xws": "r1j5", + "hyperspace": true, + "sides": [ + { + "ability": "While you have 2 or fewer stress tokens, you can perform actions on damage cards even while stressed. After you repair a damage card with the Ship trait, you may spend 1 [Charge] to repair that card again.", + "title": "R1-J5", + "type": "Astromech", + "slots": ["Astromech"], + "charges": { "value": 3, "recovers": 0 }, + "ffg": 644, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2f64dab83e6e4c52702d5906a18dbae6.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/07ef542a7250abbf79d27526f17ac879.png" + } + ], + "cost": { "value": 6 } + } +] diff --git a/pyxwb2/data/upgrades/cannon.json b/pyxwb2/data/upgrades/cannon.json new file mode 100644 index 0000000..ab45ea7 --- /dev/null +++ b/pyxwb2/data/upgrades/cannon.json @@ -0,0 +1,127 @@ +[ + { + "name": "Heavy Laser Cannon", + "limited": 0, + "xws": "heavylasercannon", + "sides": [ + { + "title": "Heavy Laser Cannon", + "type": "Cannon", + "ability": "Attack: After the Modify Attack Dice step, change all [Critical Hit] results to [Hit] results.", + "slots": ["Cannon"], + "attack": { + "arc": "Bullseye Arc", + "value": 4, + "minrange": 2, + "maxrange": 3, + "ordnance": false + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_27.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_27.jpg", + "ffg": 256 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Ion Cannon", + "limited": 0, + "xws": "ioncannon", + "sides": [ + { + "title": "Ion Cannon", + "type": "Cannon", + "ability": "Attack: If this attack hits, spend 1 [Hit] or [Critical Hit] result to cause the defender to suffer 1 [Hit] damage. All remaining [Hit]/[Critical Hit] results inflict ion tokens instead of damage.", + "slots": ["Cannon"], + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 1, + "maxrange": 3, + "ordnance": false + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_28.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_28.jpg", + "ffg": 257 + } + ], + "cost": { "value": 6 }, + "hyperspace": true + }, + { + "name": "Jamming Beam", + "limited": 0, + "xws": "jammingbeam", + "sides": [ + { + "title": "Jamming Beam", + "type": "Cannon", + "ability": "Attack: If this attack hits, all [Hit]/[Critical Hit] results inflict jam tokens instead of damage.", + "slots": ["Cannon"], + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 1, + "maxrange": 2, + "ordnance": false + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_29.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_29.jpg", + "ffg": 258 + } + ], + "cost": { "value": 0 }, + "hyperspace": false + }, + { + "name": "Tractor Beam", + "limited": 0, + "xws": "tractorbeam", + "sides": [ + { + "title": "Tractor Beam", + "type": "Cannon", + "ability": "Attack: If this attack hits, all [Hit]/[Critical Hit] results inflict tractor tokens instead of damage.", + "slots": ["Cannon"], + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 1, + "maxrange": 3, + "ordnance": false + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_30.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_30.jpg", + "ffg": 259 + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "Autoblasters", + "limited": 0, + "xws": "autoblasters", + "cost": { "value": 3 }, + "hyperspace": true, + "sides": [ + { + "ability": "Attack: If the defender is in your [Bullseye Arc], roll 1 additional die. During the Neutralize Results step, if you are not in the defender's [Front Arc], [Evade] results do not cancel [Critical Hit] results.", + "title": "Autoblasters", + "type": "Cannon", + "slots": ["Cannon"], + "attack": { + "arc": "Front Arc", + "value": 2, + "minrange": 1, + "maxrange": 2, + "ordnance": false + }, + "ffg": 578, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/dbdad938bd9f4ce64af1d7106dfd5b5e.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/59d4a52e3a534dd090259bd5546e7bab.png" + } + ] + } +] diff --git a/pyxwb2/data/upgrades/cargo.json b/pyxwb2/data/upgrades/cargo.json new file mode 100644 index 0000000..46b55e6 --- /dev/null +++ b/pyxwb2/data/upgrades/cargo.json @@ -0,0 +1,62 @@ +[ + { + "name": "Adaptive Shields", + "limited": 0, + "xws": "adaptiveshields", + "hyperspace": false, + "sides": [ + { + "ability": "While another friendly ship at range 0-1 defends, if it is a smaller size than you, you may spend 1 [Shield] or 2 [Energy] to cancel 1 [Hit] or [Critical Hit] result.", + "title": "Adaptive Shields", + "type": "Cargo", + "slots": ["Cargo"] + } + ], + "cost": { "value": 10 } + }, + { + "name": "Boosted Scanners", + "limited": 0, + "xws": "boostedscanners", + "hyperspace": false, + "sides": [ + { + "ability": "While you lock, coordinate, or jam, you may spend up to 3 [Energy] to increase the range at which you can choose an object by 1 per [Energy] spent this way, to a maximum of range 5.", + "title": "Boosted Scanners", + "type": "Cargo", + "slots": ["Cargo"] + } + ], + "cost": { "value": 8 } + }, + { + "name": "Optimized Power Core", + "limited": 0, + "xws": "optimizedpowercore", + "hyperspace": false, + "sides": [ + { + "ability": "After you execute a blue maneuver, recover 1 [Energy].", + "title": "Optimized Power Core", + "type": "Cargo", + "slots": ["Cargo"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Tibanna Reserves", + "limited": 0, + "xws": "tibannareserves", + "hyperspace": false, + "sides": [ + { + "ability": "Action: Spend 1 [Charge] to recover 2 [Energy].", + "title": "Tibanna Reserves", + "type": "Cargo", + "slots": ["Cargo"] + } + ], + "cost": { "value": 3 } + } +] diff --git a/pyxwb2/data/upgrades/command.json b/pyxwb2/data/upgrades/command.json new file mode 100644 index 0000000..560f123 --- /dev/null +++ b/pyxwb2/data/upgrades/command.json @@ -0,0 +1,188 @@ +[ + { + "name": "Agent of the Empire", + "limited": 1, + "xws": "agentoftheempire", + "hyperspace": false, + "sides": [ + { + "ability": "You are a wing leader. Your wingmates must be 2, 3, 4, or 5 TIE/ln fighters. While you defend, up to 2 of your wingmates in the attack arc may suffer 1 [Hit] or [Critical Hit] damage to cancel a matching result.", + "title": "Agent of the Empire", + "type": "Command", + "slots": ["Command"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Dreadnought Hunter", + "limited": 2, + "xws": "dreadnoughthunter", + "hyperspace": false, + "sides": [ + { + "ability": "While you perform an attack against a huge ship, if the attack deals a faceup damage card to the defender and the defender is in your [Bullseye Arc], you may apply the Precision Shot effect even if you are not in the specified arc.", + "title": "Dreadnought Hunter", + "type": "Command", + "slots": ["Command"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "First Order Elite", + "limited": 1, + "xws": "firstorderelite", + "hyperspace": false, + "sides": [ + { + "ability": "You are a wing leader. Your wingmates must be 2 or 3 TIE/fo fighters or TIE/sf fighters. While you defend, up to 2 of your wingmates in the attack arc may suffer 1 [Hit] or [Critical Hit] damage to cancel a matching result.", + "title": "First Order Elite", + "type": "Command", + "slots": ["Command"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Veteran Wing Leader", + "limited": 0, + "xws": "veteranwingleader", + "hyperspace": false, + "sides": [ + { + "ability": "You are a wing leader. Your wingmates must be 2, 3, 4, or 5 other ships of your ship type. While you defend, up to 2 of your wingmates in the attack arc may suffer 1 [Hit] or [Critical Hit] damage to cancel a matching result.", + "title": "Veteran Wing Leader", + "type": "Command", + "slots": ["Command"] + } + ], + "cost": { "value": 2 } + }, + { + "name": "Admiral Ozzel", + "limited": 1, + "xws": "admiralozzel", + "hyperspace": false, + "sides": [ + { + "ability": "While a friendly large or huge ship at range 0-3 executes a maneuver, it may suffer 1 [Hit] damage to execute a maneuver of a speed 1 higher or lower instead.", + "title": "Admiral Ozzel", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Azmorigan", + "limited": 1, + "xws": "azmorigan", + "hyperspace": false, + "sides": [ + { + "ability": "During the End Phase, you may chooses up to 2 friendly ships at range 0-1. If you do, each of these ships does not remove 1 calculate or evade token.", + "title": "Azmorigan", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Captain Needa", + "limited": 1, + "xws": "captainneeda", + "hyperspace": false, + "sides": [ + { + "ability": "After a friendly ship at range 0-4 reveals its dial, you may spend 1 [Charge]. If you do, it sets its dial to another maneuver of the same difficulty and speed.", + "title": "Captain Needa", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 8 } + }, + { + "name": "Carlist Rieekan", + "limited": 1, + "xws": "carlistrieekan", + "hyperspace": false, + "sides": [ + { + "ability": "After a friendly ship at range 0-2 is destroyed, you may choose a friendly ship at range 0-2. If you do, it may perform a red [Evade] action.", + "title": "Carlist Rieekan", + "type": "Command", + "slots": ["Command", "Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Evade", "difficulty": "Red" } + } + ] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Jan Dodonna", + "limited": 1, + "xws": "jandodonna", + "hyperspace": false, + "sides": [ + { + "ability": "Friendly ships at range 0-3 can spend your focus and evade tokens.", + "title": "Jan Dodonna", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Raymus Antilles", + "limited": 1, + "xws": "raymusantilles", + "hyperspace": false, + "sides": [ + { + "ability": "After you are destroyed, each friendly ship at range 0-1 gains 1 focus token. After you are destroyed, you are not removed until the end of the End Phase.", + "title": "Raymus Antilles", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 12 } + }, + { + "name": "Stalwart Captain", + "limited": 1, + "xws": "stalwartcaptain", + "hyperspace": false, + "sides": [ + { + "ability": "After you are destroyed, you are not removed until the end of the End Phase.", + "title": "Stalwart Captain", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Strategic Commander", + "limited": 1, + "xws": "strategiccommander", + "hyperspace": false, + "sides": [ + { + "ability": "After a friendly ship at range 0-4 reveals its dial, you may spend 1 [Charge]. If you do it sets its dial to another maneuver of the same difficulty and speed.", + "title": "Strategic Commander", + "type": "Command", + "slots": ["Command", "Crew"] + } + ], + "cost": { "value": 6 } + } +] diff --git a/pyxwb2/data/upgrades/configuration.json b/pyxwb2/data/upgrades/configuration.json new file mode 100644 index 0000000..236c0cc --- /dev/null +++ b/pyxwb2/data/upgrades/configuration.json @@ -0,0 +1,344 @@ +[ + { + "name": "Integrated S-foils", + "limited": 0, + "xws": "integratedsfoils", + "sides": [ + { + "title": "Integrated S-foils (Closed)", + "type": "Configuration", + "ability": "While you perform a primary attack, if the defender is not in your [Bullseye Arc], roll 1 fewer attack die. Before you activate, you may flip this card.", + "slots": ["Configuration"], + "grants": [ + { + "type": "action", + "value": { "type": "Barrel Roll", "difficulty": "White" } + }, + { + "type": "action", + "value": { + "type": "Focus", + "difficulty": "White", + "linked": { "type": "Barrel Roll", "difficulty": "Red" } + } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e3b44142faf0f13e541bf674a6c06dbc.png", + "ffg": 486, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a8233a67adce770e91e4b6b9025670ed.jpg" + }, + { + "title": "Integrated S-foils (Open)", + "type": "Configuration", + "ability": "Before you activate, you may flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/49372b4efb974ff673a1b79441186fd5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bf5e7b98158570f9d4fc259b5553f4ca.jpg", + "ffg": 487 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "ships": ["t70xwing"] }], + "hyperspace": true + }, + { + "name": "Os-1 Arsenal Loadout", + "limited": 0, + "xws": "os1arsenalloadout", + "sides": [ + { + "title": "Os-1 Arsenal Loadout", + "type": "Configuration", + "ability": "While you have exactly 1 disarm token, you can still perform [Torpedo] and [Missile] attacks against targets you have locked. If you do, you cannot spend your lock during the attack. Add [Torpedo] and [Missile] slots.", + "slots": ["Configuration"], + "grants": [ + { "type": "slot", "value": "Torpedo", "amount": 1 }, + { "type": "slot", "value": "Missile", "amount": 1 } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_125.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_125.jpg", + "ffg": 350 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "ships": ["alphaclassstarwing"] }], + "hyperspace": false + }, + { + "name": "Pivot Wing", + "limited": 0, + "xws": "pivotwing", + "sides": [ + { + "title": "Pivot Wing (Closed)", + "type": "Configuration", + "ability": "While you defend, roll 1 fewer defense die. After you execute a [0 [Stationary]] maneuver, you may rotate your ship 90° or 180°. Before you activate, you may flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_107b.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_107b.jpg", + "ffg": 332 + }, + { + "title": "Pivot Wing (Open)", + "type": "Configuration", + "ability": "Before you activate, you may flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_107.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_107.jpg", + "ffg": 331 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "ships": ["ut60duwing"] }], + "hyperspace": false + }, + { + "name": "Servomotor S-foils", + "limited": 0, + "xws": "servomotorsfoils", + "sides": [ + { + "title": "Servomotor S-foils (Closed)", + "type": "Configuration", + "ability": "While you perform a primary attack, roll 1 fewer attack die. Before you activate, you may flip this card.", + "slots": ["Configuration"], + "actions": [ + { "type": "Boost", "difficulty": "White" }, + { + "type": "Focus", + "difficulty": "White", + "linked": { "difficulty": "Red", "type": "Boost" } + } + ], + "grants": [ + { + "type": "action", + "value": { "type": "Boost", "difficulty": "White" } + }, + { + "type": "action", + "value": { + "type": "Focus", + "difficulty": "White", + "linked": { "type": "Boost", "difficulty": "Red" } + } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_108b.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_108b.jpg", + "ffg": 334 + }, + { + "title": "Servomotor S-foils (Open)", + "type": "Configuration", + "ability": "Before you activate, you may flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_108.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_108.jpg", + "ffg": 333 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "ships": ["t65xwing"] }], + "hyperspace": true + }, + { + "name": "Xg-1 Assault Configuration", + "limited": 0, + "xws": "xg1assaultconfiguration", + "sides": [ + { + "title": "Xg-1 Assault Configuration", + "type": "Configuration", + "ability": "While you have exactly 1 disarm token, you can still perform [Cannon] attacks. While you perform a [Cannon] attack while disarmed, roll a maximum of 3 attack dice. Add [Cannon] slot.", + "slots": ["Configuration"], + "grants": [{ "type": "slot", "value": "Cannon", "amount": 1 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_126.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_126.jpg", + "ffg": 351 + } + ], + "cost": { "value": 0 }, + "restrictions": [{ "ships": ["alphaclassstarwing"] }], + "hyperspace": false + }, + { + "name": "Grappling Struts", + "limited": 0, + "xws": "grapplingstruts", + "sides": [ + { + "title": "Grappling Struts (Closed)", + "type": "Configuration", + "ability": "Setup: Equip this side faceup. While you execute a maneuver, if you overlap an asteroid or debris cloud and there are 1 or fewer other friendly ships at range 0 of that obstacle, you may flip this card.", + "slots": ["Configuration"], + "ffg": 555, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ca74271f47c42b390ca0ba0b389144a5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/24c35aeb94ef846dc498e4a59fb9bf73.jpg" + }, + { + "title": "Grappling Struts (Open)", + "type": "Configuration", + "ability": "You ignore obstacles at range 0 and while you move through them. After you reveal your dial, if you reveal a maneuver other than a [2 [Straight]] and are at range 0 of an asteroid or debris cloud, skip your Execute Maneuver step and remove 1 stress token; if you revealed a right or left maneuver, rotate your ship 90° in that direction. After you execute a maneuver, flip this card.", + "slots": ["Configuration"], + "ffg": 535, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/be82da17cfd39003fda380bead210eb9.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/55781f0b97bc691866379ff9e1d6d354.jpg" + } + ], + "restrictions": [{ "ships": ["vultureclassdroidfighter"] }], + "hyperspace": true, + "cost": { "value": 1 } + }, + { + "name": "Delta-7B", + "limited": 0, + "xws": "delta7b", + "sides": [ + { + "title": "Delta-7B", + "type": "Configuration", + "slots": ["Configuration"], + "grants": [ + { "type": "stat", "value": "agility", "amount": -1 }, + { "type": "stat", "value": "shields", "amount": 2 }, + { "type": "stat", "value": "attack", "arc": "Front Arc", "amount": 1 } + ], + "ffg": 548, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/515903e04a0d06a9200860698326896d.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/6530f18639b7efff5a5a659589e5d65c.jpg", + "text": "The Delta-7B was designed as a heavier variant of the Delta-7 Aethersprite-class Interceptor, identifiable by the repositioned astromech slot. Many Jedi Generals favor this craft's greater firepower and durability." + } + ], + "cost": { + "variable": "initiative", + "values": { + "0": 14, + "1": 15, + "2": 16, + "3": 17, + "4": 18, + "5": 19, + "6": 20 + } + }, + "restrictions": [{ "ships": ["delta7aethersprite"] }], + "hyperspace": false + }, + { + "name": "Calibrated Laser Targeting", + "limited": 0, + "xws": "calibratedlasertargeting", + "sides": [ + { + "title": "Calibrated Laser Targeting", + "type": "Configuration", + "slots": ["Configuration", "Modification"], + "ability": "While you perform a primary attack, if the defender is in your [Bullseye Arc], add 1 [Focus] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f3e06326ab525e07f9a85363b6d69580.png", + "ffg": 549, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ffe9b36272a15f7c5e2ba2fa075d27dd.jpg" + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 0, "1": 0, "2": 1, "3": 2, "4": 3, "5": 4, "6": 5 } + }, + "restrictions": [{ "ships": ["delta7aethersprite"] }], + "hyperspace": true + }, + { + "name": "Landing Struts", + "limited": 0, + "xws": "landingstruts", + "sides": [ + { + "title": "Landing Struts (Closed)", + "type": "Configuration", + "ability": "Setup: Equip this side faceup. While you execute a maneuver, if you overlap an asteroid or debris cloud and there are 1 or fewer other friendly ships at range 0 of that obstacle, you may flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c23a0130bad7330c0abb6218745910aa.png", + "ffg": 594, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1340d2e5df785275c674d2be07379bf1.jpg" + }, + { + "title": "Landing Struts (Open)", + "type": "Configuration", + "ability": "You ignore obstacles at range 0 and while you move through them. After you reveal your dial, if you reveal a maneuver other than a [2 [Straight]] and are at range 0 of an asteroid or debris cloud, skip your Execute Maneuver step and remove 1 stress token; if you revealed a right or left maneuver, rotate your ship 90° in that direction. After you execute a maneuver, flip this card.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/aba79159308e850b635f6c43721ccdee.png", + "ffg": 595, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/172286420e4263a098c3a2ecb0e73ce2.jpg" + } + ], + "restrictions": [{ "ships": ["hyenaclassdroidbomber"] }], + "hyperspace": true, + "cost": { "value": 1 } + }, + { + "name": "Corsair Refit", + "limited": 2, + "xws": "corsairrefit", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Cannon], [Turret], and [Missile] slots. Bonus Attack: Spend 1 [Energy] to perform a [Cannon], [Turret], or [Missile] attack.", + "title": "Corsair Refit", + "type": "Configuration", + "slots": ["Configuration"] + } + ], + "cost": { "value": 15 } + }, + { + "name": "Stabilized S-foils", + "limited": 0, + "xws": "stabilizedsfoils", + "hyperspace": true, + "sides": [ + { + "ability": "Before you activate, if you are not critically damaged, you may flip this card.", + "title": "Stabilized S-foils (Closed)", + "type": "Configuration", + "slots": ["Configuration"], + "grants": [ + { + "type": "action", + "value": { + "type": "Barrel Roll", + "difficulty": "White", + "linked": { "type": "Evade", "difficulty": "Red" } + } + }, + { + "type": "action", + "value": { "type": "Reload", "difficulty": "Red" } + } + ], + "ffg": 646, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/80efc4163ceb2000a6981b9851c3d1a9.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/77f37d94be3977d6d573219dd6462c2b.png" + }, + { + "ability": "After you perform an attack, you may spend your lock on the defender to perform a bonus [Cannon] attack against that ship using a [Cannon] upgrade you have not attacked with this turn. Before you activate, if you are not critically damaged, you may flip this card.", + "title": "Stabilized S-foils (Open)", + "type": "Configuration", + "slots": ["Configuration"], + "grants": [ + { + "type": "action", + "value": { + "type": "Barrel Roll", + "difficulty": "White", + "linked": { "type": "Lock", "difficulty": "Red" } + } + } + ], + "ffg": 645, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e6316661a866ec6d474363d135ae75d4.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f03c2baf5b0a095e28948f03468cc5d2.png" + } + ], + "cost": { "value": 2 } + } +] diff --git a/pyxwb2/data/upgrades/crew.json b/pyxwb2/data/upgrades/crew.json new file mode 100644 index 0000000..dc24511 --- /dev/null +++ b/pyxwb2/data/upgrades/crew.json @@ -0,0 +1,1644 @@ +[ + { + "name": "\"Chopper\"", + "limited": 1, + "xws": "chopper-crew", + "sides": [ + { + "title": "\"Chopper\"", + "type": "Crew", + "ability": "During the Perform Action step, you may perform 1 action, even while stressed. After you perform an action while stressed, suffer 1 [Hit] damage unless you expose 1 of your damage cards.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_83.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_83.jpg", + "ffg": 307 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "\"Zeb\" Orrelios", + "limited": 1, + "xws": "zeborrelios", + "sides": [ + { + "title": "\"Zeb\" Orrelios", + "type": "Crew", + "ability": "You can perform primary attacks at range 0. Enemy ships at range 0 can perform primary attacks against you.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_94.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_94.jpg", + "ffg": 318 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "0-0-0", + "limited": 1, + "xws": "000", + "sides": [ + { + "title": "0-0-0", + "type": "Crew", + "ability": "At the start of the Engagement Phase, you may choose 1 enemy ship at range 0-1. If you do, you gain 1 calculate token unless that ship chooses to gain 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_127.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_127.jpg", + "ffg": 352 + } + ], + "cost": { "value": 5 }, + "restrictions": [ + { "factions": ["Scum and Villainy"], "names": ["Darth Vader"] } + ], + "hyperspace": true + }, + { + "name": "4-LOM", + "limited": 1, + "xws": "4lom", + "sides": [ + { + "title": "4-LOM", + "type": "Crew", + "ability": "While you perform an attack, after rolling attack dice, you may name a type of green token. If you do, gain 2 ion tokens and, during this attack, the defender cannot spend tokens of the named type.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_128.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_128.jpg", + "ffg": 353 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Admiral Sloane", + "limited": 1, + "xws": "admiralsloane", + "sides": [ + { + "title": "Admiral Sloane", + "type": "Crew", + "ability": "After another friendly ship at range 0-3 defends, if it is destroyed, the attacker gains 2 stress tokens. While a friendly ship at range 0-3 performs an attack against a stressed ship, it may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_109.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_109.jpg", + "ffg": 335 + } + ], + "cost": { "value": 9 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": false + }, + { + "name": "Agent Kallus", + "limited": 1, + "xws": "agentkallus", + "sides": [ + { + "title": "Agent Kallus", + "type": "Crew", + "ability": "Setup: After placing forces, assign the Hunted condition to 1 enemy ship. While you perform an attack against the ship with the Hunted condition, you may change 1 of your [Focus] results to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_110.png", + "conditions": ["hunted"], + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_110.jpg", + "ffg": 336 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Baze Malbus", + "limited": 1, + "xws": "bazemalbus", + "sides": [ + { + "title": "Baze Malbus", + "type": "Crew", + "ability": "While you perform a [Focus] action, you may treat it as red. If you do, gain 1 additional focus token for each enemy ship at range 0-1, to a maximum of 2.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_79.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_79.jpg", + "ffg": 303 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Boba Fett", + "limited": 1, + "xws": "bobafett", + "sides": [ + { + "title": "Boba Fett", + "type": "Crew", + "ability": "Setup: Start in reserve. At the end of Setup, place yourself at range 0 of an obstacle and beyond range 3 of any enemy ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_129.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_129.jpg", + "ffg": 354 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": true + }, + { + "name": "C-3PO", + "limited": 1, + "xws": "c3po", + "sides": [ + { + "title": "C-3PO", + "type": "Crew", + "ability": "Before rolling defense dice, you may spend 1 calculate token to guess aloud a number 1 or higher. If you do and you roll exactly that many [Evade] results, add 1 [Evade] result. After you perform the [Calculate] action, gain 1 calculate token.", + "slots": ["Crew"], + "actions": [{ "type": "Calculate", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_80.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_80.jpg", + "ffg": 304 + } + ], + "cost": { "value": 8 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Cad Bane", + "limited": 1, + "xws": "cadbane", + "sides": [ + { + "title": "Cad Bane", + "type": "Crew", + "ability": "After you drop or launch a device, you may perform a red [Boost] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_130.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_130.jpg", + "ffg": 355 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Captain Phasma", + "limited": 1, + "xws": "captainphasma", + "sides": [ + { + "title": "Captain Phasma", + "type": "Crew", + "ability": "At the end of the Engagement Phase, each enemy ship at range 0-1 that is not stressed gains 1 stress token.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/784566afc8c540d5e392689865207059.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/71ad5db561ea39d9d59c4bbdc1b42f35.jpg", + "ffg": 465 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": false + }, + { + "name": "Cassian Andor", + "limited": 1, + "xws": "cassianandor", + "sides": [ + { + "title": "Cassian Andor", + "type": "Crew", + "ability": "During the System Phase, you may choose 1 enemy ship at range 1-2 and guess aloud a bearing and speed, then look at that ship's dial. If the chosen ship's bearing and speed match your guess, you may set your dial to another maneuver.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_81.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_81.jpg", + "ffg": 305 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Chewbacca", + "limited": 1, + "xws": "chewbacca", + "sides": [ + { + "title": "Chewbacca", + "type": "Crew", + "ability": "At the start of the Engagement Phase, you may spend 2 [Charge] to repair 1 faceup damage card.", + "slots": ["Crew"], + "charges": { "value": 2, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_82.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_82.jpg", + "ffg": 306 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Chewbacca", + "limited": 1, + "xws": "chewbacca-crew", + "sides": [ + { + "title": "Chewbacca", + "type": "Crew", + "ability": "At the start of the End Phase, you may spend 1 focus token to repair 1 of your faceup damage cards.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_157.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_157.jpg", + "ffg": 382 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Ciena Ree", + "limited": 1, + "xws": "cienaree", + "sides": [ + { + "title": "Ciena Ree", + "type": "Crew", + "ability": "After you perform a [Coordinate] action, if the ship you coordinated performed a [Barrel Roll] or [Boost] action, it may gain 1 stress token to rotate 90°.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_111.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_111.jpg", + "ffg": 337 + } + ], + "cost": { "value": 6 }, + "restrictions": [ + { "factions": ["Galactic Empire"] }, + { "action": { "type": "Coordinate" } } + ], + "hyperspace": false + }, + { + "name": "Cikatro Vizago", + "limited": 1, + "xws": "cikatrovizago", + "sides": [ + { + "title": "Cikatro Vizago", + "type": "Crew", + "ability": "During the End Phase, you may choose 2 [Illicit] upgrades equipped to friendly ships at range 0-1. If you do, you may exchange these upgrades. End of Game: Return all [Illicit] upgrades to their original ships.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_131.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_131.jpg", + "ffg": 356 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Darth Vader", + "limited": 1, + "xws": "darthvader", + "sides": [ + { + "title": "Darth Vader", + "type": "Crew", + "ability": "At the start of the Engagement Phase, you may choose 1 ship in your firing arc at range 0-2 and spend 1 [Force]. If you do, that ship suffers 1 [Hit] damage unless it chooses to remove 1 green token.", + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_112.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_112.jpg", + "ffg": 338 + } + ], + "cost": { "value": 14 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": false + }, + { + "name": "Death Troopers", + "limited": 1, + "xws": "deathtroopers", + "sides": [ + { + "title": "Death Troopers", + "type": "Crew", + "ability": "During the Activation Phase, enemy ships at range 0-1 cannot remove stress tokens.", + "slots": ["Crew", "Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_113.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_113.jpg", + "ffg": 339 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Director Krennic", + "limited": 1, + "xws": "directorkrennic", + "sides": [ + { + "title": "Director Krennic", + "type": "Crew", + "ability": "Setup: Before placing forces, assign the Optimized Prototype condition to another friendly ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_114.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/10/21/1021c262-702e-4857-9204-35756e051c2c/g18xs_krennic2nd.png", + "source": "Store Championship 2018" + } + ], + "conditions": ["optimizedprototype"], + "slots": ["Crew"], + "actions": [{ "type": "Lock", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Lock", "difficulty": "White" } + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_114.jpg", + "ffg": 340 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Emperor Palpatine", + "limited": 1, + "xws": "emperorpalpatine", + "sides": [ + { + "title": "Emperor Palpatine", + "type": "Crew", + "ability": "While another friendly ship defends or performs an attack, you may spend 1 [Force] to modify 1 of its dice as though that ship had spent 1 [Force].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_115.png", + "slots": ["Crew", "Crew"], + "force": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_115.jpg", + "ffg": 341 + } + ], + "cost": { "value": 11 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": false + }, + { + "name": "Freelance Slicer", + "limited": 0, + "xws": "freelanceslicer", + "sides": [ + { + "title": "Freelance Slicer", + "type": "Crew", + "ability": "While you defend, before attack dice are rolled, you may spend a lock you have on the attacker to roll 1 attack die. If you do, the attacker gains 1 jam token. Then, on a [Hit] or [Critical Hit] result, gain 1 jam token.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_42.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_42.jpg", + "ffg": 271 + } + ], + "cost": { "value": 3 }, + "hyperspace": false + }, + { + "name": "General Hux", + "limited": 1, + "xws": "generalhux", + "sides": [ + { + "title": "General Hux", + "type": "Crew", + "ability": "While you perform a white [Coordinate] action, you may treat it as red. If you do, you may coordinate up to 2 additional ships of the same ship type, and each ship you coordinate must perform the same action, treating that action as red.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fa0b8492eff625bc66f00bd561015465.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/94bee4960ca0fb907ba77d5cb2ff7abb.jpg", + "ffg": 466 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": false + }, + { + "name": "GNK \"Gonk\" Droid", + "limited": 0, + "xws": "gnkgonkdroid", + "sides": [ + { + "title": "GNK \"Gonk\" Droid", + "type": "Crew", + "ability": "Setup: Lose 1 [Charge]. Action: Recover 1 [Charge]. Action: Spend 1 [Charge] to recover 1 shield.", + "slots": ["Crew"], + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_43.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_43.jpg", + "ffg": 272 + } + ], + "cost": { "value": 10 }, + "hyperspace": false + }, + { + "name": "Grand Inquisitor", + "limited": 1, + "xws": "grandinquisitor", + "sides": [ + { + "title": "Grand Inquisitor", + "type": "Crew", + "ability": "After an enemy ship at range 0-2 reveals its dial, you may spend 1 [Force] to perform 1 white action on your action bar, treating that action as red.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_116.png", + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_116.jpg", + "ffg": 342 + } + ], + "cost": { "value": 13 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Grand Moff Tarkin", + "limited": 1, + "xws": "grandmofftarkin", + "sides": [ + { + "title": "Grand Moff Tarkin", + "type": "Crew", + "ability": "During the System Phase, you may spend 2 [Charge]. If you do, each friendly ship may acquire a lock on a ship that you have locked.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_117.png", + "slots": ["Crew"], + "charges": { "value": 2, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_117.jpg", + "ffg": 343 + } + ], + "cost": { "value": 6 }, + "restrictions": [ + { "factions": ["Galactic Empire"] }, + { "action": { "type": "Lock" } } + ], + "hyperspace": false + }, + { + "name": "Hera Syndulla", + "limited": 1, + "xws": "herasyndulla", + "sides": [ + { + "title": "Hera Syndulla", + "type": "Crew", + "ability": "You can execute red maneuvers even while stressed. After you fully execute a red maneuver, if you have 3 or more stress tokens, remove 1 stress token and suffer 1 [Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_84.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_84.jpg", + "ffg": 308 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "IG-88D", + "limited": 1, + "xws": "ig88d", + "sides": [ + { + "title": "IG-88D", + "type": "Crew", + "ability": "You have the pilot ability of each other friendly ship with the IG-2000 upgrade. After you perform a [Calculate] action, gain 1 calculate token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_132.png", + "slots": ["Crew"], + "actions": [{ "type": "Calculate", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_132.jpg", + "ffg": 357 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "ISB Slicer", + "limited": 0, + "xws": "isbslicer", + "sides": [ + { + "title": "ISB Slicer", + "type": "Crew", + "ability": "During the End Phase, enemy ships at range 1-2 cannot remove jam tokens.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_118.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_118.jpg", + "ffg": 344 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": false + }, + { + "name": "Informant", + "limited": 1, + "xws": "informant", + "sides": [ + { + "title": "Informant", + "type": "Crew", + "ability": "Setup: After placing forces, choose 1 enemy ship and assign the Listening Device condition to it.", + "conditions": ["listeningdevice"], + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_44.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_44.jpg", + "ffg": 273 + } + ], + "cost": { "value": 5 }, + "hyperspace": true + }, + { + "name": "Jabba the Hutt", + "limited": 1, + "xws": "jabbathehutt", + "sides": [ + { + "title": "Jabba the Hutt", + "type": "Crew", + "ability": "During the End Phase, you may choose 1 friendly ship at range 0-2 and spend 1 [Charge]. If you do, that ship recovers 1 [Charge] on 1 of its equipped [Illicit] upgrades.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_133.png", + "slots": ["Crew", "Crew"], + "charges": { "value": 4, "recovers": 0 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_133.jpg", + "ffg": 358 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Jyn Erso", + "limited": 1, + "xws": "jynerso", + "sides": [ + { + "title": "Jyn Erso", + "type": "Crew", + "ability": "If a friendly ship at range 0-3 would gain a focus token, it may gain 1 evade token instead.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_85.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_85.jpg", + "ffg": 309 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Kanan Jarrus", + "limited": 1, + "xws": "kananjarrus", + "sides": [ + { + "title": "Kanan Jarrus", + "type": "Crew", + "ability": "After a friendly ship at range 0-2 fully executes a white maneuver, you may spend 1 [Force] to remove 1 stress token from that ship.", + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_86.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_86.jpg", + "ffg": 310 + } + ], + "cost": { "value": 12 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Ketsu Onyo", + "limited": 1, + "xws": "ketsuonyo", + "sides": [ + { + "title": "Ketsu Onyo", + "type": "Crew", + "ability": "At the start of the End Phase, you may choose 1 enemy ship at range 0-2 in your firing arc. If you do, that ship does not remove its tractor tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_134.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_134.jpg", + "ffg": 359 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Kylo Ren", + "limited": 1, + "xws": "kyloren", + "sides": [ + { + "title": "Kylo Ren", + "type": "Crew", + "ability": "Action: Choose 1 enemy ship at range 1-3. If you do, spend 1 [Force] to assign the I'll Show You the Dark Side condition to that ship.", + "conditions": ["illshowyouthedarkside"], + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f60322a1f5ace7e45f6c7e0fa0200705.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a61302c8e1cd180d4198e9ae75b82e91.jpg", + "ffg": 467 + } + ], + "cost": { "value": 11 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": false + }, + { + "name": "L3-37", + "limited": 1, + "xws": "l337", + "sides": [ + { + "title": "L3-37", + "type": "Crew", + "ability": "Setup: Equip this side faceup. While you defend, you may flip this card. If you do, the attacker must reroll all attack dice.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_158.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_158.jpg", + "ffg": 384 + }, + { + "title": "L3-37's Programming", + "type": "Configuration", + "ability": "If you are not shielded, decrease the difficulty of your bank ([Bank Left] and [Bank Right]) maneuvers.", + "slots": ["Configuration"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_158b.png", + "ffg": 383, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_158b.jpg" + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Lando Calrissian", + "limited": 1, + "xws": "landocalrissian-crew", + "sides": [ + { + "title": "Lando Calrissian", + "type": "Crew", + "ability": "After you roll dice, you may spend 1 green token to reroll up to 2 of your results.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_159.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_159.jpg", + "ffg": 385 + } + ], + "cost": { "value": 8 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Lando Calrissian", + "limited": 1, + "xws": "landocalrissian", + "sides": [ + { + "title": "Lando Calrissian", + "type": "Crew", + "ability": "Action: Roll 2 defense dice. For each [Focus] result, gain 1 focus token. For each [Evade] result, gain 1 evade token. If both results are blank, the opposing player chooses focus or evade. You gain 1 token of that type.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_87.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_87.jpg", + "ffg": 311 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Latts Razzi", + "limited": 1, + "xws": "lattsrazzi", + "sides": [ + { + "title": "Latts Razzi", + "type": "Crew", + "ability": "While you defend, if the attacker is stressed, you may remove 1 stress from the attacker to change 1 of your blank/[Focus] results to an [Evade] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_135.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_135.jpg", + "ffg": 360 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": true + }, + { + "name": "Leia Organa", + "limited": 1, + "xws": "leiaorgana", + "sides": [ + { + "title": "Leia Organa", + "type": "Crew", + "ability": "At the start of the Activation Phase, you may spend 3 [Charge]. During this phase, each friendly ship reduces the difficulty of its red maneuvers.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_88.png", + "slots": ["Crew"], + "charges": { "value": 3, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_88.jpg", + "ffg": 312 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Magva Yarro", + "limited": 1, + "xws": "magvayarro", + "sides": [ + { + "title": "Magva Yarro", + "type": "Crew", + "ability": "After you defend, if the attack hit, you may acquire a lock on the attacker.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_89.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_89.jpg", + "ffg": 313 + } + ], + "cost": { "value": 8 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Maul", + "limited": 1, + "xws": "maul", + "sides": [ + { + "title": "Maul", + "type": "Crew", + "ability": "After you suffer damage, you may gain 1 stress token to recover 1 [Force]. You can equip \"Dark Side\" upgrades.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_136.png", + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "grants": [ + { "type": "force", "value": { "side": ["dark"] }, "amount": 1 } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_136.jpg", + "ffg": 361 + } + ], + "cost": { "value": 12 }, + "restrictions": [ + { "factions": ["Scum and Villainy"], "names": ["Ezra Bridger"] } + ], + "hyperspace": true + }, + { + "name": "Minister Tua", + "limited": 1, + "xws": "ministertua", + "sides": [ + { + "title": "Minister Tua", + "type": "Crew", + "ability": "At the start of the Engagement Phase, if you are damaged, you may perform a red [Reinforce] action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_119.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_119.jpg", + "ffg": 345 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": false + }, + { + "name": "Moff Jerjerrod", + "limited": 1, + "xws": "moffjerjerrod", + "sides": [ + { + "title": "Moff Jerjerrod", + "type": "Crew", + "ability": "During the System Phase, you may spend 2 [Charge]. If you do, choose the [1 [Bank Left]], [1 [Straight]], or [1 [Bank Right]] template. Each friendly ship may perform a red [Boost] action using that template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_120.png", + "slots": ["Crew"], + "charges": { "value": 2, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_120.jpg", + "ffg": 346 + } + ], + "cost": { "value": 8 }, + "restrictions": [ + { "factions": ["Galactic Empire"] }, + { "action": { "type": "Coordinate" } } + ], + "hyperspace": false + }, + { + "name": "Nien Nunb", + "limited": 1, + "xws": "niennunb", + "sides": [ + { + "title": "Nien Nunb", + "type": "Crew", + "ability": "Decrease the difficulty of your bank maneuvers ([Bank Left] and [Bank Right]).", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_90.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_90.jpg", + "ffg": 314 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Novice Technician", + "limited": 0, + "xws": "novicetechnician", + "sides": [ + { + "title": "Novice Technician", + "type": "Crew", + "ability": "At the end of the round, you may roll 1 attack die to repair 1 faceup damage card. Then on a [Hit] result, expose 1 damage card.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_45.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_45.jpg", + "ffg": 274 + } + ], + "cost": { "value": 4 }, + "hyperspace": true + }, + { + "name": "Perceptive Copilot", + "limited": 0, + "xws": "perceptivecopilot", + "sides": [ + { + "title": "Perceptive Copilot", + "type": "Crew", + "ability": "After you perform a [Focus] action, gain 1 focus token.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_46.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_46.jpg", + "ffg": 275 + } + ], + "cost": { "value": 8 }, + "hyperspace": true + }, + { + "name": "Petty Officer Thanisson", + "limited": 1, + "xws": "pettyofficerthanisson", + "sides": [ + { + "title": "Petty Officer Thanisson", + "type": "Crew", + "ability": "During the Activation or Engagement Phase, after an enemy ship in your [Front Arc] at range 0-1 gains a red or orange token, if you are not stressed, you may gain 1 stress token. If you do, that ship gains 1 additional token of the type that it gained.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/900397d209adfd3f7bd6429909cc20cc.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/007c0145ba0ec1c57de17c0448cafef2.jpg", + "ffg": 468 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": false + }, + { + "name": "Qi'ra", + "limited": 1, + "xws": "qira", + "sides": [ + { + "title": "Qi'ra", + "type": "Crew", + "ability": "While you move and perform attacks, you ignore obstacles that you are locking.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_161.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_161.jpg", + "ffg": 387 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "R2-D2", + "limited": 1, + "xws": "r2d2-crew", + "sides": [ + { + "title": "R2-D2", + "type": "Crew", + "ability": "During the End Phase, if you are damaged and not shielded, you may roll 1 attack die to recover 1 shield. On a [Hit] result, expose 1 of your damage cards.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_91.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_91.jpg", + "ffg": 315 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Sabine Wren", + "limited": 1, + "xws": "sabinewren", + "sides": [ + { + "title": "Sabine Wren", + "type": "Crew", + "ability": "Setup: Place 1 ion, 1 jam, 1 stress, and 1 tractor token on this card. After a ship suffers the effect of a friendly bomb, you may remove 1 ion, jam, stress, or tractor token from this card. If you do, that ship gains a matching token.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_92.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_92.jpg", + "ffg": 316 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Saw Gerrera", + "limited": 1, + "xws": "sawgerrera", + "sides": [ + { + "title": "Saw Gerrera", + "type": "Crew", + "ability": "While you perform an attack, you may suffer 1 [Hit] damage to change all of your [Focus] results to [Critical Hit] results.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_93.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_93.jpg", + "ffg": 317 + } + ], + "cost": { "value": 9 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Seasoned Navigator", + "limited": 0, + "xws": "seasonednavigator", + "sides": [ + { + "title": "Seasoned Navigator", + "type": "Crew", + "ability": "After you reveal your dial, you may set your dial to another non-red maneuver of the same speed. While you execute that maneuver, increase its difficulty.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_47.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_47.jpg", + "ffg": 276 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 2, "1": 3, "2": 4, "3": 5, "4": 6, "5": 7, "6": 8 } + }, + "hyperspace": false + }, + { + "name": "Seventh Sister", + "limited": 1, + "xws": "seventhsister", + "sides": [ + { + "title": "Seventh Sister", + "type": "Crew", + "ability": "If an enemy ship at range 0-1 would gain a stress token, you may spend 1 [Force] to have it gain 1 jam or tractor token instead.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_121.png", + "slots": ["Crew"], + "force": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_121.jpg", + "ffg": 347 + } + ], + "cost": { "value": 9 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Supreme Leader Snoke", + "limited": 1, + "xws": "supremeleadersnoke", + "sides": [ + { + "title": "Supreme Leader Snoke", + "type": "Crew", + "ability": "During the System Phase, you may choose any number of enemy ships beyond range 1. If you do, spend that many [Force] to flip each chosen ship's dial faceup.", + "slots": ["Crew", "Crew"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/5b699f8b5268e5290c42adce0fd2ee3e.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3b29995fb9e419822a34c672f2543fa6.jpg", + "ffg": 469 + } + ], + "cost": { "value": 13 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": false + }, + { + "name": "Tactical Officer", + "limited": 0, + "xws": "tacticalofficer", + "sides": [ + { + "title": "Tactical Officer", + "type": "Crew", + "text": "In the chaos of a starfighter battle, a single order can mean the difference between a victory and a massacre.", + "slots": ["Crew"], + "actions": [{ "type": "Coordinate", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_48.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_48.jpg", + "ffg": 277 + } + ], + "cost": { "value": 6 }, + "restrictions": [ + { "action": { "type": "Coordinate", "difficulty": "Red" } } + ], + "hyperspace": true + }, + { + "name": "Tobias Beckett", + "limited": 1, + "xws": "tobiasbeckett", + "sides": [ + { + "title": "Tobias Beckett", + "type": "Crew", + "ability": "Setup: After placing forces, you may choose 1 obstacle in the play area. If you do, place it anywhere in the play area beyond range 2 of any board edge or ship and beyond range 1 of other obstacles.", + "slots": ["Crew"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_160.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_160.jpg", + "ffg": 386 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Unkar Plutt", + "limited": 1, + "xws": "unkarplutt", + "sides": [ + { + "title": "Unkar Plutt", + "type": "Crew", + "ability": "After you partially execute a maneuver, you may suffer 1 [Hit] damage to perform 1 white action.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_137.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_137.jpg", + "ffg": 362 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Zuckuss", + "limited": 1, + "xws": "zuckuss", + "sides": [ + { + "title": "Zuckuss", + "type": "Crew", + "ability": "While you perform an attack, if you are not stressed, you may choose 1 defense die and gain 1 stress token. If you do, the defender must reroll that die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_138.png", + "slots": ["Crew"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_138.jpg", + "ffg": 363 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "C-3PO", + "limited": 1, + "xws": "c3po-crew", + "sides": [ + { + "title": "C-3PO", + "type": "Crew", + "ability": "While you coordinate, you can choose friendly ships beyond range 2 if they have [Calculate] on their action bar. After you perform the [Calculate] or [Coordinate] action, gain 1 calculate token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a0e80bb89748e7415e945a050f82ba84.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1629b5a262f8b69e1dee4b841150c9b7.jpg", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + }, + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Red" } + } + ], + "ffg": 472 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Han Solo", + "limited": 1, + "xws": "hansolo-crew", + "sides": [ + { + "title": "Han Solo", + "type": "Crew", + "ability": "After you perform an [Evade] action, gain additional evade tokens equal to the number of enemy ships at range 0-1.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/622ea4b573afbb5c95b3e9f2989a8aef.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/af2ce405b6c28568aa2d66b78296b351.jpg", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Evade", "difficulty": "Red" } + } + ], + "ffg": 474 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Chewbacca", + "limited": 1, + "xws": "chewbacca-crew-swz19", + "sides": [ + { + "title": "Chewbacca", + "type": "Crew", + "ability": "Setup: Lose 1 [Charge]. After a friendly ship at range 0-3 is dealt 1 damage card, recover 1 [Charge]. While you perform an attack, you may spend 2 [Charge] to change 1 [Focus] result to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3090c218acff7dc71a81e791ce15860e.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3d124811dd272ec2355a30903a827034.jpg", + "slots": ["Crew"], + "charges": { "value": 2, "recovers": 0 }, + "ffg": 473 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Rose Tico", + "limited": 1, + "xws": "rosetico", + "sides": [ + { + "title": "Rose Tico", + "type": "Crew", + "ability": "While you defend or perform an attack, you may spend 1 of your results to acquire a lock on the enemy ship.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/60ac08169a90794c33d1d582f1a08480.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/92a93952c31c95dff0fc96f31e88cfd3.jpg", + "slots": ["Crew"], + "ffg": 475 + } + ], + "cost": { "value": 9 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Palpatine/Sidious", + "limited": 1, + "xws": "chancellorpalpatine", + "sides": [ + { + "title": "Chancellor Palpatine", + "type": "Crew", + "ability": "Setup: Equip this side faceup. After you defend, if the attacker is at range 0-2, you may spend 1 [Force]. If you do, the attacker gains 1 stress token. During the End Phase, you may flip this card.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8218d7b903ea8c0c0f88375124a93a5f.png", + "force": { "value": 1, "recovers": 1 }, + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Purple" } + } + ], + "slots": ["Crew"], + "ffg": 556, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d07f69ceb063c382e60ce33377e9bef7.jpg" + }, + { + "title": "Darth Sidious", + "type": "Crew", + "ability": "After you perform a purple [Coordinate] action, the ship you coordinated gains 1 stress token. Then, it gains 1 focus token or recovers 1 [Force].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fe4d36bbd6f43ada43a5cf55354211c0.png", + "force": { "value": 1, "recovers": 1 }, + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Purple" } + } + ], + "slots": ["Crew"], + "ffg": 538, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e0772c182d95e3abd540950c7689ab34.jpg" + } + ], + "cost": { "value": 14 }, + "restrictions": [ + { "factions": ["Galactic Republic", "Separatist Alliance"] } + ], + "hyperspace": false + }, + { + "name": "Count Dooku", + "limited": 1, + "xws": "countdooku", + "sides": [ + { + "title": "Count Dooku", + "type": "Crew", + "ability": "Before a ship at range 0-2 rolls attack or defense dice, if all of your [Force] are active, you may spend 1 [Force] and name a result. If the roll does not contain the named result, the ship must change 1 die to that result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a1920988dd8634d9780c6363e3f36f6e.png", + "force": { "value": 1, "recovers": 1 }, + "slots": ["Crew"], + "ffg": 539, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a91424eea1db4aeaf24ab49d5a519e27.jpg" + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["Separatist Alliance"] }], + "hyperspace": true + }, + { + "name": "General Grievous", + "limited": 1, + "xws": "generalgrievous", + "sides": [ + { + "title": "General Grievous", + "type": "Crew", + "ability": "While you defend, after the Neutralize Results step, if there are 2 or more [Hit]/[Critical Hit] results, you may spend 1 [Charge] to cancel 1 [Hit] or [Critical Hit] result. After a friendly ship is destroyed, recover 1 [Charge].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f3740c47b0253ec848c4cfcdde195393.png", + "charges": { "value": 1, "recovers": 0 }, + "slots": ["Crew"], + "ffg": 540, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3f6a042b2f8acfdcfcd1f05c28419fe3.jpg" + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Separatist Alliance"] }], + "hyperspace": true + }, + { + "name": "Amilyn Holdo", + "limited": 1, + "xws": "amilynholdo", + "hyperspace": true, + "cost": { "value": 8 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "Before you engage, you may choose another friendly ship at range 1-2. You may transfer to that ship 1 token of a type that ship does not have. That ship may transfer 1 token to you of a type you do not have.", + "title": "Amilyn Holdo", + "type": "Crew", + "slots": ["Crew"], + "ffg": 581, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/daa4aa8732efd994938dae56b6210ede.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/cbe5e849e9daa4f3f968b2ff6e2879b1.png" + } + ] + }, + { + "name": "GA-97", + "limited": 1, + "xws": "ga97", + "hyperspace": false, + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "Setup: Before placing forces, you may spend 3-5 [Charge]. If you do, choose another friendly ship and assign the It's the Resistance condition to it.", + "title": "GA-97", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "White" } + } + ], + "ffg": 582, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/22b0be31694840d7725790e352fa825d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3af44c6d32812dc07238b40842d67b47.png" + } + ] + }, + { + "name": "Kaydel Connix", + "limited": 1, + "xws": "kaydelconnix", + "hyperspace": true, + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "After you reveal your dial, you may set your dial to a basic maneuver of the next higher speed. While you execute that maneuver, increase its difficulty.", + "title": "Kaydel Connix", + "type": "Crew", + "slots": ["Crew"], + "ffg": 583, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f14db8bb29fcb06dfee758cb33490fbe.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/29a0eb418850a3821c38874daf0a6b0d.png" + } + ] + }, + { + "name": "Korr Sella", + "limited": 1, + "xws": "korrsella", + "hyperspace": true, + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "After you fully execute a blue maneuver, remove all of your stress tokens.", + "title": "Korr Sella", + "type": "Crew", + "slots": ["Crew"], + "ffg": 584, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/97aa5ed09744e698d42c2a12a369c786.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/dd102b8e517399d12b17756a863d19ee.png" + } + ] + }, + { + "name": "Larma D'Acy", + "limited": 1, + "xws": "larmadacy", + "hyperspace": true, + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "While you have 2 or fewer stress tokens, you can perform [Reinforce], [Coordinate], and [Jam] actions, even while stressed. While you perform a white [Reinforce], [Coordinate], or [Jam] action, if you are stressed, treat that action as red.", + "title": "Larma D'Acy", + "type": "Crew", + "slots": ["Crew"], + "ffg": 585, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/d147142728d8cc0aa647f97966df3988.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/555a815e60cd7bf4612109c3fd65beaa.png" + } + ] + }, + { + "name": "Leia Organa", + "limited": 1, + "xws": "leiaorgana-resistance", + "hyperspace": true, + "cost": { "value": 17 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "After a friendly ship reveals its dial, you may spend 1 [Force]. If you do, the chosen ship reduces the difficulty of that maneuver.", + "title": "Leia Organa", + "type": "Crew", + "slots": ["Crew", "Crew"], + "force": { "value": 1, "recovers": 1 }, + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Purple" } + } + ], + "ffg": 586, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bd5f0c91b7fb256f91fcfbd006e56acc.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0a194c8c529278b471e64edc597b06fc.png" + } + ] + }, + { + "name": "PZ-4CO", + "limited": 1, + "xws": "pz4co", + "hyperspace": true, + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Resistance"] }], + "sides": [ + { + "ability": "At the end of the Activation Phase, you may choose 1 friendly ship at range 1-2. If you do, transfer 1 calculate token to that ship. If your revealed maneuver is blue, you may transfer 1 focus token instead.", + "title": "PZ-4CO", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ], + "ffg": 587, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/219ba43a9fc9c9756a87676551aa7a69.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/11c5bdf18a62dc43bdda0834026dace2.png" + } + ] + }, + { + "name": "C-3PO", + "sides": [ + { + "ffg": 616, + "title": "C-3PO", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f64417de71053f39ded8886b72184819.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/01e1a3b43aee6c564662825cadcd3f22.png", + "ability": "While you defend, if you are calculating, you may reroll 1 defense die. After you perform a [Calculate] action, gain 1 calculate token.", + "slots": ["Crew"], + "type": "Crew", + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 8 }, + "limited": 1, + "hyperspace": true, + "xws": "c3po-republic" + }, + { + "name": "Aayla Secura", + "limited": 1, + "xws": "aaylasecura", + "hyperspace": false, + "sides": [ + { + "ability": "While an enemy ship in your [Bullseye Arc] performs an attack...", + "title": "Aayla Secura", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { + "type": "Focus", + "difficulty": "White", + "linked": { "type": "Coordinate", "difficulty": "Purple" } + } + } + ] + } + ] + }, + { + "name": "Agent Terex", + "limited": 1, + "xws": "agentterex", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup and place 3 calculate tokens on this card. At the start of the Engagement Phase, you may choose a friendly ship at range 0-3 and remve 1 calculate token from this card to have that ship gain a matching token. Then, if there are no calculate tokens on this card, flip it.", + "title": "Agent Terex", + "type": "Crew", + "slots": ["Crew"] + } + ] + }, + { + "name": "K-2SO", + "limited": 1, + "xws": "k2so", + "hyperspace": true, + "sides": [ + { + "ability": "During the System Phase, you may choose a friendly ship at range 0-3. That ship gains 1 calculate and 1 stress token.", + "title": "K-2SO", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { + "type": "Calculate", + "difficulty": "White", + "linked": { "type": "Jam", "difficulty": "White" } + } + } + ], + "ffg": 647, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ced6485e9da6861b36fe3ab0c747fe76.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/bd3d6c3227984bc0f5daacebdc7d92ad.png" + } + ], + "cost": { "value": 8 } + }, + { + "name": "Plo Koon", + "limited": 1, + "xws": "plokoon", + "hyperspace": false, + "sides": [ + { + "ability": "At the start of the End Phase, if you are reinforced, you may choose 1 friendly ship at range 0 or in your [Left Arc] or [Right Arc] at range 1. That ship removes 1 deplete token or strain token, or repairs 1 faceup damage card.", + "title": "Plo Koon", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { "type": "Reinforce", "difficulty": "Purple" } + } + ] + } + ] + }, + { + "name": "Toryn Farr", + "limited": 1, + "xws": "torynfarr", + "hyperspace": false, + "sides": [ + { + "ability": "After you coordinate a friendly ship, it may acquire a lock on a ship you are locking, ignoring range restrictions.", + "title": "Toryn Farr", + "type": "Crew", + "slots": ["Crew"], + "grants": [ + { + "type": "action", + "value": { + "type": "Lock", + "difficulty": "White", + "linked": { "type": "Coordinate", "difficulty": "Red" } + } + } + ] + } + ], + "cost": { "value": 4 } + } +] diff --git a/pyxwb2/data/upgrades/device.json b/pyxwb2/data/upgrades/device.json new file mode 100644 index 0000000..b31f080 --- /dev/null +++ b/pyxwb2/data/upgrades/device.json @@ -0,0 +1,226 @@ +[ + { + "name": "Bomblet Generator", + "limited": 0, + "xws": "bombletgenerator", + "sides": [ + { + "title": "Bomblet Generator", + "type": "Device", + "ability": "Bomb During the System Phase, you may spend 1 [Charge] to drop a Bomblet with the [1 [Straight]] template. At the start of the Activation Phase, you may spend 1 shield to recover 2 [Charge].", + "slots": ["Device", "Device"], + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "Bomblet", + "type": "Bomb", + "effect": "At the end of the Activation Phase, this device detonates. When this device detonates, each ship and remote at range 0-1 rolls 2 attack dice. Each ship or remote suffers 1 [Hit] damage for each [Hit]/[Critical Hit] result." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_63.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_63.jpg", + "ffg": 392 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Conner Nets", + "limited": 0, + "xws": "connernets", + "sides": [ + { + "title": "Conner Nets", + "type": "Device", + "ability": "Mine During the System Phase, you may spend 1 [Charge] to drop a Conner Net using the [1 [Straight]] template. This card's [Charge] cannot be recovered.", + "slots": ["Device"], + "charges": { "value": 1, "recovers": 0 }, + "device": { + "name": "Conner Net", + "type": "Mine", + "effect": "After a ship overlaps or moves through this device, it detonates. When this device detonates, the ship suffers 1 [Hit] damage and gains 3 ion tokens." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_64.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_64.jpg", + "ffg": 393 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Proton Bombs", + "limited": 0, + "xws": "protonbombs", + "sides": [ + { + "title": "Proton Bombs", + "type": "Device", + "ability": "Bomb During the System Phase, you may spend 1 [Charge] to drop a Proton Bomb using the [1 [Straight]] template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_65.png", + "slots": ["Device"], + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "Proton Bomb", + "type": "Bomb", + "effect": "At the end of the Activation Phase, this device detonates. When this device detonates, each ship and remote at range 0-1 suffers 1 [Critical Hit] damage." + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_65.jpg", + "ffg": 394 + } + ], + "cost": { "value": 5 }, + "hyperspace": true + }, + { + "name": "Proximity Mines", + "limited": 0, + "xws": "proximitymines", + "sides": [ + { + "title": "Proximity Mines", + "type": "Device", + "ability": "Mine During the System Phase, you may spend 1 [Charge] to drop a Proximity Mine using the [1 [Straight]] template. This card's [Charge] cannot be recovered.", + "slots": ["Device"], + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "Proximity Mine", + "type": "Mine", + "effect": "After a ship overlaps or moves through this device, it detonates. When this device detonates, that ship rolls 2 attack dice. That ship then suffers 1 [Hit] damage plus 1 [Hit]/[Critical Hit] damage for each matching result." + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_66.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_66.jpg", + "ffg": 395 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Seismic Charges", + "limited": 0, + "xws": "seismiccharges", + "sides": [ + { + "title": "Seismic Charges", + "type": "Device", + "ability": "Bomb During the System Phase, you may spend 1 [Charge] to drop a Seismic Charge with the [1 [Straight]] template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_67.png", + "slots": ["Device"], + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "Seismic Charge", + "type": "Bomb", + "effect": "At the end of the Activation Phase, this device detonates. When this device detonates, choose 1 obstacle at range 0-1. Each ship and remote at range 0-1 of the obstacle suffers 1 [Hit] damage. Then remove that obstacle." + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_67.jpg", + "ffg": 396 + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "DRK-1 Probe Droids", + "limited": 1, + "xws": "drk1probedroids", + "sides": [ + { + "title": "DRK-1 Probe Droids", + "type": "Device", + "ability": "During the End Phase, you may spend 1 [Charge] to drop or launch 1 DRK-1 probe droid using a speed 3 template. This card's [Charge] cannot be recovered.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/44556cd042e536b41e7e89850e13081a.png", + "slots": ["Device"], + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "DRK-1 Probe Droid", + "type": "Remote", + "effect": "While a friendly ship locks an object or jams an enemy ship, it may measure range from you. After an enemy ship overlaps you, that ship rolls 1 attack die. On a [Focus] result, you suffer 1 [Hit] damage. System Phase: At your initiative, you may relocate useing a [2 [Bank Left]], [2 [Straight]], or [2 [Bank Right]] template.", + "initiative": 0, + "stats": [ + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 1 } + ], + "image": "https://images-cdn.fantasyflightgames.com/filer_public/d1/a7/d1a70245-95d9-4d20-931f-3cadd8a11ed8/swz30_probe-card.png" + }, + "ffg": 541, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a69a3f1075a711b57cf7459e51647a7a.jpg" + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "factions": ["Separatist Alliance"] }], + "hyperspace": true + }, + { + "name": "Electro-Proton Bomb", + "limited": 1, + "xws": "electroprotonbomb", + "sides": [ + { + "title": "Electro-Proton Bomb", + "type": "Device", + "ability": "Bomb During the System Phase, you may spend 1 [Charge] to drop an Electro-Proton Bomb with the [1 [Straight]] template. Then place 1 fuse marker on that device. This card's [Charge] cannot be recovered.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/0f76484cc390fc97d1fe2f863d75944b.png", + "slots": ["Device", "Modification"], + "charges": { "value": 1, "recovers": 0 }, + "device": { + "name": "Electro-Proton Bomb", + "type": "Bomb", + "effect": "At the end of the Activation Phase, this device detonates. When this device detonates, each ship and remote at range 0-2 rolls 4 attack dice. Each ship loses 1 shield for each blank result, gains 1 ion token for each [Focus]/[Hit] result, and gains 1 disarm token for each [Crit] result. Each remote at range 0-1 loses 1 shield for each blank result and suffers 1 damage for each [Focus]/[Hit] result." + }, + "ffg": 591, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/215f5298b9917bd57db474a38139ba08.jpg" + } + ], + "hyperspace": false, + "cost": { "value": 12 }, + "restrictions": [{ "action": { "type": "Reload", "difficulty": "White" } }] + }, + { + "name": "Cluster Mines", + "limited": 0, + "xws": "clustermines", + "hyperspace": true, + "sides": [ + { + "title": "Cluster Mines", + "type": "Device", + "slots": ["Device"], + "ffg": 648, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/aea6bdafa5066a040a8929d6eb46499a.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c27f0dcda78915239450bedf5b931d86.png", + "ability": "Mine During the System Phase, you may spend 1 [Charge] to drop a Cluster Mine set using the [1 [Straight]] template. This card's [Charge] cannot be recovered.", + "charges": { "value": 1, "recovers": 0 }, + "device": { + "name": "Cluster Mine", + "type": "Mine", + "effect": "A Cluster Mine set consists of 3 individual Cluster Mine devices. When a Cluster Mine set is placed, the center Cluster Mine is placed as normal, then two additional cluster mines are placed in the recesses as shown. After a ship overlaps or moves through any individual Cluster Mine, it detonates. Other Cluster Mines in the set that were not overlapped or moved through do not detonate. When each of these devices detonates, that ship rolls 2 attack dice. That ship then suffers 1 [Hit]/[Critical Hit] damage for each matching result." + } + } + ], + "cost": { "value": 8 } + }, + { + "name": "Ion Bombs", + "limited": 0, + "xws": "ionbombs", + "hyperspace": true, + "sides": [ + { + "title": "Ion Bombs", + "type": "Device", + "slots": ["Device"], + "ffg": 649, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f69c5ecaca9ab01380f6329e49970ddf.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e4c43791c16aea639f2e811c16d1dbcf.png", + "ability": "Bomb During the System Phase, you may spend 1 [Charge] to drop an Ion Bomb using the [1 [Straight]] template.", + "charges": { "value": 2, "recovers": 0 }, + "device": { + "name": "Ion Bomb", + "type": "Bomb", + "effect": "At the end of the Activation Phase, this device detonates. When this device detonates, each ship at range 0-1 gains 3 ion tokens, and each remote at range 0-1 suffers 1 [Hit] damage." + } + } + ], + "cost": { "value": 6 } + } +] diff --git a/pyxwb2/data/upgrades/force-power.json b/pyxwb2/data/upgrades/force-power.json new file mode 100644 index 0000000..b1ce7a6 --- /dev/null +++ b/pyxwb2/data/upgrades/force-power.json @@ -0,0 +1,210 @@ +[ + { + "name": "Heightened Perception", + "limited": 0, + "xws": "heightenedperception", + "sides": [ + { + "title": "Heightened Perception", + "type": "Force Power", + "ability": "At the start of the Engagement Phase, you may spend 1 [Force]. If you do, engage at initiative 7 instead of your standard initiative value this phase.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_19.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_19.jpg", + "ffg": 248 + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "Instinctive Aim", + "limited": 0, + "xws": "instinctiveaim", + "sides": [ + { + "title": "Instinctive Aim", + "type": "Force Power", + "ability": "While you perform a special attack, you may spend 1 [Force] to ignore the [Focus] or [Lock] requirement.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_20.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_20.jpg", + "ffg": 249 + } + ], + "cost": { "value": 1 }, + "hyperspace": true + }, + { + "name": "Sense", + "limited": 0, + "xws": "sense", + "sides": [ + { + "title": "Sense", + "type": "Force Power", + "ability": "During the System Phase, you may choose 1 ship at range 0-1 and look at its dial. If you spend 1 [Force], you may choose a ship at range 0-3 instead.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_21.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_21.jpg", + "ffg": 250 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Supernatural Reflexes", + "limited": 0, + "xws": "supernaturalreflexes", + "sides": [ + { + "title": "Supernatural Reflexes", + "type": "Force Power", + "ability": "Before you activate, you may spend 1 [Force] to perform a [Barrel Roll] or [Boost] action. Then, if you performed an action you do not have on your action bar, suffer 1 [Hit] damage.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_22.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_22.jpg", + "ffg": 251 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 4, "1": 4, "2": 4, "3": 8, "4": 16, "5": 24, "6": 32 } + }, + "restrictions": [{ "sizes": ["Small"] }], + "hyperspace": false + }, + { + "name": "Brilliant Evasion", + "limited": 0, + "xws": "brilliantevasion", + "sides": [ + { + "title": "Brilliant Evasion", + "type": "Force Power", + "ability": "While you defend, if you are not in the attacker's [Bullseye Arc], you may spend 1 [Force] to change 2 of your [Focus] results to [Evade] results.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/24b175ad35d035f33a35056b0d1d7a36.png", + "ffg": 536, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/73bd7872a2c74e0402255f868d9d12bb.jpg" + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "Hate", + "limited": 0, + "xws": "hate", + "sides": [ + { + "title": "Hate", + "type": "Force Power", + "ability": "After you suffer 1 or more damage, recover that many [Force].", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4a10b5c8a3d796116163a741d145f4e9.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a373c947f0a56ee4bcf4223250326dc0.jpg", + "ffg": 489 + } + ], + "cost": { + "variable": "size", + "values": { "Small": 3, "Medium": 6, "Large": 9 } + }, + "restrictions": [{ "force_side": ["dark"] }], + "hyperspace": false + }, + { + "name": "Predictive Shot", + "limited": 0, + "xws": "predictiveshot", + "sides": [ + { + "title": "Predictive Shot", + "type": "Force Power", + "ability": "After you declare an attack, if the defender is in your [Bullseye Arc], you may spend 1 [Force]. If you do, during the Roll Defense Dice step, the defender cannot roll more defense dice than the number of your [Hit]/[Critical Hit] results.", + "slots": ["Force Power"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/53ceabb0e2e66e61c077145475b18dab.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e0100c63b2753daf68a9d3948824b086.png", + "ffg": 490 + } + ], + "cost": { "value": 1 }, + "hyperspace": true + }, + { + "name": "Battle Meditation", + "xws": "battlemeditation", + "limited": 0, + "sides": [ + { + "title": "Battle Meditation", + "type": "Force Power", + "ability": "You cannot coordinate limited ships. While you perform a purple [Coordinate] action, you may coordinate 1 additional friendly non-limited ship of the same type. Both ships must perform the same action.", + "slots": ["Force Power"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d0641df31a0fc40c501055dcd34094f6.png", + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Purple" } + } + ], + "ffg": 545, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e9aed0602a75ddad090820e59036a7fd.jpg" + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 0, "1": 2, "2": 4, "3": 6, "4": 8, "5": 10, "6": 12 } + }, + "restrictions": [{ "factions": ["Galactic Republic"] }], + "hyperspace": true + }, + { + "name": "Foresight", + "sides": [ + { + "ffg": 613, + "title": "Foresight", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/87b83856576c1d4b7f3036d6008863f6.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/12c948b9a0fe9f619ecda00f9fdcc437.png", + "ability": "After an enemy ship executes a maneuver, you may spend 1 [Force] to perform this attack against it as a bonus attack. Attack: You may change 1 [Focus] result to a [Hit] result; your dice cannot be modified otherwise.", + "slots": ["Force Power"], + "type": "Force Power", + "attack": { + "arc": "Bullseye Arc", + "value": 2, + "minrange": 1, + "maxrange": 3, + "ordnance": true + } + } + ], + "cost": { "value": 4 }, + "hyperspace": true, + "xws": "foresight", + "limited": 0 + }, + { + "name": "Precognitive Reflexes", + "limited": 0, + "sides": [ + { + "ffg": 614, + "title": "Precognitive Reflexes", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7c139cebc9475051506c5b79a98f465a.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/931c84c3e1b3afe5d078f6b3dd4f677a.png", + "ability": "After you reveal your dial, you may spend 1 [Force] to perform a [Barrel Roll] or [Boost] action. Then, if you performed an action you do not have on your action bar, gain 1 strain token. If you do, you cannot perform another action during your activation.", + "slots": ["Force Power"], + "type": "Force Power" + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 3, "1": 3, "2": 3, "3": 4, "4": 7, "5": 10, "6": 13 } + }, + "hyperspace": false, + "xws": "precognitivereflexes" + } +] diff --git a/pyxwb2/data/upgrades/gunner.json b/pyxwb2/data/upgrades/gunner.json new file mode 100644 index 0000000..ccfea2e --- /dev/null +++ b/pyxwb2/data/upgrades/gunner.json @@ -0,0 +1,428 @@ +[ + { + "name": "Agile Gunner", + "limited": 0, + "xws": "agilegunner", + "sides": [ + { + "title": "Agile Gunner", + "type": "Gunner", + "ability": "During the End Phase, you may rotate your [Single Turret Arc] indicator.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_162.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_162.jpg", + "ffg": 388 + } + ], + "cost": { "value": 8 }, + "hyperspace": true + }, + { + "name": "BT-1", + "limited": 1, + "xws": "bt1", + "sides": [ + { + "title": "BT-1", + "type": "Gunner", + "ability": "While you perform an attack, you may change 1 [Hit] result to a [Critical Hit] result for each stress token the defender has.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_140.png", + "slots": ["Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_140.jpg", + "ffg": 365 + } + ], + "cost": { "value": 2 }, + "restrictions": [ + { "factions": ["Scum and Villainy"], "names": ["Darth Vader"] } + ], + "hyperspace": true + }, + { + "name": "Bistan", + "limited": 1, + "xws": "bistan", + "sides": [ + { + "title": "Bistan", + "type": "Gunner", + "ability": "After you perform a primary attack, if you are focused, you may perform a bonus [Single Turret Arc] attack against a ship you have not already attacked this round.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_95.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_95.jpg", + "ffg": 319 + } + ], + "cost": { "value": 14 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Bossk", + "limited": 1, + "xws": "bossk", + "sides": [ + { + "title": "Bossk", + "type": "Gunner", + "ability": "After you perform a primary attack that misses, if you are not stressed, you must receive 1 stress token to perform a bonus primary attack against the same target.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_139.png", + "slots": ["Gunner"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_139.jpg", + "ffg": 364 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Dengar", + "limited": 1, + "xws": "dengar", + "sides": [ + { + "title": "Dengar", + "type": "Gunner", + "ability": "After you defend, if the attacker is in your firing arc, you may spend 1 [Charge]. If you do, roll 1 attack die unless the attacker chooses to remove 1 green token. On a [Hit] or [Critical Hit] result, the attacker suffers 1 [Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_141.png", + "slots": ["Gunner"], + "charges": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_141.jpg", + "ffg": 366 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": true + }, + { + "name": "Ezra Bridger", + "limited": 1, + "xws": "ezrabridger", + "sides": [ + { + "title": "Ezra Bridger", + "type": "Gunner", + "ability": "After you perform a primary attack, you may spend 1 [Force] to perform a bonus [Single Turret Arc] attack from a [Single Turret Arc] you have not attacked from this round. If you do and you are stressed, you may reroll 1 attack die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_96.png", + "slots": ["Gunner"], + "force": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_96.jpg", + "ffg": 320 + } + ], + "cost": { "value": 14 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Fifth Brother", + "limited": 1, + "xws": "fifthbrother", + "sides": [ + { + "title": "Fifth Brother", + "type": "Gunner", + "ability": "While you perform an attack, you may spend 1 [Force] to change 1 of your [Focus] results to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_122.png", + "slots": ["Gunner"], + "force": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_122.jpg", + "ffg": 348 + } + ], + "cost": { "value": 11 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Greedo", + "limited": 1, + "xws": "greedo", + "sides": [ + { + "title": "Greedo", + "type": "Gunner", + "ability": "While you perform an attack, you may spend 1 [Charge] to change 1 [Hit] result to a [Critical Hit] result. While you defend, if your [Charge] is active, the attacker may change 1 [Hit] result to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_142.png", + "slots": ["Gunner"], + "charges": { "value": 1, "recovers": 1 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_142.jpg", + "ffg": 367 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Han Solo", + "limited": 1, + "xws": "hansolo", + "sides": [ + { + "title": "Han Solo", + "type": "Gunner", + "ability": "During the Engagement Phase, at initiative 7, you may perform a [Single Turret Arc] attack. You cannot attack from that [Single Turret Arc] again this round.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_97.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_97.jpg", + "ffg": 321 + } + ], + "cost": { "value": 14 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Han Solo", + "limited": 1, + "xws": "hansolo-gunner", + "sides": [ + { + "title": "Han Solo", + "type": "Gunner", + "ability": "Before you engage, you may perform a red [Focus] action.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_163.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_163.jpg", + "ffg": 389 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": false + }, + { + "name": "Hotshot Gunner", + "limited": 0, + "xws": "hotshotgunner", + "sides": [ + { + "title": "Hotshot Gunner", + "type": "Gunner", + "ability": "While you perform a [Single Turret Arc] attack, after the Modify Defense Dice step, the defender removes 1 focus or calculate token.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_49.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_49.jpg", + "ffg": 278 + } + ], + "cost": { "value": 7 }, + "hyperspace": false + }, + { + "name": "Luke Skywalker", + "limited": 1, + "xws": "lukeskywalker", + "sides": [ + { + "title": "Luke Skywalker", + "type": "Gunner", + "ability": "At the start of the Engagement Phase, you may spend 1 [Force] to rotate your [Single Turret Arc] indicator.", + "slots": ["Gunner"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_98.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_98.jpg", + "ffg": 322 + } + ], + "cost": { "value": 26 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": false + }, + { + "name": "Skilled Bombardier", + "limited": 0, + "xws": "skilledbombardier", + "sides": [ + { + "title": "Skilled Bombardier", + "type": "Gunner", + "ability": "If you would drop or launch a device, you may use a template of the same bearing with a speed 1 higher or lower.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_50.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_50.jpg", + "ffg": 279 + } + ], + "cost": { "value": 2 }, + "hyperspace": false + }, + { + "name": "Special Forces Gunner", + "limited": 0, + "xws": "specialforcesgunner", + "sides": [ + { + "title": "Special Forces Gunner", + "type": "Gunner", + "ability": "While you perform a primary [Front Arc] attack, if your [Single Turret Arc] is in your [Front Arc], you may roll 1 additional attack die. After you perform a primary [Front Arc] attack, if your [Single Turret Arc] is in your [Rear Arc], you may perform a bonus primary [Single Turret Arc] attack.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d3aed19c7eb6f9ebc2352ac49cdd6b87.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/b87bf63d7db6195febd879edc4880f13.jpg", + "ffg": 470 + } + ], + "cost": { "value": 10 }, + "restrictions": [ + { "factions": ["First Order"] }, + { "ships": ["tiesffighter"] } + ], + "hyperspace": true + }, + { + "name": "Veteran Tail Gunner", + "limited": 0, + "xws": "veterantailgunner", + "sides": [ + { + "title": "Veteran Tail Gunner", + "type": "Gunner", + "ability": "After you perform a primary [Front Arc] attack, you may perform a bonus primary [Rear Arc] attack.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_51.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_51.jpg", + "ffg": 280 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "arcs": ["Rear Arc"] }], + "hyperspace": true + }, + { + "name": "Veteran Turret Gunner", + "limited": 0, + "xws": "veteranturretgunner", + "sides": [ + { + "title": "Veteran Turret Gunner", + "type": "Gunner", + "ability": "After you perform a primary attack, you may perform a bonus [Single Turret Arc] attack using a [Single Turret Arc] you did not already attack from this round.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_52.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_52.jpg", + "ffg": 281 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "action": { "type": "Rotate Arc" } }], + "hyperspace": false + }, + { + "name": "Finn", + "limited": 1, + "xws": "finn", + "sides": [ + { + "title": "Finn", + "type": "Gunner", + "ability": "While you defend or perform a primary attack, if the enemy ship is in your [Front Arc], you may add 1 blank result to your roll (this die can be rerolled or otherwise modified).", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/79477be319935f42270f1712cd269dff.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/7d5d0c76d3c8fdbb5ec893c270eec7b2.jpg", + "ffg": 476 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Paige Tico", + "limited": 1, + "xws": "paigetico", + "sides": [ + { + "title": "Paige Tico", + "type": "Gunner", + "ability": "After you perform a primary attack, you may drop 1 bomb or rotate your [Single Turret Arc]. After you are destroyed, you may drop 1 bomb.", + "slots": ["Gunner"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9dc15f634233b5daba107a07aa63d04c.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a34ab7a76083f91577110d31d20b6e14.jpg", + "ffg": 477 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": false + }, + { + "name": "Rey", + "limited": 1, + "xws": "rey-gunner", + "sides": [ + { + "title": "Rey", + "type": "Gunner", + "ability": "While you defend or perform an attack, if the enemy ship is in your [Single Turret Arc], you may spend 1 [Force] to change 1 of your blank results to a [Evade] or [Hit] result.", + "slots": ["Gunner"], + "force": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e11aec8ae6ec855694947bc2f9d1917e.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ab5eea679d5ca9369cd122bc65001119.jpg", + "ffg": 478 + } + ], + "restrictions": [{ "factions": ["Resistance"] }], + "cost": { "value": 14 }, + "hyperspace": false + }, + { + "name": "Seventh Fleet Gunner", + "limited": 0, + "xws": "seventhfleetgunner", + "sides": [ + { + "title": "Seventh Fleet Gunner", + "type": "Gunner", + "slots": ["Gunner"], + "ability": "While another friendly ship performs a primary attack, if the defender is in your firing arc, you may spend 1 [Charge]. If you do, the attacker rolls 1 additional die, to a maximum of 4. During the System Phase, you may gain 1 disarm token to recover 1 [Charge].", + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a532c1de311e8d0a288af8232495a007.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8461a9f5c79195b802e8b04da922809f.jpg", + "ffg": 553 + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "cost": { "value": 9 }, + "hyperspace": false + }, + { + "name": "Clone Commander Cody", + "limited": 1, + "xws": "clonecommandercody", + "sides": [ + { + "title": "Clone Commander Cody", + "type": "Gunner", + "slots": ["Gunner"], + "ability": "After you perform an attack that missed, if 1 or more [Hit]/[Critical Hit] results were neutralized, the defender gains 1 strain token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1da8e9de468d456f724d0c1f37e90d28.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/209d0df0333dc348c74c0e8a760ca741.jpg", + "ffg": 552 + } + ], + "restrictions": [{ "factions": ["Galactic Republic"] }], + "cost": { "value": 4 }, + "hyperspace": false + }, + { + "name": "Ahsoka Tano", + "sides": [ + { + "ffg": 615, + "title": "Ahsoka Tano", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f37eb1e56dc1928bfcd53e4eb95a01ae.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/bdc101788f827aeaf2f50a513b59aa7e.png", + "ability": "After you execute a maneuver, you may spend 1 [Force] and choose a friendly ship at range 1-3 in your firing arc. If you do, it may perform a red [Focus] action, even while stressed.", + "slots": ["Gunner"], + "type": "Gunner" + } + ], + "cost": { "value": 12 }, + "limited": 1, + "hyperspace": false, + "xws": "ahsokatano" + } +] diff --git a/pyxwb2/data/upgrades/hardpoint.json b/pyxwb2/data/upgrades/hardpoint.json new file mode 100644 index 0000000..31b66ac --- /dev/null +++ b/pyxwb2/data/upgrades/hardpoint.json @@ -0,0 +1,131 @@ +[ + { + "name": "Ion Cannon Battery", + "limited": 0, + "xws": "ioncannonbattery", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup. Bonus Attack: Spend 1 [Energy]. If this attack hits, the defender suffers 1 [Critical Hit] damage, and all [Hit]/[Critical Hit] results inflict ion tokens instead of damage.", + "title": "Ion Cannon Battery", + "type": "Hardpoint", + "slots": ["Hardpoint"], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ] + }, + { + "ability": "Offline After you engage, you may spend 2 [Energy] to flip this card.", + "title": "Ion Cannon Battery (Offline)", + "type": "Hardpoint", + "slots": ["Hardpoint"] + } + ], + "cost": { "value": 5 } + }, + { + "name": "Ordnance Tubes", + "limited": 0, + "xws": "ordnancetubes", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup. You can perform [Torpedo] and [Missile] attacks only as bonus attacks. You must treat the [Front Arc] requirement of you equipped [Torpedo] and [Missile] upgrades as [Full Front Arc]. Bonus Attack: Perform a [Torpedo] attack. Bonus Attack: Perform a [Missile] attack.", + "title": "Ordnance Tubes", + "type": "Hardpoint", + "slots": ["Hardpoint"] + }, + { + "ability": "Offline You must treat the [Front Arc] requirement of your equipped [Torpedo] and [Missile] upgrades as [Bullseye Arc]. Action: Spend 2 [Energy] to flip this card.", + "title": "Ordnance Tubes (Offline)", + "type": "Hardpoint", + "slots": ["Hardpoint"] + } + ], + "cost": { "value": 1 } + }, + { + "name": "Point-Defense Battery", + "limited": 0, + "xws": "pointdefensebattery", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup. Bonus Attack: Spend 1 [Energy]. Bonus Attack: Spend 1 [Energy]. Bonus Attack: Spend 1 [Energy]. Bonus Attack: Spend 1 [Energy].", + "title": "Point-Defense Battery", + "type": "Hardpoint", + "slots": ["Hardpoint"], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ] + }, + { + "ability": "Offline After you engage, you may spend 2 [Energy] to flip this card.", + "title": "Point-Defense Battery (Offline)", + "type": "Hardpoint", + "slots": ["Hardpoint"] + } + ], + "cost": { "value": 9 } + }, + { + "name": "Targeting Battery", + "limited": 0, + "xws": "targetingbattery", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup. Bonus Attack: Spend 1 [Energy]. After you perform this attack, you may acquire a lock on the defender.", + "title": "Targeting Battery", + "type": "Hardpoint", + "slots": ["Hardpoint"], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ] + }, + { + "ability": "Offline After you engage, you may spend 2 [Energy] to flip this card.", + "title": "Targeting Battery (Offline)", + "type": "Hardpoint", + "slots": ["Hardpoint"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Turbolaser Battery", + "limited": 0, + "xws": "turbolaserbattery", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: Equip this side faceup. Bonus Attack([Lock]): Spend 3 [Energy]. If this attack hits, add 3 [Hit] results.", + "title": "Turbolaser Battery", + "type": "Hardpoint", + "slots": ["Hardpoint"], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ] + }, + { + "ability": "Offline After you engage, you may spend 2 [Energy] to flip this card.", + "title": "Turbolaser Battery (Offline)", + "type": "Hardpoint", + "slots": ["Hardpoint"] + } + ], + "cost": { "value": 13 } + } +] diff --git a/pyxwb2/data/upgrades/illicit.json b/pyxwb2/data/upgrades/illicit.json new file mode 100644 index 0000000..bb88be4 --- /dev/null +++ b/pyxwb2/data/upgrades/illicit.json @@ -0,0 +1,186 @@ +[ + { + "name": "Cloaking Device", + "limited": 1, + "xws": "cloakingdevice", + "sides": [ + { + "title": "Cloaking Device", + "type": "Illicit", + "ability": "Action: Spend 1 [Charge] to perform a [Cloak] action. At the start of the Planning Phase, roll 1 attack die. On a [Focus] result, decloak or discard your cloak token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_57.png", + "slots": ["Illicit"], + "charges": { "value": 2, "recovers": 0 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_57.jpg", + "ffg": 286 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "hyperspace": false + }, + { + "name": "Contraband Cybernetics", + "limited": 0, + "xws": "contrabandcybernetics", + "sides": [ + { + "title": "Contraband Cybernetics", + "type": "Illicit", + "ability": "Before you activate, you may spend 1 [Charge]. If you do, until the end of the round, you can perform actions and execute red maneuvers, even while stressed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_58.png", + "slots": ["Illicit"], + "charges": { "value": 1, "recovers": 0 }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_58.jpg", + "ffg": 287 + } + ], + "cost": { "value": 2 }, + "hyperspace": true + }, + { + "name": "Deadman's Switch", + "limited": 0, + "xws": "deadmansswitch", + "sides": [ + { + "title": "Deadman's Switch", + "type": "Illicit", + "ability": "After you are destroyed, each other ship at range 0-1 suffers 1 [Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_59.png", + "slots": ["Illicit"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_59.jpg", + "ffg": 288 + } + ], + "cost": { "value": 2 }, + "hyperspace": true + }, + { + "name": "Feedback Array", + "limited": 0, + "xws": "feedbackarray", + "sides": [ + { + "title": "Feedback Array", + "type": "Illicit", + "ability": "Before you engage, you may gain 1 ion token and 1 disarm token. If you do, each ship at range 0 suffers 1 [Hit] damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_60.png", + "slots": ["Illicit"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_60.jpg", + "ffg": 289 + } + ], + "cost": { "value": 3 }, + "hyperspace": false + }, + { + "name": "Inertial Dampeners", + "limited": 0, + "xws": "inertialdampeners", + "sides": [ + { + "title": "Inertial Dampeners", + "type": "Illicit", + "ability": "Before you would execute a maneuver, you may spend 1 shield. If you do, execute a white [0 [Stationary]] instead of the maneuver you revealed, then gain 1 stress token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_61.png", + "slots": ["Illicit"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_61.jpg", + "ffg": 290 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6 } + }, + "hyperspace": true + }, + { + "name": "Rigged Cargo Chute", + "limited": 0, + "xws": "riggedcargochute", + "sides": [ + { + "title": "Rigged Cargo Chute", + "type": "Illicit", + "ability": "Action: Spend 1 [Charge]. Drop 1 loose cargo using the [1 [Straight]] template.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_62.png", + "slots": ["Illicit"], + "charges": { "value": 1, "recovers": 0 }, + "device": { + "name": "Loose Cargo", + "type": "Obstacle", + "effect": "Loose cargo is a debris cloud." + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_62.jpg", + "ffg": 291 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "sizes": ["Medium", "Large"] }], + "hyperspace": true + }, + { + "name": "Coaxium Hyperfuel", + "limited": 0, + "xws": "coaxiumhyperfuel", + "hyperspace": true, + "sides": [ + { + "ability": "You can perform the [SLAM] action even while stressed. If you do, you suffer 1 [Critical Hit] damage unless you expose 1 of your damage cards. After you partially execute a maneuver, you may expose 1 of your damage cards or suffer 1 [Critical Hit] damage to perform a [SLAM] action.", + "title": "Coaxium Hyperfuel", + "type": "Illicit", + "slots": ["Illicit"], + "ffg": 650, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/791981d898356ad13e463b8699975155.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/1622f5d9e279b54d4610820f5dd31a95.png" + } + ], + "cost": { "value": 2 } + }, + { + "name": "Quick-Release Locks", + "limited": 1, + "xws": "quickreleaselocks", + "hyperspace": false, + "sides": [ + { + "ability": "During the System Phase, you may spend 1 [Charge] to place 1 cargo crate drift in your [Rear Arc] at range 0. It cannot overlap a ship this way. This card's [Charge] cannot be recovered.", + "title": "Quick-Release Locks", + "type": "Illicit", + "slots": ["Illicit"] + } + ], + "cost": { "value": 5 } + }, + { + "name": "Saboteur's Map", + "limited": 1, + "xws": "saboteursmap", + "hyperspace": false, + "sides": [ + { + "ability": "At the end of Setup, you may spend up to 1 [Charge] from each of your equipped Mine upgrades to place the corresponding device in the play area beyond range 2 of any enemy ship or other device.", + "title": "Saboteur's Map", + "type": "Illicit", + "slots": ["Illicit"] + } + ], + "cost": { "value": 3 } + }, + { + "name": "Scanner Baffler", + "limited": 1, + "xws": "scannerbaffler", + "hyperspace": false, + "sides": [ + { + "ability": "At the end of Setup, you may choose up to six other friendly, standard ships in your deployment area at range 0-1. If you do, place those ships anywhere at range 0-1.", + "title": "Scanner Baffler", + "type": "Illicit", + "slots": ["Illicit"] + } + ], + "cost": { "value": 8 } + } +] diff --git a/pyxwb2/data/upgrades/missile.json b/pyxwb2/data/upgrades/missile.json new file mode 100644 index 0000000..3b1590b --- /dev/null +++ b/pyxwb2/data/upgrades/missile.json @@ -0,0 +1,284 @@ +[ + { + "name": "Barrage Rockets", + "limited": 0, + "xws": "barragerockets", + "sides": [ + { + "title": "Barrage Rockets", + "type": "Missile", + "ability": "Attack ([Focus]): Spend 1 [Charge]. If the defender is in your [Bullseye Arc], you may spend 1 or more [Charge] to reroll that many attack dice.", + "slots": ["Missile", "Missile"], + "charges": { "value": 5, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_36.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_36.jpg", + "ffg": 265 + } + ], + "cost": { "value": 8 }, + "hyperspace": false + }, + { + "name": "Cluster Missiles", + "limited": 0, + "xws": "clustermissiles", + "sides": [ + { + "title": "Cluster Missiles", + "type": "Missile", + "ability": "Attack ([Lock]): Spend 1 [Charge]. After this attack, you may perform this attack as a bonus attack against a different target at range 0-1 of the defender, ignoring the [Lock] requirement.", + "slots": ["Missile"], + "charges": { "value": 4, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 1, + "maxrange": 2, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_37.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_37.jpg", + "ffg": 266 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Concussion Missiles", + "limited": 0, + "xws": "concussionmissiles", + "sides": [ + { + "title": "Concussion Missiles", + "type": "Missile", + "ability": "Attack ([Lock]): Spend 1 [Charge]. After this attack hits, each ship at range 0-1 of the defender exposes 1 of its damage cards.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_38.png", + "slots": ["Missile"], + "charges": { "value": 3, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_38.jpg", + "ffg": 267 + } + ], + "cost": { "value": 6 }, + "hyperspace": true + }, + { + "name": "Homing Missiles", + "limited": 0, + "xws": "homingmissiles", + "sides": [ + { + "title": "Homing Missiles", + "type": "Missile", + "ability": "Attack ([Lock]): Spend 1 [Charge]. After you declare the defender, the defender may choose to suffer 1 [Hit] damage. If it does, skip the Attack and Defense Dice steps and the attack is treated as hitting.", + "slots": ["Missile"], + "charges": { "value": 2, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 4, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_39.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_39.jpg", + "ffg": 268 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Ion Missiles", + "limited": 0, + "xws": "ionmissiles", + "sides": [ + { + "title": "Ion Missiles", + "type": "Missile", + "ability": "Attack ([Lock]): Spend 1 [Charge]. If this attack hits, spend 1 [Hit] or [Critical Hit] result to cause the defender to suffer 1 [Hit] damage. All remaining [Hit]/[Critical Hit] results inflict ion tokens instead of damage.", + "slots": ["Missile"], + "charges": { "value": 3, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_40.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_40.jpg", + "ffg": 269 + } + ], + "cost": { "value": 4 }, + "hyperspace": true + }, + { + "name": "Proton Rockets", + "limited": 0, + "xws": "protonrockets", + "sides": [ + { + "title": "Proton Rockets", + "type": "Missile", + "ability": "Attack ([Focus]): Spend 1 [Charge].", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_41.png", + "slots": ["Missile"], + "charges": { "value": 1, "recovers": 0 }, + "attack": { + "arc": "Bullseye Arc", + "value": 5, + "minrange": 1, + "maxrange": 2, + "ordnance": true + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_41.jpg", + "ffg": 270 + } + ], + "cost": { "value": 7 }, + "hyperspace": false + }, + { + "name": "Energy-Shell Charges", + "limited": 0, + "xws": "energyshellcharges", + "sides": [ + { + "title": "Energy-Shell Charges", + "type": "Missile", + "ability": "Attack ([Calculate]): Spend 1 [Charge]. While you perform this attack, you may spend 1 calculate token to change 1 [Focus] result to a [Critical Hit] result. Action: Reload this card.", + "charges": { "value": 1, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4b6213e5ed13735bb381df08bdd1398d.png", + "slots": ["Missile"], + "ffg": 532, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a0eeefcf98562fdbc606c8638c35b6db.jpg" + } + ], + "restrictions": [ + { "action": { "type": "Calculate", "difficulty": "White" } }, + { "factions": ["Separatist Alliance"] } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Discord Missiles", + "limited": 3, + "xws": "discordmissiles", + "sides": [ + { + "title": "Discord Missiles", + "type": "Missile", + "ability": "At the start of the Engagement Phase, you may spend 1 calculate token and 1 [Charge] to launch 1 buzz droid swarm using the [3 [Bank Left]], [3 [Straight]], or [3 [Bank Right]] template. This card's [Charge] cannot be recovered.", + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ee2f0b906cb4f1dbcafc274f44b76d3d.png", + "slots": ["Missile"], + "device": { + "name": "Buzz Droid Swarm", + "type": "Remote", + "effect": "After an enemy ship moves through or overlaps you, relocate to its front or rear guides (you are at range 0 of this ship). You cannot overlap an object this way. If you cannot be placed at either set of guides, you and that ship each suffer 1 [Hit] damage. Engagement Phase: At your initiative, each enemy ship at range 0 suffers 1 [Critical Hit] damage.", + "initiative": 0, + "stats": [ + { "type": "agility", "value": 3 }, + { "type": "hull", "value": 1 } + ] + }, + "ffg": 543, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a2c1b72df5f0b429bf38fbd9ad61bc99.jpg" + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "factions": ["Separatist Alliance"] }], + "hyperspace": true + }, + { + "name": "Diamond-Boron Missiles", + "limited": 1, + "xws": "diamondboronmissiles", + "sides": [ + { + "title": "Diamond-Boron Missiles", + "type": "Missile", + "slots": ["Missile", "Missile"], + "ability": "Attack ([Lock]): Spend 1 [Charge]. After this attack hits, you may spend 1 [Charge]. If you do, each ship at range 0-1 of the defender with agility equal to or less than the defender's rolls 1 attack die and suffers 1 [Hit]/[Critical Hit] damage for each matching result.", + "charges": { "value": 3, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/f2c1893053af65ce47300fb133a30312.png", + "ffg": 580, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/bc97441f8e8461e6949ab70b0a4bf0c5.jpg" + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Mag-Pulse Warheads", + "limited": 0, + "xws": "magpulsewarheads", + "hyperspace": true, + "sides": [ + { + "ability": "Attack ([Lock]): Spend 1 [Charge]. If this attack hits, the defender suffers 1 [Critical Hit] damage and gains 1 deplete and 1 jam token. Then cancel all [Hit]/[Critical Hit] results.", + "attack": { + "arc": "Front Arc", + "maxrange": 3, + "minrange": 1, + "ordnance": true, + "value": 3 + }, + "charges": { "value": 2, "recovers": 0 }, + "title": "Mag-Pulse Warheads", + "type": "Missile", + "slots": ["Missile"], + "ffg": 651, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/71140b3339226017653867076e19310f.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/94cdc3be1cf133e123e30f25f181faf7.png" + } + ], + "cost": { "value": 6 } + }, + { + "name": "Multi-Missile Pods", + "limited": 0, + "xws": "multimissilepods", + "hyperspace": false, + "sides": [ + { + "ability": "Attack ([Calculate] or [Lock]): Spend 1 [Charge]. If the defender is in your [Front Arc], you may spend 1 [Charge] to roll 1 additional attack die. If the defender is in your [Bullseye Arc], you map spend up to 2 [Charge] to roll that many additional attack dice instead.", + "title": "Multi-Missile Pods", + "type": "Missile", + "slots": ["Missile", "Missile"] + } + ] + } +] diff --git a/pyxwb2/data/upgrades/modification.json b/pyxwb2/data/upgrades/modification.json new file mode 100644 index 0000000..443ecbb --- /dev/null +++ b/pyxwb2/data/upgrades/modification.json @@ -0,0 +1,369 @@ +[ + { + "name": "Ablative Plating", + "limited": 0, + "xws": "ablativeplating", + "sides": [ + { + "title": "Ablative Plating", + "type": "Modification", + "ability": "Before you would suffer damage from an obstacle or from a friendly bomb detonating, you may spend 1 [Charge]. If you do, prevent 1 damage.", + "slots": ["Modification"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_68.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_68.jpg", + "ffg": 292 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "sizes": ["Medium", "Large"] }], + "hyperspace": false + }, + { + "name": "Advanced SLAM", + "limited": 0, + "xws": "advancedslam", + "sides": [ + { + "title": "Advanced SLAM", + "type": "Modification", + "ability": "After you perform a [SLAM] action, if you fully executed the maneuver, you may perform a white action on your action bar, treating that action as red.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_69.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_69.jpg", + "ffg": 293 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "action": { "type": "SLAM", "difficulty": "White" } }], + "hyperspace": true + }, + { + "name": "Afterburners", + "limited": 0, + "xws": "afterburners", + "sides": [ + { + "title": "Afterburners", + "type": "Modification", + "ability": "After you fully execute a speed 3-5 maneuver, you may spend 1 [Charge] to perform a [Boost] action, even while stressed.", + "slots": ["Modification"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_70.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_70.jpg", + "ffg": 294 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "sizes": ["Small"] }], + "hyperspace": false + }, + { + "name": "Electronic Baffle", + "limited": 0, + "xws": "electronicbaffle", + "sides": [ + { + "title": "Electronic Baffle", + "type": "Modification", + "ability": "During the End Phase, you may suffer 1 [Hit] damage to remove 1 red token.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_71.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_71.jpg", + "ffg": 295 + } + ], + "cost": { "value": 2 }, + "hyperspace": false + }, + { + "name": "Engine Upgrade", + "limited": 0, + "xws": "engineupgrade", + "sides": [ + { + "title": "Engine Upgrade", + "type": "Modification", + "text": "Large military forces such as the Galactic Empire have standardized engines, but individual pilots and small organizations often replace the power couplings, add thrusters, or use high-performance fuel to get extra push out of their engines.", + "slots": ["Modification"], + "actions": [{ "type": "Boost", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Boost", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_72.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_72.jpg", + "ffg": 296 + } + ], + "cost": { + "variable": "size", + "values": { "Small": 2, "Medium": 4, "Large": 7 } + }, + "restrictions": [{ "action": { "type": "Boost", "difficulty": "Red" } }], + "hyperspace": true + }, + { + "name": "Hull Upgrade", + "limited": 0, + "xws": "hullupgrade", + "sides": [ + { + "title": "Hull Upgrade", + "type": "Modification", + "text": "For those who cannot afford an enhanced shield generator, bolting additional plates onto the hull of a ship can serve as an adequate substitute.", + "slots": ["Modification"], + "grants": [{ "type": "stat", "value": "hull", "amount": 1 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_73.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_73.jpg", + "ffg": 297 + } + ], + "cost": { + "variable": "agility", + "values": { "0": 2, "1": 3, "2": 5, "3": 7 } + }, + "hyperspace": true + }, + { + "name": "Munitions Failsafe", + "limited": 0, + "xws": "munitionsfailsafe", + "sides": [ + { + "title": "Munitions Failsafe", + "type": "Modification", + "ability": "While you perform a [Torpedo] or [Missile] attack, after rolling attack dice, you may cancel all dice results to recover 1 [Charge] you spent as a cost for the attack.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_74.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_74.jpg", + "ffg": 298 + } + ], + "cost": { "value": 1 }, + "hyperspace": true + }, + { + "name": "Shield Upgrade", + "limited": 0, + "xws": "shieldupgrade", + "sides": [ + { + "title": "Shield Upgrade", + "type": "Modification", + "text": "Deflector shields are a substantial line of defense on most starships beyond the lightest fighters. While enhancing a ship's shield capacity can be costly, all but the most confident or reckless pilots see the value in this sort of investment.", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/2a/c1/2ac1eae4-dd25-4807-b09e-df97786a2093/g18x3-shield-upgrade-2.png", + "source": "Season Three 2018" + } + ], + "slots": ["Modification"], + "grants": [{ "type": "stat", "value": "shields", "amount": 1 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_75.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_75.jpg", + "ffg": 299 + } + ], + "cost": { + "variable": "agility", + "values": { "0": 3, "1": 4, "2": 6, "3": 8 } + }, + "hyperspace": false + }, + { + "name": "Static Discharge Vanes", + "limited": 0, + "xws": "staticdischargevanes", + "sides": [ + { + "title": "Static Discharge Vanes", + "type": "Modification", + "ability": "Before you would gain 1 ion or jam token, if you are not stressed, you may choose another ship at range 0-1 and gain 1 stress token. If you do, the chosen ship gains that ion or jam token instead, then you suffer 1 [Hit] damage.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_76.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_76.jpg", + "ffg": 300 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Stealth Device", + "limited": 0, + "xws": "stealthdevice", + "sides": [ + { + "title": "Stealth Device", + "type": "Modification", + "ability": "While you defend, if your [Charge] is active, roll 1 additional defense die. After you suffer damage, lose 1 [Charge].", + "slots": ["Modification"], + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_77.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_77.jpg", + "ffg": 301 + } + ], + "cost": { + "variable": "agility", + "values": { "0": 3, "1": 4, "2": 6, "3": 8 } + }, + "hyperspace": false + }, + { + "name": "Tactical Scrambler", + "limited": 0, + "xws": "tacticalscrambler", + "sides": [ + { + "title": "Tactical Scrambler", + "type": "Modification", + "ability": "While you obstruct an enemy ship's attack, the defender rolls 1 additional defense die.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_78.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_78.jpg", + "ffg": 302 + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "sizes": ["Medium", "Large"] }], + "hyperspace": false + }, + { + "name": "Impervium Plating", + "limited": 0, + "xws": "imperviumplating", + "sides": [ + { + "title": "Impervium Plating", + "type": "Modification", + "ability": "Before you would be dealt a faceup Ship damage card, you may spend 1 [Charge] to discard it instead.", + "charges": { "value": 2, "recovers": 0 }, + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/93e0fe1b2931944d128126b854c4ad33.png", + "ffg": 534, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/20769de45863e2bbb180f05e6ed1e0e3.jpg" + } + ], + "restrictions": [{ "ships": ["belbullab22starfighter"] }], + "hyperspace": false, + "cost": { "value": 4 } + }, + { + "name": "Synchronized Console", + "xws": "synchronizedconsole", + "limited": 0, + "sides": [ + { + "title": "Synchronized Console", + "type": "Modification", + "ability": "After you perform an attack, you may choose a friendly ship at range 1 or a friendly ship with the Synchronized Console upgrade at range 1-3 and spend a lock you have on the defender. If you do, the friendly ship you chose may acquire a lock on the defender.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e3e5bd38f39f904fbaaa75293e56fb38.png", + "ffg": 554, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f105bb42b6d3500c300e48ab695c1647.jpg" + } + ], + "restrictions": [ + { "factions": ["Galactic Republic"] }, + { "action": { "type": "Lock", "difficulty": "White" } } + ], + "hyperspace": false, + "cost": { "value": 1 } + }, + { + "name": "Spare Parts Canisters", + "limited": 0, + "xws": "sparepartscanisters", + "sides": [ + { + "title": "Spare Parts Canisters", + "type": "Modification", + "ability": "Action: Spend 1 [Charge] to recover 1 charge on one of your equipped [Astromech] upgrades. Action: Spend 1 [Charge] to drop 1 spare parts, then break all locks assigned to you.", + "charges": { "value": 1, "recovers": 0 }, + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/79d9f2b2bc32bd78ab67dc82eece696a.png", + "ffg": 550, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a61b812e2e74fab5435c9684462cd9d7.jpg" + } + ], + "restrictions": [{ "equipped": ["Astromech"] }], + "hyperspace": true, + "cost": { "value": 4 } + }, + { + "name": "Delayed Fuses", + "limited": 0, + "xws": "delayedfuses", + "sides": [ + { + "title": "Delayed Fuses", + "type": "Modification", + "ability": "After you drop, launch, or place a bomb or mine, you may place 1 fuse marker on that device.", + "slots": ["Modification"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/4572ece39224eeaf2dfce2770b96f919.png", + "ffg": 592, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/453d2de1f5059d0e6eb7884a4bf7986b.jpg" + } + ], + "hyperspace": true, + "cost": { "value": 1 } + }, + { + "name": "Angled Deflectors", + "limited": 0, + "xws": "angleddeflectors", + "hyperspace": true, + "cost": { + "variable": "agility", + "values": { "0": 9, "1": 6, "2": 3, "3": 3 } + }, + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "sides": [ + { + "text": "Starfighter shields often have manual overrides that allow them to be angled for increased front or rear protection. However, doing so leaves the ship exposed if the pilot's situational awareness falters.", + "title": "Angled Deflectors", + "type": "Modification", + "slots": ["Modification"], + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "grants": [ + { "type": "stat", "value": "shields", "amount": -1 }, + { + "type": "action", + "value": { "type": "Reinforce", "difficulty": "White" } + } + ], + "ffg": 593, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/691b45548136b6e5fd005e7797ae53d9.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/41cf9c90abcd8ff5c668bb447967b75c.png" + } + ] + }, + { + "name": "Targeting Computer", + "limited": 0, + "sides": [ + { + "ffg": 619, + "title": "Targeting Computer", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/2e8e6572a5802967220296ec22e5d8cb.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/619d3d56eadaada29c6602cc7cd00148.png", + "text": "Targeting computers are standard features on many vessels, especially those designed to deliver ordnance. Some light starfighters and transport craft lack such weapons guidance, though it can be installed as an after-market modification.", + "slots": ["Modification"], + "type": "Modification", + "grants": [ + { + "type": "action", + "value": { "type": "Lock", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 3 }, + "hyperspace": true, + "xws": "targetingcomputer" + } +] diff --git a/pyxwb2/data/upgrades/sensor.json b/pyxwb2/data/upgrades/sensor.json new file mode 100644 index 0000000..4b15ab9 --- /dev/null +++ b/pyxwb2/data/upgrades/sensor.json @@ -0,0 +1,94 @@ +[ + { + "name": "Advanced Sensors", + "limited": 0, + "xws": "advancedsensors", + "sides": [ + { + "title": "Advanced Sensors", + "type": "Sensor", + "ability": "After you reveal your dial, you may perform 1 action. If you do, you cannot perform another action during your activation.", + "slots": ["Sensor"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_23.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_23.jpg", + "ffg": 252 + } + ], + "cost": { "value": 10 }, + "hyperspace": false + }, + { + "name": "Collision Detector", + "limited": 0, + "xws": "collisiondetector", + "sides": [ + { + "title": "Collision Detector", + "type": "Sensor", + "ability": "While you boost or barrel roll, you can move through and overlap obstacles. After you move through or overlap an obstacle, you may spend 1 [Charge] to ignore its effects until the end of the round.", + "slots": ["Sensor"], + "charges": { "value": 2, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_24.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_24.jpg", + "ffg": 253 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Fire-Control System", + "limited": 0, + "xws": "firecontrolsystem", + "sides": [ + { + "title": "Fire-Control System", + "type": "Sensor", + "ability": "While you perform an attack, if you have a lock on the defender, you may reroll 1 attack die. If you do, you cannot spend your lock during this attack.", + "slots": ["Sensor"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_25.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_25.jpg", + "ffg": 254 + } + ], + "cost": { "value": 2 }, + "hyperspace": true + }, + { + "name": "Trajectory Simulator", + "limited": 0, + "xws": "trajectorysimulator", + "sides": [ + { + "title": "Trajectory Simulator", + "type": "Sensor", + "ability": "During the System Phase, if you would drop or launch a bomb, you may launch it using the [5 [Straight]] template instead.", + "slots": ["Sensor"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_26.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_26.jpg", + "ffg": 255 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Passive Sensors", + "limited": 0, + "xws": "passivesensors", + "hyperspace": true, + "sides": [ + { + "ability": "Action: Spend 1 [Charge]. You can only perform this action in your Perform Action step. While your [Charge] is inactive, you cannot be coordinated. Before you engage, if your [Charge] is inactive, you may perform a [Calculate] or [Lock] action.", + "title": "Passive Sensors", + "type": "Sensor", + "slots": ["Sensor"], + "charges": { "value": 1, "recovers": 1 }, + "ffg": 577, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/a9c69fd08df1a2ce84f240943fe05245.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/08a980b359fb73dbcb9a315e94d505f0.png" + } + ], + "cost": { "value": 3 } + } +] diff --git a/pyxwb2/data/upgrades/tactical-relay.json b/pyxwb2/data/upgrades/tactical-relay.json new file mode 100644 index 0000000..9ef7c3d --- /dev/null +++ b/pyxwb2/data/upgrades/tactical-relay.json @@ -0,0 +1,96 @@ +[ + { + "name": "Kraken", + "limited": 1, + "xws": "kraken", + "sides": [ + { + "title": "Kraken", + "type": "Tactical Relay", + "ability": "During the End Phase, you may choose up to 3 friendly ships at range 0-3. If you do, each of these ships does not remove 1 calculate token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/47dae8a3ecd27a48f3dc35aff03a1a75.png", + "slots": ["Tactical Relay"], + "ffg": 531, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0e1c2510e830ff6d9e7e6226ef2792b4.jpg", + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ] + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "solitary": true } + ], + "hyperspace": true, + "cost": { "value": 10 } + }, + { + "name": "TV-94", + "xws": "tv94", + "limited": 1, + "sides": [ + { + "title": "TV-94", + "type": "Tactical Relay", + "ability": "While a friendly ship at range 0-3 performs a primary attack against a defender in its [Bullseye Arc], if there are 2 or fewer attack dice, it may spend 1 calculate token to add 1 [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/633a34a139c912116c1b034fc2765484.png", + "slots": ["Tactical Relay"], + "ffg": 530, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/f6177b6339e425fff560af884596a83b.jpg" + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "solitary": true } + ], + "cost": { "value": 5 }, + "hyperspace": true + }, + { + "name": "K2-B4", + "xws": "k2b4", + "limited": 1, + "sides": [ + { + "title": "K2-B4", + "type": "Tactical Relay", + "ability": "While a friendly ship at range 0-3 defends, it may spend 1 calculate token. If it does, add 1 [Evade] result unless the attacker chooses to gain 1 strain token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/2178079ef9488899e51e927b2e136572.png", + "slots": ["Tactical Relay"], + "ffg": 537, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fa9a0b38a079ec78b6db330c2ffc9b0a.jpg" + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "solitary": true } + ], + "cost": { "value": 5 }, + "hyperspace": true + }, + { + "name": "TA-175", + "xws": "ta175", + "limited": 1, + "sides": [ + { + "title": "TA-175", + "type": "Tactical Relay", + "ability": "After a friendly ship at range 0-3 with [Calculate] on its action bar is destroyed, each friendly ship at range 0-3 with [Calculate] in its action bar gains 1 calculate token.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/d71e07aa3147c6fe943bd0c8131a0096.png", + "slots": ["Tactical Relay"], + "ffg": 590, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/daa093356e5022b74d375979446e32ff.jpg" + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "solitary": true } + ], + "cost": { "value": 9 }, + "hyperspace": true + } +] diff --git a/pyxwb2/data/upgrades/talent.json b/pyxwb2/data/upgrades/talent.json new file mode 100644 index 0000000..d386544 --- /dev/null +++ b/pyxwb2/data/upgrades/talent.json @@ -0,0 +1,581 @@ +[ + { + "name": "Composure", + "limited": 0, + "xws": "composure", + "sides": [ + { + "title": "Composure", + "type": "Talent", + "ability": "After you fail an action, if you have no green tokens, you may perform a [Focus] action. If you do, you cannot perform additional actions this round.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_156.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_156.jpg", + "ffg": 381 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "action": { "type": "Focus" } }], + "hyperspace": false + }, + { + "name": "Crack Shot", + "limited": 0, + "xws": "crackshot", + "sides": [ + { + "title": "Crack Shot", + "type": "Talent", + "ability": "While you perform a primary attack, if the defender is in your [Bullseye Arc], before the Neutralize Results step, you may spend 1 [Charge] to cancel 1 [Evade] result.", + "slots": ["Talent"], + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_1.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_1.jpg", + "ffg": 230 + } + ], + "cost": { "value": 1 }, + "hyperspace": false + }, + { + "name": "Daredevil", + "limited": 0, + "xws": "daredevil", + "sides": [ + { + "title": "Daredevil", + "type": "Talent", + "ability": "While you perform a white [Boost] action, you may treat it as red to use the [1 [Turn Left]] or [1 [Turn Right]] template instead.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_2.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_2.jpg", + "ffg": 231 + } + ], + "cost": { "value": 2 }, + "restrictions": [ + { "sizes": ["Small"] }, + { "action": { "type": "Boost", "difficulty": "White" } } + ], + "hyperspace": true + }, + { + "name": "Debris Gambit", + "limited": 0, + "xws": "debrisgambit", + "sides": [ + { + "title": "Debris Gambit", + "type": "Talent", + "ability": "While you perform a red [Evade] action, if there is an obstacle at range 0-1, treat the action as white instead.", + "slots": ["Talent"], + "actions": [{ "type": "Evade", "difficulty": "Red" }], + "grants": [ + { + "type": "action", + "value": { "type": "Evade", "difficulty": "Red" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_3.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_3.jpg", + "ffg": 232 + } + ], + "cost": { "value": 4 }, + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "hyperspace": false + }, + { + "name": "Elusive", + "limited": 0, + "xws": "elusive", + "sides": [ + { + "title": "Elusive", + "type": "Talent", + "ability": "While you defend, you may spend 1 [Charge] to reroll 1 defense die. After you fully execute a red maneuver, recover 1 [Charge].", + "slots": ["Talent"], + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_4.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_4.jpg", + "ffg": 233 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "hyperspace": false + }, + { + "name": "Expert Handling", + "limited": 0, + "xws": "experthandling", + "sides": [ + { + "title": "Expert Handling", + "type": "Talent", + "text": "While heavy fighters can often be coaxed into a barrel roll, seasoned pilots know how to do it without putting undue stress on their craft or leaving themselves open to attack.", + "slots": ["Talent"], + "actions": [{ "type": "Barrel Roll", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Barrel Roll", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_5.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_5.jpg", + "ffg": 234 + } + ], + "cost": { + "variable": "size", + "values": { "Small": 2, "Medium": 3, "Large": 4 } + }, + "restrictions": [ + { "action": { "type": "Barrel Roll", "difficulty": "Red" } } + ], + "hyperspace": true + }, + { + "name": "Fanatical", + "limited": 0, + "xws": "fanatical", + "sides": [ + { + "title": "Fanatical", + "type": "Talent", + "ability": "While you perform a primary attack, if you are not shielded, you may change 1 [Focus] result to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/8b164bdb2b401b6741519f6c6e067550.png", + "slots": ["Talent"], + "ffg": 459, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0a7cac152b045daf71fa5d28504e54b4.jpg" + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["First Order"] }], + "hyperspace": true + }, + { + "name": "Fearless", + "limited": 0, + "xws": "fearless", + "sides": [ + { + "title": "Fearless", + "type": "Talent", + "ability": "While you perform a [Front Arc] primary attack, if the attack range is 1 and you are in the defender's [Front Arc], you may change 1 of your results to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_6.png", + "slots": ["Talent"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_6.jpg", + "ffg": 235 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Scum and Villainy"] }], + "hyperspace": true + }, + { + "name": "Heroic", + "limited": 0, + "xws": "heroic", + "sides": [ + { + "title": "Heroic", + "type": "Talent", + "ability": "While you defend or perform an attack, if you have only blank results and have 2 or more results, you may reroll any number of your dice.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/9f8baf4893cd90288df44b69b50fa788.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0f6d1677c35001248d7768047c10aa87.jpg", + "ffg": 471 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": true + }, + { + "name": "Intimidation", + "limited": 0, + "xws": "intimidation", + "sides": [ + { + "title": "Intimidation", + "type": "Talent", + "ability": "While an enemy ship at range 0 defends, it rolls 1 fewer defense die.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_7.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_7.jpg", + "ffg": 236 + } + ], + "cost": { "value": 3 }, + "hyperspace": true + }, + { + "name": "Juke", + "limited": 0, + "xws": "juke", + "sides": [ + { + "title": "Juke", + "type": "Talent", + "ability": "While you perform an attack, if you are evading, you may change 1 of the defender's [Evade] results to a [Focus] result.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_8.png", + "alt": [ + { + "image": "https://images-cdn.fantasyflightgames.com/filer_public/4c/e1/4ce1fe4d-b778-4dc9-8272-23aac7c3884d/g18xs_juke2nd.png", + "source": "Store Championship 2018" + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_8.jpg", + "ffg": 237 + } + ], + "cost": { "value": 7 }, + "restrictions": [{ "sizes": ["Small", "Medium"] }], + "hyperspace": false + }, + { + "name": "Lone Wolf", + "limited": 1, + "xws": "lonewolf", + "sides": [ + { + "title": "Lone Wolf", + "type": "Talent", + "ability": "While you defend or perform an attack, if there are no other friendly ships at range 0-2, you may spend 1 [Charge] to reroll 1 of your dice.", + "slots": ["Talent"], + "charges": { "value": 1, "recovers": 1 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_9.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_9.jpg", + "ffg": 238 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Marksmanship", + "limited": 0, + "xws": "marksmanship", + "sides": [ + { + "title": "Marksmanship", + "type": "Talent", + "ability": "While you perform an attack, if the defender is in your [Bullseye Arc], you may change 1 [Hit] result to a [Critical Hit] result.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_10.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_10.jpg", + "ffg": 239 + } + ], + "cost": { "value": 1 }, + "hyperspace": false + }, + { + "name": "Outmaneuver", + "limited": 0, + "xws": "outmaneuver", + "sides": [ + { + "title": "Outmaneuver", + "type": "Talent", + "ability": "While you perform a [Front Arc] attack, if you are not in the defender's firing arc, the defender rolls 1 fewer defense die.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_11.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_11.jpg", + "ffg": 240 + } + ], + "cost": { "value": 6 }, + "hyperspace": true + }, + { + "name": "Predator", + "limited": 0, + "xws": "predator", + "sides": [ + { + "title": "Predator", + "type": "Talent", + "ability": "While you perform a primary attack, if the defender is in your [Bullseye Arc], you may reroll 1 attack die.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_12.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_12.jpg", + "ffg": 241 + } + ], + "cost": { "value": 2 }, + "hyperspace": false + }, + { + "name": "Ruthless", + "limited": 0, + "xws": "ruthless", + "sides": [ + { + "title": "Ruthless", + "type": "Talent", + "ability": "While you perform an attack, you may choose another friendly ship at range 0-1 of the defender. If you do, that ship suffers 1 [Hit] damage and you may change 1 of your die results to a [Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_13.png", + "slots": ["Talent"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_13.jpg", + "ffg": 242 + } + ], + "cost": { "value": 1 }, + "restrictions": [{ "factions": ["Galactic Empire"] }], + "hyperspace": true + }, + { + "name": "Saturation Salvo", + "limited": 0, + "xws": "saturationsalvo", + "sides": [ + { + "title": "Saturation Salvo", + "type": "Talent", + "ability": "While you perform a [Torpedo] or [Missile] attack, you may spend 1 [Charge] from that upgrade. If you do, choose two defense dice. The defender must reroll those dice.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_14.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_14.jpg", + "ffg": 243 + } + ], + "cost": { "value": 5 }, + "restrictions": [{ "action": { "type": "Reload" } }], + "hyperspace": false + }, + { + "name": "Selfless", + "limited": 0, + "xws": "selfless", + "sides": [ + { + "title": "Selfless", + "type": "Talent", + "ability": "While another friendly ship at range 0-1 defends, before the Neutralize Results step, if you are in the attack arc, you may suffer 1 [Critical Hit] damage to cancel 1 [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_15.png", + "slots": ["Talent"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_15.jpg", + "ffg": 244 + } + ], + "cost": { "value": 3 }, + "restrictions": [{ "factions": ["Rebel Alliance"] }], + "hyperspace": true + }, + { + "name": "Squad Leader", + "limited": 1, + "xws": "squadleader", + "sides": [ + { + "title": "Squad Leader", + "type": "Talent", + "ability": "While you coordinate, the ship you choose can perform an action only if that action is also on your action bar.", + "slots": ["Talent"], + "actions": [{ "type": "Coordinate", "difficulty": "Red" }], + "grants": [ + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "Red" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_16.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_16.jpg", + "ffg": 245 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 2, "1": 4, "2": 6, "3": 8, "4": 10, "5": 12, "6": 14 } + }, + "hyperspace": true + }, + { + "name": "Swarm Tactics", + "limited": 0, + "xws": "swarmtactics", + "sides": [ + { + "title": "Swarm Tactics", + "type": "Talent", + "ability": "At the start of the Engagement Phase, you may choose 1 friendly ship at range 1. If you do, that ship treats its initiative as equal to yours until the end of the round.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_17.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_17.jpg", + "ffg": 246 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 3, "1": 3, "2": 3, "3": 3, "4": 3, "5": 4, "6": 5 } + }, + "hyperspace": false + }, + { + "name": "Trick Shot", + "limited": 0, + "xws": "trickshot", + "sides": [ + { + "title": "Trick Shot", + "type": "Talent", + "ability": "While you perform an attack that is obstructed by an obstacle, roll 1 additional attack die.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_18.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_18.jpg", + "ffg": 247 + } + ], + "cost": { "value": 4 }, + "hyperspace": false + }, + { + "name": "Treacherous", + "xws": "treacherous", + "limited": 0, + "sides": [ + { + "title": "Treacherous", + "type": "Talent", + "ability": "While you defend, you may choose a ship obstructing the attack and spend 1 [Charge]. If you do, cancel 1 [Hit] or [Critical Hit] result, and the ship you chose gains 1 strain token. After a ship at range 0-3 is destroyed, recover 1 [Charge].", + "slots": ["Talent"], + "charges": { "value": 1, "recovers": 0 }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a10d907fea50e32ab28d924c67486d37.png", + "ffg": 529, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/406e6007268488c36fc9066fb0a5d70f.jpg" + } + ], + "hyperspace": true, + "restrictions": [{ "factions": ["Separatist Alliance"] }], + "cost": { "value": 2 } + }, + { + "name": "Dedicated", + "xws": "dedicated", + "limited": 0, + "sides": [ + { + "title": "Dedicated", + "type": "Talent", + "ability": "While another friendly ship in your [Left Arc] or [Right Arc] at range 0-2 defends, if it is limited or has the Dedicated upgrade and you are not strained, you may gain 1 strain token. If you do, the defender rerolls 1 of their blank results.", + "slots": ["Talent"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/31c6723d7e5670c257acfa8788160437.png", + "ffg": 544, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/21b00eaf0d2f447db8fc7b2dc69222ab.jpg" + } + ], + "hyperspace": true, + "restrictions": [ + { "factions": ["Galactic Republic"] }, + { "non-limited": true } + ], + "cost": { "value": 1 } + }, + { + "name": "Ensnare", + "xws": "ensnare", + "limited": 0, + "sides": [ + { + "title": "Ensnare", + "type": "Talent", + "slots": ["Talent"], + "ability": "At the end of the Activation Phase, if you are tractored, you may choose 1 ship in your [Single Turret Arc] arc at range 0-1. Transfer 1 tractor token to it.", + "ffg": 610, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/9513320be3bb150bb8ee6d3504e0ed01.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/5d7e0560460a1d91281537a658ddfc86.png" + } + ], + "cost": { + "variable": "initiative", + "values": { + "0": 12, + "1": 12, + "2": 12, + "3": 12, + "4": 14, + "5": 21, + "6": 28 + } + }, + "hyperspace": false, + "restrictions": [{ "ships": ["nantexclassstarfighter"] }] + }, + { + "name": "Snap Shot", + "limited": 0, + "xws": "snapshot", + "hyperspace": true, + "cost": { + "variable": "size", + "values": { "Small": 7, "Medium": 8, "Large": 9 } + }, + "sides": [ + { + "ability": "After an enemy ship executes a maneuver, you may perform this attack against it as a bonus attack. Attack: Your dice cannot be modified.", + "title": "Snap Shot", + "type": "Talent", + "slots": ["Talent"], + "ffg": 612, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/ec959ee48f953dbde71aa7c89d0b54bf.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/fed45c0416dfd298d9433c4608e99b7e.png", + "attack": { + "arc": "Front Arc", + "value": 2, + "minrange": 2, + "maxrange": 2, + "ordnance": true + } + } + ] + }, + { + "sides": [ + { + "ffg": 611, + "title": "Gravitic Deflection", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8bcd2006892a98b5b29d9aba67733cb6.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/50ec6aa5a267ece16d36533f4efe2bb0.png", + "ability": "While you defend, you may reroll 1 defense die for each tractored ship in the attack arc.", + "slots": ["Talent"], + "type": "Talent" + } + ], + "name": "Gravitic Deflection", + "limited": 0, + "cost": { "value": 5 }, + "hyperspace": true, + "xws": "graviticdeflection" + }, + { + "name": "Proud Tradition", + "limited": 0, + "xws": "proudtradition", + "hyperspace": true, + "sides": [ + { + "ability": "Setup: Equip this side faceup. While you have 2 or fewer stress tokens, you may perform [Focus] actions even while stressed. After you perform an attack, if you are stressed, the defender may spend 1 focus token or suffer 1 [Critical Hit] damage to flip this card.", + "title": "Proud Tradition", + "type": "Talent", + "slots": ["Talent"], + "ffg": 653, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/8f9f85aa00fb260336b9938e2a3f7c33.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/09ec8bb3b37800437bbff7963db6aec6.png" + }, + { + "ability": "Treat your [Focus] actions as red.", + "title": "False Tradition", + "type": "Talent", + "slots": ["Talent"], + "ffg": 652, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/30486dca1780008aea8c4c905f44ead3.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a060961e9ee792e605c75aaf6d65ad34.png" + } + ], + "cost": { "value": 2 } + } +] diff --git a/pyxwb2/data/upgrades/team.json b/pyxwb2/data/upgrades/team.json new file mode 100644 index 0000000..e73d0eb --- /dev/null +++ b/pyxwb2/data/upgrades/team.json @@ -0,0 +1,181 @@ +[ + { + "name": "Bombardment Specialists", + "limited": 0, + "xws": "bombardmentspecialists", + "hyperspace": false, + "sides": [ + { + "ability": "While you perform an attack, you may spend 1 calculate token to increase or decrease the range requirement by 1, to a limit of 0-5.", + "title": "Bombardment Specialists", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { "type": "Lock", "difficulty": "White" } + }, + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Comms Team", + "limited": 0, + "xws": "commsteam", + "hyperspace": false, + "sides": [ + { + "ability": "After you perform a [Coordinate] action, you may spend up to 2 [Energy] to coordinate that many additional ships at range 0-1 of the ship you coordinated.", + "title": "Comms Team", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { + "type": "Coordinate", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + }, + { + "type": "action", + "value": { + "type": "Jam", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + } + ] + } + ], + "cost": { "value": 8 } + }, + { + "name": "Damage Control Team", + "limited": 0, + "xws": "damagecontrolteam", + "hyperspace": false, + "sides": [ + { + "ability": "Before you engage, you may spend 1 or more [Energy] to flip that many of your Offline upgrade cards. Action: Spend 1 or more [Energy] to repair that many of your faceup Ship damage cards.", + "title": "Damage Control Team", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { + "type": "Reinforce", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + } + ] + } + ], + "cost": { "value": 3 } + }, + { + "name": "Gunnery Specialists", + "limited": 0, + "xws": "gunneryspecialists", + "hyperspace": false, + "sides": [ + { + "ability": "While you perform a primary or [Hardpoint] attack, you may spend 1 or more [Energy] to reroll that many attack dice.", + "title": "Gunnery Specialists", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { + "type": "Rotate Arc", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + } + ] + } + ], + "cost": { "value": 8 } + }, + { + "name": "IG-RM Droids", + "limited": 0, + "xws": "igrmdroids", + "hyperspace": false, + "sides": [ + { + "ability": "While you perform an attack, if you are calculating, you may change 1 [Hit] result to a [Critical Hit] result.", + "title": "IG-RM Droids", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 2 } + }, + { + "name": "Ordnance Team", + "limited": 0, + "xws": "ordnanceteam", + "hyperspace": false, + "sides": [ + { + "ability": "While you perform a [Reload] action, you may apend up to 3 [Energy] to reload that may additional [Charge] on your equipped [Missile]/[Torpedo] upgrades. After you perform a [Reload] action, you may spend 1 [Energy] to remove 1 disarm token.", + "title": "Ordnance Team", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { + "type": "Reload", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + } + ] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Sensor Experts", + "limited": 0, + "xws": "sensorexperts", + "hyperspace": false, + "sides": [ + { + "ability": "You can maintain up to 3 locks on different objects. After you perform a [Lock] action, you may spend up to 2 [Energy] to acquire a lock on that many other objects at range 0-1 of th object you locked, ignoring range restrictions.", + "title": "Sensor Experts", + "type": "Team", + "slots": ["Team"], + "grants": [ + { + "type": "action", + "value": { + "type": "Lock", + "difficulty": "White", + "linked": { "type": "Calculate", "difficulty": "White" } + } + } + ] + } + ], + "cost": { "value": 10 } + } +] diff --git a/pyxwb2/data/upgrades/tech.json b/pyxwb2/data/upgrades/tech.json new file mode 100644 index 0000000..aee42fa --- /dev/null +++ b/pyxwb2/data/upgrades/tech.json @@ -0,0 +1,158 @@ +[ + { + "name": "Advanced Optics", + "limited": 0, + "xws": "advancedoptics", + "sides": [ + { + "title": "Advanced Optics", + "type": "Tech", + "ability": "While you perform an attack, you may spend 1 focus token to change 1 of your blank results to a [Hit] result.", + "slots": ["Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/e77e204e6b7164f6a1d945b20a0c4359.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/e19aa7cd99df250715c17386135cd140.jpg", + "ffg": 460 + } + ], + "cost": { "value": 4 }, + "hyperspace": true + }, + { + "name": "Ferrosphere Paint", + "limited": 0, + "xws": "ferrospherepaint", + "sides": [ + { + "title": "Ferrosphere Paint", + "type": "Tech", + "ability": "After an enemy ship locks you, if you are not in that ship's [Bullseye Arc], that ship gains 1 stress token.", + "slots": ["Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/55d8ff7d35b714d9c9a6ef1fd7732a60.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/55ff3d199702695f23631d85a25bbae6.jpg", + "ffg": 488 + } + ], + "cost": { "value": 6 }, + "restrictions": [{ "factions": ["Resistance"] }], + "hyperspace": true + }, + { + "name": "Hyperspace Tracking Data", + "limited": 0, + "xws": "hyperspacetrackingdata", + "sides": [ + { + "title": "Hyperspace Tracking Data", + "type": "Tech", + "ability": "Setup: Before placing forces, you may choose a number between 0 and 6. Treat your initiative as the chosen value during Setup. After Setup, assign 1 focus or evade token to each friendly ship at range 0-2.", + "slots": ["Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a48713c6784bf33bd3f8b36eb19221c3.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/fa5c01453d7aa2e2f1f100593e79669d.jpg", + "ffg": 461 + } + ], + "cost": { "value": 10 }, + "restrictions": [{ "factions": ["First Order"] }, { "sizes": ["Large"] }], + "hyperspace": false + }, + { + "name": "Primed Thrusters", + "limited": 0, + "xws": "primedthrusters", + "sides": [ + { + "title": "Primed Thrusters", + "type": "Tech", + "ability": "While you have 2 or fewer stress tokens, you can perform [Barrel Roll] and [Boost] actions even while stressed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/a114625347a0f3088f4679f8107ab631.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/3789dd873db0d0c74293531bef49e16e.jpg", + "slots": ["Tech"], + "ffg": 463 + } + ], + "cost": { + "variable": "initiative", + "values": { "0": 4, "1": 5, "2": 6, "3": 7, "4": 8, "5": 9, "6": 10 } + }, + "restrictions": [{ "sizes": ["Small"] }], + "hyperspace": true + }, + { + "name": "Targeting Synchronizer", + "limited": 0, + "xws": "targetingsynchronizer", + "sides": [ + { + "title": "Targeting Synchronizer", + "type": "Tech", + "ability": "While a friendly ship at range 1-2 performs an attack against a target you have locked, that ship ignores the [Lock] attack requirement.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/83782f01cd3486006c4d279864d2983a.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1597042d794000fb34d1eee30cc10f35.jpg", + "slots": ["Tech"], + "ffg": 464 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Pattern Analyzer", + "limited": 0, + "xws": "patternanalyzer", + "sides": [ + { + "title": "Pattern Analyzer", + "type": "Tech", + "ability": "While you fully execute a red maneuver, before the Check Difficulty step, you may perform 1 action.", + "slots": ["Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/ace963fc4fe9d97f64ab8564dc4beae7.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/811e07d55f95e53fef3182020d8cbf6e.jpg", + "ffg": 462 + } + ], + "cost": { "value": 5 }, + "hyperspace": false + }, + { + "name": "Biohexacrypt Codes", + "limited": 0, + "xws": "biohexacryptcodes", + "sides": [ + { + "title": "Biohexacrypt Codes", + "type": "Tech", + "ability": "While you coordinate or jam, if you have a lock on a ship, you may spend that lock to choose that ship, ignoring range restrictions.", + "slots": ["Tech"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/094f3bbc6e3041886398e9eaf692d4ab.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/14c54aef2e36ac34564194e4785c98ce.jpg", + "ffg": 491 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["First Order"] }, + { "action": { "type": "Lock" } } + ], + "hyperspace": false + }, + { + "name": "Deuterium Power Cells", + "limited": 0, + "xws": "deuteriumpowercells", + "hyperspace": true, + "sides": [ + { + "ability": "During the System Phase, you may spend 1 [Charge] and gain 1 disarm token to recover 1 [Shield]. Before you would gain 1 non-lock token, if you are not stressed, you may spend 1 [Charge] to gain 1 stress token instead.", + "charges": { "value": 2, "recovers": 0 }, + "title": "Deuterium Power Cells", + "type": "Tech", + "slots": ["Tech", "Modification"], + "charges": { "value": 2, "recovers": 0 }, + "ffg": 654, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/038636d357004cc01635a93c224d921d.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/c0e458b69076138e2408664be131f61e.png" + } + ], + "cost": { "value": 9 } + } +] diff --git a/pyxwb2/data/upgrades/title.json b/pyxwb2/data/upgrades/title.json new file mode 100644 index 0000000..4017ba6 --- /dev/null +++ b/pyxwb2/data/upgrades/title.json @@ -0,0 +1,875 @@ +[ + { + "name": "Andrasta", + "limited": 1, + "xws": "andrasta", + "sides": [ + { + "title": "Andrasta", + "type": "Title", + "ability": "Add [Device] slot.", + "slots": ["Title"], + "actions": [{ "type": "Reload", "difficulty": "White" }], + "grants": [ + { "type": "slot", "value": "Device", "amount": 1 }, + { + "type": "action", + "value": { "type": "Reload", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_146.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_146.jpg", + "ffg": 371 + } + ], + "cost": { "value": 3 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["firesprayclasspatrolcraft"] } + ], + "hyperspace": true + }, + { + "name": "Black One", + "limited": 1, + "xws": "blackone", + "sides": [ + { + "title": "Black One", + "type": "Title", + "ability": "After you perform a [SLAM] action, lose 1 [Charge]. Then you may gain 1 ion token to remove 1 disarm token. If your [Charge] is inactive, you cannot perform the [SLAM] action.", + "slots": ["Title"], + "charges": { "value": 1, "recovers": 0 }, + "actions": [{ "type": "SLAM", "difficulty": "White" }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/3e9870bff7f61acc12970c254eaeca89.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/b617cc192e2ffb8368de79d69e1e7956.jpg", + "ffg": 484, + "grants": [ + { + "type": "action", + "value": { "type": "SLAM", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 2 }, + "restrictions": [{ "factions": ["Resistance"] }, { "ships": ["t70xwing"] }], + "hyperspace": true + }, + { + "name": "Dauntless", + "limited": 1, + "xws": "dauntless", + "sides": [ + { + "title": "Dauntless", + "type": "Title", + "ability": "After you partially execute a maneuver, you may perform 1 white action, treating that action as red.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_123.png", + "slots": ["Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_123.jpg", + "ffg": 349 + } + ], + "cost": { "value": 4 }, + "restrictions": [ + { "factions": ["Galactic Empire"] }, + { "ships": ["vt49decimator"] } + ], + "hyperspace": true + }, + { + "name": "Ghost", + "limited": 1, + "xws": "ghost", + "sides": [ + { + "title": "Ghost", + "type": "Title", + "ability": "You can dock 1 attack shuttle or Sheathipede-class shuttle. Your docked ships can deploy only from your rear guides.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_102.png", + "slots": ["Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_102.jpg", + "ffg": 326 + } + ], + "cost": { "value": 0 }, + "restrictions": [ + { "factions": ["Rebel Alliance"] }, + { "ships": ["vcx100lightfreighter"] } + ], + "hyperspace": false + }, + { + "name": "Havoc", + "limited": 1, + "xws": "havoc", + "sides": [ + { + "title": "Havoc", + "type": "Title", + "ability": "Remove [Crew] slot. Add [Sensor] and [Astromech] slots.", + "slots": ["Title"], + "grants": [ + { "type": "slot", "value": "Sensor", "amount": 1 }, + { "type": "slot", "value": "Astromech", "amount": 1 }, + { "type": "slot", "value": "Crew", "amount": -1 } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_147.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_147.jpg", + "ffg": 372 + } + ], + "cost": { "value": 2 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["scurrgh6bomber"] } + ], + "hyperspace": false + }, + { + "name": "Hound's Tooth", + "limited": 1, + "xws": "houndstooth", + "sides": [ + { + "title": "Hound's Tooth", + "type": "Title", + "ability": "1 Z-95-AF4 headhunter can dock with you.", + "slots": ["Title"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_148.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_148.jpg", + "ffg": 373 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["yv666lightfreighter"] } + ], + "hyperspace": false + }, + { + "name": "IG-2000", + "limited": 0, + "xws": "ig2000", + "sides": [ + { + "title": "IG-2000", + "type": "Title", + "ability": "You have the pilot ability of each other friendly ship with the IG-2000 upgrade.", + "slots": ["Title"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_149.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_149.jpg", + "ffg": 374 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["aggressorassaultfighter"] } + ], + "hyperspace": false + }, + { + "name": "Lando's Millennium Falcon", + "limited": 1, + "xws": "landosmillenniumfalcon", + "sides": [ + { + "title": "Lando's Millennium Falcon", + "type": "Title", + "ability": "1 Escape Craft may dock with you. While you have an Escape Craft docked, you may treat its shields as if they were on your ship card. While you perform a primary attack against a stressed ship, roll 1 additional attack die.", + "slots": ["Title"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_164.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_164.jpg", + "ffg": 390 + } + ], + "cost": { "value": 3 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["customizedyt1300lightfreighter"] } + ], + "hyperspace": false + }, + { + "name": "Marauder", + "limited": 1, + "xws": "marauder", + "sides": [ + { + "title": "Marauder", + "type": "Title", + "ability": "While you perform a primary [Rear Arc] attack, you may reroll 1 attack die. Add [Gunner] slot.", + "slots": ["Title"], + "grants": [{ "type": "slot", "value": "Gunner", "amount": 1 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_150.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_150.jpg", + "ffg": 375 + } + ], + "cost": { "value": 6 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["firesprayclasspatrolcraft"] } + ], + "hyperspace": false + }, + { + "name": "Millennium Falcon", + "limited": 1, + "xws": "millenniumfalcon", + "sides": [ + { + "title": "Millennium Falcon", + "type": "Title", + "ability": "While you defend, if you are evading, you may reroll 1 defense die.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_103.png", + "slots": ["Title"], + "actions": [{ "type": "Evade", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Evade", "difficulty": "White" } + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_103.jpg", + "ffg": 327 + } + ], + "cost": { "value": 3 }, + "restrictions": [ + { "factions": ["Rebel Alliance"] }, + { "ships": ["modifiedyt1300lightfreighter"] } + ], + "hyperspace": true + }, + { + "name": "Mist Hunter", + "limited": 1, + "xws": "misthunter", + "sides": [ + { + "title": "Mist Hunter", + "type": "Title", + "ability": "Add [Cannon] slot.", + "slots": ["Title"], + "actions": [{ "type": "Barrel Roll", "difficulty": "White" }], + "grants": [ + { "type": "slot", "value": "Cannon", "amount": 1 }, + { + "type": "action", + "value": { "type": "Barrel Roll", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_151.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_151.jpg", + "ffg": 376 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["g1astarfighter"] } + ], + "hyperspace": false + }, + { + "name": "Moldy Crow", + "limited": 1, + "xws": "moldycrow", + "sides": [ + { + "title": "Moldy Crow", + "type": "Title", + "ability": "Gain a [Front Arc] primary weapon with a value of \"3.\" During the End Phase, do not remove up to 2 focus tokens.", + "slots": ["Title"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_104.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_104.jpg", + "ffg": 328 + } + ], + "cost": { "value": 18 }, + "restrictions": [ + { "factions": ["Rebel Alliance", "Scum and Villainy"] }, + { "ships": ["hwk290lightfreighter"] } + ], + "hyperspace": false + }, + { + "name": "Outrider", + "limited": 1, + "xws": "outrider", + "sides": [ + { + "title": "Outrider", + "type": "Title", + "ability": "While you perform an attack that is obstructed by an obstacle, the defender rolls 1 fewer defense die. After you fully execute a maneuver, if you moved through or overlapped an obstacle, you may remove 1 of your red or orange tokens.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_105.png", + "slots": ["Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_105.jpg", + "ffg": 329 + } + ], + "cost": { "value": 14 }, + "restrictions": [ + { "factions": ["Rebel Alliance"] }, + { "ships": ["yt2400lightfreighter"] } + ], + "hyperspace": false + }, + { + "name": "Phantom", + "limited": 1, + "xws": "phantom", + "sides": [ + { + "title": "Phantom", + "type": "Title", + "ability": "You can dock at range 0-1.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_106.png", + "slots": ["Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_106.jpg", + "ffg": 330 + } + ], + "cost": { "value": 0 }, + "restrictions": [ + { "factions": ["Rebel Alliance"] }, + { "ships": ["attackshuttle", "sheathipedeclassshuttle"] } + ], + "hyperspace": false + }, + { + "name": "Punishing One", + "limited": 1, + "xws": "punishingone", + "sides": [ + { + "title": "Punishing One", + "type": "Title", + "ability": "While you perform a primary attack, if the defender is in your [Front Arc], roll 1 additional attack die. Remove [Crew] slot. Add [Astromech] slot.", + "slots": ["Title"], + "grants": [ + { "type": "slot", "value": "Crew", "amount": -1 }, + { "type": "slot", "value": "Astromech", "amount": 1 } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_152.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_152.jpg", + "ffg": 377 + } + ], + "cost": { "value": 5 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["jumpmaster5000"] } + ], + "hyperspace": true + }, + { + "name": "ST-321", + "limited": 1, + "xws": "st321", + "sides": [ + { + "title": "ST-321", + "type": "Title", + "ability": "After you perform a [Coordinate] action, you may choose an enemy ship at range 0-3 of the ship you coordinated. If you do, acquire a lock on that enemy ship, ignoring range restrictions.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_124.png", + "slots": ["Title"], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_124.jpg", + "ffg": 391 + } + ], + "cost": { "value": 4 }, + "restrictions": [ + { "factions": ["Galactic Empire"] }, + { "ships": ["lambdaclasst4ashuttle"] } + ], + "hyperspace": false + }, + { + "name": "Shadow Caster", + "limited": 1, + "xws": "shadowcaster", + "sides": [ + { + "title": "Shadow Caster", + "type": "Title", + "ability": "After you perform an attack that hits, if the defender is in your [Single Turret Arc] and your [Front Arc], the defender gains 1 tractor token.", + "slots": ["Title"], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_153.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_153.jpg", + "ffg": 378 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["lancerclasspursuitcraft"] } + ], + "hyperspace": false + }, + { + "name": "Slave I", + "limited": 1, + "xws": "slavei", + "sides": [ + { + "title": "Slave I", + "type": "Title", + "ability": "After you reveal a turn ([Turn Left] or [Turn Right]) or bank ([Bank Left] or [Bank Right]) maneuver, you may set your dial to the maneuver of the same speed and bearing in the other direction. Add [Torpedo] slot.", + "slots": ["Title"], + "grants": [{ "type": "slot", "value": "Torpedo", "amount": 1 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_154.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_154.jpg", + "ffg": 379 + } + ], + "cost": { "value": 1 }, + "restrictions": [ + { "factions": ["Scum and Villainy"] }, + { "ships": ["firesprayclasspatrolcraft"] } + ], + "hyperspace": true + }, + { + "name": "Virago", + "limited": 1, + "xws": "virago", + "sides": [ + { + "title": "Virago", + "type": "Title", + "ability": "During the End Phase, you may spend 1 [Charge] to perform a red [Boost] action. Add [Modification] slot.", + "slots": ["Title"], + "charges": { "value": 2, "recovers": 0 }, + "grants": [ + { "type": "slot", "value": "Modification", "amount": 1 }, + { "type": "stat", "value": "shields", "amount": 1 } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_155.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_155.jpg", + "ffg": 380 + } + ], + "cost": { "value": 8 }, + "restrictions": [{ "ships": ["starviperclassattackplatform"] }], + "hyperspace": false + }, + { + "name": "Rey's Millennium Falcon", + "limited": 1, + "xws": "reysmillenniumfalcon", + "sides": [ + { + "title": "Rey's Millennium Falcon", + "type": "Title", + "ability": "If you have 2 or fewer stress tokens, you can execute red Segnor's Loop [[Segnor's Loop Left] or [Segnor's Loop Right]] maneuvers and perform [Boost] and [Rotate Arc] actions even while stressed.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/23627443c7f5e7447c306ea7c6242634.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/905ee2a41b7d3b6d1f76294b4cd3e99e.jpg", + "slots": ["Title"], + "ffg": 485 + } + ], + "cost": { "value": 2 }, + "restrictions": [ + { "factions": ["Resistance"] }, + { "ships": ["scavengedyt1300"] } + ], + "hyperspace": false + }, + { + "name": "Soulless One", + "limited": 1, + "xws": "soullessone", + "sides": [ + { + "title": "Soulless One", + "type": "Title", + "ability": "While you defend, if the attacker is outside your firing arc, you may reroll 1 defense die.", + "slots": ["Title"], + "grants": [{ "type": "stat", "value": "hull", "amount": 2 }], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/36b33e7330846570087096cb55fba140.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/36d9391908fe020dec45153ce9bd7d3d.jpg", + "ffg": 533 + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "ships": ["belbullab22starfighter"] } + ], + "hyperspace": false, + "cost": { "value": 6 } + }, + { + "name": "Scimitar", + "limited": 1, + "xws": "scimitar", + "sides": [ + { + "title": "Scimitar", + "type": "Title", + "ability": "Setup: After the Place Forces step, you may cloak. After you decloak, you may choose an enemy ship in your [Bullseye Arc]. If you do, it gains 1 jam token.", + "slots": ["Title"], + "grants": [ + { + "type": "action", + "value": { "type": "Cloak", "difficulty": "Red" } + }, + { + "type": "action", + "value": { "type": "Jam", "difficulty": "White" } + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/1380bed351b072e5c4df4bb776625fad.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/73d545fd02afd29fa8aa9e9015e7be6e.png", + "ffg": 542 + } + ], + "restrictions": [ + { "factions": ["Separatist Alliance"] }, + { "ships": ["sithinfiltrator"] } + ], + "hyperspace": true, + "cost": { "value": 4 } + }, + { + "name": "Assailer", + "limited": 1, + "xws": "assailer", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Gunner] slot. While you defend, if the attack range is 1, you may roll 1 additional defense die.", + "title": "Assailer", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 7 } + }, + { + "name": "Blood Crow", + "limited": 1, + "xws": "bloodcrow", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Gunner] Slot. While you perofrm an attack at attack range 1-2, you may add 1 [Focus] result.", + "title": "Blood Crow", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 5 } + }, + { + "name": "Bright Hope", + "limited": 1, + "xws": "brighthope", + "hyperspace": false, + "sides": [ + { + "ability": "You can reinforce only your [Full Front Arc]. While you defend, if you are reinforced and the attacker is in your [Full Front Arc], you may roll 1 additional defense die.", + "title": "Bright Hope", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 5 } + }, + { + "name": "Broken Horn", + "limited": 1, + "xws": "brokenhorn", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Crew] and [Illicit] slots. If you are damaged, reduce the difficulty if your speed 3-5 maneuvers.", + "title": "Broken Horn", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Corvus", + "limited": 1, + "xws": "corvus", + "hyperspace": false, + "sides": [ + { + "ability": "You can dock up to 2 small ships. After you perform a [Calculate] action, gain 1 calculate token.", + "title": "Corvus", + "type": "Title", + "slots": ["Title"], + "grants": [ + { + "type": "action", + "value": { "type": "Calculate", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 3 } + }, + { + "name": "Dodonna's Pride", + "limited": 1, + "xws": "dodonnaspride", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Team] and [Cargo] slots.", + "title": "Dodonna's Pride", + "type": "Title", + "slots": ["Title"], + "grants": [ + { + "type": "action", + "value": { + "type": "Evade", + "difficulty": "White", + "linked": { "type": "Coordinate", "difficulty": "Red" } + } + }, + { + "type": "action", + "value": { + "type": "Focus", + "difficulty": "White", + "linked": { "type": "Coordinate", "difficulty": "Red" } + } + } + ] + } + ], + "cost": { "value": 8 } + }, + { + "name": "Impetuous", + "limited": 1, + "xws": "impetuous", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Crew] slot. After you perform an attack, if the defender was destroyed, you may perform a [Focus] or [Lock] action.", + "title": "Impetuous", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Insatiable Worrt", + "limited": 1, + "xws": "insatiableworrt", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Cargo] slot. During the End Phase, you may recover 1 additional [Shield] or [Energy].", + "title": "Insatiable Worrt", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 7 } + }, + { + "name": "Instigator", + "limited": 1, + "xws": "instigator", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Team] slot. While you perform an attack, if the defender has an orange or red tokem, you may reroll up to 2 attack dice.", + "title": "Instigator", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Jaina's Light", + "limited": 1, + "xws": "jainaslight", + "hyperspace": false, + "sides": [ + { + "ability": "While a friendly ship at range 0-2 defends, if the attack is obstructed by an obstacle, you may spend 1 [Energy]. If you do, the defender rolls 1 additional defense die.", + "title": "Jaina's Light", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Kaz's Fireball", + "limited": 1, + "xws": "kazsfireball", + "hyperspace": true, + "sides": [ + { + "ability": "Setup: When you resolve Explosion with Wings, you may search the damage deck and choose a damage card with the Ship trait; you are dealt that card instead. Then, shuffle the damage deck. You can perform actions on damage cards even while ionized.", + "title": "Kaz's Fireball", + "type": "Title", + "slots": ["Title"], + "ffg": 655, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/0affe4d794e05c485d6103e5414e816a.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/793a1b659936801101622a5fc0a71e73.png" + } + ], + "cost": { "value": 2 } + }, + { + "name": "Liberator", + "limited": 1, + "xws": "liberator", + "hyperspace": false, + "sides": [ + { + "ability": "You can dock up to 2 small ships. After a ship deploys from you, it may perform a [Focus] or [Barrel Roll] action.", + "title": "Liberator", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 5 } + }, + { + "name": "Luminous", + "limited": 1, + "xws": "luminous", + "hyperspace": false, + "sides": [ + { + "ability": "Setup: You are placed in reserve. At the end of setup, you are placed in the play area at range 0-2 of a friendly ship.", + "title": "Luminous", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 12 } + }, + { + "name": "Merchant One", + "limited": 1, + "xws": "merchantone", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Turret], [Team], and [Cargo] slots. Bonus Attack: Perform a [Turret] attack.", + "title": "Merchant One", + "type": "Title", + "slots": ["Title"], + "grants": [ + { + "type": "action", + "value": { "type": "Evade", "difficulty": "Red" } + }, + { + "type": "action", + "value": { "type": "Coordinate", "difficulty": "White" } + } + ] + } + ], + "cost": { "value": 8 } + }, + { + "name": "Quantum Storm", + "limited": 1, + "xws": "quantumstorm", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Team] and [Cargo] slots. After you fully execute a white maneuver, recover 1 [Energy].", + "title": "Quantum Storm", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 3 } + }, + { + "name": "Requiem", + "limited": 1, + "xws": "requiem", + "hyperspace": false, + "sides": [ + { + "ability": "After a ship deploys from you, it may acquire a lock on one ship you are locking, ignoring range restrictions.", + "title": "Requiem", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 7 } + }, + { + "name": "Suppressor", + "limited": 1, + "xws": "suppressor", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Sensor] slot. After you coordinate a friendly ship, you may spend 1 [Energy] to jam an enemy ship at range 0-2 of that ship, ignoring range restrictions.", + "title": "Suppressor", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Tantive IV", + "limited": 1, + "xws": "tantiveiv", + "hyperspace": false, + "sides": [ + { + "ability": "Add 2 [Crew] slots. While you defend, if the attacker is in your [Rear Arc], you may roll 1 additional defense die.", + "title": "Tantive IV", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 6 } + }, + { + "name": "Thunderstrike", + "limited": 1, + "xws": "thunderstrike", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Gunner] slot. While you perform a bonus attack, if you have not attacked the defender this round, you may reroll 1 attack die.", + "title": "Thunderstrike", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 4 } + }, + { + "name": "Vector", + "limited": 1, + "xws": "vector", + "hyperspace": false, + "sides": [ + { + "ability": "Add [Crew] and [Cargo] slots. After a ships deploys from you, it may perform a [Evade] or [Boost] action.", + "title": "Vector", + "type": "Title", + "slots": ["Title"] + } + ], + "cost": { "value": 8 } + } +] diff --git a/pyxwb2/data/upgrades/torpedo.json b/pyxwb2/data/upgrades/torpedo.json new file mode 100644 index 0000000..6dfdce8 --- /dev/null +++ b/pyxwb2/data/upgrades/torpedo.json @@ -0,0 +1,106 @@ +[ + { + "name": "Adv. Proton Torpedoes", + "limited": 0, + "xws": "advprotontorpedoes", + "sides": [ + { + "title": "Adv. Proton Torpedoes", + "type": "Torpedo", + "ability": "Attack ([Lock]): Spend 1 [Charge]. Change 1 [Hit] result to a [Critical Hit] result.", + "slots": ["Torpedo"], + "charges": { "value": 1, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 5, + "minrange": 1, + "maxrange": 1, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_33.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_33.jpg", + "ffg": 262 + } + ], + "cost": { "value": 6 }, + "hyperspace": true + }, + { + "name": "Ion Torpedoes", + "limited": 0, + "xws": "iontorpedoes", + "sides": [ + { + "title": "Ion Torpedoes", + "type": "Torpedo", + "ability": "Attack ([Lock]): Spend 1 [Charge]. If this attack hits, spend 1 [Hit] or [Critical Hit] result to cause the defender to suffer 1 [Hit] damage. All remaining [Hit]/[Critical Hit] results inflict ion tokens instead of damage.", + "slots": ["Torpedo"], + "charges": { "value": 2, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 4, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_34.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_34.jpg", + "ffg": 263 + } + ], + "cost": { "value": 6 }, + "hyperspace": false + }, + { + "name": "Proton Torpedoes", + "limited": 0, + "xws": "protontorpedoes", + "sides": [ + { + "title": "Proton Torpedoes", + "type": "Torpedo", + "ability": "Attack ([Lock]): Spend 1 [Charge]. Change 1 [Hit] result to a [Critical Hit] result.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_35.png", + "slots": ["Torpedo"], + "charges": { "value": 2, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 4, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_35.jpg", + "ffg": 264 + } + ], + "cost": { "value": 13 }, + "hyperspace": true + }, + { + "name": "Plasma Torpedoes", + "limited": 0, + "xws": "plasmatorpedoes", + "hyperspace": true, + "sides": [ + { + "ability": "Attack ([Lock]): Spend 1 [Charge]. During the Neutralize Results step, [Critical Hit] results are canceled before [Hit] results. After this attack hits, the defender loses 1 shield.", + "title": "Plasma Torpedoes", + "type": "Torpedo", + "slots": ["Torpedo"], + "charges": { "value": 2, "recovers": 0 }, + "attack": { + "arc": "Front Arc", + "value": 3, + "minrange": 2, + "maxrange": 3, + "ordnance": true + }, + "ffg": 579, + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/4123de29aa73a40eca130e1e75d9353b.jpg", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/en/60fb85c3782c235904678bac8a106150.png" + } + ], + "cost": { "value": 9 } + } +] diff --git a/pyxwb2/data/upgrades/turret.json b/pyxwb2/data/upgrades/turret.json new file mode 100644 index 0000000..dca26a7 --- /dev/null +++ b/pyxwb2/data/upgrades/turret.json @@ -0,0 +1,66 @@ +[ + { + "name": "Dorsal Turret", + "limited": 0, + "xws": "dorsalturret", + "sides": [ + { + "title": "Dorsal Turret", + "type": "Turret", + "ability": "Attack", + "slots": ["Turret"], + "attack": { + "arc": "Single Turret Arc", + "value": 2, + "minrange": 1, + "maxrange": 2, + "ordnance": false + }, + "actions": [{ "type": "Rotate Arc", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ], + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_31.png", + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_31.jpg", + "ffg": 260 + } + ], + "cost": { "value": 3 }, + "hyperspace": false + }, + { + "name": "Ion Cannon Turret", + "limited": 0, + "xws": "ioncannonturret", + "sides": [ + { + "title": "Ion Cannon Turret", + "type": "Turret", + "ability": "Attack: If this attack hits, spend 1 [Hit] or [Critical Hit] result to cause the defender to suffer 1 [Hit] damage. All remaining [Hit]/[Critical Hit] results inflict ion tokens instead of damage.", + "image": "https://sb-cdn.fantasyflightgames.com/card_images/Card_Upgrade_32.png", + "slots": ["Turret"], + "attack": { + "arc": "Single Turret Arc", + "value": 3, + "minrange": 1, + "maxrange": 2, + "ordnance": false + }, + "actions": [{ "type": "Rotate Arc", "difficulty": "White" }], + "grants": [ + { + "type": "action", + "value": { "type": "Rotate Arc", "difficulty": "White" } + } + ], + "artwork": "https://sb-cdn.fantasyflightgames.com/card_art/Card_art_XW_U_32.jpg", + "ffg": 261 + } + ], + "cost": { "value": 5 }, + "hyperspace": true + } +] diff --git a/pyxwb2/data/xws_schema.json b/pyxwb2/data/xws_schema.json new file mode 100644 index 0000000..0ecea1a --- /dev/null +++ b/pyxwb2/data/xws_schema.json @@ -0,0 +1,91 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "X-Wing Squadron Format Schema", + "description": "A squadron for the X-Wing Miniatures Game in app-independent format for sharing, saving and moving between apps.", + "type": "object", + "required": ["version","faction","pilots"], + "additionalProperties" : false, + "properties": { + "version": { + "type": "string", + "pattern" : "^[0-9]+\\.[0-9]+\\.[0-9]+$", + "description": "The version of the XWS spec used to create this data" + }, + "name": { + "type": "string", + "description": "The name of the squadron." + }, + "points": { + "type": "integer", + "description": "The total points spent creating this squadron." + }, + "faction": { + "type": "string", + "enum": [ "rebel", "imperial", "scum" ], + "description": "The faction this squadron belongs to." + }, + "description": { + "type": "string", + "description": "A description of this squadron." + }, + "obstacles": { + "type": "array", + "description": "Array of three Strings, each being an identifier for the obstacle chosen for tournament use.", + "maxItems": 3, + "minItems": 3, + "items": { + "type": "string" + } + }, + "pilots": { + "type": "array", + "description": "The members of this squadron.", + "items": { + "type": "object", + "minItems": 1, + "required": ["name","ship"], + "additionalProperties" : false, + "properties": { + "multisection_id": { + "type": "integer" + }, + "name": { + "type": "string", + "pattern" : "^[0-9a-z]+$" + }, + "ship": { + "type": "string", + "pattern" : "^[0-9a-z]+$" + }, + "upgrades": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "patternProperties": { + "^[0-9a-z]+$": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "pattern" : "^[0-9a-z]+$" + } + } + } + }, + "vendor": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace." + } + } + } + }, + "vendor": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace." + } + } +} \ No newline at end of file From be279f2516225a6fb9cf22924533467582d30156 Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Thu, 11 Jun 2020 00:09:11 -0500 Subject: [PATCH 2/7] initial alpha build. Faction and pilots are only functional --- .gitignore | 144 +++++++++++++++++++++++++++++ pyxwb2/__init__.py | 9 ++ pyxwb2/models/__init__.py | 21 +++++ pyxwb2/models/base.py | 94 +++++++++++++++++++ pyxwb2/models/exceptions.py | 6 ++ pyxwb2/models/pilot.py | 103 +++++++++++++++++++++ pyxwb2/pyxwb2.py | 50 ++++++++++ tests/files/sample_xws_v0.3.0.json | 143 ++++++++++++++++++++++++++++ tests/files/sample_xws_v2.0.0.json | 62 +++++++++++++ tests/test_faction_load.py | 35 +++++++ tests/test_pilot_load.py | 69 ++++++++++++++ 11 files changed, 736 insertions(+) create mode 100644 .gitignore create mode 100644 pyxwb2/__init__.py create mode 100644 pyxwb2/models/__init__.py create mode 100644 pyxwb2/models/base.py create mode 100644 pyxwb2/models/exceptions.py create mode 100644 pyxwb2/models/pilot.py create mode 100644 pyxwb2/pyxwb2.py create mode 100644 tests/files/sample_xws_v0.3.0.json create mode 100644 tests/files/sample_xws_v2.0.0.json create mode 100644 tests/test_faction_load.py create mode 100644 tests/test_pilot_load.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..520d731 --- /dev/null +++ b/.gitignore @@ -0,0 +1,144 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +#IDE +.idea + +#Mac +.DS_Store \ No newline at end of file diff --git a/pyxwb2/__init__.py b/pyxwb2/__init__.py new file mode 100644 index 0000000..c012c10 --- /dev/null +++ b/pyxwb2/__init__.py @@ -0,0 +1,9 @@ +import json + +from pathlib import Path, PurePath + +__version__ = "0.0.1a" + +manifest_file = PurePath(Path(__file__).parents[0], "data/manifest.json").as_posix() +with open(manifest_file, "r") as f: + manifest = json.load(f) diff --git a/pyxwb2/models/__init__.py b/pyxwb2/models/__init__.py new file mode 100644 index 0000000..43d3a72 --- /dev/null +++ b/pyxwb2/models/__init__.py @@ -0,0 +1,21 @@ +class LoadDataMixin: + @classmethod + def load_data(cls, data): + obj = cls() + for k, v in data: + obj.__setattr__(k, v) + return obj + + +class BaseMixin: + def __repr__(self): + def encap_quotes(value): + if type(value) == str: + return f"'{value}'" + return value + + all_attrs = ", ".join([f"{k}={encap_quotes(v)}" for k, v in self.__dict__.items() if not k.startswith('_')]) + return f"{self.__class__.__name__}({all_attrs})" + + def __iter__(self): + return iter(self.__dict__.keys()) diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py new file mode 100644 index 0000000..eed71ac --- /dev/null +++ b/pyxwb2/models/base.py @@ -0,0 +1,94 @@ +from pathlib import Path, PurePath +from jsonpath2.path import Path as JPath +import json + +from . import BaseMixin, LoadDataMixin +from pyxwb2 import manifest + +from .exceptions import FactionMissingException + + +class ShipAbility(LoadDataMixin): + pass + + +class Faction(BaseMixin): + def __init__(self): + self.name = None + self.xws = None + self.ffg = None + + @classmethod + def load_data(cls, faction_name): + """ + Create a Faction object by passing in the faction name. This can be either the XWS spec name or, + the actual name of the faction + e.g. faction_name = 'rebelalliance' + faction_name = 'Rebel Alliance' + + :param faction_name: String value of the faction + :return: + """ + obj = cls() + for file in manifest["factions"]: + filepath = PurePath(Path(__file__).parents[1], file).as_posix() + with open(filepath, "r") as f: + factions = json.load(f) + + jpath = JPath.parse_str(f"$..[?(@.xws=\"{faction_name}\"or@.name=\"{faction_name}\")]") + faction = [m.current_value for m in jpath.match(factions)] + + if not len(faction): + raise FactionMissingException("Found no valid faction, be sure you have a valid faction " + "or the xws spec is at least version 2.0.0") + + for k, v in faction[0].items(): + obj.__setattr__(k, v) + + return obj + + # def __repr__(self): + # return f"Faction(name='{self.name}', xws='{self.xws}', ffg={self.ffg})" + + +class Ship: + def __init__(self): + self._skip_attr = ["pilots", "actions"] + + @classmethod + def load_data(cls, data): + obj = cls() + for k, v in data["ship"].items(): + if k in obj._skip_attr: + continue + obj.__setattr__(k, v) + + obj.__setattr__("faction", data["faction"]) + return obj + + +class Upgrade: + pass + + +class ShipDial: + pass + + +class ShipArc: + pass + + +class ShipStat: + pass + +class Action: + pass + + +class Conditions: + pass + + +class Damage: + pass diff --git a/pyxwb2/models/exceptions.py b/pyxwb2/models/exceptions.py new file mode 100644 index 0000000..a78d1e2 --- /dev/null +++ b/pyxwb2/models/exceptions.py @@ -0,0 +1,6 @@ +class PilotsMissingException(Exception): + pass + + +class FactionMissingException(Exception): + pass \ No newline at end of file diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py new file mode 100644 index 0000000..56ffec6 --- /dev/null +++ b/pyxwb2/models/pilot.py @@ -0,0 +1,103 @@ +import json +from pathlib import Path, PurePath +from jsonpath2.path import Path as JPath + +from . import BaseMixin +from .base import Ship, ShipAbility +from pyxwb2 import manifest + +from .exceptions import PilotsMissingException + + +class Pilot(BaseMixin): + def __init__(self): + self._skip_attr = ["vendor"] + + @classmethod + def load_data(cls, data): + obj = cls() + try: + for k, v in data["pilot"][0].items(): + if k in obj._skip_attr: + continue + obj.__setattr__(k, v) + except IndexError: + pass + + if "shipAbility" in data["pilot"]: + obj.__setattr__("ship_ability", ShipAbility.load_data(data["pilot"]["shipAbility"])) + + obj.__setattr__("ship", Ship.load_data({"ship": data["ship"], + "faction": data["faction"]})) + + return obj + + +class Pilots(BaseMixin): + def __init__(self): + # self.__setattr__("pilots", list()) + self.pilots = list() + + def __repr__(self): + return f"Pilots({[p for p in self.pilots]})" + + def __len__(self): + return len(self.pilots) + + def __iter__(self): + return iter(self.pilots) + + def __getitem__(self, item): + return self.pilots[item] + + def __contains__(self, item): + all_names = [p.xws for p in self.pilots] + [p.name for p in self.pilots] + + if isinstance(item, Pilot): + for pilot in self.pilots: + if pilot.xws in all_names or pilot.name in all_names: + return True + return False + + return item in all_names + + @classmethod + def load_data(cls, pilots, faction): + """ + Create a list of pilot objects loaded from xwing-data. + + This object allows quick searching for pilots that were loaded in. It will also allow you to search + using a pilot object. This particular search doesn't compare any kind of equality of the Pilot object + but instead will use the Pilot object and search if the same pilot is contained in Pilots + e.g. 'bladesquadronveteran' in Pilots + or 'Blade Squadron Veteran' in Pilots + or my_pilot in Pilots + + :param pilots: Pass in a list of pilots to load in following the xws spec + :param faction: Pass in the loaded Faction object, doing this allows for referencing the same faction object + in other attached objects. e.g. Ship.faction would reference the same faction object + :return: Loaded Pilots object + """ + obj = cls() + jpath_ship = JPath.parse_str(f"$.pilots..[?(@.faction=\"{faction.xws}\")].ships.*") + manifest_ship_files = [m.current_value for m in jpath_ship.match(manifest)] + + for pilot in pilots: + pilot_xws, ship_xws, *_ = pilot["id"].split("-") + for file in manifest_ship_files: + ship_name_of_file = "".join(PurePath(file).stem.split("-")) + if ship_xws == ship_name_of_file: + ship_file = PurePath(Path(__file__).parents[1], file).as_posix() + with open(ship_file, "r") as f: + manifest_ship = json.load(f) + jpath_pilot = JPath.parse_str(f"$.pilots..[?(@.xws=\"{pilot_xws}\")]") + manifest_pilots = [m.current_value for m in jpath_pilot.match(manifest_ship)] + pilot = Pilot.load_data({"pilot": manifest_pilots, + "ship": manifest_ship, + "faction": faction}) + obj.pilots.append(pilot) + + if not len(obj): + raise PilotsMissingException("Found no valid pilots, be sure you have valid pilots " + "or the xws spec is at least version 2.0.0") + return obj diff --git a/pyxwb2/pyxwb2.py b/pyxwb2/pyxwb2.py new file mode 100644 index 0000000..7587c29 --- /dev/null +++ b/pyxwb2/pyxwb2.py @@ -0,0 +1,50 @@ +import json +from jsonpath_rw import parse + +from . import manifest +from .models.base import Faction +from .models.pilot import Pilots + + +class XwingSquadron: + + def __init__(self, trust_source=False): + self.version = None + self.trust_source = trust_source + + # Mandatory attributes + self.faction = None + self.pilots = None + + # Optional attributes + self.name = None + self.description = None + self.obstacles = None + self.points = None + self.vendor = None + + def import_squad(self, xws): + """ + Import the xws data to validate the squad + + :param xws: Importing data from either an already imported json file, or pass + in a string of the json file to process. This will populate the already + initialized Xwb object. + :return: None + """ + + if isinstance(xws, str): + with open(xws, "r") as xws_file: + _xws_data = json.loads(xws_file) + elif isinstance(xws, dict): + _xws_data = xws + else: + raise ValueError("Unable to load data set. Be sure to pass in a string of the filename or" + "an already loaded dict from the xws json file.") + + self.version = _xws_data.get("version") + self.name = _xws_data.get("name") + self.description = _xws_data.get("description") + self.faction = Faction.load_data(_xws_data.get("faction")) + + self.pilots = Pilots.load_data(_xws_data["pilots"], self.faction) diff --git a/tests/files/sample_xws_v0.3.0.json b/tests/files/sample_xws_v0.3.0.json new file mode 100644 index 0000000..ef94ed2 --- /dev/null +++ b/tests/files/sample_xws_v0.3.0.json @@ -0,0 +1,143 @@ +{ + "name": "2 A-Wings, 2 X-Wings", + "faction": "rebel", + "points": 100, + "version": "0.3.0", + "description": "Tycho leads a flight", + "obstacles": ["core-asteroid-5", "vt49decimator-debris-2", "yt2400-debris-0"], + "pilots": [ + { + "name": "tychocelchu", + "ship": "awing", + "upgrades": { + "title": [ + "awingtestpilot" + ], + "missile": [ + "chardaanrefit" + ], + "ept": [ + "pushthelimit", + "experthandling" + ], + "mod": [ + "experimentalinterface" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 30 + } + } + }, + { + "name": "rookiepilot", + "ship": "xwing", + "upgrades": { + "amd": [ + "r2astromech" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 14 + } + } + }, + { + "name": "rookiepilot", + "ship": "xwing", + "upgrades": { + "amd": [ + "r2astromech" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 14 + } + } + }, + { + "name": "greensquadronpilot", + "ship": "awing", + "upgrades": { + "title": [ + "awingtestpilot" + ], + "missile": [ + "chardaanrefit" + ], + "ept": [ + "unknownupgrade", + "experthandling" + ], + "mod": [ + "stealthdevice" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 33 + } + } + }, + { + "name": "bluesquadronpilot", + "ship": "xwing", + "upgrades": { + "wrongupgrade": [ + "chardaanrefit" + ], + "ept": [ + "elusiveness", + "experthandling" + ], + "mod": [ + "stealthdevice" + ], + "amd": [ + "r2d2", + "r2d2" + ], + "crew": [ + "r2d2" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 33 + } + } + }, + { + "name": "unknownpilot", + "ship": "xwing", + "upgrades": { + "missile": [ + "chardaanrefit" + ], + "ept": [ + "elusiveness", + "experthandling" + ], + "somewrongupgradeslot": [ + "stealthdevice" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 33 + } + } + } + ], + "vendor": { + "voidstate": { + "squadron_id": 2498, + "link": "http://xwing-builder.co.uk/view/2498/2-a-wings-2-x-wings", + "builder": "Voidstate's Unofficial X-Wing Squadron Builder", + "builder_link": "http://xwing-builder.co.uk/build" + } + } +} \ No newline at end of file diff --git a/tests/files/sample_xws_v2.0.0.json b/tests/files/sample_xws_v2.0.0.json new file mode 100644 index 0000000..68d83a0 --- /dev/null +++ b/tests/files/sample_xws_v2.0.0.json @@ -0,0 +1,62 @@ +{ + "name": "2 A-Wings, 2 X-Wings", + "faction": "rebelalliance", + "points": 100, + "version": "2.0.0", + "description": "Tycho leads a flight", + "obstacles": ["core-asteroid-5", "vt49decimator-debris-2", "yt2400-debris-0"], + "pilots": [ + { + "id": "bladesquadronveteran-asf01bwing", + "upgrades": { + "title": [ + "awingtestpilot" + ], + "missile": [ + "chardaanrefit" + ], + "ept": [ + "pushthelimit", + "experthandling" + ], + "mod": [ + "experimentalinterface" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 30 + } + } + }, + { + "name": "unknownpilot", + "ship": "xwing", + "upgrades": { + "missile": [ + "chardaanrefit" + ], + "ept": [ + "elusiveness", + "experthandling" + ], + "somewrongupgradeslot": [ + "stealthdevice" + ] + }, + "vendor": { + "voidstate": { + "pilot_id": 33 + } + } + } + ], + "vendor": { + "voidstate": { + "squadron_id": 2498, + "link": "http://xwing-builder.co.uk/view/2498/2-a-wings-2-x-wings", + "builder": "Voidstate's Unofficial X-Wing Squadron Builder", + "builder_link": "http://xwing-builder.co.uk/build" + } + } +} \ No newline at end of file diff --git a/tests/test_faction_load.py b/tests/test_faction_load.py new file mode 100644 index 0000000..ed35825 --- /dev/null +++ b/tests/test_faction_load.py @@ -0,0 +1,35 @@ +import unittest + +from pyxwb2.models.base import Faction +from pyxwb2.models.exceptions import FactionMissingException + + +class TestFactionLoad(unittest.TestCase): + + def setUp(self): + self.known_faction = "scumandvillainy" + self.unknown_faction = "lukeskywalkerisababy" + self.uncanonical_known = "Rebel Alliance" + + def test_known_faction(self): + faction = Faction.load_data(self.known_faction) + + self.assertEqual(faction.xws, self.known_faction) + + def test_unknown_faction(self): + with self.assertRaises(FactionMissingException): + _ = Faction.load_data(self.unknown_faction) + + def test_faction_class_type(self): + # Lets make sure we're actually getting a faction class back + + faction = Faction.load_data(self.known_faction) + + self.assertIsInstance(faction, Faction) + + def test_faction_uncanonical_name(self): + _ = Faction.load_data(self.uncanonical_known) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pilot_load.py b/tests/test_pilot_load.py new file mode 100644 index 0000000..89b41b1 --- /dev/null +++ b/tests/test_pilot_load.py @@ -0,0 +1,69 @@ +import unittest + +from pyxwb2.models.pilot import Pilots +from pyxwb2.models.base import Faction +from pyxwb2.models.exceptions import PilotsMissingException + + +class TestPilotLoad(unittest.TestCase): + + def setUp(self): + self.pilots_known = [ + { + "id": "bladesquadronveteran-asf01bwing", + "upgrades": { + "title": ["awingtestpilot"], + "missile": ["chardaanrefit"], + "ept": ["pushthelimit", "experthandling"], + "mod": ["experimentalinterface"] + }, + "vendor": { + "voidstate": { + "pilot_id": 30 + } + } + } + ] + self.pilots_unknown = [ + { + "id": "unknownpilot-unknownship", + "upgrades": { + "missile": ["chardaanrefit"], + "ept": ["elusiveness", "experthandling"], + "somewrongupgradeslot": ["stealthdevice"] + }, + "vendor": { + "voidstate": { + "pilot_id": 33 + } + } + } + ] + + self.faction = Faction.load_data("rebelalliance") + self.pilots1_known = Pilots.load_data(self.pilots_known, self.faction) + self.pilots2_known = Pilots.load_data(self.pilots_known, self.faction) + + def test_known_pilot(self): + self.assertGreater(len(self.pilots1_known), 0) + + def test_conains_methods(self): + """ + The Pilots object allows searching the list of pilots by name, xws, or even another Pilot object. + We need to be sure all three of these types of checks can work + """ + + self.assertIn(self.pilots1_known.pilots[0], self.pilots2_known) + self.assertIn("bladesquadronveteran", self.pilots1_known) + self.assertIn("Blade Squadron Veteran", self.pilots2_known) + + def test_subscriptable_known_pilot(self): + _ = self.pilots1_known[0] + + def test_unknown_pilot(self): + """ + The XWS spec calls for pilots to be required, so if none loaded we need to error out. + """ + + with self.assertRaises(PilotsMissingException): + self.pilots1_unknown = Pilots.load_data(self.pilots_unknown, self.faction) From dc9e0802e6b28724e16f63971ce5eafb9667cadf Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Sun, 14 Jun 2020 14:12:55 -0500 Subject: [PATCH 3/7] Align with xws spec --- .gitignore | 1 + pyxwb2/__init__.py | 2 +- pyxwb2/data/xws_schema.json | 83 +++++++++++++++++++------- pyxwb2/models/__init__.py | 2 +- pyxwb2/models/base.py | 9 +-- pyxwb2/models/misc.py | 5 ++ pyxwb2/models/pilot.py | 53 ++++++++-------- pyxwb2/pyxwb2.py | 13 +--- tests/files/sample_xws_min_v2.0.0.json | 11 ++++ tests/files/sample_xws_v2.0.0.json | 76 ++++++++--------------- tests/test_pilot_load.py | 11 +++- 11 files changed, 146 insertions(+), 120 deletions(-) create mode 100644 pyxwb2/models/misc.py create mode 100644 tests/files/sample_xws_min_v2.0.0.json diff --git a/.gitignore b/.gitignore index 520d731..62cfcc2 100644 --- a/.gitignore +++ b/.gitignore @@ -139,6 +139,7 @@ cython_debug/ #IDE .idea +.vscode #Mac .DS_Store \ No newline at end of file diff --git a/pyxwb2/__init__.py b/pyxwb2/__init__.py index c012c10..45abe8b 100644 --- a/pyxwb2/__init__.py +++ b/pyxwb2/__init__.py @@ -2,7 +2,7 @@ from pathlib import Path, PurePath -__version__ = "0.0.1a" +__version__ = "0.0.2a" manifest_file = PurePath(Path(__file__).parents[0], "data/manifest.json").as_posix() with open(manifest_file, "r") as f: diff --git a/pyxwb2/data/xws_schema.json b/pyxwb2/data/xws_schema.json index 0ecea1a..6c0461a 100644 --- a/pyxwb2/data/xws_schema.json +++ b/pyxwb2/data/xws_schema.json @@ -1,9 +1,10 @@ { - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "X-Wing Squadron Format Schema", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "$id": "https://github.com/elistevens/xws-spec/blob/master/schema.json", + "title": "X-Wing Squadron Format Schema Version 2.0.0", "description": "A squadron for the X-Wing Miniatures Game in app-independent format for sharing, saving and moving between apps.", "type": "object", - "required": ["version","faction","pilots"], + "required": ["faction","pilots", "version"], "additionalProperties" : false, "properties": { "version": { @@ -21,7 +22,14 @@ }, "faction": { "type": "string", - "enum": [ "rebel", "imperial", "scum" ], + "enum": [ "rebelalliance", + "galacticempire", + "scumandvillainy", + "resistance", + "firstorder", + "galacticrepublic", + "separatistalliance" + ], "description": "The faction this squadron belongs to." }, "description": { @@ -43,24 +51,19 @@ "items": { "type": "object", "minItems": 1, - "required": ["name","ship"], + "required": ["id"], "additionalProperties" : false, "properties": { - "multisection_id": { - "type": "integer" - }, - "name": { + "id": { "type": "string", - "pattern" : "^[0-9a-z]+$" + "pattern" : "^[0-9a-z-]+[^-]$" }, - "ship": { - "type": "string", - "pattern" : "^[0-9a-z]+$" + "points": { + "type": "integer", + "descrpition": "Total point cost of the pilot plus upgrades. SHOULD be ignored by importing applications unless the XWS source is trusted." }, "upgrades": { "type": "object", - "additionalProperties": false, - "minProperties": 1, "patternProperties": { "^[0-9a-z]+$": { "type": "array", @@ -71,13 +74,30 @@ } } } - }, - "vendor": { + }, + "vendor": { "type": "object", - "minProperties": 1, - "maxProperties": 1, - "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace." - } + "minProperties": 1, + "maxProperties": 1, + "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace.", + "patternProperties": { + "^.*$": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "builder_url": { + "type": "string" + }, + "builder": { + "type": "string" + }, + "additionalProperties": true + } + } + } + } } } }, @@ -85,7 +105,24 @@ "type": "object", "minProperties": 1, "maxProperties": 1, - "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace." + "description": "An extensible object containing app-specific data. Developers should put extra data here under their own namespace.", + "patternProperties": { + "^.*$": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "builder_url": { + "type": "string" + }, + "builder": { + "type": "string" + }, + "additionalProperties": true + } + } + } } } -} \ No newline at end of file +} diff --git a/pyxwb2/models/__init__.py b/pyxwb2/models/__init__.py index 43d3a72..87a54bb 100644 --- a/pyxwb2/models/__init__.py +++ b/pyxwb2/models/__init__.py @@ -2,7 +2,7 @@ class LoadDataMixin: @classmethod def load_data(cls, data): obj = cls() - for k, v in data: + for k, v in data.items(): obj.__setattr__(k, v) return obj diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py index eed71ac..354ce49 100644 --- a/pyxwb2/models/base.py +++ b/pyxwb2/models/base.py @@ -8,10 +8,6 @@ from .exceptions import FactionMissingException -class ShipAbility(LoadDataMixin): - pass - - class Faction(BaseMixin): def __init__(self): self.name = None @@ -56,14 +52,13 @@ def __init__(self): self._skip_attr = ["pilots", "actions"] @classmethod - def load_data(cls, data): + def load_data(cls, ship_data): obj = cls() - for k, v in data["ship"].items(): + for k, v in ship_data.items(): if k in obj._skip_attr: continue obj.__setattr__(k, v) - obj.__setattr__("faction", data["faction"]) return obj diff --git a/pyxwb2/models/misc.py b/pyxwb2/models/misc.py new file mode 100644 index 0000000..bc2a6f2 --- /dev/null +++ b/pyxwb2/models/misc.py @@ -0,0 +1,5 @@ +from . import LoadDataMixin + + +class ShipAbility(LoadDataMixin): + pass \ No newline at end of file diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py index 56ffec6..79e043c 100644 --- a/pyxwb2/models/pilot.py +++ b/pyxwb2/models/pilot.py @@ -2,34 +2,29 @@ from pathlib import Path, PurePath from jsonpath2.path import Path as JPath -from . import BaseMixin -from .base import Ship, ShipAbility from pyxwb2 import manifest +from . import BaseMixin +from .base import Ship +from .misc import ShipAbility from .exceptions import PilotsMissingException class Pilot(BaseMixin): def __init__(self): - self._skip_attr = ["vendor"] + self._skip_attr = ["vendor", "alt", "shipAbility"] @classmethod - def load_data(cls, data): + def load_data(cls, pilot_data): obj = cls() try: - for k, v in data["pilot"][0].items(): + for k, v in pilot_data.items(): if k in obj._skip_attr: continue obj.__setattr__(k, v) except IndexError: pass - if "shipAbility" in data["pilot"]: - obj.__setattr__("ship_ability", ShipAbility.load_data(data["pilot"]["shipAbility"])) - - obj.__setattr__("ship", Ship.load_data({"ship": data["ship"], - "faction": data["faction"]})) - return obj @@ -37,6 +32,7 @@ class Pilots(BaseMixin): def __init__(self): # self.__setattr__("pilots", list()) self.pilots = list() + self.ship = None def __repr__(self): return f"Pilots({[p for p in self.pilots]})" @@ -73,29 +69,32 @@ def load_data(cls, pilots, faction): or 'Blade Squadron Veteran' in Pilots or my_pilot in Pilots - :param pilots: Pass in a list of pilots to load in following the xws spec - :param faction: Pass in the loaded Faction object, doing this allows for referencing the same faction object - in other attached objects. e.g. Ship.faction would reference the same faction object - :return: Loaded Pilots object + :param pilots: Pass in a list of pilots to process. The list should be the direct list of pilots in + accordance with the xws spec + :param faction: Pass in the processed Faction object. + :return: Processed Pilots object with all incoming pilots attached """ obj = cls() jpath_ship = JPath.parse_str(f"$.pilots..[?(@.faction=\"{faction.xws}\")].ships.*") manifest_ship_files = [m.current_value for m in jpath_ship.match(manifest)] for pilot in pilots: - pilot_xws, ship_xws, *_ = pilot["id"].split("-") + pilot_xws = pilot.get("id") for file in manifest_ship_files: - ship_name_of_file = "".join(PurePath(file).stem.split("-")) - if ship_xws == ship_name_of_file: - ship_file = PurePath(Path(__file__).parents[1], file).as_posix() - with open(ship_file, "r") as f: - manifest_ship = json.load(f) - jpath_pilot = JPath.parse_str(f"$.pilots..[?(@.xws=\"{pilot_xws}\")]") - manifest_pilots = [m.current_value for m in jpath_pilot.match(manifest_ship)] - pilot = Pilot.load_data({"pilot": manifest_pilots, - "ship": manifest_ship, - "faction": faction}) - obj.pilots.append(pilot) + manifest_ship_fn = PurePath(Path(__file__).parents[1], file).as_posix() + with open(manifest_ship_fn, "r") as f: + ship_file_data = json.load(f) + jpath_pilot = JPath.parse_str(f"$.pilots..[?(@.xws=\"{pilot_xws}\")]") + pilot_file_data = [m.current_value for m in jpath_pilot.match(ship_file_data)] + if not pilot_file_data: + continue + + pilot = Pilot.load_data(pilot_file_data[0]) + pilot.__setattr__("ship", Ship.load_data(ship_file_data)) + if "shipAbility" in pilot_file_data[0]: + pilot.__setattr__("ship_ability", ShipAbility.load_data(pilot_file_data[0]["shipAbility"])) + + obj.pilots.append(pilot) if not len(obj): raise PilotsMissingException("Found no valid pilots, be sure you have valid pilots " diff --git a/pyxwb2/pyxwb2.py b/pyxwb2/pyxwb2.py index 7587c29..319e97d 100644 --- a/pyxwb2/pyxwb2.py +++ b/pyxwb2/pyxwb2.py @@ -1,7 +1,5 @@ import json -from jsonpath_rw import parse -from . import manifest from .models.base import Faction from .models.pilot import Pilots @@ -9,13 +7,8 @@ class XwingSquadron: def __init__(self, trust_source=False): - self.version = None self.trust_source = trust_source - # Mandatory attributes - self.faction = None - self.pilots = None - # Optional attributes self.name = None self.description = None @@ -35,7 +28,7 @@ def import_squad(self, xws): if isinstance(xws, str): with open(xws, "r") as xws_file: - _xws_data = json.loads(xws_file) + _xws_data = json.load(xws_file) elif isinstance(xws, dict): _xws_data = xws else: @@ -45,6 +38,6 @@ def import_squad(self, xws): self.version = _xws_data.get("version") self.name = _xws_data.get("name") self.description = _xws_data.get("description") - self.faction = Faction.load_data(_xws_data.get("faction")) - self.pilots = Pilots.load_data(_xws_data["pilots"], self.faction) + self.faction = Faction.load_data(_xws_data.get("faction")) + self.pilots = Pilots.load_data(_xws_data.get("pilots"), self.faction) diff --git a/tests/files/sample_xws_min_v2.0.0.json b/tests/files/sample_xws_min_v2.0.0.json new file mode 100644 index 0000000..c1fba02 --- /dev/null +++ b/tests/files/sample_xws_min_v2.0.0.json @@ -0,0 +1,11 @@ +{ + "faction": "separatistalliance", + "version": "2.0.0", + "pilots": [ + { + "id": "bombardmentdrone", + "upgrades": { + } + } + ] +} \ No newline at end of file diff --git a/tests/files/sample_xws_v2.0.0.json b/tests/files/sample_xws_v2.0.0.json index 68d83a0..248dc52 100644 --- a/tests/files/sample_xws_v2.0.0.json +++ b/tests/files/sample_xws_v2.0.0.json @@ -1,62 +1,38 @@ { - "name": "2 A-Wings, 2 X-Wings", - "faction": "rebelalliance", - "points": 100, - "version": "2.0.0", - "description": "Tycho leads a flight", - "obstacles": ["core-asteroid-5", "vt49decimator-debris-2", "yt2400-debris-0"], + "name": "X-Squad", + "faction": "separatistalliance", + "description": "Test xws 2.0.0 data", + "points": 76, + "version": "2.0.0", "pilots": [ { - "id": "bladesquadronveteran-asf01bwing", + "id": "bombardmentdrone", + "points": 44, "upgrades": { - "title": [ - "awingtestpilot" - ], - "missile": [ - "chardaanrefit" - ], - "ept": [ - "pushthelimit", - "experthandling" - ], - "mod": [ - "experimentalinterface" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 30 - } + "modification": ["angleddeflectors"], + "configuration": ["landingstruts"], + "device": ["drk1probedroids"], + "sensor": ["trajectorysimulator"] } }, { - "name": "unknownpilot", - "ship": "xwing", + "id": "dfs311-vultureclassdroidfighter", + "points": 32, "upgrades": { - "missile": [ - "chardaanrefit" - ], - "ept": [ - "elusiveness", - "experthandling" - ], - "somewrongupgradeslot": [ - "stealthdevice" - ] + "missile": ["clustermissiles"], + "modification": ["angleddeflectors"], + "configuration": ["grapplingstruts"] }, - "vendor": { - "voidstate": { - "pilot_id": 33 - } - } + "vendor": { + "pyxwb2": { + "url": "https://github.com/minsis/pyxwb2" + } + } } ], - "vendor": { - "voidstate": { - "squadron_id": 2498, - "link": "http://xwing-builder.co.uk/view/2498/2-a-wings-2-x-wings", - "builder": "Voidstate's Unofficial X-Wing Squadron Builder", - "builder_link": "http://xwing-builder.co.uk/build" - } - } + "vendor": { + "pyxwb2": { + "url": "https://github.com/minsis/pyxwb2" + } + } } \ No newline at end of file diff --git a/tests/test_pilot_load.py b/tests/test_pilot_load.py index 89b41b1..b1d095d 100644 --- a/tests/test_pilot_load.py +++ b/tests/test_pilot_load.py @@ -10,7 +10,7 @@ class TestPilotLoad(unittest.TestCase): def setUp(self): self.pilots_known = [ { - "id": "bladesquadronveteran-asf01bwing", + "id": "bladesquadronveteran", "upgrades": { "title": ["awingtestpilot"], "missile": ["chardaanrefit"], @@ -24,6 +24,11 @@ def setUp(self): } } ] + self.pilots_known1 = [ + { + "id": "zeborrelios", + } + ] self.pilots_unknown = [ { "id": "unknownpilot-unknownship", @@ -43,6 +48,7 @@ def setUp(self): self.faction = Faction.load_data("rebelalliance") self.pilots1_known = Pilots.load_data(self.pilots_known, self.faction) self.pilots2_known = Pilots.load_data(self.pilots_known, self.faction) + self.pilots3_known = Pilots.load_data(self.pilots_known1, self.faction) def test_known_pilot(self): self.assertGreater(len(self.pilots1_known), 0) @@ -67,3 +73,6 @@ def test_unknown_pilot(self): with self.assertRaises(PilotsMissingException): self.pilots1_unknown = Pilots.load_data(self.pilots_unknown, self.faction) + + def test_ship_ability(self): + self.assertIn("ship_ability", self.pilots3_known[0]) From 5900cdf1ee5c50b3f0da85cc81da654696839569 Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Sun, 14 Jun 2020 19:07:19 -0500 Subject: [PATCH 4/7] add schema validation --- pyxwb2/__init__.py | 10 +- pyxwb2/models/base.py | 4 +- pyxwb2/models/misc.py | 2 +- pyxwb2/models/pilot.py | 2 +- pyxwb2/pyxwb2.py | 20 ++- pyxwb2/utils.py | 6 + tests/files/sample_invalid_xws_schema.json | 6 + ...sample_xws_v2.0.0.json => sample_xws.json} | 0 ...ws_min_v2.0.0.json => sample_xws_min.json} | 0 tests/files/sample_xws_v0.3.0.json | 143 ------------------ tests/test_full_xws_import.py | 22 +++ tests/test_pilot_load.py | 4 + 12 files changed, 63 insertions(+), 156 deletions(-) create mode 100644 pyxwb2/utils.py create mode 100644 tests/files/sample_invalid_xws_schema.json rename tests/files/{sample_xws_v2.0.0.json => sample_xws.json} (100%) rename tests/files/{sample_xws_min_v2.0.0.json => sample_xws_min.json} (100%) delete mode 100644 tests/files/sample_xws_v0.3.0.json create mode 100644 tests/test_full_xws_import.py diff --git a/pyxwb2/__init__.py b/pyxwb2/__init__.py index 45abe8b..655d5f3 100644 --- a/pyxwb2/__init__.py +++ b/pyxwb2/__init__.py @@ -1,9 +1,3 @@ -import json +from .pyxwb2 import XwingSquadron -from pathlib import Path, PurePath - -__version__ = "0.0.2a" - -manifest_file = PurePath(Path(__file__).parents[0], "data/manifest.json").as_posix() -with open(manifest_file, "r") as f: - manifest = json.load(f) +__version__ = "0.0.3a" diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py index 354ce49..4ea4f8a 100644 --- a/pyxwb2/models/base.py +++ b/pyxwb2/models/base.py @@ -2,8 +2,8 @@ from jsonpath2.path import Path as JPath import json -from . import BaseMixin, LoadDataMixin -from pyxwb2 import manifest +from . import BaseMixin +from pyxwb2.utils import manifest from .exceptions import FactionMissingException diff --git a/pyxwb2/models/misc.py b/pyxwb2/models/misc.py index bc2a6f2..4568a0b 100644 --- a/pyxwb2/models/misc.py +++ b/pyxwb2/models/misc.py @@ -2,4 +2,4 @@ class ShipAbility(LoadDataMixin): - pass \ No newline at end of file + pass diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py index 79e043c..93c0c08 100644 --- a/pyxwb2/models/pilot.py +++ b/pyxwb2/models/pilot.py @@ -2,7 +2,7 @@ from pathlib import Path, PurePath from jsonpath2.path import Path as JPath -from pyxwb2 import manifest +from pyxwb2.utils import manifest from . import BaseMixin from .base import Ship diff --git a/pyxwb2/pyxwb2.py b/pyxwb2/pyxwb2.py index 319e97d..69574d3 100644 --- a/pyxwb2/pyxwb2.py +++ b/pyxwb2/pyxwb2.py @@ -1,5 +1,8 @@ +import jsonschema import json +from pathlib import Path, PurePath + from .models.base import Faction from .models.pilot import Pilots @@ -9,12 +12,14 @@ class XwingSquadron: def __init__(self, trust_source=False): self.trust_source = trust_source - # Optional attributes self.name = None self.description = None self.obstacles = None self.points = None self.vendor = None + self.version = None + self.faction = None + self.pilots = None def import_squad(self, xws): """ @@ -35,9 +40,22 @@ def import_squad(self, xws): raise ValueError("Unable to load data set. Be sure to pass in a string of the filename or" "an already loaded dict from the xws json file.") + # Validate the schema if we dont trust the source. Other validation happens for required items + # even if this is bypassed. + if not self.trust_source: + self._validate_schema(_xws_data) + self.version = _xws_data.get("version") self.name = _xws_data.get("name") self.description = _xws_data.get("description") self.faction = Faction.load_data(_xws_data.get("faction")) self.pilots = Pilots.load_data(_xws_data.get("pilots"), self.faction) + + @staticmethod + def _validate_schema(xws_data): + schema_fn = PurePath(Path(__file__).parents[0], "data/xws_schema.json").as_posix() + with open(schema_fn, "r") as f: + schema = json.load(f) + + jsonschema.validate(instance=xws_data, schema=schema) diff --git a/pyxwb2/utils.py b/pyxwb2/utils.py new file mode 100644 index 0000000..2712acb --- /dev/null +++ b/pyxwb2/utils.py @@ -0,0 +1,6 @@ +import json +from pathlib import Path, PurePath + +manifest_file = PurePath(Path(__file__).parents[0], "data/manifest.json").as_posix() +with open(manifest_file, "r") as f: + manifest = json.load(f) diff --git a/tests/files/sample_invalid_xws_schema.json b/tests/files/sample_invalid_xws_schema.json new file mode 100644 index 0000000..56b69b8 --- /dev/null +++ b/tests/files/sample_invalid_xws_schema.json @@ -0,0 +1,6 @@ +{ + "name": "X-Squad", + "description": "Test xws 2.0.0 data", + "points": 76, + "version": "2.0.0" +} diff --git a/tests/files/sample_xws_v2.0.0.json b/tests/files/sample_xws.json similarity index 100% rename from tests/files/sample_xws_v2.0.0.json rename to tests/files/sample_xws.json diff --git a/tests/files/sample_xws_min_v2.0.0.json b/tests/files/sample_xws_min.json similarity index 100% rename from tests/files/sample_xws_min_v2.0.0.json rename to tests/files/sample_xws_min.json diff --git a/tests/files/sample_xws_v0.3.0.json b/tests/files/sample_xws_v0.3.0.json deleted file mode 100644 index ef94ed2..0000000 --- a/tests/files/sample_xws_v0.3.0.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "name": "2 A-Wings, 2 X-Wings", - "faction": "rebel", - "points": 100, - "version": "0.3.0", - "description": "Tycho leads a flight", - "obstacles": ["core-asteroid-5", "vt49decimator-debris-2", "yt2400-debris-0"], - "pilots": [ - { - "name": "tychocelchu", - "ship": "awing", - "upgrades": { - "title": [ - "awingtestpilot" - ], - "missile": [ - "chardaanrefit" - ], - "ept": [ - "pushthelimit", - "experthandling" - ], - "mod": [ - "experimentalinterface" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 30 - } - } - }, - { - "name": "rookiepilot", - "ship": "xwing", - "upgrades": { - "amd": [ - "r2astromech" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 14 - } - } - }, - { - "name": "rookiepilot", - "ship": "xwing", - "upgrades": { - "amd": [ - "r2astromech" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 14 - } - } - }, - { - "name": "greensquadronpilot", - "ship": "awing", - "upgrades": { - "title": [ - "awingtestpilot" - ], - "missile": [ - "chardaanrefit" - ], - "ept": [ - "unknownupgrade", - "experthandling" - ], - "mod": [ - "stealthdevice" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 33 - } - } - }, - { - "name": "bluesquadronpilot", - "ship": "xwing", - "upgrades": { - "wrongupgrade": [ - "chardaanrefit" - ], - "ept": [ - "elusiveness", - "experthandling" - ], - "mod": [ - "stealthdevice" - ], - "amd": [ - "r2d2", - "r2d2" - ], - "crew": [ - "r2d2" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 33 - } - } - }, - { - "name": "unknownpilot", - "ship": "xwing", - "upgrades": { - "missile": [ - "chardaanrefit" - ], - "ept": [ - "elusiveness", - "experthandling" - ], - "somewrongupgradeslot": [ - "stealthdevice" - ] - }, - "vendor": { - "voidstate": { - "pilot_id": 33 - } - } - } - ], - "vendor": { - "voidstate": { - "squadron_id": 2498, - "link": "http://xwing-builder.co.uk/view/2498/2-a-wings-2-x-wings", - "builder": "Voidstate's Unofficial X-Wing Squadron Builder", - "builder_link": "http://xwing-builder.co.uk/build" - } - } -} \ No newline at end of file diff --git a/tests/test_full_xws_import.py b/tests/test_full_xws_import.py new file mode 100644 index 0000000..4b53845 --- /dev/null +++ b/tests/test_full_xws_import.py @@ -0,0 +1,22 @@ +import unittest +import json + +from pyxwb2 import XwingSquadron +from jsonschema.exceptions import ValidationError + + +class TestFullXwsImport(unittest.TestCase): + def test_schema_validation_trusted(self): + squad = XwingSquadron(trust_source=True) + with open("files/sample_xws.json", "r") as f: + squad.import_squad(json.load(f)) + + def test_schema_validation_invalid(self): + squad = XwingSquadron() + with self.assertRaises(ValidationError): + with open("files/sample_invalid_xws_schema.json", "r") as f: + squad.import_squad(json.load(f)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pilot_load.py b/tests/test_pilot_load.py index b1d095d..630d69d 100644 --- a/tests/test_pilot_load.py +++ b/tests/test_pilot_load.py @@ -76,3 +76,7 @@ def test_unknown_pilot(self): def test_ship_ability(self): self.assertIn("ship_ability", self.pilots3_known[0]) + + +if __name__ == "__main__": + unittest.main() From 3e5c7feb1f7065ebb32cf0efc8ef06e22d47e4c0 Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Sun, 21 Jun 2020 01:29:28 -0500 Subject: [PATCH 5/7] Add in ship dial and maneuvers --- pyxwb2/__init__.py | 2 +- pyxwb2/data/dial-maneuvers-conversion.json | 92 ++++++++++++++++++++++ pyxwb2/models/__init__.py | 21 +++-- pyxwb2/models/base.py | 54 ++++++++++--- pyxwb2/models/misc.py | 74 ++++++++++++++++- pyxwb2/models/pilot.py | 20 +++-- pyxwb2/utils.py | 4 + 7 files changed, 244 insertions(+), 23 deletions(-) create mode 100644 pyxwb2/data/dial-maneuvers-conversion.json diff --git a/pyxwb2/__init__.py b/pyxwb2/__init__.py index 655d5f3..57db40d 100644 --- a/pyxwb2/__init__.py +++ b/pyxwb2/__init__.py @@ -1,3 +1,3 @@ -from .pyxwb2 import XwingSquadron +from .pyxwb2 import XwingSquadron, XwingDataPack __version__ = "0.0.3a" diff --git a/pyxwb2/data/dial-maneuvers-conversion.json b/pyxwb2/data/dial-maneuvers-conversion.json new file mode 100644 index 0000000..8f9209e --- /dev/null +++ b/pyxwb2/data/dial-maneuvers-conversion.json @@ -0,0 +1,92 @@ +{ + "difficulty": { + "R": { + "name": "Red", + "xws": "red" + }, + "W": { + "name": "White", + "xws": "white" + }, + "B": { + "name": "Blue", + "xws": "blue" + }, + "G": { + "name": "Green", + "xws": "green" + } + }, + "maneuvers": { + "T": { + "name": "Left Turn", + "direction": "Left", + "xws": "leftturn" + }, + "Y": { + "name": "Right Turn", + "direction": "Right", + "xws": "rightturn" + }, + "B": { + "name": "Left Bank", + "direction": "Left", + "xws": "leftbank" + }, + "N": { + "name": "Right Bank", + "direction": "Right", + "xws": "rightbank" + }, + "F": { + "name": "Straight", + "direction": "straight", + "xws": "straight" + }, + "A": { + "name": "Left Reverse Bank", + "direction": "Left", + "xws": "leftreversebank" + }, + "D": { + "name": "Right Reverse Bank", + "direction": "Right", + "xws": "rightreversebank" + }, + "S": { + "name": "Reverse Straight", + "direction": "straight", + "xws": "reversestraight" + }, + "E": { + "name": "Left Tallon Roll", + "direction": "Left", + "xws": "lefttallonroll" + }, + "R": { + "name": "Right Tallon Roll", + "direction": "Right", + "xws": "righttallonroll" + }, + "L": { + "name": "Left Segnor’s Loop", + "direction": "Left", + "xws": "leftsegnorsloop" + }, + "P": { + "name": "Right Segnor's Loop", + "direction": "Right", + "xws": "rightsegnorsloop" + }, + "K": { + "name": "Koiogran Turn", + "direction": "Straight", + "xws": "koiogranturn" + }, + "O": { + "name": "Stationary", + "direction": null, + "xws": "stationary" + } + } +} \ No newline at end of file diff --git a/pyxwb2/models/__init__.py b/pyxwb2/models/__init__.py index 87a54bb..8ab1ff0 100644 --- a/pyxwb2/models/__init__.py +++ b/pyxwb2/models/__init__.py @@ -7,7 +7,21 @@ def load_data(cls, data): return obj -class BaseMixin: +class BaseItemListMixin: + def __init__(self): + self._items = list() + + def __len__(self): + return len(self._items) + + def __getitem__(self, item): + return self._items[item] + + def __iter__(self): + return iter(self.__dict__.keys()) + + +class ReperMixin: def __repr__(self): def encap_quotes(value): if type(value) == str: @@ -15,7 +29,4 @@ def encap_quotes(value): return value all_attrs = ", ".join([f"{k}={encap_quotes(v)}" for k, v in self.__dict__.items() if not k.startswith('_')]) - return f"{self.__class__.__name__}({all_attrs})" - - def __iter__(self): - return iter(self.__dict__.keys()) + return f"{self.__class__.__name__}({all_attrs})" \ No newline at end of file diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py index 4ea4f8a..98d0de2 100644 --- a/pyxwb2/models/base.py +++ b/pyxwb2/models/base.py @@ -2,18 +2,47 @@ from jsonpath2.path import Path as JPath import json -from . import BaseMixin +from . import BaseItemListMixin, ReperMixin +from .misc import ShipDial from pyxwb2.utils import manifest from .exceptions import FactionMissingException -class Faction(BaseMixin): +class Factions(BaseItemListMixin): + def __iter__(self): + return iter(self._items) + + def __repr__(self): + return f"Factions({[f for f in self._items]})" + + def __contains__(self, item): + all_names = [p.xws for p in self._items] + [p.name for p in self._items] + return item in all_names + + def append(self, faction): + if isinstance(faction, Faction): + self._items.append(faction) + + @classmethod + def load_data(cls, factions): + obj = cls() + + for faction in factions: + obj._items.add(Faction.load_data(faction)) + + return obj + + +class Faction: def __init__(self): self.name = None self.xws = None self.ffg = None + def __repr__(self): + return f"Faction(name='{self.name}', xws='{self.xws}'" + @classmethod def load_data(cls, faction_name): """ @@ -43,13 +72,23 @@ def load_data(cls, faction_name): return obj - # def __repr__(self): - # return f"Faction(name='{self.name}', xws='{self.xws}', ffg={self.ffg})" + +class Ships(BaseItemListMixin, ReperMixin): + def append(self, ship): + if isinstance(ship, Ship): + self._items.append(ship) class Ship: def __init__(self): - self._skip_attr = ["pilots", "actions"] + self._skip_attr = ["pilots", "actions, dial"] + self.name = None + self.xws = None + self.size = None + self.faction = None + + def __repr__(self): + return f"Ship(name='{self.name}', xws='{self.xws}', size='{self.size}', faction={self.faction})" @classmethod def load_data(cls, ship_data): @@ -58,6 +97,7 @@ def load_data(cls, ship_data): if k in obj._skip_attr: continue obj.__setattr__(k, v) + obj.__setattr__("dial", ShipDial.load_data(ship_data["dial"])) return obj @@ -66,10 +106,6 @@ class Upgrade: pass -class ShipDial: - pass - - class ShipArc: pass diff --git a/pyxwb2/models/misc.py b/pyxwb2/models/misc.py index 4568a0b..228366e 100644 --- a/pyxwb2/models/misc.py +++ b/pyxwb2/models/misc.py @@ -1,5 +1,75 @@ -from . import LoadDataMixin +from . import LoadDataMixin, ReperMixin +from pyxwb2.utils import manifest -class ShipAbility(LoadDataMixin): +class ShipAbility(LoadDataMixin, ReperMixin): pass + + +class Maneuver(ReperMixin): + def __iter__(self): + return iter(self.__dict__.keys()) + + @classmethod + def load_data(cls, maneuver): + """ + A single maneuver on a ship's dial + + :param maneuver: 3 character maneuver following xwing-data2 data set which is encoded to match + the vassal league nomenclature + :return: Initialized Maneuver class + """ + obj = cls() + speed, direction, difficulty = list(maneuver) + obj.__setattr__("name", manifest["maneuvers"]["maneuvers"][direction]["name"]) + obj.__setattr__("speed", int(speed)) + obj.__setattr__("difficulty", manifest["maneuvers"]["difficulty"][difficulty]["name"]) + obj.__setattr__("direction", manifest["maneuvers"]["maneuvers"][direction]["direction"]) + obj.__setattr__("vassal", maneuver) + + return obj + + +class ShipDial: + """ + The ship's dial containing all of the possible maneuvers the ship can perform. The returned object + is a ShipDial with as a list of Maneuver objects. + + This object allows searching a keyword to return a smaller subset of items with that keyword + e.g. ShipDial['red'] would return a ShipDial object of all maneuvers that have a difficulty of red + ShipDial['left'] would return a ShipDial object of all maneuvers that have a direction of turn left + ShipDial['2'] would return a ShipDial object of all maneuvers that speed of 2 + + You can also do multi-searches + e.g. ShipDial['1']['blue'] would return a ShipDial object of all blue difficulty maneuvers with a speed of 1 + + However, the object still allows for getting a maneuver at a specific index. + e.g. ShipDial[1] returns a single maneuver object at the index + """ + def __init__(self): + self._items = list() + + def __len__(self): + return len(self._items) + + def __getitem__(self, item): + if isinstance(item, int): + return self._items[item] + elif isinstance(item, str): + _tmp = ShipDial() + for maneuver in self._items: + for c in maneuver: + if item.lower() in str(getattr(maneuver, c)).lower(): + _tmp._items.append(maneuver) + return _tmp + + def __repr__(self): + return f"ShipDial({[m for m in self._items][:5]}{' ...' if len(self._items) > 5 else ''})" + + @classmethod + def load_data(cls, dial): + obj = cls() + for maneuver in dial: + obj._items.append(Maneuver.load_data(maneuver)) + + return obj diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py index 93c0c08..4d66579 100644 --- a/pyxwb2/models/pilot.py +++ b/pyxwb2/models/pilot.py @@ -4,16 +4,19 @@ from pyxwb2.utils import manifest -from . import BaseMixin +from . import ReperMixin from .base import Ship from .misc import ShipAbility from .exceptions import PilotsMissingException -class Pilot(BaseMixin): +class Pilot(ReperMixin): def __init__(self): self._skip_attr = ["vendor", "alt", "shipAbility"] + def __contains__(self, item): + return item in self.__dict__ + @classmethod def load_data(cls, pilot_data): obj = cls() @@ -22,13 +25,16 @@ def load_data(cls, pilot_data): if k in obj._skip_attr: continue obj.__setattr__(k, v) + + if "shipAbility" in pilot_data: + obj.__setattr__("ship_ability", ShipAbility.load_data(pilot_data["shipAbility"])) except IndexError: pass return obj -class Pilots(BaseMixin): +class Pilots(ReperMixin): def __init__(self): # self.__setattr__("pilots", list()) self.pilots = list() @@ -57,6 +63,10 @@ def __contains__(self, item): return item in all_names + def append(self, pilot): + if isinstance(pilot, Pilot): + self.pilots.append(pilot) + @classmethod def load_data(cls, pilots, faction): """ @@ -91,9 +101,7 @@ def load_data(cls, pilots, faction): pilot = Pilot.load_data(pilot_file_data[0]) pilot.__setattr__("ship", Ship.load_data(ship_file_data)) - if "shipAbility" in pilot_file_data[0]: - pilot.__setattr__("ship_ability", ShipAbility.load_data(pilot_file_data[0]["shipAbility"])) - + pilot.__setattr__("faction", faction) obj.pilots.append(pilot) if not len(obj): diff --git a/pyxwb2/utils.py b/pyxwb2/utils.py index 2712acb..7d65287 100644 --- a/pyxwb2/utils.py +++ b/pyxwb2/utils.py @@ -4,3 +4,7 @@ manifest_file = PurePath(Path(__file__).parents[0], "data/manifest.json").as_posix() with open(manifest_file, "r") as f: manifest = json.load(f) + +bearing_conversion_file = PurePath(Path(__file__).parents[0], "data/dial-maneuvers-conversion.json").as_posix() +with open(bearing_conversion_file) as f: + manifest["maneuvers"] = json.load(f) From ebb7e7da094fec2da7b7752989115aa3f3eefc8e Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Sat, 27 Jun 2020 17:21:40 -0500 Subject: [PATCH 6/7] Built most of xwing-data load in --- pyxwb2/models/__init__.py | 21 ++++++++++- pyxwb2/models/base.py | 77 +++++++++++++-------------------------- pyxwb2/models/misc.py | 43 +++++++++++++++++++++- pyxwb2/models/pilot.py | 43 ++++++---------------- pyxwb2/pyxwb2.py | 66 +++++++++++++++++++++++++++++++-- tests/test_pilot_load.py | 1 - 6 files changed, 160 insertions(+), 91 deletions(-) diff --git a/pyxwb2/models/__init__.py b/pyxwb2/models/__init__.py index 8ab1ff0..507ec3e 100644 --- a/pyxwb2/models/__init__.py +++ b/pyxwb2/models/__init__.py @@ -8,9 +8,12 @@ def load_data(cls, data): class BaseItemListMixin: - def __init__(self): + def __init__(self, _singular=None): self._items = list() + if _singular: + self._singular = _singular + def __len__(self): return len(self._items) @@ -18,7 +21,21 @@ def __getitem__(self, item): return self._items[item] def __iter__(self): - return iter(self.__dict__.keys()) + return iter(self._items) + + def __repr__(self): + return f"{self.__class__.__name__}({[f for f in self._items]})" + + def append(self, item, _singular=None): + if isinstance(item, self._singular): + self._items.append(item) + + @classmethod + def load_data(cls, data): + obj = cls() + for action in data: + obj._items.append(obj._singular.load_data(action)) + return obj class ReperMixin: diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py index 98d0de2..88603fc 100644 --- a/pyxwb2/models/base.py +++ b/pyxwb2/models/base.py @@ -2,38 +2,13 @@ from jsonpath2.path import Path as JPath import json -from . import BaseItemListMixin, ReperMixin -from .misc import ShipDial +from . import BaseItemListMixin +from .misc import ShipDial, Actions, ShipStats from pyxwb2.utils import manifest from .exceptions import FactionMissingException -class Factions(BaseItemListMixin): - def __iter__(self): - return iter(self._items) - - def __repr__(self): - return f"Factions({[f for f in self._items]})" - - def __contains__(self, item): - all_names = [p.xws for p in self._items] + [p.name for p in self._items] - return item in all_names - - def append(self, faction): - if isinstance(faction, Faction): - self._items.append(faction) - - @classmethod - def load_data(cls, factions): - obj = cls() - - for faction in factions: - obj._items.add(Faction.load_data(faction)) - - return obj - - class Faction: def __init__(self): self.name = None @@ -73,15 +48,26 @@ def load_data(cls, faction_name): return obj -class Ships(BaseItemListMixin, ReperMixin): - def append(self, ship): - if isinstance(ship, Ship): - self._items.append(ship) +class Factions(BaseItemListMixin): + _singular = Faction + + def __contains__(self, item): + all_names = [p.xws for p in self._items] + [p.name for p in self._items] + return item in all_names + + @classmethod + def load_data(cls, factions): + obj = cls() + + for faction in factions: + obj._items.add(Faction.load_data(faction)) + + return obj class Ship: def __init__(self): - self._skip_attr = ["pilots", "actions, dial"] + self._skip_attr = ["pilots", "actions, dial, stats"] self.name = None self.xws = None self.size = None @@ -98,28 +84,15 @@ def load_data(cls, ship_data): continue obj.__setattr__(k, v) obj.__setattr__("dial", ShipDial.load_data(ship_data["dial"])) + obj.__setattr__("actions", Actions.load_data(ship_data["actions"])) + obj.__setattr__("stats", ShipStats.load_data(ship_data["stats"])) return obj -class Upgrade: - pass +class Ships(BaseItemListMixin): + _singular = Ship - -class ShipArc: - pass - - -class ShipStat: - pass - -class Action: - pass - - -class Conditions: - pass - - -class Damage: - pass + def __contains__(self, item): + all_names = [s.xws for s in self._items] + [s.name for s in self._items] + return item in all_names diff --git a/pyxwb2/models/misc.py b/pyxwb2/models/misc.py index 228366e..fcfd02d 100644 --- a/pyxwb2/models/misc.py +++ b/pyxwb2/models/misc.py @@ -1,4 +1,4 @@ -from . import LoadDataMixin, ReperMixin +from . import LoadDataMixin, ReperMixin, BaseItemListMixin from pyxwb2.utils import manifest @@ -6,6 +6,47 @@ class ShipAbility(LoadDataMixin, ReperMixin): pass +# TODO: Upgrades +class Upgrade(LoadDataMixin, ReperMixin): + pass + + +class Upgrades(BaseItemListMixin): + _singular = Upgrade + + +class DamageCard(LoadDataMixin, ReperMixin): + pass + + +class DamageDeck(BaseItemListMixin): + _singular = DamageCard + + +class Condition(LoadDataMixin, ReperMixin): + pass + + +class Conditions(BaseItemListMixin): + _singular = Condition + + +class ShipStat(LoadDataMixin, ReperMixin): + pass + + +class ShipStats(BaseItemListMixin): + _singular = ShipStat + + +class Action(LoadDataMixin, ReperMixin): + pass + + +class Actions(BaseItemListMixin): + _singular = Action + + class Maneuver(ReperMixin): def __iter__(self): return iter(self.__dict__.keys()) diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py index 4d66579..b96f429 100644 --- a/pyxwb2/models/pilot.py +++ b/pyxwb2/models/pilot.py @@ -4,7 +4,7 @@ from pyxwb2.utils import manifest -from . import ReperMixin +from . import ReperMixin, BaseItemListMixin from .base import Ship from .misc import ShipAbility from .exceptions import PilotsMissingException @@ -34,39 +34,17 @@ def load_data(cls, pilot_data): return obj -class Pilots(ReperMixin): - def __init__(self): - # self.__setattr__("pilots", list()) - self.pilots = list() - self.ship = None - - def __repr__(self): - return f"Pilots({[p for p in self.pilots]})" - - def __len__(self): - return len(self.pilots) - - def __iter__(self): - return iter(self.pilots) +class Pilots(BaseItemListMixin, ReperMixin): + _singular = Pilot def __getitem__(self, item): - return self.pilots[item] + return self._items[item] def __contains__(self, item): - all_names = [p.xws for p in self.pilots] + [p.name for p in self.pilots] - - if isinstance(item, Pilot): - for pilot in self.pilots: - if pilot.xws in all_names or pilot.name in all_names: - return True - return False + all_names = [p.xws for p in self._items] + [p.name for p in self._items] return item in all_names - def append(self, pilot): - if isinstance(pilot, Pilot): - self.pilots.append(pilot) - @classmethod def load_data(cls, pilots, faction): """ @@ -77,7 +55,6 @@ def load_data(cls, pilots, faction): but instead will use the Pilot object and search if the same pilot is contained in Pilots e.g. 'bladesquadronveteran' in Pilots or 'Blade Squadron Veteran' in Pilots - or my_pilot in Pilots :param pilots: Pass in a list of pilots to process. The list should be the direct list of pilots in accordance with the xws spec @@ -99,10 +76,12 @@ def load_data(cls, pilots, faction): if not pilot_file_data: continue - pilot = Pilot.load_data(pilot_file_data[0]) - pilot.__setattr__("ship", Ship.load_data(ship_file_data)) - pilot.__setattr__("faction", faction) - obj.pilots.append(pilot) + _ship = Ship.load_data(ship_file_data) + _ship.faction = faction + _pilot = Pilot.load_data(pilot_file_data[0]) + _pilot.__setattr__("ship", _ship) + _pilot.__setattr__("faction", faction) + obj._items.append(_pilot) if not len(obj): raise PilotsMissingException("Found no valid pilots, be sure you have valid pilots " diff --git a/pyxwb2/pyxwb2.py b/pyxwb2/pyxwb2.py index 69574d3..c378fef 100644 --- a/pyxwb2/pyxwb2.py +++ b/pyxwb2/pyxwb2.py @@ -2,9 +2,29 @@ import json from pathlib import Path, PurePath +from jsonpath2 import Path as JPath -from .models.base import Faction -from .models.pilot import Pilots +from .models.base import Faction, Factions, Ship, Ships +from .models.misc import Actions, Conditions, DamageDeck, ShipStats +from .models.pilot import Pilots, Pilot +from .utils import manifest + +_local_path = Path(__file__).parents[0] + + +def _load_complex_manifest_data(cls, manifest_set, inner_set=None): + obj = cls() + for set_file in manifest[manifest_set]: + with open(PurePath(_local_path, set_file).as_posix(), "r") as f: + _set = json.load(f) + try: + for _dc in _set[inner_set]: + obj.append(obj._singular.load_data(_dc)) + except (KeyError, TypeError): + for _dc in _set: + obj.append(obj._singular.load_data(_dc)) + + return obj class XwingSquadron: @@ -54,8 +74,48 @@ def import_squad(self, xws): @staticmethod def _validate_schema(xws_data): - schema_fn = PurePath(Path(__file__).parents[0], "data/xws_schema.json").as_posix() + schema_fn = PurePath(_local_path, "data/xws_schema.json").as_posix() with open(schema_fn, "r") as f: schema = json.load(f) jsonschema.validate(instance=xws_data, schema=schema) + + +class XwingDataPack: + def __init__(self): + self.factions = Factions() + self.pilots = Pilots() + self.ships = Ships() + self.actions = Actions() + + self._load() + + def _load(self): + factions_jpath = JPath.parse_str("$.pilots.*.faction") + _factions = [m.current_value for m in factions_jpath.match(manifest)] + + for pilot in manifest["pilots"]: + _faction = Faction.load_data(pilot["faction"]) + self.factions.append(_faction) + for ship in pilot["ships"]: + with open(PurePath(_local_path, ship).as_posix(), "r") as f: + ship_data = json.load(f) + + _ship = Ship.load_data(ship_data) + _ship.faction = _faction + self.ships.append(_ship) + + for pilot_data in ship_data["pilots"]: + _pilot = Pilot.load_data(pilot_data) + _pilot.__setattr__("faction", _faction) + _pilot.__setattr__("ship", _ship) + self.pilots.append(_pilot) + + self.actions = _load_complex_manifest_data(Actions, "actions") + + with open(PurePath(_local_path, manifest["conditions"]).as_posix(), "r") as f: + self.conditions = Conditions.load_data(json.load(f)) + + self.damage_deck = _load_complex_manifest_data(DamageDeck, "damagedecks", "cards") + self.stats = _load_complex_manifest_data(ShipStats, "stats") + diff --git a/tests/test_pilot_load.py b/tests/test_pilot_load.py index 630d69d..d6a7338 100644 --- a/tests/test_pilot_load.py +++ b/tests/test_pilot_load.py @@ -59,7 +59,6 @@ def test_conains_methods(self): We need to be sure all three of these types of checks can work """ - self.assertIn(self.pilots1_known.pilots[0], self.pilots2_known) self.assertIn("bladesquadronveteran", self.pilots1_known) self.assertIn("Blade Squadron Veteran", self.pilots2_known) From a92329b6ecb69a0fa8f3d92b70bbe71eb0f7e00f Mon Sep 17 00:00:00 2001 From: Dennis Whitney Date: Mon, 24 Aug 2020 23:45:07 -0500 Subject: [PATCH 7/7] beta release --- CHANGELOG.md | 4 +++ README.md | 55 +++++++++++++++++++++++++++++++++-- pyxwb2/__init__.py | 2 +- pyxwb2/models/__init__.py | 29 +++++++++++++----- pyxwb2/models/base.py | 10 +++---- pyxwb2/models/misc.py | 26 +++++------------ pyxwb2/models/pilot.py | 2 +- pyxwb2/pyxwb2.py | 23 +++++++++------ requirements.txt | 6 ++++ setup.py | 47 ++++++++++++++++++++++++++++++ tests/test_pilot_load.py | 5 ++++ tests/test_xwing_data_load.py | 13 +++++++++ 12 files changed, 178 insertions(+), 44 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 tests/test_xwing_data_load.py diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d4f1b3b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change log + +# v0.1.0b +* Beta release diff --git a/README.md b/README.md index 84919f6..e53e393 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,57 @@ -# pyxwb2 +# Python Xwing Builder for X-wing v2.0 -# Citing +An Xwing builder written in python + +## Installation +Install from pypi +```bash +pip install pyxwb2 +``` + +Install locally +```bash +git clone https://github.com/minsis/pyxwb2.git +cd pyxwb2 +pip install . +``` + +## Usage +There are two separate libraries to use here: one fro loading XWS import data +and one for loading the entire xwing-data pack for usage in an app or web app, etc + +### XWS Data Load +To load and validate an XWB json file you can load it in. With a basic XWS load you get +a full manifest of data for the pilots included. + +```python +from pyxwb2 import XwingSquadron + +squadron = XwingSquadron() +squadron.import_squad("xws-squad.json") +``` + +As per the XWS standard point costs are ignored on import and loaded from the manifest. +If the source is trusted then the json schema is ignored. + +To load trusted data +```python +from pyxwb2 import XwingSquadron + +squadron = XwingSquadron(trust_source=True) +squadron.import_squad("xws-squad.json") +``` + +### X-wing Data Pack +This loads the entire manifest data from xwing-data. Gives you access to the entire data +strcutre that it has to offer. + +```python +from pyxwb2 import XwingDataPack + +data = XwingDataPack() +``` + +## Citing ### xwing-data2 The dataset included is provided by guidokessels/xwing-data2 under the MIT license diff --git a/pyxwb2/__init__.py b/pyxwb2/__init__.py index 57db40d..c201f60 100644 --- a/pyxwb2/__init__.py +++ b/pyxwb2/__init__.py @@ -1,3 +1,3 @@ from .pyxwb2 import XwingSquadron, XwingDataPack -__version__ = "0.0.3a" +__version__ = "0.1.0b" diff --git a/pyxwb2/models/__init__.py b/pyxwb2/models/__init__.py index 507ec3e..513ba89 100644 --- a/pyxwb2/models/__init__.py +++ b/pyxwb2/models/__init__.py @@ -8,11 +8,11 @@ def load_data(cls, data): class BaseItemListMixin: - def __init__(self, _singular=None): + def __init__(self, singular=None): self._items = list() - if _singular: - self._singular = _singular + if singular: + self.__singular__ = singular def __len__(self): return len(self._items) @@ -26,15 +26,15 @@ def __iter__(self): def __repr__(self): return f"{self.__class__.__name__}({[f for f in self._items]})" - def append(self, item, _singular=None): - if isinstance(item, self._singular): + def append(self, item): + if isinstance(item, self.__singular__): self._items.append(item) @classmethod def load_data(cls, data): obj = cls() for action in data: - obj._items.append(obj._singular.load_data(action)) + obj._items.append(obj.__singular__.load_data(action)) return obj @@ -46,4 +46,19 @@ def encap_quotes(value): return value all_attrs = ", ".join([f"{k}={encap_quotes(v)}" for k, v in self.__dict__.items() if not k.startswith('_')]) - return f"{self.__class__.__name__}({all_attrs})" \ No newline at end of file + return f"{self.__class__.__name__}({all_attrs})" + + +class SearchableItemMixin: + _items = list() + + def __getitem__(self, item): + if isinstance(item, int): + return self._items[item] + elif isinstance(item, str): + _tmp = self.__class__() + for maneuver in self._items: + for c in maneuver: + if item.lower() in str(getattr(maneuver, c)).lower(): + _tmp._items.append(maneuver) + return _tmp diff --git a/pyxwb2/models/base.py b/pyxwb2/models/base.py index 88603fc..902122e 100644 --- a/pyxwb2/models/base.py +++ b/pyxwb2/models/base.py @@ -49,7 +49,7 @@ def load_data(cls, faction_name): class Factions(BaseItemListMixin): - _singular = Faction + __singular__ = Faction def __contains__(self, item): all_names = [p.xws for p in self._items] + [p.name for p in self._items] @@ -67,7 +67,7 @@ def load_data(cls, factions): class Ship: def __init__(self): - self._skip_attr = ["pilots", "actions, dial, stats"] + self._skip_attr = ["pilots", "actions", "dial", "stats"] self.name = None self.xws = None self.size = None @@ -91,8 +91,8 @@ def load_data(cls, ship_data): class Ships(BaseItemListMixin): - _singular = Ship + __singular__ = Ship def __contains__(self, item): - all_names = [s.xws for s in self._items] + [s.name for s in self._items] - return item in all_names + return item in [s.xws for s in self._items] + \ + [s.name for s in self._items] diff --git a/pyxwb2/models/misc.py b/pyxwb2/models/misc.py index fcfd02d..9817c07 100644 --- a/pyxwb2/models/misc.py +++ b/pyxwb2/models/misc.py @@ -1,4 +1,4 @@ -from . import LoadDataMixin, ReperMixin, BaseItemListMixin +from . import LoadDataMixin, ReperMixin, BaseItemListMixin, SearchableItemMixin from pyxwb2.utils import manifest @@ -6,13 +6,12 @@ class ShipAbility(LoadDataMixin, ReperMixin): pass -# TODO: Upgrades class Upgrade(LoadDataMixin, ReperMixin): pass class Upgrades(BaseItemListMixin): - _singular = Upgrade + __singular__ = Upgrade class DamageCard(LoadDataMixin, ReperMixin): @@ -20,7 +19,7 @@ class DamageCard(LoadDataMixin, ReperMixin): class DamageDeck(BaseItemListMixin): - _singular = DamageCard + __singular__ = DamageCard class Condition(LoadDataMixin, ReperMixin): @@ -28,7 +27,7 @@ class Condition(LoadDataMixin, ReperMixin): class Conditions(BaseItemListMixin): - _singular = Condition + __singular__ = Condition class ShipStat(LoadDataMixin, ReperMixin): @@ -36,7 +35,7 @@ class ShipStat(LoadDataMixin, ReperMixin): class ShipStats(BaseItemListMixin): - _singular = ShipStat + __singular__ = ShipStat class Action(LoadDataMixin, ReperMixin): @@ -44,7 +43,7 @@ class Action(LoadDataMixin, ReperMixin): class Actions(BaseItemListMixin): - _singular = Action + __singular__ = Action class Maneuver(ReperMixin): @@ -71,7 +70,7 @@ def load_data(cls, maneuver): return obj -class ShipDial: +class ShipDial(SearchableItemMixin): """ The ship's dial containing all of the possible maneuvers the ship can perform. The returned object is a ShipDial with as a list of Maneuver objects. @@ -93,17 +92,6 @@ def __init__(self): def __len__(self): return len(self._items) - def __getitem__(self, item): - if isinstance(item, int): - return self._items[item] - elif isinstance(item, str): - _tmp = ShipDial() - for maneuver in self._items: - for c in maneuver: - if item.lower() in str(getattr(maneuver, c)).lower(): - _tmp._items.append(maneuver) - return _tmp - def __repr__(self): return f"ShipDial({[m for m in self._items][:5]}{' ...' if len(self._items) > 5 else ''})" diff --git a/pyxwb2/models/pilot.py b/pyxwb2/models/pilot.py index b96f429..39cef08 100644 --- a/pyxwb2/models/pilot.py +++ b/pyxwb2/models/pilot.py @@ -35,7 +35,7 @@ def load_data(cls, pilot_data): class Pilots(BaseItemListMixin, ReperMixin): - _singular = Pilot + __singular__ = Pilot def __getitem__(self, item): return self._items[item] diff --git a/pyxwb2/pyxwb2.py b/pyxwb2/pyxwb2.py index c378fef..717a03e 100644 --- a/pyxwb2/pyxwb2.py +++ b/pyxwb2/pyxwb2.py @@ -5,13 +5,22 @@ from jsonpath2 import Path as JPath from .models.base import Faction, Factions, Ship, Ships -from .models.misc import Actions, Conditions, DamageDeck, ShipStats +from .models.misc import Actions, Conditions, DamageDeck, ShipStats, Upgrades from .models.pilot import Pilots, Pilot from .utils import manifest _local_path = Path(__file__).parents[0] +def _load_simple_manifest_data(cls, set_file): + obj = cls() + with open(PurePath(_local_path, manifest[set_file]).as_posix(), "r") as f: + _set = json.load(f) + for _dc in _set: + obj.append(obj.__singular__.load_data(_dc)) + return obj + + def _load_complex_manifest_data(cls, manifest_set, inner_set=None): obj = cls() for set_file in manifest[manifest_set]: @@ -19,11 +28,10 @@ def _load_complex_manifest_data(cls, manifest_set, inner_set=None): _set = json.load(f) try: for _dc in _set[inner_set]: - obj.append(obj._singular.load_data(_dc)) + obj.append(obj.__singular__.load_data(_dc)) except (KeyError, TypeError): for _dc in _set: - obj.append(obj._singular.load_data(_dc)) - + obj.append(obj.__singular__.load_data(_dc)) return obj @@ -112,10 +120,7 @@ def _load(self): self.pilots.append(_pilot) self.actions = _load_complex_manifest_data(Actions, "actions") - - with open(PurePath(_local_path, manifest["conditions"]).as_posix(), "r") as f: - self.conditions = Conditions.load_data(json.load(f)) - + self.conditions = _load_simple_manifest_data(Conditions, "conditions") self.damage_deck = _load_complex_manifest_data(DamageDeck, "damagedecks", "cards") self.stats = _load_complex_manifest_data(ShipStats, "stats") - + self.upgrades = _load_complex_manifest_data(Upgrades, "upgrades") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2a7078f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +antlr4-python3-runtime==4.7.2 +attrs==20.1.0 +jsonpath2==0.4.4 +jsonschema==3.2.0 +pyrsistent==0.16.0 +six==1.15.0 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..cec32c1 --- /dev/null +++ b/setup.py @@ -0,0 +1,47 @@ +from setuptools import setup +from pyxwb2 import __version__ as version + +with open("README.md", "r") as f: + long_description = f.read() + +with open("requirements.txt", "r") as f: + requirements = [r for r in f.read().split("\n") if r] + + +setup( + name="pyxwb2", + packages=["pyxwb2", "pyxwb2.models"], + version=version, + license="GNU GPLv3", + description="Python API for FFG X-wing 2.0", + long_description=long_description, + long_description_content_type="text/markdown", + author="Dennis Whitney", + author_email="dennis@irunasroot.com", + url="https://github.com/minsis/pyxwb2", + download_url="https://github.com/minsis/pyxwb2/archive/v0.1.0b.tar.gz", + package_data={ + "pyxwb2": [ + "data/*", + "data/*/*", + "data/*/*/*", + "data/*/*/*/*" + ] + }, + keywords=[ + "ffg", + "x-wing", + "xwing", + "x-wing 2.0", + "xwing 2.0" + ], + install_requires=requirements, + python_requires=">=3.6", + classifiers=[ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Topic :: Software Development :: Build Tools", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Programming Language :: Python :: 3.6", + ] +) diff --git a/tests/test_pilot_load.py b/tests/test_pilot_load.py index d6a7338..984355c 100644 --- a/tests/test_pilot_load.py +++ b/tests/test_pilot_load.py @@ -2,6 +2,7 @@ from pyxwb2.models.pilot import Pilots from pyxwb2.models.base import Faction +from pyxwb2.models.misc import ShipDial, Maneuver from pyxwb2.models.exceptions import PilotsMissingException @@ -76,6 +77,10 @@ def test_unknown_pilot(self): def test_ship_ability(self): self.assertIn("ship_ability", self.pilots3_known[0]) + def test_search_ship_dial(self): + self.assertIsInstance(self.pilots1_known[0].ship.dial["1"], ShipDial) + self.assertIsInstance(self.pilots1_known[0].ship.dial[1], Maneuver) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_xwing_data_load.py b/tests/test_xwing_data_load.py new file mode 100644 index 0000000..66833aa --- /dev/null +++ b/tests/test_xwing_data_load.py @@ -0,0 +1,13 @@ +import unittest + +from pyxwb2 import XwingDataPack + + +class TestXwingDataPack(unittest.TestCase): + + def test_load(self): + self.data_pack = XwingDataPack() + + +if __name__ == "__main__": + unittest.main()