This commit is contained in:
2025-09-18 18:32:48 +02:00
parent ddae4ad4b0
commit 1abe31b3c8
7 changed files with 700 additions and 293 deletions
+24
View File
@@ -0,0 +1,24 @@
{"name": "Escort Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Escort Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 18}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Escort Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "4412029d26021383", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Frigate Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Frigate Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 24}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Frigate Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "1f954166473bedf3", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Light Cruiser Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Light Cruiser Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Light Cruiser Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c5ca1fc87803b111", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cruiser Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cruiser Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cruiser Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "96a0dacd77d672bb", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Jericho-class Pilgrim Vessel", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Jericho-class Pilgrim Vessel", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Immense conversions for pilgrim passages and reliquary cargo. Cavernous holds and chapels; range and capacity over armour and speed.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Jericho-class Pilgrim Vessel", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "a08b1d9ef251ec0b", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Vagabond-class Merchant Trader", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Vagabond-class Merchant Trader", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Modular cargobays and adaptable fittings; a chartist workhorse. Simple to keep running in frontier yards; heavily customised.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Vagabond-class Merchant Trader", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "95fcf7b99d705bd1", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Hazeroth-class Privateer", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Hazeroth-class Privateer", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Knife-fast raider with reinforced internals and stripped armour. Favoured for ambushes and commerce raiding.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Hazeroth-class Privateer", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "521f6e630bd813a4", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Havoc-class Merchant Raider", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Havoc-class Merchant Raider", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Hybrid carrier-raider balancing battery weight with cargo. Less protected than Navy hulls but brutal on traffic.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 196"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Havoc-class Merchant Raider", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c4c69cf1b895c0e1", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Sword-class Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Sword-class Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Reliable escort with accurate dorsal lasers and stout drives. Squadrons screen convoys and prosecute pirates.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Sword-class Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "ec53303961ef4fd4", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Tempest-class Strike Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Tempest-class Strike Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Close-action brawler for boardings and short-range gunnery. Reinforced prow and over-tuned drives.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 196"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Tempest-class Strike Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "fb874877eacc7a08", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Dauntless-class Light Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Dauntless-class Light Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Versatile patrol cruiser—good acceleration and flexible refits. Often leads Passage Watch patrols.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 36"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Dauntless-class Light Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c8975bb7181d8e12", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Lunar-class Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Lunar-class Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Archetypal line cruiser—balanced, dependable, easily refitted. Backbone of many squadrons.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 24"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Lunar-class Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "0b59c38ddda63f42", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cobra-class Destroyer", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cobra-class Destroyer", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Torpedo raider hunting in packs; strikes, then disengages to reload.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 66"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cobra-class Destroyer", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "b518e981d69324aa", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Falchion-class Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Falchion-class Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Modernised frigate with improved drives for frontier scouting.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Falchion-class Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "d3853b0270deaf3f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Turbulent-class Heavy Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Turbulent-class Heavy Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Strengthened frame and broader arcs; trades agility for staying power.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Turbulent-class Heavy Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "f1ea3416a6d0d27e", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Defiant-class Light Cruiser (Carrier)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Defiant-class Light Cruiser (Carrier)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Light carrier with significant attack craft; excellent for recon and strikes.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Defiant-class Light Cruiser (Carrier)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "73eed7c83ea60340", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Universe-class Mass Conveyor", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Universe-class Mass Conveyor", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Super-massive hauler for colony loads and crusade materiel; logistics linchpin.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 31"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Universe-class Mass Conveyor", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6836e238cce8d9fc", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Goliath-class Factory Ship", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Goliath-class Factory Ship", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Roving manufactorum and refinery; long autonomous deployments.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 30"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Goliath-class Factory Ship", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "2c612305a7bb853f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Conquest-class Star Galleon", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Conquest-class Star Galleon", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Heavily built merchant galleon with strong batteries and hull.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 25"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Conquest-class Star Galleon", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "287a7cd15c95031f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Orion-class Star Clipper", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Orion-class Star Clipper", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Fast passenger/light-cargo clipper for courier missions and risky runs.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 150"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Orion-class Star Clipper", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "750ee1998f698e08", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cobra-class Destroyer (Renegade)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cobra-class Destroyer (Renegade)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Ex-Navy Cobra in privateer hands with non-standard prow refits.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 66"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cobra-class Destroyer (Renegade)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6da4418bdbd2206c", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Secutor-class Monitor-Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Secutor-class Monitor-Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Mechanicus monitor with powerful dorsals and redundant shielding; anchors actions.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 151"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Secutor-class Monitor-Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "0eb071148d375807", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Lathe-class Monitor-Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Lathe-class Monitor-Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Lathes-forged variant emphasising resilient sanctified systems.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 152"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Lathe-class Monitor-Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "104965869ffa36bb", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Tyrant-class Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Tyrant-class Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Macrobattery-focused cruiser optimised for crushing broadsides.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 153"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Tyrant-class Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6774443321f24e87", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
@@ -1,24 +1 @@
{"name": "Escort Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Escort Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 18}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Escort Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "4412029d26021383", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"} {"name":"Universe-class Mass Conveyor","type":"vehicle","img":"icons/svg/ship.svg","folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sheetClass":"wg-voidships-builder.VoidshipSheet"},"wg-voidships-builder":{"isVoidship":true,"hull":{"class":"Universe-class Mass Conveyor","size":"Cruiser","slots":{"prow":0,"dorsal":0,"port":1,"starboard":1,"keel":0},"requirements":[{"tag":"cargo-bay","min":4,"label":"Cargo Holds"},{"tag":"aux-plasma","min":1,"label":"Auxiliary Plasma Generator"}]},"base":{"armour":12,"integrity":36,"manoeuvre":-1,"detection":0,"speed":8,"space":60,"power":55},"crew":{"command":1,"pilot":1,"sensors":1,"engineering":2,"gunnery":2,"security":2,"flightDeck":0,"passengers":0},"rtRaw":{"mnvr":-1,"notes":"Super-massive hauler for colony loads and crusade materiel; logistics linchpin.","combat":{"size":"colossal","speed":8,"wounds":{"value":0,"bonus":0,"max":36},"resilience":{"bonus":0,"total":12},"defence":{"bonus":2},"fly":0},"rt":{"speed":8,"manoeeuvrability":-10,"detection":0,"armour":12,"hullIntegrity":36,"space":60,"power":55,"weapons":{"prow":0,"dorsal":0,"port":1,"starboard":1,"keel":0},"turret":1,"source":"Battlefleet Koronus p.31 — to verify"},"source":"Battlefleet Koronus, p. 31"}}},"system":{},"effects":[],"items":[],"prototypeToken":{"name":"Universe-class Mass Conveyor","actorLink":true,"texture":{"src":"icons/svg/ship.svg"},"disposition":1,"displayName":0},"_id":"6836e238cce8d9fc","systemId":"wrath-and-glory","systemVersion":"7.1.1"}
{"name": "Frigate Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Frigate Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 24}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Frigate Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "1f954166473bedf3", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Light Cruiser Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Light Cruiser Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Light Cruiser Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c5ca1fc87803b111", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cruiser Hull (Empty)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cruiser Hull (Empty)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Empty hull. Add Components from Items pack.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cruiser Hull (Empty)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "96a0dacd77d672bb", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Jericho-class Pilgrim Vessel", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Jericho-class Pilgrim Vessel", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Immense conversions for pilgrim passages and reliquary cargo. Cavernous holds and chapels; range and capacity over armour and speed.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Jericho-class Pilgrim Vessel", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "a08b1d9ef251ec0b", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Vagabond-class Merchant Trader", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Vagabond-class Merchant Trader", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Modular cargobays and adaptable fittings; a chartist workhorse. Simple to keep running in frontier yards; heavily customised.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Vagabond-class Merchant Trader", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "95fcf7b99d705bd1", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Hazeroth-class Privateer", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Hazeroth-class Privateer", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Knife-fast raider with reinforced internals and stripped armour. Favoured for ambushes and commerce raiding.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 195"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Hazeroth-class Privateer", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "521f6e630bd813a4", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Havoc-class Merchant Raider", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Havoc-class Merchant Raider", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Hybrid carrier-raider balancing battery weight with cargo. Less protected than Navy hulls but brutal on traffic.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 196"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Havoc-class Merchant Raider", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c4c69cf1b895c0e1", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Sword-class Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Sword-class Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Reliable escort with accurate dorsal lasers and stout drives. Squadrons screen convoys and prosecute pirates.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Sword-class Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "ec53303961ef4fd4", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Tempest-class Strike Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Tempest-class Strike Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Close-action brawler for boardings and short-range gunnery. Reinforced prow and over-tuned drives.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Rogue Trader Core Rulebook, p. 196"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Tempest-class Strike Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "fb874877eacc7a08", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Dauntless-class Light Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Dauntless-class Light Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Versatile patrol cruiser—good acceleration and flexible refits. Often leads Passage Watch patrols.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 36"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Dauntless-class Light Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "c8975bb7181d8e12", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Lunar-class Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Lunar-class Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Archetypal line cruiser—balanced, dependable, easily refitted. Backbone of many squadrons.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 24"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Lunar-class Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "0b59c38ddda63f42", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cobra-class Destroyer", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cobra-class Destroyer", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Torpedo raider hunting in packs; strikes, then disengages to reload.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 66"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cobra-class Destroyer", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "b518e981d69324aa", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Falchion-class Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Falchion-class Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Modernised frigate with improved drives for frontier scouting.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Falchion-class Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "d3853b0270deaf3f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Turbulent-class Heavy Frigate", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Turbulent-class Heavy Frigate", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 1, "notes": "Strengthened frame and broader arcs; trades agility for staying power.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 28}, "resilience": {"bonus": 0, "total": 10}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 28"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Turbulent-class Heavy Frigate", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "f1ea3416a6d0d27e", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Defiant-class Light Cruiser (Carrier)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Defiant-class Light Cruiser (Carrier)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 0, "notes": "Light carrier with significant attack craft; excellent for recon and strikes.", "combat": {"size": "colossal", "speed": 9, "wounds": {"value": 0, "bonus": 0, "max": 32}, "resilience": {"bonus": 0, "total": 11}, "defence": {"bonus": 2}, "fly": 0}}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Defiant-class Light Cruiser (Carrier)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "73eed7c83ea60340", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Universe-class Mass Conveyor", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Universe-class Mass Conveyor", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Super-massive hauler for colony loads and crusade materiel; logistics linchpin.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 31"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Universe-class Mass Conveyor", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6836e238cce8d9fc", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Goliath-class Factory Ship", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Goliath-class Factory Ship", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Roving manufactorum and refinery; long autonomous deployments.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 30"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Goliath-class Factory Ship", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "2c612305a7bb853f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Conquest-class Star Galleon", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Conquest-class Star Galleon", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Heavily built merchant galleon with strong batteries and hull.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Battlefleet Koronus, p. 25"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Conquest-class Star Galleon", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "287a7cd15c95031f", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Orion-class Star Clipper", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Orion-class Star Clipper", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Fast passenger/light-cargo clipper for courier missions and risky runs.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 36}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 150"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Orion-class Star Clipper", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "750ee1998f698e08", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Cobra-class Destroyer (Renegade)", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Cobra-class Destroyer (Renegade)", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": 2, "notes": "Ex-Navy Cobra in privateer hands with non-standard prow refits.", "combat": {"size": "colossal", "speed": 10, "wounds": {"value": 0, "bonus": 0, "max": 22}, "resilience": {"bonus": 0, "total": 9}, "defence": {"bonus": 3}, "fly": 0}, "source": "Battlefleet Koronus, p. 66"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Cobra-class Destroyer (Renegade)", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6da4418bdbd2206c", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Secutor-class Monitor-Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Secutor-class Monitor-Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Mechanicus monitor with powerful dorsals and redundant shielding; anchors actions.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 151"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Secutor-class Monitor-Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "0eb071148d375807", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Lathe-class Monitor-Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Lathe-class Monitor-Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Lathes-forged variant emphasising resilient sanctified systems.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 152"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Lathe-class Monitor-Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "104965869ffa36bb", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
{"name": "Tyrant-class Cruiser", "type": "vehicle", "img": "icons/svg/ship.svg", "folder": null, "sort": 0, "ownership": {"default": 0}, "flags": {"core": {"sheetClass": "wg-voidships-builder.VoidshipSheet"}, "wg-voidships-builder": {"isVoidship": true, "hull": {"class": "Tyrant-class Cruiser", "size": "Cruiser", "slots": {"prow": 0, "dorsal": 0, "port": 0, "starboard": 0, "keel": 0}}, "base": {"armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0}, "crew": {"command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0}, "rtRaw": {"mnvr": -1, "notes": "Macrobattery-focused cruiser optimised for crushing broadsides.", "combat": {"size": "colossal", "speed": 8, "wounds": {"value": 0, "bonus": 0, "max": 40}, "resilience": {"bonus": 0, "total": 12}, "defence": {"bonus": 2}, "fly": 0}, "source": "Into the Storm, p. 153"}}}, "system": {}, "effects": [], "items": [], "prototypeToken": {"name": "Tyrant-class Cruiser", "actorLink": true, "texture": {"src": "icons/svg/ship.svg"}, "disposition": 1, "displayName": 0}, "_id": "6774443321f24e87", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}
@@ -1,76 +1,7 @@
{"_id": "4c636b539f64cdb9", "name": "Mars-Pattern Macrocannon", "type": "weapon", "img": null, "system": {"category": "ranged", "damage": {"base": 12, "bonus": 0, "rank": 0, "ed": {"base": 3, "bonus": 0, "rank": 0}, "ap": {"base": -1, "bonus": 0, "rank": 0}, "enabled": false, "otherDamage": {"mortal": "0", "shock": "0", "wounds": "0"}}, "range": {"short": 30, "medium": 60, "long": 120, "melee": 1, "thrown": null}, "salvo": 3, "traits": {"list": [{"name": "brutal"}, {"name": "rapidFire", "rating": "2"}]}, "keywords": "VOIDSHIP, MACROBROADSIDES"}} {"_id":"ITEMBRIDGECLV01","name":"Command Bridge (Civilian)","type":"gear","img":"icons/svg/book.svg","flags":{"wg-voidships-builder":{"component":{"kind":"bridge","subtype":"civilian","tags":["bridge"]},"voidOnly":true}},"system":{"description":"Standard command bridge and cogitators.","voidship":{"slot":"Internal","use":{"space":2,"power":2},"mods":{"armour":0,"integrity":0,"manoeuvre":1,"detection":1,"speed":0,"space":0,"power":0}}},"effects":[]}
{"_id": "ca475410c5c586ab", "name": "Sunsear Laser Battery", "type": "weapon", "img": null, "system": {"category": "ranged", "damage": {"base": 14, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0}, "ap": {"base": -2, "bonus": 0, "rank": 0}, "enabled": false, "otherDamage": {"mortal": "0", "shock": "0", "wounds": "0"}}, "range": {"short": 40, "medium": 80, "long": 160, "melee": 1, "thrown": null}, "salvo": 2, "traits": {"list": [{"name": "reliable"}, {"name": "volley", "rating": "2"}]}, "keywords": "VOIDSHIP, MACROLASERS"}} {"_id":"ITEMGELLARSTD01","name":"Gellar Field Projector","type":"gear","img":"icons/svg/temple.svg","flags":{"wg-voidships-builder":{"component":{"kind":"gellar","subtype":"standard","tags":["gellar"]},"voidOnly":true}},"system":{"description":"Essential protection in the Immaterium.","voidship":{"slot":"Internal","use":{"space":2,"power":3},"mods":{"armour":0,"integrity":0,"manoeuvre":0,"detection":0,"speed":0,"space":0,"power":0}}},"effects":[]}
{"_id": "2e5ebcbd3f63b739", "name": "Lance Battery", "type": "weapon", "img": null, "system": {"category": "ranged", "damage": {"base": 16, "bonus": 0, "rank": 0, "ed": {"base": 1, "bonus": 0, "rank": 0}, "ap": {"base": -3, "bonus": 0, "rank": 0}, "enabled": false, "otherDamage": {"mortal": "0", "shock": "0", "wounds": "0"}}, "range": {"short": 50, "medium": 100, "long": 200, "melee": 1, "thrown": null}, "salvo": 2, "traits": {"list": [{"name": "precise"}, {"name": "volley", "rating": "2"}]}, "keywords": "VOIDSHIP, LANCE"}} {"_id":"ITEMDRIVEWRP001","name":"Miloslav Warp Drive (Civilian)","type":"gear","img":"icons/svg/wing.svg","flags":{"wg-voidships-builder":{"component":{"kind":"drive","subtype":"warp","tags":["drive","warp"]},"voidOnly":true}},"system":{"description":"Reliable civilian warp drive.","voidship":{"slot":"Internal","use":{"space":3,"power":6},"mods":{"armour":0,"integrity":0,"manoeuvre":0,"detection":0,"speed":0,"space":0,"power":0}}},"effects":[]}
{"_id":"c0e76cf8e4a100c0","name":"Torpedo Tubes","type":"weapon","img":"modules/wng-core/assets/icons/weapons/missile-launcher.webp","system":{"category":"launcher","description":"Torpedowe wyrzutnie okrętowe. Strzał: Gunnery (BS) vs DEF; przechwytywalne przez TUR. Statystyki efektu zależą od załadowanej głowicy.\n\n**Kompatybilna amunicja (drag&drop na aktora, a następnie wybierz w polu Ammo):**\n• Torpedo Warhead — Standard / Plasma / Melta / Virus / Vortex / Guided.\n\n**Uwaga:** natywny system W&G nie zmienia DMG/AP/ED wg amunicji; używaj opisu ładunku przy interpretacji efektu.","keywords":"VOIDSHIP, ORDNANCE, TORPEDO, AMMO-DEPENDENT","rarity":"uncommon","salvo":1,"damage":{"enabled":false,"base":0,"bonus":0,"rank":0,"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{},"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"}]},"upgrades":[]}} {"_id":"ITEMSENSORAG001","name":"Augur Array (Civilian)","type":"gear","img":"icons/svg/mystery-man.svg","flags":{"wg-voidships-builder":{"component":{"kind":"sensor","subtype":"augur","tags":["sensor","auspex"]},"voidOnly":true}},"system":{"description":"Standard augur/sensor package.","voidship":{"slot":"Aetherics","use":{"space":1,"power":2},"mods":{"armour":0,"integrity":0,"manoeuvre":0,"detection":2,"speed":0,"space":0,"power":0}}},"effects":[]}
{"_id":"60951ef378ddb44c","name":"Launch Bay","type":"weapon","img":"modules/wng-core/assets/icons/weapons/missile-launcher.webp","system":{"category":"launcher","description":"Zatoki startowe dla skrzydeł. Test Gunnery (BS) vs DEF celu lub manewry CAP/Intercept/Bombing/Assault zgodnie z ładunkiem skrzydeł.\n\n**Kompatybilna amunicja (wybierz w polu Ammo):**\n• Wing Loadout — Fury Interceptors / Starhawk Bombers / Assault Boats.\n\n**Uwaga:** system nie modyfikuje DMG/AP/ED wg ładunku — używaj opisu skrzydła.","keywords":"VOIDSHIP, CARRIER, CRAFT, AMMO-DEPENDENT","rarity":"uncommon","salvo":1,"damage":{"enabled":false,"base":0,"bonus":0,"rank":0,"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{},"traits":{"list":[{"name":"carrier","rating":"wings"},{"name":"interceptable","rating":"TUR"}]},"upgrades":[]}} {"_id":"ITEMARMORHL001","name":"Reinforced Hull Plating","type":"gear","img":"icons/svg/armor.svg","flags":{"wg-voidships-builder":{"component":{"kind":"armour","subtype":"plating","tags":["hull","armour"]},"voidOnly":true}},"system":{"description":"Additional armour plates and bracing.","voidship":{"slot":"Internal","use":{"space":1,"power":0},"mods":{"armour":2,"integrity":4,"manoeuvre":-1,"detection":0,"speed":0,"space":0,"power":0}}},"effects":[]}
{"_id": "24c79e9c9ee464af","name":"Nova Cannon","type":"weapon","img":null,"system":{"category":"ranged","description":"Potężny strzał z przeładowaniem: można odpalić co 2 rundy (Recharge 1). Jeśli chybi, fala uderzeniowa rozrywa jednostki w promieniu 1 VU od punktu detonacji (rozproszenie). Każda 6 na ED przy trafieniu generuje dodatkowy krytyk.","keywords":"VOIDSHIP, SIEGE, NOVA","rarity":"rare","salvo":1,"damage":{"enabled":false,"base":0,"bonus":0,"rank":0,"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"traits":{"list":[{"name":"recharge","rating":"1 (fires every 2 rounds)"},{"name":"blast","rating":"1 VU (shockwave on miss)"},{"name":"nova-scatter","rating":"miss: detonate area"},{"name":"ed6-extra-crit","rating":"ED=6 → +1 Crit"}]},"install":{"notes":"DMG/AP/ED i dokładny szablon efektu mogą być modulowane stołowo; core: Recharge 1, miss→fala 1 VU, ED=6→+1 Crit."}}} {"_id":"ITEMCARGOHOLD01","name":"Cargo Hold & Lighter Bay","type":"gear","img":"icons/svg/crate.svg","flags":{"wg-voidships-builder":{"component":{"kind":"cargo-bay","subtype":"standard","tags":["cargo-bay","hold"]},"voidOnly":true}},"system":{"description":"General-purpose cargo hold with lighter handling.","voidship":{"slot":"Internal","use":{"space":-5,"power":1},"mods":{"armour":0,"integrity":0,"manoeuvre":0,"detection":0,"speed":0,"space":-5,"power":0}}},"effects":[]}
{"_id": "dce16e3acc436f41", "name": "Plasma Drive — Jovian Pattern", "type": "gear", "img": null, "system": {"description": "Essential Component: plasma drive (Jovian).", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, DRIVE"}} {"_id":"ITEMAUXPLASM01","name":"Auxiliary Plasma Generator","type":"gear","img":"icons/svg/energy.svg","flags":{"wg-voidships-builder":{"component":{"kind":"plasma","subtype":"aux-generator","tags":["aux-plasma"]},"voidOnly":true}},"system":{"description":"Auxiliary plasma reactor increasing available power.","voidship":{"slot":"Internal","use":{"space":2,"power":-6},"mods":{"armour":0,"integrity":0,"manoeuvre":0,"detection":0,"speed":0,"space":0,"power":6}}},"effects":[]}
{"_id": "501ff1a2bd541b7a", "name": "Plasma Drive — Lathe Pattern", "type": "gear", "img": null, "system": {"description": "Essential Component: plasma drive (Lathe).", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, ESSENTIAL, DRIVE"}}
{"_id": "696ec23471a30210", "name": "Warp Engine — Strelov", "type": "gear", "img": null, "system": {"description": "Essential Component: warp engine (Strelov).", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, WARP"}}
{"_id": "6251cd78f55a7109", "name": "Warp Engine — Miloslav", "type": "gear", "img": null, "system": {"description": "Essential Component: warp engine (Miloslav).", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, ESSENTIAL, WARP"}}
{"_id": "46a88fd35a5b5c3c", "name": "Geller Field (Primary)", "type": "gear", "img": null, "system": {"description": "Primary Geller field projector.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, GELLER"}}
{"_id": "3e086585bbae99e3", "name": "Geller Field (Reserve)", "type": "gear", "img": null, "system": {"description": "Reserve/backup Geller field (independent).", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, GELLER"}}
{"_id": "252f476c561c29a4", "name": "Void Shield Array (Single)", "type": "gear", "img": null, "system": {"description": "Single-pattern void shields.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, SHIELDS"}}
{"_id": "ba4dff7991891d61", "name": "Void Shield Array (Double)", "type": "gear", "img": null, "system": {"description": "Dual-pattern void shields.", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, ESSENTIAL, SHIELDS"}}
{"_id": "830b39f8c6a0367e", "name": "Combat Bridge", "type": "gear", "img": null, "system": {"description": "Command bridge; targeting/cmd suites.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, ESSENTIAL, BRIDGE"}}
{"_id": "9f0743898f310492", "name": "Vitae-Pattern Life Sustainer", "type": "gear", "img": null, "system": {"description": "Essential life sustainer system.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, LIFE-SUSTAINER"}}
{"_id": "d8430ab1d15beb37", "name": "Voidsmen Quarters", "type": "gear", "img": null, "system": {"description": "Standard crew quarters.", "value": 0, "rarity": "common", "keywords": "VOIDSHIP, ESSENTIAL, QUARTERS"}}
{"_id": "1916605eb593cc0a", "name": "Luxury Passenger Quarters", "type": "gear", "img": null, "system": {"description": "Luxury accommodations.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ESSENTIAL, QUARTERS"}}
{"_id": "dd72e813065d0e34", "name": "Auger Array", "type": "gear", "img": null, "system": {"description": "Standard shipboard augur sensors.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, ESSENTIAL, AUGUR"}}
{"_id": "fff778f13b7ddf73", "name": "Empyrean Mantle", "type": "gear", "img": null, "system": {"description": "Warp-signature damping.", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, SUPPLEMENTAL, STEALTH"}}
{"_id": "2a099d32269fcc91", "name": "Holo-Baffles", "type": "gear", "img": null, "system": {"description": "Visual/holo signature masking.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, SUPPLEMENTAL, STEALTH"}}
{"_id": "692975b02473b4ef", "name": "Teleportarium", "type": "gear", "img": null, "system": {"description": "Teleport insertion capability.", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "26ea0553729833be", "name": "Tenebro-Maze", "type": "gear", "img": null, "system": {"description": "Internal labyrinth vs boarders.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "b9cd53d57d0eb46c", "name": "Murder-Servitors", "type": "gear", "img": null, "system": {"description": "Automated servitor kill-grids.", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "209b5b26731923b6", "name": "Superior Plating", "type": "gear", "img": null, "system": {"description": "Enhanced armor facings.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "96594975caec8fd1", "name": "Librarium Vault", "type": "gear", "img": null, "system": {"description": "Schola/librarium complex.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "53394adfd9df0f67", "name": "Temple-Shrine to the God-Emperor", "type": "gear", "img": null, "system": {"description": "Dedicated shrine complex.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "eed15ac1f0b855d0", "name": "Observation Dome", "type": "gear", "img": null, "system": {"description": "Panoramic astrogation dome.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "035ef8929ef5c465", "name": "Cargo Hold & Lighter Bay", "type": "gear", "img": null, "system": {"description": "Expanded cargo & lighters.", "value": 0, "rarity": "common", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "ce218220da6dad3e", "name": "Barracks", "type": "gear", "img": null, "system": {"description": "Embarked troops for boarding/landings.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "32caa789ebca127b", "name": "Auto-Temple", "type": "gear", "img": null, "system": {"description": "Automated Ecclesiarchy node.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id": "3e2dd5640db8e12b", "name": "Trophy Room", "type": "gear", "img": null, "system": {"description": "Crew morale-focused trophy hall.", "value": 0, "rarity": "uncommon", "keywords": "VOIDSHIP, SUPPLEMENTAL"}}
{"_id":"e101a1b2c3d4e5f1","name":"BG-15 Assault Scanners","type":"gear","img":null,"system":{"description":"Zbliżeniowe, agresywnie strojone auspeksy do skanów podczas abordażu i w zwarciu. Ułatwiają szybkie namierzanie celów w pobliżu.","keywords":"VOIDSHIP, ESSENTIAL, AUGUR","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e102a1b2c3d4e5f2","name":"Belecane-pattern 90.r Geller Field","type":"gear","img":null,"system":{"description":"Standaryzowany generator pola Gellera utrzymujący „bańkę” rzeczywistości podczas żeglugi w Osnowie.","keywords":"VOIDSHIP, ESSENTIAL, GELLER","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e103a1b2c3d4e5f3","name":"Bilge-Rat Quarters","type":"gear","img":null,"system":{"description":"Skrajnie oszczędne, ciasne kwatery maksymalizujące pojemność załogi kosztem morale i komfortu.","keywords":"VOIDSHIP, ESSENTIAL, QUARTERS","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e104a1b2c3d4e5f4","name":"Clemency-pattern Life Sustainer","type":"gear","img":null,"system":{"description":"Wydajny układ podtrzymania życia z ulepszonym obiegiem powietrza i recyklingiem; zmniejsza straty długodystansowe.","keywords":"VOIDSHIP, ESSENTIAL, LIFE-SUSTAINER","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e105a1b2c3d4e5f5","name":"Fleet Flag Bridge","type":"gear","img":null,"system":{"description":"Mostek flagowy do koordynacji formacji i zespołów zadaniowych; rozszerzone stanowiska dowodzenia i łączności.","keywords":"VOIDSHIP, ESSENTIAL, BRIDGE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e106a1b2c3d4e5f6","name":"Flight Command Bridge","type":"gear","img":null,"system":{"description":"Układ mostka zoptymalizowany pod działania lotnicze; integracja kontroli skrzydeł myśliwskich i rozpoznawczych.","keywords":"VOIDSHIP, ESSENTIAL, BRIDGE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e107a1b2c3d4e5f7","name":"Invasion Bridge","type":"gear","img":null,"system":{"description":"Mostek szturmowy do kierowania desantami i operacjami lądowania; kaplice bojowe i łącza do sekcji piechoty.","keywords":"VOIDSHIP, ESSENTIAL, BRIDGE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e108a1b2c3d4e5f8","name":"Jovian-pattern Class 8.1 Drive","type":"gear","img":null,"system":{"description":"Fregatowy rdzeń plazmowy Jovian niezawodny i łatwy w serwisie w stoczniach Imperial Navy.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e109a1b2c3d4e5f9","name":"Jovian-pattern Class 8.2 Drive","type":"gear","img":null,"system":{"description":"Lekkokrezerski wariant napędu Jovian zoptymalizowany do długich patroli i równych cykli obciążenia.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10aa1b2c3d4e5fa","name":"Jovian-pattern Class 8.3 Drive","type":"gear","img":null,"system":{"description":"Krezerskie turbiny Jovian balans między ciągiem a nakładem obsługi i remontów.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10ba1b2c3d4e5fb","name":"Jovian-pattern Class 8.4 Drive","type":"gear","img":null,"system":{"description":"Rdzeń plazmowy dla ciężkich krążowników długotrwałe kampanie i wysoka rezerwa mocy.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10ca1b2c3d4e5fc","name":"Miloslav G-616.b Warp Engine","type":"gear","img":null,"system":{"description":"Kompaktowy silnik Osnowy do rajderów/transportowców/fregat; agresywne, szybkie tranzyty kosztem kapryśności.","keywords":"VOIDSHIP, ESSENTIAL, WARP","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10da1b2c3d4e5fd","name":"Miloslav H-616.b Warp Engine","type":"gear","img":null,"system":{"description":"Wzmocniona wersja Miloslava dla lekkich i pełnych krążowników; lepsza stabilność w burzach Osnowy.","keywords":"VOIDSHIP, ESSENTIAL, WARP","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10ea1b2c3d4e5fe","name":"Saturine-pattern Class 4A Ultra Drive","type":"gear","img":null,"system":{"description":"Battlecruiserowy napęd plazmowy brutalne przyspieszenia i wysoki ciąg w krótkich oknach bojowych.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e10fa1b2c3d4e5ff","name":"Saturine-pattern Class 5 Drive","type":"gear","img":null,"system":{"description":"Napęd dla grand cruiser imponująca moc przy wysokich kosztach utrzymania i wymogach serwisowych.","keywords":"VOIDSHIP, ESSENTIAL, DRIVE","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e110a1b2c3d4e5f0","name":"Triple Void Shield Array","type":"gear","img":null,"system":{"description":"Potrójna warstwa imperialnych osłon dla ciężkich kadłubów linii; zapewnia znacznie większą chłonność ognia.","keywords":"VOIDSHIP, ESSENTIAL, SHIELDS","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e111a1b2c3d4e5f1","name":"Voss 'Glimmer'-pattern Void Shield Array","type":"gear","img":null,"system":{"description":"Wydajna, jednowarstwowa osłona wg wzorca Voss standard dla lżejszych kadłubów.","keywords":"VOIDSHIP, ESSENTIAL, SHIELDS","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e112a1b2c3d4e5f2","name":"Voss 'Glimmer'-pattern Multiple Void Shield Array","type":"gear","img":null,"system":{"description":"Rozbudowany układ tarcz Voss z wieloma warstwami typowy dla krążowników.","keywords":"VOIDSHIP, ESSENTIAL, SHIELDS","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e113a1b2c3d4e5f3","name":"X-470 Ultimo Array","type":"gear","img":null,"system":{"description":"Mocny zewnętrzny zestaw augurów ponadprzeciętna detekcja, ale silna sygnatura emisyjna.","keywords":"VOIDSHIP, ESSENTIAL, AUGUR","rarity":"uncommon","source":"Battlefleet Koronus, p. 34"}}
{"_id":"e114a1b2c3d4e5f4","name":"Arboretum","type":"gear","img":null,"system":{"description":"Hydroponiczne ogrody poprawiające morale i wspomagające podtrzymanie życia w długich rejsach.","keywords":"VOIDSHIP, SUPPLEMENTAL, LIFE-SUPPORT","rarity":"uncommon","source":"Into the Storm, p. 161162"}}
{"_id":"e115a1b2c3d4e5f5","name":"Asteroid Mining Facility","type":"gear","img":null,"system":{"description":"Zestawy górnicze, holowniki i rafinerie pokładowe do samodzielnej eksploatacji pasów asteroid.","keywords":"VOIDSHIP, SUPPLEMENTAL, INDUSTRY","rarity":"uncommon","source":"Into the Storm, p. 161162"}}
{"_id":"e116a1b2c3d4e5f6","name":"Astropathic Choir-chambers","type":"gear","img":null,"system":{"description":"Ufortyfikowane, wyciszone komnaty dla chóru astropatów z wzmacniaczami psycho-łączności.","keywords":"VOIDSHIP, SUPPLEMENTAL, COMMUNICATIONS","rarity":"uncommon","source":"Into the Storm, p. 161"}}
{"_id":"e117a1b2c3d4e5f7","name":"Auxiliary Plasma Banks","type":"gear","img":null,"system":{"description":"Dodatkowe akumulatory plazmowe zapewniające krótkie skoki mocy dla całego okrętu.","keywords":"VOIDSHIP, SUPPLEMENTAL, DRIVE","rarity":"uncommon","source":"Into the Storm, p. 161"}}
{"_id":"e118a1b2c3d4e5f8","name":"Broadband Hymn-casters","type":"gear","img":null,"system":{"description":"Wieże nadawcze zalewające wszystkie pasma hymnami, utrudniające koordynację przeciwnika.","keywords":"VOIDSHIP, SUPPLEMENTAL, COMMUNICATIONS","rarity":"uncommon","install":{"power":3,"space":0,"sp":1},"source":"Into the Storm, p. 161"}}
{"_id":"e119a1b2c3d4e5f9","name":"Drop Pod Launch Bays","type":"gear","img":null,"system":{"description":"Katedry startowe i układy naprowadzania do masowych zrzutów kapsuł desantowych.","keywords":"VOIDSHIP, SUPPLEMENTAL, ORDNANCE","rarity":"uncommon","install":{"power":1,"space":3,"sp":2},"source":"Into the Storm, p. 161"}}
{"_id":"e11aa1b2c3d4e5fa","name":"Empyrean Mantle (Expanded)","type":"gear","img":null,"system":{"description":"Rozbudowane projektory tłumiące sygnaturę w Osnowie; warianty dla mniejszych i większych kadłubów.","keywords":"VOIDSHIP, SUPPLEMENTAL, STEALTH","rarity":"uncommon","install":{"variants":[{"hulls":"Transports/Raiders/Frigates","power":3,"space":0,"sp":2},{"hulls":"Light Cruisers/Cruisers","power":5,"space":0,"sp":2}]},"source":"Into the Storm, p. 161162"}}
{"_id":"e11ba1b2c3d4e5fb","name":"Reinforced Prow","type":"gear","img":null,"system":{"description":"Wzmocniona struktura dziobowa do taranowania i walki na kursie zbieżnym.","keywords":"VOIDSHIP, SUPPLEMENTAL, ARMOUR","rarity":"uncommon","install":{"power":0,"space":2,"sp":1},"source":"Into the Storm, p. 161162"}}
{"_id":"e11ca1b2c3d4e5fc","name":"Shadowblind Bays","type":"gear","img":null,"system":{"description":"Zaciemnione, bafflowane zatoki maskujące ruchy i sygnaturę cieplną w trakcie operacji.","keywords":"VOIDSHIP, SUPPLEMENTAL, CARGO","rarity":"uncommon","source":"Into the Storm, p. 161"}}
{"_id":"e11da1b2c3d4e5fd","name":"Jovian-pattern Missile Battery","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"volley","rating":"2"}]},"description":"Zewnętrzne zasobniki rakiet do gwałtownego salwowania idealne na otwarcie starcia, potem długi przeładunek.","keywords":"VOIDSHIP, ORDNANCE, MACROBATT","rarity":"uncommon","source":"Into the Storm, p. 161"}}
{"_id":"e11ea1b2c3d4e5fe","name":"Lathe-pattern Grav-culverin Broadside","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"broadside","rating":"-"},{"name":"option:extended-range (reduced damage)","rating":"-"}]},"description":"Grawitacyjne masowe miotacze; mogą odpalać samonapędzane pociski dla większego zasięgu kosztem obrażeń.","keywords":"VOIDSHIP, MACROBROADSIDES","rarity":"uncommon","source":"Into the Storm, p. 161162"}}
{"_id":"e11fa1b2c3d4e5ff","name":"Mezoa-pattern Macrocannons","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"bulky","rating":"-"}]},"description":"Mezoański wariant Mars-pattern wyższe osiągi za cenę większych wymagań mocy i przestrzeni.","keywords":"VOIDSHIP, MACROBATT","rarity":"uncommon","source":"Into the Storm, p. 161162"}}
{"_id":"e120a1b2c3d4e5f0","name":"Pyros Melta-cannons","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"inferno-on-crit","rating":"-"}]},"description":"Przewymiarowane lufy z ładunkami melta; trafienia krytyczne łatwo wzniecają rozległe pożary.","keywords":"VOIDSHIP, MACROBATT, MELTA","rarity":"uncommon","source":"Into the Storm, p. 162"}}
{"_id":"e121a1b2c3d4e5f1","name":"Sunhammer Lance (Weapon)","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"lance","rating":"-"}]},"description":"Wysokoenergetyczny emiter lancy do przebijania pancerzy i pasów opancerzenia.","keywords":"VOIDSHIP, LANCE","rarity":"uncommon","source":"Into the Storm, p. 163"}}
{"_id":"e122a1b2c3d4e5f2","name":"Sunhammer Lance (Battery)","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"lance","rating":"-"},{"name":"battery","rating":"-"}]},"description":"Zespół sprzężonych emiterów Sunhammer nasyca cel cięciem wiązek przy ogromnym poborze mocy.","keywords":"VOIDSHIP, LANCE","rarity":"uncommon","source":"Into the Storm, p. 163"}}
{"_id":"e123a1b2c3d4e5f3","name":"Sunsear Las-broadside","type":"weapon","img":null,"system":{"category":"ranged","damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","shock":"0","wounds":"0"}},"range":{"short":30,"medium":60,"long":120},"salvo":2,"traits":{"list":[{"name":"broadside","rating":"-"}]},"description":"Długozasięgowe zespoły Sunsear na burtach celność i precyzja na dystansie.","keywords":"VOIDSHIP, MACROLASERS","rarity":"uncommon","source":"Into the Storm, p. 162163"}}
{"_id":"a1b2c3d4e5f60123","name":"Torpedo Warhead — Standard","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"uncommon","description":"Standardowa głowica torpedy. Używana przez Torpedo Tubes. Strzał przechwytywalny przez TUR.","value":0,"keywords":"VOIDSHIP, TORPEDO, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":14,"bonus":0,"rank":0,"ed":{"base":3,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":3,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"b2c3d4e5f6a70124","name":"Torpedo Warhead — Plasma","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"rare","description":"+1 ED przeciw celom z aktywnymi SHD.","value":0,"keywords":"VOIDSHIP, TORPEDO, PLASMA, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":5,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":5,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"},{"name":"anti-shield","+1ED"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"c3d4e5f6a7b80125","name":"Torpedo Warhead — Melta","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"rare","description":"W Contact/Close: +2 ED; bardzo wysoki AP.","value":0,"keywords":"VOIDSHIP, TORPEDO, MELTA, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":18,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-4,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-4,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"},{"name":"melta","+2ED @ Contact/Close"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"d4e5f6a7b8c90126","name":"Torpedo Warhead — Virus","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"very rare","description":"Niskie obrażenia kadłuba; dewastuje załogę/systemy (CR -1 on Hit bez SHD; na 6 na Wrath: kolejne -1).","value":0,"keywords":"VOIDSHIP, TORPEDO, VIRUS, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":4,"bonus":0,"rank":0,"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"},{"name":"crew-killer"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"e5f6a7b8c9d00127","name":"Torpedo Warhead — Vortex","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"extremely rare","description":"On Crit: dodatkowy d66 Crit i Blast 1 VU.","value":0,"keywords":"VOIDSHIP, TORPEDO, VORTEX, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":20,"bonus":0,"rank":0,"ed":{"base":6,"bonus":0,"rank":0},"ap":{"base":-5,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":6,"bonus":0,"rank":0},"ap":{"base":-5,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"interceptable","rating":"TUR"},{"name":"blast","rating":"1VU"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"f6a7b8c9d0e10128","name":"Torpedo Warhead — Guided","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"rare","description":"+1k do ataku / przerzut 1 kości; TUR przeciwnika -1 do Intercept.","value":0,"keywords":"VOIDSHIP, TORPEDO, GUIDED, WARHEAD","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":14,"bonus":0,"rank":0,"ed":{"base":3,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":3,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"ordnance"},{"name":"guided"},{"name":"interceptable","rating":"TUR-1"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"a7b8c9d0e1f20129","name":"Wing Loadout — Fury Interceptors","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"uncommon","description":"CAP/Intercept przeciw craft/torpedom.","value":0,"keywords":"VOIDSHIP, WING, FURY, INTERCEPT","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":8,"bonus":0,"rank":0,"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":2,"bonus":0,"rank":0},"ap":{"base":-1,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"carrier-wing"},{"name":"cap"},{"name":"intercept","+2 vs craft/torp"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"b8c9d0e1f2a3012a","name":"Wing Loadout — Starhawk Bombers","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"uncommon","description":"Bombing run przeciw okrętom; +1 ED jeśli cel ma SHD>0.","value":0,"keywords":"VOIDSHIP, WING, STARHAWK, BOMBING","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":12,"bonus":0,"rank":0,"ed":{"base":4,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":4,"bonus":0,"rank":0},"ap":{"base":-2,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"carrier-wing"},{"name":"bombing"},{"name":"interceptable","rating":"TUR"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
{"_id":"c9d0e1f2a3b4012b","name":"Wing Loadout — Assault Boats","type":"weapon","img":"modules/wng-core/assets/icons/weapons/ranged-weapon.webp","system":{"quantity":1,"rarity":"uncommon","description":"Zamiast DMG: Boarding (Close/Contact). Jeśli dotrą bez strat: +2 do 1. fazy.","value":0,"keywords":"VOIDSHIP, WING, ASSAULT, BOARDING","equipped":false,"attack":{"base":0,"bonus":0,"rank":"0"},"damage":{"base":0,"bonus":0,"rank":0,"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"enabled":false,"otherDamage":{"mortal":"0","wounds":"0","shock":"0"}},"ed":{"base":0,"bonus":0,"rank":0},"ap":{"base":0,"bonus":0,"rank":0},"category":"grenade-missile","range":{"short":30,"medium":60,"long":120,"melee":1,"thrown":null},"ammo":{"id":""},"salvo":1,"traits":{"list":[{"name":"carrier-wing"},{"name":"assault-boats"},{"name":"boarding"}]},"upgrades":[],"combi":{},"twinned":false,"otherDamage":{}}}
+130
View File
@@ -0,0 +1,130 @@
{
"name": "Universe-class Mass Conveyor",
"type": "vehicle",
"img": "icons/svg/ship.svg",
"folder": null,
"ownership": { "default": 0 },
"flags": {
"core": { "sheetClass": "wg-voidships-builder.VoidshipSheet" },
"wg-voidships-builder": {
"isVoidship": true,
"hull": {
"class": "Universe-class Mass Conveyor",
"size": "Cruiser",
"slots": { "prow": 0, "dorsal": 0, "port": 1, "starboard": 1, "keel": 0 },
"requirements": [
{ "tag": "cargo-bay", "min": 4, "label": "Cargo Holds" },
{ "tag": "aux-plasma", "min": 1, "label": "Auxiliary Plasma Generator" }
]
},
"base": { "armour": 12, "integrity": 36, "manoeuvre": -1, "detection": 0, "speed": 8, "space": 60, "power": 55 },
"crew": { "command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0 },
"rtRaw": {
"mnvr": -1,
"notes": "Super-massive hauler for colony loads and crusade materiel; logistics linchpin.",
"combat": { "size": "colossal", "speed": 8, "wounds": { "value": 0, "bonus": 0, "max": 36 }, "resilience": { "bonus": 0, "total": 12 }, "defence": { "bonus": 2 }, "fly": 0 },
"rt": {
"speed": 8,
"manoeuvrability": -10,
"detection": 0,
"armour": 12,
"hullIntegrity": 36,
"space": 60,
"power": 55,
"weapons": { "prow": 0, "dorsal": 0, "port": 1, "starboard": 1, "keel": 0 },
"turret": 1,
"source": "Battlefleet Koronus p.31 — to verify"
},
"source": "Battlefleet Koronus, p. 31"
}
}
},
"system": {},
"effects": [],
"items": [
{
"_id": "ABCD1234EFGH5678",
"name": "Command Bridge (Civilian)",
"type": "gear",
"img": "icons/svg/book.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "bridge", "subtype": "civilian", "tags": ["bridge"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": 2 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 1, "detection": 1, "speed": 0, "space": 0, "power": 0 } } }
},
{
"_id": "IJKL9012MNOP3456",
"name": "Gellar Field Projector",
"type": "gear",
"img": "icons/svg/temple.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "gellar", "subtype": "standard", "tags": ["gellar"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": 3 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0 } } }
},
{
"_id": "QRST7890UVWX1234",
"name": "Miloslav Warp Drive (Civilian)",
"type": "gear",
"img": "icons/svg/wing.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "drive", "subtype": "warp", "tags": ["drive", "warp"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": 3, "power": 6 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0 } } }
},
{
"_id": "YZAB5678CDEF9012",
"name": "Augur Array (Civilian)",
"type": "gear",
"img": "icons/svg/mystery-man.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "sensor", "subtype": "augur", "tags": ["sensor", "auspex"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Aetherics", "use": { "space": 1, "power": 2 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 2, "speed": 0, "space": 0, "power": 0 } } }
},
{
"_id": "GHIJ3456KLMN7890",
"name": "Reinforced Hull Plating",
"type": "gear",
"img": "icons/svg/armor.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "armour", "subtype": "plating", "tags": ["hull", "armour"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": 1, "power": 0 }, "mods": { "armour": 2, "integrity": 4, "manoeuvre": -1, "detection": 0, "speed": 0, "space": 0, "power": 0 } } }
},
{
"_id": "PQRS9012TUVW3456",
"name": "Cargo Hold & Lighter Bay",
"type": "gear",
"img": "icons/svg/crate.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } }
},
{
"_id": "WXYZ1234ABCD5678",
"name": "Cargo Hold & Lighter Bay",
"type": "gear",
"img": "icons/svg/crate.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } }
},
{
"_id": "EFGH9012IJKL3456",
"name": "Cargo Hold & Lighter Bay",
"type": "gear",
"img": "icons/svg/crate.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } }
},
{
"_id": "MNOP5678QRST9012",
"name": "Cargo Hold & Lighter Bay",
"type": "gear",
"img": "icons/svg/crate.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } }
},
{
"_id": "UVWX3456YZAB7890",
"name": "Auxiliary Plasma Generator",
"type": "gear",
"img": "icons/svg/energy.svg",
"flags": { "wg-voidships-builder": { "component": { "kind": "plasma", "subtype": "aux-generator", "tags": ["aux-plasma"] }, "voidOnly": true } },
"system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": -6 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 6 } } }
}
],
"prototypeToken": { "name": "Universe-class Mass Conveyor", "actorLink": true, "texture": { "src": "icons/svg/ship.svg" }, "disposition": 1, "displayName": 0 },
"_id": "6836e238cce8d9fc",
"systemId": "wrath-and-glory",
"systemVersion": "7.1.1"
}
+335 -80
View File
@@ -1,13 +1,15 @@
// W&G Voidships Builder — Voidship Actor Sheet (vehicle+flag emulation) // W&G Voidships Builder — Voidship Actor Sheet (vehicle+flag emulation)
// v1.0.0 (safe MVP) — works on Foundry v11v13 // v1.0.1 — works on Foundry v11v13
/* eslint-env es2021 */ /* eslint-env es2021 */
const VB_MOD = "wg-voidships-builder"; const VB_MOD = "wg-voidships-builder";
const VB_DEBUG = true; // debug; później zrobimy game.settings
function dbg(...args) { if (VB_DEBUG) console.debug("[VB]", ...args); }
class VoidshipSheet extends ActorSheet { class VoidshipSheet extends ActorSheet {
static get defaultOptions() { static get defaultOptions() {
const opts = super.defaultOptions; const opts = super.defaultOptions;
return foundry.utils.mergeObject(opts, { return foundry.utils.mergeObject(opts, {
classes: ["wg-voidships", "sheet", "actor", "voidship"], classes: ["wg-voidships", "sheet", "actor", "voidship", "themed", "theme-light"],
template: `modules/${VB_MOD}/templates/voidship-sheet.hbs`, template: `modules/${VB_MOD}/templates/voidship-sheet.hbs`,
width: 720, width: 720,
height: 680, height: 680,
@@ -15,32 +17,27 @@ class VoidshipSheet extends ActorSheet {
}); });
} }
/** Prefer to use this sheet only for vehicles marked flagiem voidship */ _canUserView(user) { return !!user; }
_canUserView(user) { get isVoidship() { return this.actor?.getFlag(VB_MOD, "isVoidship") === true; }
return !!user;
}
get isVoidship() {
return this.actor?.getFlag(VB_MOD, "isVoidship") === true;
}
/** Aggregate base + mods from items into derived summary (safe, optional) */ /** Prostszą agregację zostawiamy do walidacji ręcznej etc. */
_computeDerived() { _computeDerived() {
const a = this.actor; const a = this.actor;
const b = a.getFlag(VB_MOD, "base") || {}; const b = a.getFlag(VB_MOD, "base") || {};
const base = { const base = {
armour: Number(b.armour) || 0, armour: Number(b.armour) || 0,
integrity: Number(b.integrity) || 0, integrity: Number(b.integrity) || 0,
manoeuvre: Number(b.manoeuvre) || 0, manoeuvre: Number(b.manoeuvre) || 0,
detection: Number(b.detection) || 0, detection: Number(b.detection) || 0,
speed: Number(b.speed) || 0, speed: Number(b.speed) || 0,
space: Number(b.space) || 0, space: Number(b.space) || 0,
power: Number(b.power) || 0 power: Number(b.power) || 0
}; };
const mods = { armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 }; const mods = { armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 };
const slots = { prow: 0, dorsal: 0, port: 0, starboard: 0, keel: 0, other: 0 }; const slots = { prow: 0, dorsal: 0, port: 0, starboard: 0, keel: 0, other: 0 };
const items = a?.items ?? []; const items = a?.items ?? [];
for (const it of items) { for (const it of items) {
const eq = (it.system?.equipped ?? true); // treat as mounted unless explicitly off const eq = (it.system?.equipped ?? true);
const v = it.system?.voidship ?? {}; const v = it.system?.voidship ?? {};
const m = v.mods ?? {}; const m = v.mods ?? {};
if (eq) { if (eq) {
@@ -50,7 +47,7 @@ const base = {
} }
} }
const slot = String((v.slot || it.getFlag(VB_MOD, "slot") || "")).toLowerCase(); const slot = String((v.slot || it.getFlag(VB_MOD, "slot") || "")).toLowerCase();
if (slot && slots.hasOwnProperty(slot)) slots[slot]++; else slots.other++; if (slot && Object.prototype.hasOwnProperty.call(slots, slot)) slots[slot]++; else slots.other++;
} }
const total = { const total = {
armour: base.armour + mods.armour, armour: base.armour + mods.armour,
@@ -61,62 +58,153 @@ const base = {
space: base.space + mods.space, space: base.space + mods.space,
power: base.power + mods.power power: base.power + mods.power
}; };
// Headroom (positive = free)
total.spaceFree = total.space; total.spaceFree = total.space;
total.powerFree = total.power; total.powerFree = total.power;
// If components encode their usage (voidship.use.{space|power})
for (const it of items) { for (const it of items) {
const use = it.system?.voidship?.use ?? {}; const use = it.system?.voidship?.use ?? {};
if (Number.isFinite(Number(use.space))) total.spaceFree -= Number(use.space); if (Number.isFinite(Number(use.space))) total.spaceFree -= Number(use.space);
if (Number.isFinite(Number(use.power))) total.powerFree -= Number(use.power); if (Number.isFinite(Number(use.power))) total.powerFree -= Number(use.power);
} }
dbg("computeDerived: base=", base, "mods=", mods, "total=", total, "slots=", slots);
return { base, mods, total, slots }; return { base, mods, total, slots };
} }
async getData(options = {}) { async getData(options) {
const data = await super.getData(options); const data = await super.getData(options);
data.isVoidship = this.isVoidship; const actor = this.actor;
data.voidship = this._computeDerived();
const hull = this.actor.getFlag(VB_MOD, "hull") || {}; // ——— FLAGS (cały namespace)
data.hull = { const ns = actor.flags?.[VB_MOD] || {};
class: hull.class || this.actor.name, const hull = ns.hull || { class: actor.name, size: "Cruiser", slots: { prow: 0, dorsal: 0, port: 0, starboard: 0, keel: 0 } };
size: hull.size || "Cruiser", const base = ns.base || { armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 };
slotsAllowed: hull.slots || { prow: 0, dorsal: 0, port: 0, starboard: 0, keel: 0 } const crew = ns.crew || { command: 1, pilot: 1, sensors: 1, engineering: 2, gunnery: 2, security: 2, flightDeck: 0, passengers: 0 };
}; const rtRaw = ns.rtRaw || {};
data.crew = this.actor.getFlag(VB_MOD, "crew") || { const rt = rtRaw.rt || {};
command: 1, pilot: 1, sensors: 1, engineering: 2,
gunnery: 2, security: 2, flightDeck: 0, passengers: 0
};
data.rtRaw = this.actor.getFlag(VB_MOD, "rtRaw") || {};
try {
data.rtRawString = JSON.stringify(data.rtRaw, null, 2);
} catch (e) {
data.rtRawString = "{}";
}
// ——— RT snapshot do karty
// expose a minimal config (labels) const rtCard = {
data.cfg = { speed: rt.speed ?? rtRaw.combat?.speed ?? 0,
labels: { manoeuvrability: rt.manoeuvrability ?? rtRaw.mnvr ?? 0,
armour: "Armour", detection: rt.detection ?? 0,
integrity: "Integrity", hullIntegrity: rt.hullIntegrity ?? rtRaw.combat?.wounds?.max ?? 0,
manoeuvre: "Manoeuvre", armour: rt.armour ?? 0,
detection: "Detection", space: rt.space ?? 0,
speed: "Speed", power: rt.power ?? 0,
space: "Space", weapons: {
power: "Power", prow: rt.weapons?.prow ?? 0,
spaceFree: "Space (free)", dorsal: rt.weapons?.dorsal ?? 0,
powerFree: "Power (free)" port: rt.weapons?.port ?? 0,
} starboard: rt.weapons?.starboard ?? 0,
keel: rt.weapons?.keel ?? 0
},
turret: rt.turret ?? 0,
notes: rtRaw.notes ?? "",
source: rt.source ?? ""
}; };
// ——— KOMPONENTY (tylko nasze)
const components = actor.items.contents
.filter(i => i.flags?.[VB_MOD]?.component?.kind)
.map(i => {
const vs = i.system?.voidship ?? i.flags?.[VB_MOD]?.voidship ?? {};
const v = foundry.utils.deepClone(vs);
v.itemId = i.id;
v.name = i.name;
v.equipped = (i.system?.equipped ?? true);
v.slot = (v.slot || "Internal");
v.use = Object.assign({ space: 0, power: 0 }, v.use);
v.mods = Object.assign({ armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 }, v.mods);
v.kind = i.flags?.[VB_MOD]?.component?.kind;
v.tags = i.flags?.[VB_MOD]?.component?.tags ?? [];
return v;
});
// ——— SUMY MODYFIKATORÓW (equipped)
const modsSum = components.reduce((acc, c) => {
if (!c.equipped) return acc;
acc.armour += Number(c.mods.armour || 0);
acc.integrity += Number(c.mods.integrity || 0);
acc.manoeuvre += Number(c.mods.manoeuvre || 0);
acc.detection += Number(c.mods.detection || 0);
acc.speed += Number(c.mods.speed || 0);
acc.space += Number(c.mods.space || 0);
acc.power += Number(c.mods.power || 0);
return acc;
}, { armour:0, integrity:0, manoeuvre:0, detection:0, speed:0, space:0, power:0 });
// ——— CAPACITY (use) dla equipped
const useTotal = components.reduce((acc, c) => {
if (!c.equipped) return acc;
acc.space += Number(c.use.space || 0);
acc.power += Number(c.use.power || 0);
return acc;
}, { space: 0, power: 0 });
// ——— TOTALS = BASE + MODS
const totals = {
armour: (Number(base.armour) || 0) + modsSum.armour,
integrity: (Number(base.integrity) || 0) + modsSum.integrity,
manoeuvre: (Number(base.manoeuvre) || 0) + modsSum.manoeuvre,
detection: (Number(base.detection) || 0) + modsSum.detection,
speed: (Number(base.speed) || 0) + modsSum.speed,
space: (Number(base.space) || 0) + modsSum.space,
power: (Number(base.power) || 0) + modsSum.power
};
totals.spaceFree = totals.space - useTotal.space;
totals.powerFree = totals.power - useTotal.power;
// ——— SLOTY (użyte vs limit)
const slotsUsed = components.reduce((acc, c) => {
if (!c.equipped) return acc;
const k = (c.slot || "Internal").toLowerCase();
if (["prow","dorsal","port","starboard","keel"].includes(k)) acc[k] = (acc[k]||0)+1;
return acc;
}, { prow:0, dorsal:0, port:0, starboard:0, keel:0 });
// ——— Ostrzeżenia + wymagania
const warnings = {};
const anySlotOver =
(slotsUsed.prow > (hull.slots?.prow || 0)) ||
(slotsUsed.dorsal > (hull.slots?.dorsal || 0)) ||
(slotsUsed.port > (hull.slots?.port || 0)) ||
(slotsUsed.starboard > (hull.slots?.starboard || 0)) ||
(slotsUsed.keel > (hull.slots?.keel || 0));
if (anySlotOver) warnings.slots = "One or more weapon slot groups exceed hull limits.";
if (totals.spaceFree < 0) warnings.capacity = "Not enough Space for installed components.";
if (totals.powerFree < 0) warnings.capacity = (warnings.capacity ? warnings.capacity + " " : "") + "Not enough Power for installed components.";
const req = (hull.requirements ?? []).map(r => ({ tag: r.tag, min: Number(r.min||0), label: r.label || r.tag }));
const haveByTag = components.reduce((acc, c) => {
if (!c.equipped) return acc;
const tags = Array.isArray(c.tags) ? c.tags : [];
for (const t of tags) acc[t] = (acc[t]||0) + 1;
return acc;
}, {});
const missing = req.filter(r => (haveByTag[r.tag]||0) < r.min);
if (missing.length) {
const list = missing.map(m => `${m.label}: ${haveByTag[m.tag]||0}/${m.min}`).join("; ");
warnings.requirements = `Missing required components → ${list}`;
}
// ——— Dane do template
data.hull = hull;
data.base = base;
data.crew = crew;
data.rtCard = rtCard;
data.components = components;
data.modsSum = modsSum;
data.totals = totals;
data.slotsUsed = slotsUsed;
data.warnings = warnings;
data.flags = actor.flags;
return data; return data;
} }
activateListeners(html) { activateListeners(html) {
super.activateListeners(html); super.activateListeners(html);
// Guard: allow sheet UI even for non-voidship, but prompt to mark
// Mark/Unmark
html.find("[data-action='mark-voidship']").on("click", async () => { html.find("[data-action='mark-voidship']").on("click", async () => {
await this.actor.setFlag(VB_MOD, "isVoidship", true); await this.actor.setFlag(VB_MOD, "isVoidship", true);
ui.notifications.info("Marked as Voidship."); ui.notifications.info("Marked as Voidship.");
@@ -127,17 +215,20 @@ try {
ui.notifications.info("Unmarked Voidship."); ui.notifications.info("Unmarked Voidship.");
this.render(true); this.render(true);
}); });
// Base config dialog
html.find("[data-action='configure-base']").on("click", async () => { html.find("[data-action='configure-base']").on("click", async () => {
const cur = this._computeDerived().base; const cur = this._computeDerived().base;
const content = ` const content = `
<div class="form-group"><label>Armour</label><input type="number" name="armour" value="${cur.armour}"/></div> <form>
<div class="form-group"><label>Integrity</label><input type="number" name="integrity" value="${cur.integrity}"/></div> <div class="form-group"><label>Armour</label><input type="number" name="armour" value="${cur.armour}"/></div>
<div class="form-group"><label>Manoeuvre</label><input type="number" name="manoeuvre" value="${cur.manoeuvre}"/></div> <div class="form-group"><label>Integrity</label><input type="number" name="integrity" value="${cur.integrity}"/></div>
<div class="form-group"><label>Detection</label><input type="number" name="detection" value="${cur.detection}"/></div> <div class="form-group"><label>Manoeuvre</label><input type="number" name="manoeuvre" value="${cur.manoeuvre}"/></div>
<div class="form-group"><label>Speed</label><input type="number" name="speed" value="${cur.speed}"/></div> <div class="form-group"><label>Detection</label><input type="number" name="detection" value="${cur.detection}"/></div>
<div class="form-group"><label>Space</label><input type="number" name="space" value="${cur.space}"/></div> <div class="form-group"><label>Speed</label><input type="number" name="speed" value="${cur.speed}"/></div>
<div class="form-group"><label>Power</label><input type="number" name="power" value="${cur.power}"/></div> <div class="form-group"><label>Space</label><input type="number" name="space" value="${cur.space}"/></div>
`; <div class="form-group"><label>Power</label><input type="number" name="power" value="${cur.power}"/></div>
</form>`;
new Dialog({ new Dialog({
title: "Voidship — Base Stats", title: "Voidship — Base Stats",
content, buttons: { content, buttons: {
@@ -146,17 +237,17 @@ try {
callback: async (html) => { callback: async (html) => {
const form = html[0].querySelector("form") || html[0]; const form = html[0].querySelector("form") || html[0];
const get = (k) => Number(form.querySelector(`[name="${k}"]`)?.value || 0); const get = (k) => Number(form.querySelector(`[name="${k}"]`)?.value || 0);
const patchBase = { const patchBase = {
armour: get("armour"), armour: get("armour"),
integrity: get("integrity"), integrity: get("integrity"),
manoeuvre: get("manoeuvre"), manoeuvre: get("manoeuvre"),
detection: get("detection"), detection: get("detection"),
speed: get("speed"), speed: get("speed"),
space: get("space"), space: get("space"),
power: get("power") power: get("power")
}; };
await this.actor.setFlag(VB_MOD, "base", patchBase); await this.actor.setFlag(VB_MOD, "base", patchBase);
this.render(true); this.render(true);
} }
}, },
cancel: { label: "Cancel" } cancel: { label: "Cancel" }
@@ -164,17 +255,142 @@ this.render(true);
default: "ok" default: "ok"
}, { jQuery: true }).render(true); }, { jQuery: true }).render(true);
}); });
// Toggle equipped
html.on("click", "[data-action='comp-toggle']", async (ev) => {
const tr = ev.currentTarget.closest("tr[data-item-id]");
const itemId = tr?.dataset.itemId;
if (!itemId) return;
const item = this.actor.items.get(itemId);
const cur = !!(item.system?.equipped ?? true);
await item.update({ "system.equipped": !cur });
this.render(true);
});
// Edit component
html.on("click", "[data-action='comp-edit']", async (ev) => {
const tr = ev.currentTarget.closest("tr[data-item-id]");
const itemId = tr?.dataset.itemId;
if (!itemId) return;
const item = this.actor.items.get(itemId);
const v = foundry.utils.deepClone(item.system?.voidship || {});
v.slot = v.slot || "Internal";
v.use = Object.assign({ space: 0, power: 0 }, v.use);
v.mods = Object.assign({ armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 }, v.mods);
const eq = (item.system?.equipped ?? true);
const slotOptions = ["Prow", "Dorsal", "Port", "Starboard", "Keel", "Internal", "Aetherics"]
.map(s => `<option value="${s}" ${v.slot === s ? "selected" : ""}>${s}</option>`).join("");
const content = `
<form>
<div class="form-group"><label>Equipped</label><input type="checkbox" name="equipped" ${eq ? "checked" : ""}/></div>
<div class="form-group"><label>Slot</label><select name="slot">${slotOptions}</select></div>
<fieldset style="margin-top:.5rem;"><legend>Use</legend>
<div class="form-group"><label>Space</label><input type="number" step="1" name="use.space" value="${v.use.space}"/></div>
<div class="form-group"><label>Power</label><input type="number" step="1" name="use.power" value="${v.use.power}"/></div>
</fieldset>
<fieldset style="margin-top:.5rem;"><legend>Mods</legend>
${["armour", "integrity", "manoeuvre", "detection", "speed", "space", "power"].map(k => `
<div class="form-group"><label>${k[0].toUpperCase() + k.slice(1)}</label>
<input type="number" step="1" name="mods.${k}" value="${v.mods[k]}"/>
</div>`).join("")}
</fieldset>
</form>`;
new Dialog({
title: `Edit Component — ${item.name}`,
content,
buttons: {
ok: {
label: "Save",
callback: async (dlg) => {
const f = dlg[0].querySelector("form");
const read = (sel, num = false) => {
const el = f.querySelector(`[name="${sel}"]`);
if (!el) return num ? 0 : "";
if (el.type === "checkbox") return el.checked;
const val = el.value ?? (el.textContent ?? "");
return num ? Number(val || 0) : val;
};
const patch = {
"system.voidship.slot": read("slot"),
"system.voidship.use.space": read("use.space", true),
"system.voidship.use.power": read("use.power", true),
"system.voidship.mods.armour": read("mods.armour", true),
"system.voidship.mods.integrity": read("mods.integrity", true),
"system.voidship.mods.manoeuvre": read("mods.manoeuvre", true),
"system.voidship.mods.detection": read("mods.detection", true),
"system.voidship.mods.speed": read("mods.speed", true),
"system.voidship.mods.space": read("mods.space", true),
"system.voidship.mods.power": read("mods.power", true),
"system.equipped": !!read("equipped")
};
await item.update(patch);
// miękka walidacja
const { total, slots } = this._computeDerived();
const flags = this.actor.getFlag(VB_MOD, "") || {};
const hull = flags.hull || { slots: { prow: 0, dorsal: 0, port: 0, starboard: 0, keel: 0 } };
const overSlots = ["prow", "dorsal", "port", "starboard", "keel"].filter(k => slots[k] > (hull.slots?.[k] || 0));
if (overSlots.length) ui.notifications.warn(`Slot limit exceeded: ${overSlots.join(", ")}`);
if (total.spaceFree < 0) ui.notifications.warn(`Not enough Space (over by ${Math.abs(total.spaceFree)})`);
if (total.powerFree < 0) ui.notifications.warn(`Not enough Power (over by ${Math.abs(total.powerFree)})`);
this.render(true);
}
},
cancel: { label: "Cancel" }
},
default: "ok"
}, { jQuery: true }).render(true);
});
// Remove
html.on("click", "[data-action='comp-remove']", async (ev) => {
const tr = ev.currentTarget.closest("tr[data-item-id]");
const itemId = tr?.dataset.itemId;
if (!itemId) return;
const item = this.actor.items.get(itemId);
new Dialog({
title: "Remove Component",
content: `<p>Remove <b>${foundry.utils.escapeHTML(item.name)}</b> from this voidship?</p>`,
buttons: {
ok: { label: "Remove", callback: () => this.actor.deleteEmbeddedDocuments("Item", [itemId]) },
cancel: { label: "Cancel" }
},
default: "ok"
}).render(true);
});
// Auto-refresh po zmianach itemów tego aktora
const refreshIfMine = (doc) => { try { if (doc?.parent?.id === this.actor?.id) this.render(false); } catch(_) {} };
Hooks.on('createItem', refreshIfMine);
Hooks.on('updateItem', refreshIfMine);
Hooks.on('deleteItem', refreshIfMine);
this.once("close", () => {
Hooks.off('createItem', refreshIfMine);
Hooks.off('updateItem', refreshIfMine);
Hooks.off('deleteItem', refreshIfMine);
});
} }
} }
// ————————————————————————————————————————————————————————————————
// INIT: helper + rejestracja sheetu + domyślki/sanitizacja
Hooks.once("init", () => { Hooks.once("init", () => {
// Register the sheet for the 'vehicle' type (W&G Vehicles via Church of Steel) if (!Handlebars.helpers.signed) {
Handlebars.registerHelper("signed", function (value) {
const n = Number(value || 0);
if (Number.isNaN(n) || n === 0) return "±0";
return (n > 0 ? "+" : "") + Math.abs(n);
});
}
Actors.registerSheet(VB_MOD, VoidshipSheet, { Actors.registerSheet(VB_MOD, VoidshipSheet, {
types: ["vehicle"], types: ["vehicle"],
makeDefault: false, makeDefault: false,
label: "Voidship (W&G)" label: "Voidship (W&G)"
}); });
// Optional: a convenient factory on game namespace
game.wgVoidships = game.wgVoidships || {}; game.wgVoidships = game.wgVoidships || {};
game.wgVoidships.createVoidship = async function (name = "New Voidship") { game.wgVoidships.createVoidship = async function (name = "New Voidship") {
const actor = await Actor.create({ name, type: "vehicle", folder: null }); const actor = await Actor.create({ name, type: "vehicle", folder: null });
@@ -182,5 +398,44 @@ Hooks.once("init", () => {
ui.notifications.info(`Voidship created: ${name}`); ui.notifications.info(`Voidship created: ${name}`);
return actor; return actor;
}; };
// Auto-domyślki dla itemów dodawanych do voidshipów
Hooks.on("preCreateItem", (item) => {
const parent = item?.parent;
if (!(parent instanceof Actor)) return;
if (parent.getFlag(VB_MOD, "isVoidship") !== true) return;
const vs = item.system?.voidship;
if (!vs) {
item.updateSource({
"system.voidship": {
slot: "Internal",
use: { space: 0, power: 0 },
mods: { armour: 0, integrity: 0, manoeuvre: 0, detection: 0, speed: 0, space: 0, power: 0 }
}
});
}
if (item.system?.equipped === undefined) item.updateSource({ "system.equipped": true });
});
// Sanitizacja liczb przy update (żeby nie trafiały NaN)
Hooks.on("preUpdateItem", (item, change) => {
const parent = item?.parent;
if (!(parent instanceof Actor)) return;
if (parent.getFlag(VB_MOD, "isVoidship") !== true) return;
const fixNum = (path) => {
const v = foundry.utils.getProperty(change, path);
if (v === undefined) return;
const n = Number(v);
foundry.utils.setProperty(change, path, Number.isFinite(n) ? n : 0);
};
[
"system.voidship.use.space", "system.voidship.use.power",
"system.voidship.mods.armour", "system.voidship.mods.integrity", "system.voidship.mods.manoeuvre",
"system.voidship.mods.detection", "system.voidship.mods.speed", "system.voidship.mods.space", "system.voidship.mods.power"
].forEach(fixNum);
});
console.log(`${VB_MOD}: VoidshipSheet registered`); console.log(`${VB_MOD}: VoidshipSheet registered`);
}); });
+2 -3
View File
@@ -3,9 +3,8 @@ Hooks.once('init', async () => {
if (typeof Handlebars?.registerHelper === "function") { if (typeof Handlebars?.registerHelper === "function") {
Handlebars.registerHelper("json", (ctx) => JSON.stringify(ctx ?? {}, null, 2)); Handlebars.registerHelper("json", (ctx) => JSON.stringify(ctx ?? {}, null, 2));
} }
await loadTemplates([ await loadTemplates(["modules/wg-voidships-builder/templates/voidship-sheet.hbs"]);
"modules/wg-voidships-builder/templates/voidship-sheet.hbs" console.debug("[VB] templates preloaded");
]);
} catch (e) { } catch (e) {
console.warn("wg-voidships-builder: init failed", e); console.warn("wg-voidships-builder: init failed", e);
} }
+201 -110
View File
@@ -1,129 +1,220 @@
<form class="voidship-sheet"> <form class="voidship-sheet">
<header class="sheet-header flexrow" style="align-items:center; gap:.5rem;"> <header class="sheet-header flexrow" style="align-items:center; gap:.5rem;">
<img class="profile" src="{{actor.img}}" width="48" height="48"/> <img class="profile" src="{{actor.img}}" width="48" height="48">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}"/></h1> <h1 class="charname"><input name="name" type="text" value="{{actor.name}}"></h1>
<div style="margin-left:auto; display:flex; gap:.5rem;"> <div style="margin-left:auto; display:flex; gap:.5rem;">
{{#if isVoidship}} <button type="button" data-action="configure-base"><i class="fas fa-cog"></i> Base</button>
<button type="button" data-action="configure-base"><i class="fas fa-cog"></i> Base</button> {{#if (eq actor.flags.wg-voidships-builder.isVoidship true)}}
<button type="button" data-action="unmark-voidship"><i class="fas fa-times-circle"></i> Unmark</button> <button type="button" data-action="unmark-voidship"><i class="fas fa-times-circle"></i> Unmark</button>
{{else}} {{else}}
<button type="button" data-action="mark-voidship"><i class="fas fa-star"></i> Mark as Voidship</button> <button type="button" data-action="mark-voidship"><i class="fas fa-check-circle"></i> Mark Voidship</button>
{{/if}} {{/if}}
</div> </div>
</header> </header>
{{#unless isVoidship}} <nav class="tabs" data-group="primary">
<section class="warning" style="margin:.5rem 0; padding:.5rem; background:#531a1a; color:#fff; border:1px solid #aa4444;"> <a class="item" data-tab="wg">W&amp;G</a>
This vehicle is not marked as a <b>Voidship</b>. Click <b>Mark as Voidship</b> to enable derived voidship stats. <a class="item" data-tab="rt">Rogue Trader</a>
</section> <a class="item" data-tab="crew">Crew</a>
{{/unless}} <a class="item" data-tab="components">Components</a>
<nav class="tabs" data-group="primary"> </nav>
<a class="item" data-tab="wg">W&amp;G</a>
<a class="item" data-tab="rt">Rogue Trader</a>
<a class="item" data-tab="crew">Crew</a>
<a class="item" data-tab="components">Components</a>
</nav>
<section class="sheet-body"> <section class="sheet-body">
<div class="tab" data-group="primary" data-tab="stats"> <!-- W&G TAB -->
<!-- W&G TAB --> <div class="tab" data-group="primary" data-tab="wg">
<div class="tab" data-group="primary" data-tab="wg"> <div class="grid grid-2col" style="gap:.5rem;">
<div class="grid grid-2col" style="gap:.5rem;"> <div class="card">
<div class="card"> <h3>Totals</h3>
<h3>Totals</h3> <ol class="properties">
<ol class="properties"> <li>Armour: <b>{{totals.armour}}</b> <small>(base {{base.armour}}, mods {{signed modsSum.armour}})</small></li>
<li>{{cfg.labels.armour}}: <b>{{voidship.total.armour}}</b></li> <li>Integrity: <b>{{totals.integrity}}</b> <small>(base {{base.integrity}}, mods {{signed modsSum.integrity}})</small></li>
<li>{{cfg.labels.integrity}}: <b>{{voidship.total.integrity}}</b></li> <li>Manoeuvre: <b>{{totals.manoeuvre}}</b> <small>(base {{base.manoeuvre}}, mods {{signed modsSum.manoeuvre}})</small></li>
<li>{{cfg.labels.manoeuvre}}: <b>{{voidship.total.manoeuvre}}</b></li> <li>Detection: <b>{{totals.detection}}</b> <small>(base {{base.detection}}, mods {{signed modsSum.detection}})</small></li>
<li>{{cfg.labels.detection}}: <b>{{voidship.total.detection}}</b></li> <li>Speed: <b>{{totals.speed}}</b> <small>(base {{base.speed}}, mods {{signed modsSum.speed}})</small></li>
<li>{{cfg.labels.speed}}: <b>{{voidship.total.speed}}</b></li> <li>Space (free/total): <b>{{totals.spaceFree}}</b> / <b>{{totals.space}}</b></li>
<li>{{cfg.labels.spaceFree}}: <b>{{voidship.total.spaceFree}}</b></li> <li>Power (free/total): <b>{{totals.powerFree}}</b> / <b>{{totals.power}}</b></li>
<li>{{cfg.labels.powerFree}}: <b>{{voidship.total.powerFree}}</b></li> </ol>
</ol> </div>
</div> <div class="card">
<div class="card"> <h3>Hull</h3>
<h3>Hull</h3> <ol class="properties">
<ol class="properties"> <li>Class: <b>{{hull.class}}</b> ({{hull.size}})</li>
<li>Class: <b>{{hull.class}}</b> ({{hull.size}})</li> <li>Slots Allowed — Prow: <b>{{hull.slots.prow}}</b>, Dorsal: <b>{{hull.slots.dorsal}}</b>, Port:
<li>Slots Allowed — Prow: <b>{{hull.slotsAllowed.prow}}</b>, Dorsal: <b>{{hull.slotsAllowed.dorsal}}</b>, Port: <b>{{hull.slotsAllowed.port}}</b>, Starboard: <b>{{hull.slotsAllowed.starboard}}</b>, Keel: <b>{{hull.slotsAllowed.keel}}</b></li> <b>{{hull.slots.port}}</b>, Starboard: <b>{{hull.slots.starboard}}</b>, Keel: <b>{{hull.slots.keel}}</b>
</ol> </li>
</div> </ol>
</div> </div>
<hr/> </div>
<div class="grid grid-2col" style="gap:.5rem;">
<div class="card">
<h3>Base (flags)</h3>
<ol class="properties">
<li>{{cfg.labels.armour}}: <b>{{voidship.base.armour}}</b></li>
<li>{{cfg.labels.integrity}}: <b>{{voidship.base.integrity}}</b></li>
<li>{{cfg.labels.manoeuvre}}: <b>{{voidship.base.manoeuvre}}</b></li>
<li>{{cfg.labels.detection}}: <b>{{voidship.base.detection}}</b></li>
<li>{{cfg.labels.speed}}: <b>{{voidship.base.speed}}</b></li>
<li>{{cfg.labels.space}}: <b>{{voidship.base.space}}</b></li>
<li>{{cfg.labels.power}}: <b>{{voidship.base.power}}</b></li>
</ol>
</div>
<div class="card">
<h3>Mods (items)</h3>
<ol class="properties">
<li>{{cfg.labels.armour}}: <b>{{voidship.mods.armour}}</b></li>
<li>{{cfg.labels.integrity}}: <b>{{voidship.mods.integrity}}</b></li>
<li>{{cfg.labels.manoeuvre}}: <b>{{voidship.mods.manoeuvre}}</b></li>
<li>{{cfg.labels.detection}}: <b>{{voidship.mods.detection}}</b></li>
<li>{{cfg.labels.speed}}: <b>{{voidship.mods.speed}}</b></li>
<li>{{cfg.labels.space}}: <b>{{voidship.mods.space}}</b></li>
<li>{{cfg.labels.power}}: <b>{{voidship.mods.power}}</b></li>
</ol>
</div>
</div>
</div>
<!-- ROGUE TRADER TAB -->
<div class="tab" data-group="primary" data-tab="rt">
<div class="card">
<h3>RT Raw (read-only snapshot)</h3>
<p style="opacity:.8">Original RT-ish data preserved under <code>flags.wg-voidships-builder.rtRaw</code> for conversion mapping (next step).</p>
<pre style="max-height:240px; overflow:auto;">{{rtRawString}}</pre>
</div>
</div>
<!-- CREW TAB -->
<div class="tab" data-group="primary" data-tab="crew">
<div class="grid grid-2col" style="gap:.5rem;">
<div class="card">
<h3>Main Roles</h3>
<ol class="properties">
<li>Command: <b>{{crew.command}}</b></li>
<li>Pilot/Helm: <b>{{crew.pilot}}</b></li>
<li>Sensors/Auspex: <b>{{crew.sensors}}</b></li>
<li>Engineering: <b>{{crew.engineering}}</b></li>
</ol>
</div>
<div class="card">
<h3>Combat & Support</h3>
<ol class="properties">
<li>Gunnery: <b>{{crew.gunnery}}</b></li>
<li>Security/Armsmen: <b>{{crew.security}}</b></li>
<li>Flight Deck: <b>{{crew.flightDeck}}</b></li>
<li>Passengers: <b>{{crew.passengers}}</b></li>
</ol>
</div>
</div>
</div>
{{#if warnings.capacity}}
<p class="warning" style="color:#b45309; margin:.25rem 0 0;">{{warnings.capacity}}</p>
{{/if}}
{{#if warnings.slots}}
<p class="warning" style="color:#b45309; margin:.25rem 0 0;">{{warnings.slots}}</p>
{{/if}}
{{#if warnings.requirements}}
<p class="warning" style="color:#b91c1c; margin:.25rem 0 0;">{{warnings.requirements}}</p>
{{/if}}
<hr>
<div class="grid grid-2col" style="gap:.5rem;">
<div class="card">
<h3>Base (flags)</h3>
<ol class="properties">
<li>Armour: <b>{{base.armour}}</b></li>
<li>Integrity: <b>{{base.integrity}}</b></li>
<li>Manoeuvre: <b>{{base.manoeuvre}}</b></li>
<li>Detection: <b>{{base.detection}}</b></li>
<li>Speed: <b>{{base.speed}}</b></li>
<li>Space: <b>{{base.space}}</b></li>
<li>Power: <b>{{base.power}}</b></li>
</ol>
</div>
<div class="card">
<h3>Mods (items)</h3>
<ol class="properties">
<li>Armour: <b>{{signed modsSum.armour}}</b></li>
<li>Integrity: <b>{{signed modsSum.integrity}}</b></li>
<li>Manoeuvre: <b>{{signed modsSum.manoeuvre}}</b></li>
<li>Detection: <b>{{signed modsSum.detection}}</b></li>
<li>Speed: <b>{{signed modsSum.speed}}</b></li>
<li>Space: <b>{{signed modsSum.space}}</b></li>
<li>Power: <b>{{signed modsSum.power}}</b></li>
</ol>
</div>
</div>
</div> </div>
<!-- ROGUE TRADER TAB -->
<div class="tab" data-group="primary" data-tab="rt">
<div class="grid grid-2col" style="gap:.75rem;">
<div class="card">
<h3>RT — Stat Block</h3>
<ol class="properties">
<li><span>Speed</span> <b>{{rtCard.speed}}</b></li>
<li><span>Manoeuvrability</span> <b>{{rtCard.manoeuvrability}}</b></li>
<li><span>Detection</span> <b>{{rtCard.detection}}</b></li>
<li><span>Hull Integrity</span> <b>{{rtCard.hullIntegrity}}</b></li>
<li><span>Armour</span> <b>{{rtCard.armour}}</b></li>
<li><span>Space</span> <b>{{rtCard.space}}</b></li>
<li><span>Power</span> <b>{{rtCard.power}}</b></li>
<li><span>Turret</span> <b>{{rtCard.turret}}</b></li>
</ol>
{{#if rtCard.source}}
<p class="notes" style="margin-top:.25rem; opacity:.65;">Source: {{rtCard.source}}</p>
{{/if}}
</div>
<div class="card">
<h3>RT — Weapon Capacity</h3>
<ol class="properties">
<li>Prow: <b>{{rtCard.weapons.prow}}</b></li>
<li>Dorsal: <b>{{rtCard.weapons.dorsal}}</b></li>
<li>Port: <b>{{rtCard.weapons.port}}</b></li>
<li>Starboard: <b>{{rtCard.weapons.starboard}}</b></li>
<li>Keel: <b>{{rtCard.weapons.keel}}</b></li>
</ol>
{{#if rtCard.notes}}
<hr><p style="opacity:.85">{{rtCard.notes}}</p>
{{/if}}
</div>
</div>
</div>
<!-- CREW TAB -->
<div class="tab" data-group="primary" data-tab="crew">
<div class="grid grid-2col" style="gap:.5rem;">
<div class="card">
<h3>Main Roles</h3>
<ol class="properties">
<li>Command: <b>{{crew.command}}</b></li>
<li>Pilot/Helm: <b>{{crew.pilot}}</b></li>
<li>Sensors/Auspex: <b>{{crew.sensors}}</b></li>
<li>Engineering: <b>{{crew.engineering}}</b></li>
</ol>
</div>
<div class="card">
<h3>Combat &amp; Support</h3>
<ol class="properties">
<li>Gunnery: <b>{{crew.gunnery}}</b></li>
<li>Security/Armsmen: <b>{{crew.security}}</b></li>
<li>Flight Deck: <b>{{crew.flightDeck}}</b></li>
<li>Passengers: <b>{{crew.passengers}}</b></li>
</ol>
</div>
</div>
</div>
<!-- COMPONENTS TAB -->
<div class="tab" data-group="primary" data-tab="components"> <div class="tab" data-group="primary" data-tab="components">
<section> <div class="grid grid-2col" style="gap:.75rem;">
<p>Mounted items are read from the Actor's inventory. For best results, put per-component data in <code>item.system.voidship</code>:</p> <div class="card">
<pre>{ <h3>Capacity</h3>
"slot": "Prow|Dorsal|Port|Starboard|Keel", <ol class="properties">
"mods": { "armour":0, "integrity":0, "manoeuvre":0, "detection":0, "speed":0, "space":0, "power":0 }, <li>Space (free / total): <b>{{totals.spaceFree}}</b> / <b>{{totals.space}}</b></li>
"use": { "space":0, "power":0 } <li>Power (free / total): <b>{{totals.powerFree}}</b> / <b>{{totals.power}}</b></li>
}</pre> </ol>
</section> {{#if warnings.capacity}}<p class="warning" style="color:#b45309; margin-top:.25rem;">{{warnings.capacity}}</p>{{/if}}
<hr>
<h3>Slots Used</h3>
<ol class="properties">
<li>Prow: <b>{{slotsUsed.prow}}</b> / <b>{{hull.slots.prow}}</b></li>
<li>Dorsal: <b>{{slotsUsed.dorsal}}</b> / <b>{{hull.slots.dorsal}}</b></li>
<li>Port: <b>{{slotsUsed.port}}</b> / <b>{{hull.slots.port}}</b></li>
<li>Starboard: <b>{{slotsUsed.starboard}}</b> / <b>{{hull.slots.starboard}}</b></li>
<li>Keel: <b>{{slotsUsed.keel}}</b> / <b>{{hull.slots.keel}}</b></li>
</ol>
{{#if warnings.slots}}<p class="warning" style="color:#b45309; margin-top:.25rem;">{{warnings.slots}}</p>{{/if}}
{{#if warnings.requirements}}<p class="warning" style="color:#b91c1c; margin-top:.25rem;">{{warnings.requirements}}</p>{{/if}}
</div>
<div class="card">
<h3>Mounted Components</h3>
{{#if components.length}}
<table class="table" style="width:100%;">
<thead>
<tr>
<th style="text-align:left;">Name</th>
<th>Slot</th>
<th>Use</th>
<th>Mods</th>
<th style="width:90px;">Actions</th>
</tr>
</thead>
<tbody>
{{#each components as |c|}}
<tr data-item-id="{{c.itemId}}">
<td style="text-align:left;">
{{#if c.equipped}}<i class="fa-solid fa-plug" title="Equipped"></i>{{else}}<i class="fa-regular fa-square" title="Unequipped"></i>{{/if}}
{{c.name}}
</td>
<td style="text-align:center;">{{c.slot}}</td>
<td style="text-align:center;"><small>Space: {{c.use.space}}, Power: {{c.use.power}}</small></td>
<td>
<small>
{{#if c.mods.armour}}Armour {{signed c.mods.armour}} {{/if}}
{{#if c.mods.integrity}}Integrity {{signed c.mods.integrity}} {{/if}}
{{#if c.mods.manoeuvre}}Manoeuvre {{signed c.mods.manoeuvre}} {{/if}}
{{#if c.mods.detection}}Detection {{signed c.mods.detection}} {{/if}}
{{#if c.mods.speed}}Speed {{signed c.mods.speed}} {{/if}}
{{#if c.mods.space}}Space {{signed c.mods.space}} {{/if}}
{{#if c.mods.power}}Power {{signed c.mods.power}} {{/if}}
</small>
</td>
<td style="text-align:center;">
<a class="control" data-action="comp-toggle" title="Toggle Equipped"><i class="fa-solid fa-power-off"></i></a>
<a class="control" data-action="comp-edit" title="Edit Component"><i class="fa-solid fa-pen-to-square"></i></a>
<a class="control" data-action="comp-remove" title="Remove"><i class="fa-solid fa-trash"></i></a>
</td>
</tr>
{{/each}}
</tbody>
</table>
{{else}}
<p style="opacity:.7">No components installed. Add items with <code>item.system.voidship</code> set.</p>
{{/if}}
</div>
</div>
</div> </div>
</section> </section>
</form> </form>