From 1c80b743ef1357c1da1cc6ecd1c07857a50d8f6c Mon Sep 17 00:00:00 2001 From: Michal Tuszowski Date: Tue, 16 Sep 2025 16:37:42 +0200 Subject: [PATCH] 12 --- .../packs/wg-voidship-archeotech.db | 5 ++ .../packs/wg-voidship-items.db | 50 +++++++++++++++++-- .../packs/wg-voidship-macros.db | 8 ++- .../packs/wg-voidship-xenos.db | 5 ++ .../packs/wg-voidships-macros.db | 8 --- 5 files changed, 64 insertions(+), 12 deletions(-) delete mode 100644 wg-voidships-foundry/packs/wg-voidships-macros.db diff --git a/wg-voidships-foundry/packs/wg-voidship-archeotech.db b/wg-voidships-foundry/packs/wg-voidship-archeotech.db index 46d8736..3224210 100644 --- a/wg-voidships-foundry/packs/wg-voidship-archeotech.db +++ b/wg-voidships-foundry/packs/wg-voidship-archeotech.db @@ -5,3 +5,8 @@ {"_id":"b1d5aa8f4a6b2e1a","name":"Gyro-Stabilization Matrix","type":"gear","img":null,"system":{"description":"Deep-keel stabilisers and vanes governed by pre-Imperial machine-logic; lessen recoil and improve tracking solutions.","keywords":"VOIDSHIP, ARCHEOTECH, MANOEUVRE","value":0,"rarity":"very rare","source":"Archeotech Components (RT)"}} {"_id":"9e875efc3b2a4d1c","name":"Staravar Laser Macrobattery","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,"melee":1,"thrown":null},"salvo":2,"traits":{"list":[{"name":"volley","rating":"2"}]},"description":"Archeotech laser batteries from the Staravar school, famed for peerless coherence and range.","keywords":"VOIDSHIP, ARCHEOTECH, MACROLASERS","source":"Archeotech Components (RT)"}} {"_id":"4a3d2c1b0e9f8a77","name":"Star-Flare Lance","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,"melee":1,"thrown":null},"salvo":2,"traits":{"list":[{"name":"lance","rating":"-"}]},"description":"A lance emitter of pre-Imperial refinement; slices armour with unsettling ease and little thermal bloom.","keywords":"VOIDSHIP, ARCHEOTECH, LANCE","source":"Archeotech Components (RT)"}} +{"_id":"arch-ancient-life-sustainer","name":"Ancient Life Sustainer","type":"gear","img":null,"system":{"description":"Archaiczny, wysokoefektywny podtrzymywacz życia z rozległą siecią przewodów i oczyszczaczy. Podnosi morale załogi i ogranicza straty załogi od nie-bojowych przyczyn; pełni rolę Life Sustainer.","keywords":"VOIDSHIP, ARCHEOTECH, LIFE-SUSTAINER","rarity":"extremely rare","source":"RT Core (205–210)"}} +{"_id":"arch-modified-drive","name":"Modified Drive","type":"gear","img":null,"system":{"description":"Starożytny napęd STC z egzotycznych materiałów i nietypowej konstrukcji. Zwiększa prędkość okrętu, a jednocześnie ogranicza zajmowaną przestrzeń napędu; kapryśny w eksploatacji.","keywords":"VOIDSHIP, ARCHEOTECH, DRIVE","rarity":"extremely rare","source":"RT Core (205–210)"}} +{"_id":"arch-bridge-of-antiquity","name":"Bridge of Antiquity","type":"gear","img":null,"system":{"description":"Mostek-relikt z epok przedimperialnych: rozbudowane loże dowódcze, antyczne interfejsy i sakralne pulpita. Ułatwia koordynację działań i przegląd sensorażu.","keywords":"VOIDSHIP, ARCHEOTECH, BRIDGE","rarity":"extremely rare","source":"RT Core (205–210)"}} +{"_id":"arch-auto-logis-targeter","name":"Auto-stabilised Logis-targeter (Archeotech)","type":"gear","img":null,"system":{"description":"Zabytek mechanologicznym – stabilizowane cogitatory balistyczne, które poprawiają celność baterii makro i zgrywają ogień z rozwiązaniami mostka.","keywords":"VOIDSHIP, ARCHEOTECH, GUNNERY","rarity":"extremely rare","source":"RT Core (205–210)"}} +{"_id":"arch-teleportarium","name":"Teleportarium (Archeotech)","type":"gear","img":null,"system":{"description":"Krótkozasięgowy translator materii. Umożliwia błyskawiczne naloty abordażowe i ewakuację; obciążony ciężkimi restrykcjami i ryzykiem.","keywords":"VOIDSHIP, ARCHEOTECH, BOARDING","rarity":"extremely rare","source":"RT Core (205–210)"}} diff --git a/wg-voidships-foundry/packs/wg-voidship-items.db b/wg-voidships-foundry/packs/wg-voidship-items.db index 3bc306f..7e45d39 100644 --- a/wg-voidships-foundry/packs/wg-voidship-items.db +++ b/wg-voidships-foundry/packs/wg-voidship-items.db @@ -1,9 +1,9 @@ {"_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": "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": "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": "c0e76cf8e4a100c0", "name": "Torpedo Tubes", "type": "gear", "img": null, "system": {"description": "Bow torpedo tubes (ordnance).", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ORDNANCE"}} -{"_id": "60951ef378ddb44c", "name": "Launch Bay", "type": "gear", "img": null, "system": {"description": "Attack craft wings.", "value": 0, "rarity": "rare", "keywords": "VOIDSHIP, ORDNANCE"}} -{"_id": "24c79e9c9ee464af", "name": "Nova Cannon", "type": "gear", "img": null, "system": {"description": "Superheavy ordnance; GM adjudication.", "value": 0, "rarity": "veryRare", "keywords": "VOIDSHIP, ORDNANCE"}} +{"_id": "c0e76cf8e4a100c0","name":"Torpedo Tubes","type":"weapon","img":null,"system":{"category":"ranged","description":"Torpedowe wyrzutnie okrętowe. Test Gunnery (BS) vs DEF celu; statystyki trafienia (DMG/AP/ED, ewentualne efekty specjalne) wynikają z wybranej głowicy torpedy (payload). Cel może być broniony przez TUR (intercept). Zasięgi rozpatruj wg kategorii (Contact/Close/Medium/Long/Extreme).","keywords":"VOIDSHIP, ORDNANCE, TORPEDO, PAYLOAD-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},"traits":{"list":[{"name":"payload","rating":"torpedo warhead"},{"name":"interceptable","rating":"TUR"},{"name":"ordnance","rating":"-"}]},"install":{"notes":"DMG/AP/ED wg wpisu głowicy (Standard/Plasma/Melta/Virus/Vortex/Guided)."}}} +{"_id": "60951ef378ddb44c","name":"Launch Bay","type":"weapon","img":null,"system":{"category":"ranged","description":"Zatoki startowe dla skrzydeł (Fury/Starhawk/Assault Boats). Test Gunnery (BS) vs DEF celu lub manewry CAP/Intercept/Bombing/Assault wg opisu skrzydła. Obrażenia/efekty zależne od składu skrzydła (payload). Interakcje z TUR przy przechwytywaniu.","keywords":"VOIDSHIP, CARRIER, CRAFT, PAYLOAD-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},"traits":{"list":[{"name":"carrier","rating":"wings"},{"name":"payload","rating":"craft loadout"},{"name":"interceptable","rating":"TUR"}]},"install":{"notes":"Efekty zależne od skrzydła (CAP/Intercept/Bombing/Assault)."}}} +{"_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": "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": "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"}} @@ -30,3 +30,47 @@ {"_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. 161–162"}} +{"_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. 161–162"}} +{"_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. 161–162"}} +{"_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. 161–162"}} +{"_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. 161–162"}} +{"_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. 161–162"}} +{"_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. 162–163"}} +{"_id":"a1b2c3d4e5f60123","name":"Torpedo Warhead — Standard","type":"gear","img":null,"system":{"description":"Standardowa głowica torpedy: zrównoważone obrażenia i przebicie. Interceptowalna przez TUR.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO","rarity":"uncommon","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":0,"notes":"Test Gunnery (BS) vs DEF; może być przechwycone przez TUR."},"damage":{"base":14,"ed":3,"ap":-2},"traits":["ordnance","interceptable:TUR"],"special":"Brak efektów dodatkowych."}}} +{"_id":"b2c3d4e5f6a70124","name":"Torpedo Warhead — Plasma","type":"gear","img":null,"system":{"description":"Plazmowa głowica: silna saturacja energią, dobra na tarcze.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO, PLASMA","rarity":"rare","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":0,"notes":"+1 ED przeciw celom z aktywnymi SHD."},"damage":{"base":12,"ed":5,"ap":-2},"traits":["ordnance","interceptable:TUR","anti-shield:+1ED"],"special":"+1 ED jeśli cel ma SHD>0."}}} +{"_id":"c3d4e5f6a7b80125","name":"Torpedo Warhead — Melta","type":"gear","img":null,"system":{"description":"Melta: ekstremalne przebicie pancerza i niszczące uderzenie z bliska.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO, MELTA","rarity":"rare","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":0,"notes":"W zasięgu Contact/Close: +2 ED."},"damage":{"base":18,"ed":2,"ap":-4},"traits":["ordnance","interceptable:TUR","melta:+2ED@Close"],"special":"+2 ED w Contact/Close; potężne AP."}}} +{"_id":"d4e5f6a7b8c90126","name":"Torpedo Warhead — Virus","type":"gear","img":null,"system":{"description":"Wirusowa: minimalne obrażenia kadłuba, za to dewastuje załogę i automaty okrętu.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO, VIRUS","rarity":"very rare","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":0,"notes":"Pełne efekty tylko na celach z wyłączonymi SHD lub po przebiciu SHD."},"damage":{"base":4,"ed":0,"ap":0},"traits":["ordnance","interceptable:TUR","crew-killer"],"special":"On Hit (bez SHD): cel traci 1 stopień CR; na 6 na Wrath die → dodatkowe -1 CR."}}} +{"_id":"e5f6a7b8c9d00127","name":"Torpedo Warhead — Vortex","type":"gear","img":null,"system":{"description":"Worteksowa: mikroszczelina Osnowy rozrywająca cel i przestrzeń wokół.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO, VORTEX","rarity":"extremely rare","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":-1,"notes":"Trudniejszy strzał; niektóre MG mogą wymagać Lock-On."},"damage":{"base":20,"ed":6,"ap":-5},"traits":["ordnance","interceptable:TUR","blast:1VU"],"special":"On Crit: dodatkowy d66 Crit i Blast 1 VU wokół punktu trafienia."}}} +{"_id":"f6a7b8c9d0e10128","name":"Torpedo Warhead — Guided","type":"gear","img":null,"system":{"description":"Naprowadzana: inteligentna głowica o lepszej celności i mniejszej podatności na TUR.","keywords":"VOIDSHIP, PAYLOAD, TORPEDO, GUIDED","rarity":"rare","source":"Voidships W&G — payloads","payload":{"mount":"torpedo","attack":{"bonus":"+1k","notes":"Atak z +1k lub przerzut 1 nieudanego kości."},"damage":{"base":14,"ed":3,"ap":-2},"traits":["ordnance","guided","interceptable:TUR-1"],"special":"TUR przeciwnika ma -1 do testów przechwytu tej torpedy."}}} +{"_id":"a7b8c9d0e1f20129","name":"Wing Loadout — Fury Interceptors","type":"gear","img":null,"system":{"description":"Myśliwce przechwytujące: CAP/Intercept, osłona własnych jednostek i neutralizacja craftów/torped.","keywords":"VOIDSHIP, PAYLOAD, WING, FURY, INTERCEPT","rarity":"uncommon","source":"Voidships W&G — payloads","payload":{"mount":"launch-bay","role":"intercept","attack":{"bonus":0,"notes":"Przy Intercept przeciw craft/torpedom: +2 do testu i wymuś przeciwnikowi -1k."},"damage":{"base":8,"ed":2,"ap":-1},"traits":["carrier-wing","cap","intercept:+2"],"special":"Gdy pełnią CAP: sojuszniczy DEF +1 przeciwko craft/torpedom na 1 VU."}}} +{"_id":"b8c9d0e1f2a3012a","name":"Wing Loadout — Starhawk Bombers","type":"gear","img":null,"system":{"description":"Bombowce: klasyczne Bombing runy przeciw okrętom; wysokie ED i przebicie.","keywords":"VOIDSHIP, PAYLOAD, WING, STARHAWK, BOMBING","rarity":"uncommon","source":"Voidships W&G — payloads","payload":{"mount":"launch-bay","role":"bombing","attack":{"bonus":0,"notes":"Atak vs DEF; obrona: TUR Intercept. Przy udanym Intercept przeciwnika: -1 trafienie (min 0)."},"damage":{"base":12,"ed":4,"ap":-2},"traits":["carrier-wing","bombing","interceptable:TUR"],"special":"Jeśli cel ma SHD>0, dodaj +1 ED (ładunki EMP/penetrujące)." }}} +{"_id":"c9d0e1f2a3b4012b","name":"Wing Loadout — Assault Boats","type":"gear","img":null,"system":{"description":"Łodzie abordażowe: dostarczają zespoły szturmowe na pokład przeciwnika.","keywords":"VOIDSHIP, PAYLOAD, WING, ASSAULT, BOARDING","rarity":"uncommon","source":"Voidships W&G — payloads","payload":{"mount":"launch-bay","role":"assault","attack":{"bonus":0,"notes":"Zamiast DMG uruchamia procedurę Boarding (Close/Contact). +2 do pierwszej fazy Boarding, jeśli dotarły bez strat."},"damage":{"base":0,"ed":0,"ap":0},"traits":["carrier-wing","assault-boats","boarding"],"special":"On Success: w pierwszej rundzie abordażu drużyny atakujące mają +2 do testów (Leadership/Pilot/Combat wg systemu stołu)."}}} diff --git a/wg-voidships-foundry/packs/wg-voidship-macros.db b/wg-voidships-foundry/packs/wg-voidship-macros.db index e0281bf..f39e971 100644 --- a/wg-voidships-foundry/packs/wg-voidship-macros.db +++ b/wg-voidships-foundry/packs/wg-voidship-macros.db @@ -1,4 +1,10 @@ -{"_id": "4be25d217b8dd9de", "name": "Add Gear to Selected Voidship", "type": "script", "img": "icons/svg/plus.svg", "command": "(async ()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const pack=game.packs.get('wg-voidships-builder.wg-voidship-items'); if(!pack) return ui.notifications.error('Items pack not found.'); const index=await pack.getIndex(); const names=index.map(e=>e.name).sort(); const opts=names.map(n=>``).join(''); const content=`

Choose items to add (Ctrl/Cmd+Click):

`; new Dialog({title:'Add Gear', content, buttons:{ok:{label:'Add',callback:async html=>{const sel=[...html[0].querySelector('#it').selectedOptions].map(o=>o.value); const docs=await pack.getDocuments({name:{$in:sel}}); const data=docs.map(d=>d.toObject()); await a.createEmbeddedDocuments('Item', data); ui.notifications.info(`Added ${sel.length} item(s) to ${a.name}.`);}}}}).render(true);})();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id":"4be25d217b8dd9de","name":"Add Gear to Selected Voidship","type":"script","img":"icons/svg/plus.svg","scope":"global","author":null,"ownership":{"default":2},"command":"(async ()=>{const a=canvas.tokens?.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const pack=game.packs.get('wg-voidships-builder.wg-voidship-items'); if(!pack) return ui.notifications.error('Items pack not found.'); // 1) Pobierz index z nazwami i ID\nconst index=await pack.getIndex({fields:['name']}); const names=[...index].map(e=>e.name); names.sort((x,y)=>x.localeCompare(y)); const opts=names.map(n=>``).join(''); const content=`

Choose items to add (Ctrl/Cmd+Click):

`; new Dialog({title:'Add Gear', content, buttons:{ok:{label:'Add',callback:async html=>{const sel=[...html[0].querySelector('#it').selectedOptions].map(o=>o.value); if(!sel.length) return; // 2) Zamień nazwy na ID z indexu\nconst idByName={}; for(const e of index) idByName[e.name]=e._id; const ids=sel.map(n=>idByName[n]).filter(Boolean); if(!ids.length){ui.notifications.warn('Nothing matched selection IDs.');return;} // 3) Pobierz dokumenty po ID i dodaj do aktora\nconst docs=await pack.getDocuments(ids); const data=docs.map(d=>d.toObject()); const created=await a.createEmbeddedDocuments('Item', data); ui.notifications.info(`Added ${created.length}/${sel.length} item(s) to ${a.name}.`);}}}}).render(true);})();"} {"_id": "41ade68c839678fa", "name": "Remove All Gear (Selected)", "type": "script", "img": "icons/svg/trash.svg", "command": "(async()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const ids=a.items.filter(i=>['gear','weapon'].includes(i.type)).map(i=>i.id); if(!ids.length) return ui.notifications.info('No gear/weapon items to remove.'); await a.deleteEmbeddedDocuments('Item', ids); ui.notifications.info(`Removed ${ids.length} items from ${a.name}.`);})();", "scope": "global", "author": null, "ownership": {"default": 2}} {"_id": "5079989f359a3c3d", "name": "Toggle Geller (Primary/Reserve)", "type": "script", "img": "icons/svg/aura.svg", "command": "(async()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const g=a.getFlag('wg-voidships','geller')||{primaryActive:false,reserveActive:false}; const content=`

Primary:

Reserve:

`; new Dialog({title:'Geller Fields',content,buttons:{ok:{label:'Set',callback:async html=>{const p=html[0].querySelector('#p').checked; const r=html[0].querySelector('#r').checked; await a.setFlag('wg-voidships','geller',{primaryActive:p,reserveActive:r}); ChatMessage.create({content:`${a.name}: Geller Primary ${p?'ON':'OFF'} / Reserve ${r?'ON':'OFF'}`});}}}}).render(true);})();", "scope": "global", "author": null, "ownership": {"default": 2}} {"_id": "6a4bc2349dda4733", "name": "Organize Builder Compendia Folders", "type": "script", "img": "icons/svg/folder.svg", "command": "(async ()=>{\n const moduleId = \"wg-voidships-builder\";\n const packs = {\n items: game.packs.get(`${moduleId}.wg-voidship-items`),\n hulls: game.packs.get(`${moduleId}.wg-voidship-hulls`)\n };\n async function ensureFolder(pack, name) {\n await pack.getIndex();\n const typeName = pack.documentName; // \"Item\" or \"Actor\"\n const existing = pack.folders.find(f => f.name === name);\n if (existing) return existing;\n return Folder.create({ name, type: typeName, sorting: \"a\" }, { pack: pack.collection });\n }\n // Items\n if (packs.items) {\n const fWeapons = await ensureFolder(packs.items, \"Weapons\");\n const fEssential = await ensureFolder(packs.items, \"Essential Components\");\n const fSupplemental = await ensureFolder(packs.items, \"Supplemental Components\");\n const fOrdnance = await ensureFolder(packs.items, \"Ordnance\");\n const docs = await packs.items.getDocuments();\n for (const d of docs) {\n const kw = String(d.system?.keywords ?? \"\").toUpperCase();\n let folder = fSupplemental;\n if (d.type === \"weapon\") folder = fWeapons;\n else if (kw.includes(\"ESSENTIAL\")) folder = fEssential;\n else if (kw.includes(\"ORDNANCE\")) folder = fOrdnance;\n if (!d.folder || d.folder.id !== folder.id) {\n await d.update({ folder: folder.id }, { pack: packs.items.collection });\n }\n }\n }\n // Hulls\n if (packs.hulls) {\n const fHulls = await ensureFolder(packs.hulls, \"Hulls\");\n const docs = await packs.hulls.getDocuments();\n for (const d of docs) {\n if (!d.folder || d.folder.id !== fHulls.id) {\n await d.update({ folder: fHulls.id }, { pack: packs.hulls.collection });\n }\n }\n }\n ui.notifications.info(\"Voidships Builder: Compendium folders organized.\");\n})();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id": "a68969a2ac5a2855", "name": "Import Voidships", "type": "script", "img": "icons/svg/sword.svg", "command": "game.wgVoidshipsMacros.importVoidships();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id": "72e2ff46870f2723", "name": "Create Voidship Crit Table (d66)", "type": "script", "img": "icons/svg/d20-black.svg", "command": "game.wgVoidshipsMacros.createCritTable();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id": "9c4931885b529b9c", "name": "Apply Voidship Hit", "type": "script", "img": "icons/svg/splash.svg", "command": "game.wgVoidshipsMacros.applyHit();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id": "473e9b2b97086116", "name": "Recharge Void Shields", "type": "script", "img": "icons/svg/regen.svg", "command": "game.wgVoidshipsMacros.rechargeShields();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id": "dfd9ef292fb3774f", "name": "Set Void Shields", "type": "script", "img": "icons/svg/aura.svg", "command": "game.wgVoidshipsMacros.setShields();", "scope": "global", "author": null, "ownership": {"default": 2}} +{"_id":"6f2a9b8c7d6e5f40","name":"Payload → Apply/Revert","type":"script","img":"icons/commodities/tech/cog-brass.webp","scope":"global","author":null,"ownership":{"default":2},"command":"(async()=>{function T(s){const t=String(s??\"\").split(\":\");return{name:t[0].trim(),rating:(t[1]||\"-\").trim()}};const actor=canvas.tokens?.controlled[0]?.actor??game.user?.character; if(!actor){ui.notifications.warn(\"Select a token or open an actor sheet.\");return;} const weapons=actor.items.filter(i=>i.type===\"weapon\"&&(((i.system?.traits?.list)||[]).some(t=>((t.name||\"\").toLowerCase()).includes(\"payload\"))||[\"torpedo tubes\",\"launch bay\"].includes((i.name||\"\").toLowerCase()))); if(!weapons.length){ui.notifications.warn(\"No payload-capable weapons on actor.\");return;} const packs=game.packs.filter(p=>p.documentName===\"Item\"&&/^wg-voidship-/.test(p.metadata?.name||p.metadata?.id||\"\")); const PL=[]; for(const p of packs){try{const docs=await p.getDocuments(); for(const d of docs){const pl=d.system?.payload; if(pl) PL.push({name:d.name,id:d.uuid,mount:pl.mount,data:d})}}catch(e){console.warn(e)}} for(const it of actor.items.filter(i=>i.type==='gear'&&i.system?.payload)){PL.push({name:`${it.name} (owned)`,id:it.uuid,mount:it.system.payload.mount,data:it})} const wOpts=weapons.map(w=>``).join(\"\"); function payloadOpts(m){const o=PL.filter(p=>p.mount===m).map(p=>``).join(\"\");return o||``} let mount='torpedo'; const dlg=new Dialog({title:\"Apply Payload to Weapon\",content:`

Payloady są w kompendiach wg-voidship-*. Możesz też mieć je w ekwipunku aktora.

`,render:html=>{const $w=html.find(\"select[name='weapon']\"); const setList=()=>{const wid=$w.val(); const w=actor.items.get(wid); const nm=(w?.name||\"\").toLowerCase(); mount=nm.includes('torpedo')? 'torpedo' : (nm.includes('launch bay')? 'launch-bay' : (((w?.system?.traits?.list)||[]).some(t=>((t.name||\"\").toLowerCase()).includes(\"torpedo\"))? 'torpedo' : 'launch-bay')); html.find(\"select[name='payload']\").html(payloadOpts(mount))}; $w.on('change',setList); setList()},buttons:{apply:{label:\"Apply\",callback:async html=>{const wid=html.find(\"select[name='weapon']\").val(); const uuid=(html.find(\"input[name='uuid']\").val()||\"\").trim(); let pid=html.find(\"select[name='payload']\").val(); let doc=null; try{if(uuid) doc=await fromUuid(uuid)}catch(e){console.warn(e)} if(!doc&&pid) doc=await fromUuid(pid); if(!doc){ui.notifications.error(\"No valid payload selected.\");return;} const pl=doc.system?.payload; if(!pl||!['torpedo','launch-bay'].includes(pl.mount)){ui.notifications.error(\"Selected item has no compatible payload data.\");return;} const w=actor.items.get(wid); const backup={name:w.name,damage:w.system?.damage,traits:w.system?.traits,keywords:w.system?.keywords,description:w.system?.description}; await w.update({\"flags.wgvoid.payloadBackup\":backup,\"flags.wgvoid.payloadRef\":doc.uuid}); const base=Array.isArray(w.system?.traits?.list)?w.system.traits.list:[]; const kept=base.filter(t=>((t.name||\"\").toLowerCase()).indexOf(\"payload\")==-1); const newTraits=[...kept,...(pl.traits||[]).map(T),{name:\"payload-applied\",rating:doc.name}]; const dm=pl.damage||{}; const note=`
Payload: ${doc.name}
${doc.system?.description||''}${pl.special? `
Special: ${pl.special}`:\"\"}${pl.attack?.notes? `
Attack: ${pl.attack.notes}`:\"\"}`; await w.update({\"system.damage.base\":(dm.base??0),\"system.damage.ed.base\":(dm.ed??0),\"system.damage.ap.base\":(dm.ap??0),\"system.traits.list\":newTraits,\"system.description\":`${w.system?.description||\"\"}\\n\\n${note}`,\"system.keywords\":`${w.system?.keywords||\"\"}, PAYLOAD-APPLIED`}); ui.notifications.info(`Applied ${doc.name} to ${w.name}.`)}},revert:{label:\"Revert\",callback:async html=>{const wid=html.find(\"select[name='weapon']\").val(); const w=actor.items.get(wid); const b=w.getFlag('wgvoid','payloadBackup'); if(!b){ui.notifications.warn(\"No backup on this weapon.\");return;} await w.update({\"system.damage\":b.damage,\"system.traits\":b.traits,\"system.description\":b.description,\"system.keywords\":b.keywords}); await w.update({\"flags.wgvoid\":null}); ui.notifications.info(`Reverted ${w.name} to pre-payload state.`)}},cancel:{label:\"Cancel\"}},default:\"apply\"}).render(true);})();"} diff --git a/wg-voidships-foundry/packs/wg-voidship-xenos.db b/wg-voidships-foundry/packs/wg-voidship-xenos.db index 2d8c831..7662d69 100644 --- a/wg-voidships-foundry/packs/wg-voidship-xenos.db +++ b/wg-voidships-foundry/packs/wg-voidship-xenos.db @@ -1 +1,6 @@ {"_id":"2a8c7c6b5d4e3f21","name":"Xenos Habitats","type":"gear","img":null,"system":{"description":"Specialist compartments and atmospherics for transporting or housing alien beings and crews. Includes containment precautions and adaptable life-support matrices.","keywords":"VOIDSHIP, XENOS, QUARTERS","value":0,"rarity":"rare","source":"Into the Storm, p. 161"}} +{"_id":"xeno-ghost-field","name":"Ghost Field","type":"gear","img":null,"system":{"description":"Eldarski „widmowy” ekran tworzący fałszywe echo jednostki i myliący wrogie augury. W akcji wymusza wybór: tarcze osłonowe albo ghost field.","keywords":"VOIDSHIP, XENOS, SHIELDS","rarity":"near unique","source":"RT Core (205–210)"}} +{"_id":"xeno-shard-cannon-battery","name":"Shard Cannon 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":"xenos-tech","rating":"-"}]},"description":"Obca, autonomiczna bateria „odłamkowa” – nie wymaga standardowego zasilania ani amunicji; jej charakterystyka bojowa odbiega od imperialnych norm.","keywords":"VOIDSHIP, XENOS, MACROBATT","rarity":"near unique","source":"RT Core (205–210)"}} +{"_id":"xeno-runecaster","name":"Runecaster","type":"gear","img":null,"system":{"description":"Węzeł runiczny (eldarski) wspierający sensoraż i nawigację; generuje „rune-echoes” poprawiające wykrywanie i maskowanie.","keywords":"VOIDSHIP, XENOS, AUGUR","rarity":"near unique","source":"RT Core (205–210)"}} +{"_id":"xeno-micro-laser-defence-grid","name":"Micro Laser Defence Grid","type":"gear","img":null,"system":{"description":"Drobno-segmentowa siatka mikro-laserów przechwytująca bliskie cele (bomby, torpedy, drobne łodzie); rośnie szansa zestrzelenia zagrożeń zbliżeniowych.","keywords":"VOIDSHIP, XENOS, POINT-DEFENCE","rarity":"near unique","source":"RT Core (205–210)"}} +{"_id":"xeno-gravity-sails","name":"Gravity Sails","type":"gear","img":null,"system":{"description":"Grawito-żagle (często spotykane u Eldarów) pozwalające na niemal bezgłośny napęd przy minimalnej sygnaturze; idealne do skrytych przelotów.","keywords":"VOIDSHIP, XENOS, DRIVE","rarity":"near unique","source":"RT Core (205–210)"}} diff --git a/wg-voidships-foundry/packs/wg-voidships-macros.db b/wg-voidships-foundry/packs/wg-voidships-macros.db deleted file mode 100644 index 2d24bd9..0000000 --- a/wg-voidships-foundry/packs/wg-voidships-macros.db +++ /dev/null @@ -1,8 +0,0 @@ -{"_id": "a68969a2ac5a2855", "name": "Import Voidships", "type": "script", "img": "icons/svg/sword.svg", "command": "game.wgVoidshipsMacros.importVoidships();", "scope": "global", "author": null, "ownership": {"default": 2}} -{"_id": "72e2ff46870f2723", "name": "Create Voidship Crit Table (d66)", "type": "script", "img": "icons/svg/d20-black.svg", "command": "game.wgVoidshipsMacros.createCritTable();", "scope": "global", "author": null, "ownership": {"default": 2}} -{"_id": "9c4931885b529b9c", "name": "Apply Voidship Hit", "type": "script", "img": "icons/svg/splash.svg", "command": "game.wgVoidshipsMacros.applyHit();", "scope": "global", "author": null, "ownership": {"default": 2}} -{"_id": "473e9b2b97086116", "name": "Recharge Void Shields", "type": "script", "img": "icons/svg/regen.svg", "command": "game.wgVoidshipsMacros.rechargeShields();", "scope": "global", "author": null, "ownership": {"default": 2}} -{"_id": "dfd9ef292fb3774f", "name": "Set Void Shields", "type": "script", "img": "icons/svg/aura.svg", "command": "game.wgVoidshipsMacros.setShields();", "scope": "global", "author": null, "ownership": {"default": 2}} -{"_id":"mcr000000000001","name":"Add Gear to Selected Voidship","type":"script","img":"icons/svg/plus.svg","command":"(async ()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const pack=game.packs.get('wg-voidships-builder.wg-voidship-items'); if(!pack) return ui.notifications.error('Items pack not found.'); const index=await pack.getIndex(); const names=index.map(e=>e.name).sort(); const opts=names.map(n=>``).join(''); const content=`

Choose items to add (Ctrl/Cmd+Click):

`; new Dialog({title:'Add Gear', content, buttons:{ok:{label:'Add',callback:async html=>{const sel=[...html[0].querySelector('#it').selectedOptions].map(o=>o.value); const docs=await pack.getDocuments({name:{$in:sel}}); const data=docs.map(d=>d.toObject()); await a.createEmbeddedDocuments('Item', data); ui.notifications.info(`Added ${sel.length} item(s) to ${a.name}.`);}}}}).render(true);})();","scope":"global","author":null,"ownership":{"default":2}} -{"_id":"mcr000000000002","name":"Remove All Gear (Selected)","type":"script","img":"icons/svg/trash.svg","command":"(async()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const ids=a.items.filter(i=>['gear','weapon'].includes(i.type)).map(i=>i.id); if(!ids.length) return ui.notifications.info('No gear/weapon items to remove.'); await a.deleteEmbeddedDocuments('Item', ids); ui.notifications.info(`Removed ${ids.length} items from ${a.name}.`);})();","scope":"global","author":null,"ownership":{"default":2}} -{"_id":"mcr000000000003","name":"Toggle Geller (Primary/Reserve)","type":"script","img":"icons/svg/aura.svg","command":"(async()=>{const a=canvas.tokens.controlled[0]?.actor; if(!a) return ui.notifications.warn('Select a voidship token.'); const g=a.getFlag('wg-voidships','geller')||{primaryActive:false,reserveActive:false}; const content=`

Primary:

Reserve:

`; new Dialog({title:'Geller Fields',content,buttons:{ok:{label:'Set',callback:async html=>{const p=html[0].querySelector('#p').checked; const r=html[0].querySelector('#r').checked; await a.setFlag('wg-voidships','geller',{primaryActive:p,reserveActive:r}); ChatMessage.create({content:`${a.name}: Geller Primary ${p?'ON':'OFF'} / Reserve ${r?'ON':'OFF'}`});}}}}).render(true);})();","scope":"global","author":null,"ownership":{"default":2}}