From e4acb748f4a7fb3d099bc5fa8708672902fd712e Mon Sep 17 00:00:00 2001 From: cannonfodder1 Date: Mon, 6 Jan 2025 23:08:08 -0800 Subject: [PATCH 1/3] Make hazelbot compatible with Carrier Update - Readout now prints the number and type of craft inside hangars - Updated display names for all components and munitions - Added hull layouts for Levy and Journeyman carriers - Updated hull layouts for Draugr, Marauder, and Moorline - Prevented a new crash when parsing two-stage missiles - Added example SDM-1, SDM-2, and submunition container for testing - Added example Levy, Journeyman, and Moorline fleets for testing --- data/components.json | 182 ++- data/fleets/TEST FISH.fleet | 353 ++++++ data/fleets/TEST KNIVES.fleet | 464 +++++++ data/fleets/TEST MOOR.fleet | 1066 +++++++++++++++++ data/hulls/0_stock_draugr_tugboat.json | 2 +- data/hulls/0_stock_flathead_monitor.json | 4 +- .../0_stock_journeyman_light_carrier.json | 27 + data/hulls/0_stock_levy_escort_carrier.json | 32 + ...er.json => 0_stock_marauder_lineship.json} | 6 +- ...uler.json => 0_stock_moorline_hauler.json} | 0 data/hulls/0_stock_moorline_hauler_refit.json | 35 + data/missiles/CM-442 Lockley.missile | 119 ++ data/missiles/SDM-100 Lunge.missile | 113 ++ data/missiles/SDM-252 Tsawassen.missile | 124 ++ data/munitions.json | 86 +- nfcli/models.py | 32 +- nfcli/parsers.py | 18 + 17 files changed, 2574 insertions(+), 89 deletions(-) create mode 100644 data/fleets/TEST FISH.fleet create mode 100644 data/fleets/TEST KNIVES.fleet create mode 100644 data/fleets/TEST MOOR.fleet create mode 100644 data/hulls/0_stock_journeyman_light_carrier.json create mode 100644 data/hulls/0_stock_levy_escort_carrier.json rename data/hulls/{0_stock_bulk_hauler.json => 0_stock_marauder_lineship.json} (87%) rename data/hulls/{0_stock_container_hauler.json => 0_stock_moorline_hauler.json} (100%) create mode 100644 data/hulls/0_stock_moorline_hauler_refit.json create mode 100644 data/missiles/CM-442 Lockley.missile create mode 100644 data/missiles/SDM-100 Lunge.missile create mode 100644 data/missiles/SDM-252 Tsawassen.missile diff --git a/data/components.json b/data/components.json index 50034ac..f34bdd3 100644 --- a/data/components.json +++ b/data/components.json @@ -36,19 +36,10 @@ "Restores": "0", "Priority": "Medium" }, - { - "Key": "Stock/Berthing", - "Name": "Berthing", - "MaxHP": "50", - "MinHP": "10", - "Crew": "0", - "Restores": "0", - "Priority": "Low" - }, { "Key": "Stock/Small DC Locker", "Name": "Small DC Locker", - "MaxHP": "100", + "MaxHP": "150", "MinHP": "10", "Crew": "10", "Restores": "1", @@ -57,7 +48,7 @@ { "Key": "Stock/Reinforced DC Locker", "Name": "Reinforced DC Locker", - "MaxHP": "200", + "MaxHP": "250", "MinHP": "20", "Crew": "10", "Restores": "1", @@ -66,7 +57,7 @@ { "Key": "Stock/Large DC Locker", "Name": "Large DC Locker", - "MaxHP": "150", + "MaxHP": "200", "MinHP": "10", "Crew": "15", "Restores": "2", @@ -75,7 +66,7 @@ { "Key": "Stock/Rapid DC Locker", "Name": "Rapid DC Locker", - "MaxHP": "70", + "MaxHP": "100", "MinHP": "10", "Crew": "5", "Restores": "0", @@ -126,15 +117,6 @@ "Restores": "0", "Priority": "Low" }, - { - "Key": "Stock/Battle Dressing Station", - "Name": "Battle Dressing Station", - "MaxHP": "125", - "MinHP": "15", - "Crew": "8", - "Restores": "0", - "Priority": "Low" - }, { "Key": "Stock/Analysis Annex", "Name": "Analysis Annex", @@ -162,6 +144,42 @@ "Restores": "0", "Priority": "Low" }, + { + "Key": "Stock/Bulk Internal Hangar", + "Name": "Bulk Internal Hangar", + "MaxHP": "200", + "MinHP": "20", + "Crew": "20", + "Restores": "0", + "Priority": "Medium" + }, + { + "Key": "Stock/Spacecraft Repair Station", + "Name": "Spacecraft Repair Station", + "MaxHP": "150", + "MinHP": "10", + "Crew": "15", + "Restores": "0", + "Priority": "Low" + }, + { + "Key": "Stock/Spacecraft Strikedown Station", + "Name": "Spacecraft Strikedown Station", + "MaxHP": "150", + "MinHP": "10", + "Crew": "15", + "Restores": "0", + "Priority": "Low" + }, + { + "Key": "Stock/Deck Gear Locker", + "Name": "Deck Gear Locker", + "MaxHP": "120", + "MinHP": "10", + "Crew": "20", + "Restores": "0", + "Priority": "Medium" + }, { "Key": "Stock/Small Reactor Booster", "Name": "Small Reactor Booster", @@ -217,18 +235,9 @@ "Priority": "Low" }, { - "Key": "Stock/Launcher Deluge System", - "Name": "Launcher Deluge System", - "MaxHP": "75", - "MinHP": "10", - "Crew": "0", - "Restores": "0", - "Priority": "Low" - }, - { - "Key": "Stock/Magazine Sprinklers", - "Name": "Magazine Sprinklers", - "MaxHP": "75", + "Key": "Stock/Fire Suppression System", + "Name": "Fire Suppression System", + "MaxHP": "150", "MinHP": "10", "Crew": "0", "Restores": "0", @@ -237,7 +246,7 @@ { "Key": "Stock/Redundant Reactor Failsafes", "Name": "Redundant Reactor Failsafes", - "MaxHP": "75", + "MaxHP": "150", "MinHP": "10", "Crew": "0", "Restores": "0", @@ -306,6 +315,15 @@ "Restores": "0", "Priority": "Low" }, + { + "Key": "Stock/Flight Deck Traversal System", + "Name": "Flight Deck Traversal System", + "MaxHP": "100", + "MinHP": "15", + "Crew": "0", + "Restores": "0", + "Priority": "Low" + }, { "Key": "Stock/Missile Programming Bus", "Name": "Missile Programming Bus", @@ -552,7 +570,7 @@ { "Key": "Stock/Mk66 Cannon", "Name": "Mk66 Cannon", - "MaxHP": "550", + "MaxHP": "450", "MinHP": "30", "Crew": "25", "Restores": "0", @@ -561,7 +579,7 @@ { "Key": "Stock/Mk68 Cannon", "Name": "Mk68 Cannon", - "MaxHP": "650", + "MaxHP": "550", "MinHP": "30", "Crew": "40", "Restores": "0", @@ -570,7 +588,7 @@ { "Key": "Stock/Mk81 Railgun", "Name": "Mk81 Railgun", - "MaxHP": "300", + "MaxHP": "125", "MinHP": "30", "Crew": "15", "Restores": "0", @@ -606,7 +624,7 @@ { "Key": "Stock/VLS-2 Launcher", "Name": "VLS-2 Launcher", - "MaxHP": "100", + "MaxHP": "200", "MinHP": "10", "Crew": "0", "Restores": "0", @@ -615,7 +633,7 @@ { "Key": "Stock/VLS-3 Launcher", "Name": "VLS-3 Launcher", - "MaxHP": "175", + "MaxHP": "250", "MinHP": "10", "Crew": "0", "Restores": "0", @@ -624,7 +642,7 @@ { "Key": "Stock/CLS-3 Launcher", "Name": "CLS-3 Launcher", - "MaxHP": "175", + "MaxHP": "250", "MinHP": "10", "Crew": "0", "Restores": "0", @@ -783,6 +801,24 @@ "Restores": "0", "Priority": "Medium" }, + { + "Key": "Stock/C4 Medium Mount Hangar", + "Name": "Medium Mounted Hangar", + "MaxHP": "200", + "MinHP": "10", + "Crew": "12", + "Restores": "0", + "Priority": "Medium" + }, + { + "Key": "Stock/C5 Large Mount Hangar", + "Name": "Large Mounted Hangar", + "MaxHP": "200", + "MinHP": "10", + "Crew": "12", + "Restores": "0", + "Priority": "Medium" + }, { "Key": "Stock/Civilian Reactor", "Name": "Civilian Reactor", @@ -846,6 +882,15 @@ "Restores": "0", "Priority": "Critical" }, + { + "Key": "Stock/Container Datalink Array", + "Name": "Container Datalink Array", + "MaxHP": "300", + "MinHP": "100", + "Crew": "30", + "Restores": "0", + "Priority": "Low" + }, { "Key": "Stock/BW800 Drive", "Name": "BW800 Drive", @@ -921,7 +966,7 @@ { "Key": "Stock/Sundrive Racing Pro", "Name": "Sundrive Racing Pro", - "MaxHP": "100", + "MaxHP": "200", "MinHP": "50", "Crew": "10", "Restores": "0", @@ -1056,7 +1101,7 @@ { "Key": "Stock/TE45 Mass Driver", "Name": "TE45 Mass Driver", - "MaxHP": "450", + "MaxHP": "150", "MinHP": "20", "Crew": "15", "Restores": "0", @@ -1107,6 +1152,15 @@ "Restores": "0", "Priority": "Medium" }, + { + "Key": "Stock/J75 Jammer", + "Name": "J75 'Warbler' Jammer", + "MaxHP": "100", + "MinHP": "10", + "Crew": "0", + "Restores": "0", + "Priority": "Medium" + }, { "Key": "Stock/J360 Jammer", "Name": "J360 'Lyrebird' Jammer", @@ -1164,7 +1218,7 @@ { "Key": "Stock/MLS-2 Launcher", "Name": "MLS-2 Launcher", - "MaxHP": "100", + "MaxHP": "200", "MinHP": "10", "Crew": "10", "Restores": "0", @@ -1173,7 +1227,7 @@ { "Key": "Stock/MLS-3 Launcher", "Name": "MLS-3 Launcher", - "MaxHP": "100", + "MaxHP": "200", "MinHP": "10", "Crew": "12", "Restores": "0", @@ -1182,11 +1236,47 @@ { "Key": "Stock/ML-9 Mine Launcher", "Name": "ML-9 Mine Launcher", - "MaxHP": "100", + "MaxHP": "200", "MinHP": "10", "Crew": "10", "Restores": "0", "Priority": "High" + }, + { + "Key": "Stock/S2 Bandit Launcher", + "Name": "SALS-2 'Ward' Launcher", + "MaxHP": "100", + "MinHP": "10", + "Crew": "0", + "Restores": "0", + "Priority": "Medium" + }, + { + "Key": "Stock/S2 Twin Bandit Launcher", + "Name": "TALS-2 'Talisman' Launcher", + "MaxHP": "150", + "MinHP": "10", + "Crew": "0", + "Restores": "0", + "Priority": "Medium" + }, + { + "Key": "Stock/Container Bank Hangar", + "Name": "Container Bank Hangar", + "MaxHP": "200", + "MinHP": "20", + "Crew": "0", + "Restores": "0", + "Priority": "Medium" + }, + { + "Key": "Stock/C4 Mount Hangar", + "Name": "Small Mounted Hangar", + "MaxHP": "300", + "MinHP": "10", + "Crew": "8", + "Restores": "0", + "Priority": "Medium" } ] } \ No newline at end of file diff --git a/data/fleets/TEST FISH.fleet b/data/fleets/TEST FISH.fleet new file mode 100644 index 0000000..07ad59e --- /dev/null +++ b/data/fleets/TEST FISH.fleet @@ -0,0 +1,353 @@ + + + TEST FISH + 3 + 1126 + Stock/Protectorate + + + + + a764acd3-84e3-4e11-ae75-a76475d93efb + Third Time's The Charm + 1126 + + 33 + 0 + Stock/Ore Carrier + + + tW4zUlc7-UagVFXCOGl63g + Stock/C4 Mount Hangar + + + + + + DLNetkwH9kerkhRuQ4lIjQ + Stock/Basic CIC + + + 9EA-sLPvv0yedARGhtJv3Q + Stock/Deck Gear Locker + + + utS8omLdfUCo4DXRpR4Hyw + Stock/Deck Gear Locker + + + ZwILnhyKLkigJgek0cM9Lw + Stock/Deck Gear Locker + + + -F3V0WPprkWQ7ktL8CwXXg + Stock/Bulk Magazine + + + + p0nNCeR84kGl1vkveOlZvg + Stock/20mm Slug + 40000 + + + nacsaV3gpk-J5P_8IIACaA + $MODMIS$/SGM-151 Siyichem + 120 + + + blwdA6WhZ0aw6GW-LmmkeQ + Stock/35mm Flechette + 20000 + + + + + + gi0EFXIps0q_499wfJPBVA + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + + + + 8FSEH_EpRUasipRoRQz8GA + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + + + + ezH8FOVSDEOrs8eyc1KSLQ + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + $CRAFT$/PF-386 Barracuda B B + + + + + + lI4IkFx-REuV2AXbvC5iFg + Stock/Civilian Reactor + + + _UqBymnw70G2AZvAW49lOg + Stock/BW800 Drive + + + LCuzzD0pwEyDvYSCs_g2CA + Stock/Flight Deck Traversal System + + + fafk0RBeJUicFDn6OLLP4A + Stock/Flight Deck Traversal System + + + TtYHca1GZESvz0szdY3BMA + Stock/Ithaca Bridgemaster + + + UAaselEnVECxHp9c4R1Izw + Stock/Ammunition Elevators + + + + + + + + + + SGM-151 Siyichem + SGM-151 + Siyichem + DIRECT - ACT(<color=#3BC81E>RADAR</color>) - HE FRAG + The <noparse>SGM-151 Siyichem</noparse> is a size 1 direct guidance missile. It is based on the SGM-1 body, which is a nimble general-purpose missile. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using an Active Radar seeker. + +Control Method: DIRECT +Targeting Modes: <b><color=#3BC81E>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: ACTIVE <color=#3BC81E>RADAR</color> + +Speed: 250 m/s +Distance: 3,000 m +Top Speed In: 0.4 s +Turn Rate: 9.9 G +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.21cm +Component: 65.34hp +Blast Radius: 47 m + +Body Integrity: 10 +Wall Thickness: 0.05 +Programming Time: 6 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 2 + Stock/SGM-1 Body + 8c8baa0d-0e5c-42ae-a324-e7a4080e1844 + + 1 + 0.4862745 + 0 + 1 + + + 0.254901975 + 0.254901975 + 0.254901975 + 1 + + + + 1 + + Stock/Steerable Active Radar Seeker + Targeting + false + true + + + + 1 + + Stock/Direct Guidance + Defensive + true + false + None + + 14 + SmallCraft + Descending + 1 + false + + true + + + + 4 + + Stock/Blast Fragmentation + + + + 3 + + + + 0 + 0.344742239 + 0.655257761 + + + + + + + + + Barracuda B B + 8 + Stock/OSP Interceptor + bbb18ae4-f4ef-4868-a906-64aa20ed64bd + + + nose + nose_gun20mm + + + + + Test 1 + + + nose + Stock/20mm Slug + + + + + Test 2 + + + nose + Stock/20mm Slug + + + wingtopin + wingtopin_s1pylons + + wingtopin + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + + + + + + + \ No newline at end of file diff --git a/data/fleets/TEST KNIVES.fleet b/data/fleets/TEST KNIVES.fleet new file mode 100644 index 0000000..f070378 --- /dev/null +++ b/data/fleets/TEST KNIVES.fleet @@ -0,0 +1,464 @@ + + + TEST KNIVES + 3 + 1691 + Stock/Alliance + + + + + e3b3b9e2-79bc-401a-bff8-0b3a3f5134c7 + Elysium + 1691 + + 881 + 0 + Stock/Levy Escort Carrier + + + NysR9qLdykCdsphUx1foSg + Stock/Basic CIC + + + S0-J1cMwUEKF72p---79_w + Stock/Rapid DC Locker + + + 3XttIkpGh0yh8AMcSK0_9g + Stock/Deck Gear Locker + + + Z8askbBTfkm1Z1R8wX48Lw + Stock/Deck Gear Locker + + + ww85-B3EY02T4hEoPQBLPg + Stock/Deck Gear Locker + + + _yC35vSVhU6ziXsLtVwSAg + Stock/Deck Gear Locker + + + J0fhl0E9OE2qbBM4dNSlIQ + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + + + + n9Ru447zt0O2PqoeCqEDKw + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + + + + TCnobRXZTUmbBhWLB2_bMA + Stock/Bulk Internal Hangar + + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + $CRAFT$/PF-440 Tanto + + + + + + Rqj_R1kXHkC9Il-jpVDWAA + Stock/Bulk Magazine + + + + 4Y34U0lyQkaCksxq1deu1Q + Stock/20mm Slug + 60000 + + + wdw8pFG310C4nMNohw-drw + Stock/50mm Slug + 40000 + + + 0c0xOXdLIkOVpkqVxDWtvA + $MODMIS$/SGM-151 Siyichem + 160 + + + A2-Si980j0q4c19j6E57xg + Stock/15mm Sandshot + 2000 + + + + + + VRT4JesYZUmXgqX1BK03vw + Stock/FR4800 Reactor + + + tRoUxR8d7E2g8VMuBvtgPA + Stock/FM500 Drive + + + dsNyjGBVUkWbOJ_DhpBlWg + Stock/Flight Deck Traversal System + + + QPu81rov_k2q0TUPljf1wQ + Stock/Flight Deck Traversal System + + + olToS4WUzkSEjp0m_GDswA + Stock/Flight Deck Traversal System + + + DGXa9LWen0qyodt0DDHxcA + Stock/Flight Deck Traversal System + + + 2L34-TzEokaF5Ic3R-Majw + Stock/RS35 'Frontline' Radar + + + aUJW0fBCR0mJc2o0WtSTtg + Stock/Ammunition Elevators + + + + + + + + + + SGM-151 Siyichem + SGM-151 + Siyichem + DIRECT - ACT(<color=#3BC81E>RADAR</color>) - HE FRAG + The <noparse>SGM-151 Siyichem</noparse> is a size 1 direct guidance missile. It is based on the SGM-1 body, which is a nimble general-purpose missile. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using an Active Radar seeker. + +Control Method: DIRECT +Targeting Modes: <b><color=#3BC81E>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: ACTIVE <color=#3BC81E>RADAR</color> + +Speed: 250 m/s +Distance: 3,000 m +Top Speed In: 0.4 s +Turn Rate: 9.9 G +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.21cm +Component: 65.34hp +Blast Radius: 47 m + +Body Integrity: 10 +Wall Thickness: 0.05 +Programming Time: 6 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 2 + Stock/SGM-1 Body + 8c8baa0d-0e5c-42ae-a324-e7a4080e1844 + + 1 + 0.4862745 + 0 + 1 + + + 0.254901975 + 0.254901975 + 0.254901975 + 1 + + + + 1 + + Stock/Steerable Active Radar Seeker + Targeting + false + true + + + + 1 + + Stock/Direct Guidance + Defensive + true + false + None + + 14 + SmallCraft + Descending + 1 + false + + true + + + + 4 + + Stock/Blast Fragmentation + + + + 3 + + + + 0 + 0.344742239 + 0.655257761 + + + + + + + + + Tanto + 8 + Stock/AN Interceptor + 44915252-e3c3-42f1-89d0-62a480302aaf + + + nose + nose_gun20mm + + + centerline + centerline_s1bay + + + + + Test 1 + + + nose + Stock/20mm Slug + + + centerline + + + + + + + + + + + Test 2 + + + nose + Stock/20mm Slug + + + centerline + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + + Test 3 + + + nose + Stock/20mm Slug + + + centerline + + + + + + + + + winginboard + winginboard_50mmguns + + winginboard + Stock/50mm Slug + + + + + + Test 4 + + + nose + Stock/20mm Slug + + + centerline + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + winginboard + winginboard_50mmguns + + winginboard + Stock/50mm Slug + + + + + + + + + + \ No newline at end of file diff --git a/data/fleets/TEST MOOR.fleet b/data/fleets/TEST MOOR.fleet new file mode 100644 index 0000000..31056cc --- /dev/null +++ b/data/fleets/TEST MOOR.fleet @@ -0,0 +1,1066 @@ + + + TEST MOOR + 3 + 3000 + Stock/Protectorate + + + + + d578d050-9b15-4f8e-b8d4-a1ce385174b4 + Inevitable Happenstance + 3000 + + 9999 + 0 + Stock/Container Hauler Refit + + + + 541cf476-4952-4234-a35a-5f1aa9089316 + + 0 + + + + 09354e51-953c-451a-b415-3e3361812650 + + 1 + 1 + 0 + + + + 2dbd82fe-d365-4367-aef5-9bb2d3528528 + + 0 + + + + + + 42d07c1a-156b-4057-aaca-7a2024751423 + 2 + 0 + + + + 0.78212297 + 0.78212297 + 0.78212297 + 1 + + + 831.903442 + -176.19577 + 353.6622 + + + + + uLHDwjLFekuYaY3h0JwZoQ + Stock/Container Bank Hangar + + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + + + + 44SMwZSbRkOQyQmJ458Y1Q + Stock/Container Bank Hangar + + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + + + + VkODw--0zk-K4FkajpPjwQ + Stock/Container Bank Hangar + + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + + + + F-nHNZm4Z0WZMJakJAwlPw + Stock/Container Bank Hangar + + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/B-450 Swordfish + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + $CRAFT$/PF-3860 Salmon + + + + + + 3WEnDKibY0-WJvtq9-tmuA + Stock/T30 Cannon + + + 6HbbAtLFGUOi-kq06ErQdA + Stock/T30 Cannon + + + y70HHuLWd0uphO2H-hvZGQ + Stock/P11 PDT + + + NjfVPFfJqUmkw-AR_2KBjg + Stock/P11 PDT + + + KuKTAiCM50uIV7XV1S8wrw + Stock/VLS-1-46 Launcher + + + + QfaVa_BDVkm2iW0n8n8ROQ + $MODMIS$/SGM-112 Riposte II + 20 + + + + + + iWiBr9uCyUCBub-IIW2bZg + Stock/Bulk Magazine + + + + bIKeU0oXDUGHX18yfi3EFA + $MODMIS$/SGM-151 Siyichem + 64 + + + 9Xv2xqqGUk6NWgj_k1LK9g + Stock/20mm Slug + 8000 + + + E5msBirdZ0ulmaltccOd-w + Stock/100mm AP Shell + 500 + + + 3E0OSOLJs0m4dVN72x98AQ + Stock/100mm HE Shell + 1000 + + + xr1VfbgERE6xDkrnOn4fAQ + Stock/S0 Rocket + 200 + + + xzsmHZO0ukKYrVdlZJs2DQ + Stock/S3 Rocket + 64 + + + k4OSLdFOK0-fz5MOOH4xLQ + Stock/100mm Flak + 500 + + + x9nUv80FdUicTdEETv04yg + Stock/35mm Flechette + 36000 + + + cv_D0GmZjEeb_GdLbGw_zg + Stock/50mm Slug + 20000 + + + AVVKa8aiFkih4qYbZf1YNA + Stock/S2 Glide Bomb + 20 + + + + + + y1Cs8LR0KUyCKUAJBIOyOg + Stock/Auxiliary Steering + + + QhdtovcTk0WSpMAUsBIF6Q + Stock/Bulk Internal Hangar + + + + $CRAFT$/RS-350 Spear + + + $CRAFT$/RS-350 Spear + + + $CRAFT$/RS-350 Spear + + + + + + T9TN0ZYumUaCxcSRjO_qTw + Stock/Small DC Locker + + + T4d-8WnA_UiHSJh6PXiXpA + Stock/Reinforced CIC + + + hs-SaPpehUu8ZbwsuJSvXw + Stock/Intelligence Center + + + jhY0RlqxLkW69clFCGXELA + Stock/Deck Gear Locker + + + OE8qVccIYEGwfvJXsiFgoA + Stock/Deck Gear Locker + + + UAmAj39M3E2zPnVXF46kZA + Stock/Deck Gear Locker + + + yxnQxeuUHUO22pm-LQu4Cg + Stock/BW1500 Drive + + + _uEQzHKRzEqqIqa1c8wJcw + Stock/Civilian Reactor + + + M0ewvimLKU2vXoznZNDoYQ + Stock/Flight Deck Traversal System + + + cXpBal32p0-R2pA6hN056w + Stock/Flight Deck Traversal System + + + OY726V7rAUKDR92MQM7gnQ + Stock/Flight Deck Traversal System + + + SmUC0Jc9FEuCeKc_ZJMxIg + Stock/Ithaca Bridgemaster + + + + + + 3WEnDKibY0-WJvtq9-tmuA + 6HbbAtLFGUOi-kq06ErQdA + + + + + + + + + + SGM-112 Riposte II + SGM-112 + Riposte II + DIRECT - <color=#D3D11F>CMD</color> - HE FRAG + The <noparse>SGM-112 Riposte II</noparse> is a size 1 direct guidance missile. It is based on the SGM-1 body, which is a nimble general-purpose missile. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using command guidance from its launching ship. + +Control Method: DIRECT +Targeting Modes: <b><color=#D4211D>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: COMMAND (<color=#D3D11F>Requires COMMS Enabled</color>) + +Speed: 250 m/s +Distance: 2,500 m +Top Speed In: 0.4 s +Turn Rate: 11.0 G +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.21cm +Component: 65.34hp +Blast Radius: 47 m + +Body Integrity: 10 +Wall Thickness: 0.05 +Programming Time: 6 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 4 + Stock/SGM-1 Body + 7fc7ee78-147f-427d-8cb3-63f656bdec8f + + 1 + 0.4862745 + 0 + 1 + + + 0.254901975 + 0.254901975 + 0.254901975 + 1 + + + + 1 + + Stock/Command Receiver + Targeting + false + + + + 1 + + Stock/Direct Guidance + Defensive + true + true + None + + 12 + All + Descending + 1 + false + + true + + + + 4 + + Stock/Blast Fragmentation + + + + 3 + + + + 0 + 0.23283571 + 0.7671643 + + + + + + + SGM-151 Siyichem + SGM-151 + Siyichem + DIRECT - ACT(<color=#3BC81E>RADAR</color>) - HE FRAG + The <noparse>SGM-151 Siyichem</noparse> is a size 1 direct guidance missile. It is based on the SGM-1 body, which is a nimble general-purpose missile. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using an Active Radar seeker. + +Control Method: DIRECT +Targeting Modes: <b><color=#3BC81E>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: ACTIVE <color=#3BC81E>RADAR</color> + +Speed: 250 m/s +Distance: 4,000 m +Top Speed In: 0.4 s +Turn Rate: 9.9 G +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.18cm +Component: 56.58hp +Blast Radius: 40 m + +Body Integrity: 10 +Wall Thickness: 0.05 +Programming Time: 6 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 2 + Stock/SGM-1 Body + 8c8baa0d-0e5c-42ae-a324-e7a4080e1844 + + 1 + 0.4862745 + 0 + 1 + + + 0.254901975 + 0.254901975 + 0.254901975 + 1 + + + + 1 + + Stock/Steerable Active Radar Seeker + Targeting + false + true + + + + 1 + + Stock/Direct Guidance + Defensive + true + false + None + + 14 + SmallCraft + Descending + 1 + false + + true + + + + 3 + + Stock/Blast Fragmentation + + + + 4 + + + + 0 + 0.34189558 + 0.6581044 + + + + + + + + + 0 + Swordfish + 15 + Stock/OSP Bomber + 9983b2dc-77e1-47ff-be17-69575387d0b8 + + + + RCKT3 + + + innerwing + innerwing_s3pylons + + innerwing + + Stock/S3 Rocket + Stock/S3 Rocket + + + + + + + RCKT1 + + + innerwing + wings_rocketpods + + innerwing + Stock/S0 Rocket + + + + + + GUN HE + + + innerwing + wings_100mmguns + + innerwing + Stock/100mm HE Shell + + + + + + GUN AP + + + innerwing + wings_100mmguns + + innerwing + Stock/100mm AP Shell + + + + + + + + + + 0 + Spear + 50 + Stock/OSP Skiff + a856ed17-1ae7-467f-9ef5-894191c0351d + + + nose + nose_gun50mm + + + mission + mission_advancedradar + + + + + Gun Only + + + nose + Stock/35mm Flechette + + + + + + + Self Def + + + nose + Stock/35mm Flechette + + + + outboard + outboard_s1pylons + + outboard + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + + + + + + + + 0 Salmon + 0 + Salmon + 10 + Stock/OSP Interceptor + bbb18ae4-f4ef-4868-a906-64aa20ed64bd + + + nose + nose_gun50mm + + + + + Multirole (Fleche) + + + nose + Stock/35mm Flechette + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottom_rocketpods + + wingbottomin + Stock/S0 Rocket + + + + wingbottomout + wingbottomout_radarjammer + + + + + + Multirole (Slug) + + + nose + Stock/50mm Slug + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottom_rocketpods + + wingbottomin + Stock/S0 Rocket + + + + wingbottomout + wingbottomout_radarjammer + + + + + + Finisher (Fleche) + + + nose + Stock/35mm Flechette + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottomin_s2pylons + + wingbottomin + + Stock/S2 Glide Bomb + Stock/S2 Glide Bomb + + + + + + + Finisher (Slug) + + + nose + Stock/50mm Slug + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottomin_s2pylons + + wingbottomin + + Stock/S2 Glide Bomb + Stock/S2 Glide Bomb + + + + + + + Gunner (Fleche) + + + nose + Stock/35mm Flechette + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottomin_50mmguns + + wingbottomin + Stock/35mm Flechette + + + + wingbottomout + wingbottomout_radarjammer + + + + + + Gunner (Slug) + + + nose + Stock/50mm Slug + + + wingtopin + wingtopin_fuelpods + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottomin_50mmguns + + wingbottomin + Stock/50mm Slug + + + + wingbottomout + wingbottomout_radarjammer + + + + + + Battery (Fleche) + + + nose + Stock/35mm Flechette + + + wingtopin + wingtop_rocketpods + + wingtopin + Stock/S0 Rocket + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottom_rocketpods + + wingbottomin + Stock/S0 Rocket + + + + wingbottomout + wingbottomout_radarjammer + + + + + + Battery (Slug) + + + nose + Stock/50mm Slug + + + wingtopin + wingtop_rocketpods + + wingtopin + Stock/S0 Rocket + + + + wingtopout + wingtopout_s1pylons + + wingtopout + + $MODMIS$/SGM-151 Siyichem + $MODMIS$/SGM-151 Siyichem + + + + + wingbottomin + wingbottom_rocketpods + + wingbottomin + Stock/S0 Rocket + + + + wingbottomout + wingbottomout_radarjammer + + + + + + + + + + \ No newline at end of file diff --git a/data/hulls/0_stock_draugr_tugboat.json b/data/hulls/0_stock_draugr_tugboat.json index adfa314..24666e0 100644 --- a/data/hulls/0_stock_draugr_tugboat.json +++ b/data/hulls/0_stock_draugr_tugboat.json @@ -3,7 +3,7 @@ "name": "'Draugr' class Clipper", "mounts": { "03vxralGq0CFx1XKxjOcBA": "2x5x2", - "cIGspM4oYU2etRfjIcuCCA": "3x2x5", + "cIGspM4oYU2etRfjIcuCCA": "3x4x5", "0upOgm0H0UuZ-h2YvRjmBg": "3x2x5", "KnFHQkb9uUe98IweLYf9wg": "2x2x2", "5kd20hGcxUuTlY-6JYaudA": "2x2x2" diff --git a/data/hulls/0_stock_flathead_monitor.json b/data/hulls/0_stock_flathead_monitor.json index 03214b9..b0ca0ce 100644 --- a/data/hulls/0_stock_flathead_monitor.json +++ b/data/hulls/0_stock_flathead_monitor.json @@ -5,8 +5,8 @@ "4V6twrIUcEKE11tom-tDXQ": "6x12x6", "yN7f-9tEXEKlBNskqP6EbA": "6x4x6", "Z2uDs34J-ESu64-i9YGnxQ": "6x4x6", - "gb6_3kWBY0KlEWeex3ruDg": "3x2x5", - "_y-Bd-EWjUeMIrmzG3UxvQ": "3x2x5" + "gb6_3kWBY0KlEWeex3ruDg": "3x4x5", + "_y-Bd-EWjUeMIrmzG3UxvQ": "3x4x5" }, "compartments": { "gDQghm5iik2syYcoJqUPFg": "6x1x8", diff --git a/data/hulls/0_stock_journeyman_light_carrier.json b/data/hulls/0_stock_journeyman_light_carrier.json new file mode 100644 index 0000000..5950254 --- /dev/null +++ b/data/hulls/0_stock_journeyman_light_carrier.json @@ -0,0 +1,27 @@ +{ + "key": "Stock/Ore Carrier", + "name": "'Journeyman' class Light Carrier", + "mounts": { + "tW4zUlc7-UagVFXCOGl63g": "6x4x6", + "qfEBVY3HjUiyhpq9YQGAOQ": "3x4x5", + "O5f_mflyPEKi1lfh7sBXEQ": "3x4x5" + }, + "compartments": { + "F6bmJdCO3EqzXK9SBJoXUw": "4x1x6", + "9EA-sLPvv0yedARGhtJv3Q": "4x1x6", + "utS8omLdfUCo4DXRpR4Hyw": "6x1x8", + "ZwILnhyKLkigJgek0cM9Lw": "6x1x8", + "-F3V0WPprkWQ7ktL8CwXXg": "6x1x8", + "gi0EFXIps0q_499wfJPBVA": "6x3x8", + "8FSEH_EpRUasipRoRQz8GA": "12x3x12", + "ezH8FOVSDEOrs8eyc1KSLQ": "12x3x12" + }, + "modules": { + "lI4IkFx-REuV2AXbvC5iFg": "6x6x6", + "_UqBymnw70G2AZvAW49lOg": "5x10x8", + "LCuzzD0pwEyDvYSCs_g2CA": "3x3x3", + "fafk0RBeJUicFDn6OLLP4A": "3x3x3", + "TtYHca1GZESvz0szdY3BMA": "2x2x2", + "UAaselEnVECxHp9c4R1Izw": "2x2x2" + } +} diff --git a/data/hulls/0_stock_levy_escort_carrier.json b/data/hulls/0_stock_levy_escort_carrier.json new file mode 100644 index 0000000..eae8513 --- /dev/null +++ b/data/hulls/0_stock_levy_escort_carrier.json @@ -0,0 +1,32 @@ +{ + "key": "Stock/Levy Escort Carrier", + "name": "'Levy' class Escort Carrier", + "mounts": { + "g6Jp1xMKeEeNFOgfjnt3hQ": "3x4x3", + "VOg7-lRNWkGpjpj3W7QEoQ": "3x4x3", + "nrWmlB7t7E2eR6gjOVmDtA": "3x4x3", + "CsgECqHZc0Kannrt6VIhUw": "3x4x3" + }, + "compartments": { + "NysR9qLdykCdsphUx1foSg": "4x1x6", + "S0-J1cMwUEKF72p---79_w": "4x1x6", + "3XttIkpGh0yh8AMcSK0_9g": "4x1x6", + "Z8askbBTfkm1Z1R8wX48Lw": "4x1x6", + "ww85-B3EY02T4hEoPQBLPg": "6x1x8", + "_yC35vSVhU6ziXsLtVwSAg": "6x1x8", + "J0fhl0E9OE2qbBM4dNSlIQ": "12x3x12", + "n9Ru447zt0O2PqoeCqEDKw": "12x3x18", + "TCnobRXZTUmbBhWLB2_bMA": "12x3x12", + "Rqj_R1kXHkC9Il-jpVDWAA": "6x3x16" + }, + "modules": { + "VRT4JesYZUmXgqX1BK03vw": "6x6x6", + "tRoUxR8d7E2g8VMuBvtgPA": "12x8x10", + "dsNyjGBVUkWbOJ_DhpBlWg": "3x3x3", + "QPu81rov_k2q0TUPljf1wQ": "3x3x3", + "olToS4WUzkSEjp0m_GDswA": "3x3x3", + "DGXa9LWen0qyodt0DDHxcA": "3x3x3", + "2L34-TzEokaF5Ic3R-Majw": "2x2x2", + "aUJW0fBCR0mJc2o0WtSTtg": "2x2x2" + } +} diff --git a/data/hulls/0_stock_bulk_hauler.json b/data/hulls/0_stock_marauder_lineship.json similarity index 87% rename from data/hulls/0_stock_bulk_hauler.json rename to data/hulls/0_stock_marauder_lineship.json index dbbe65b..ba627cf 100644 --- a/data/hulls/0_stock_bulk_hauler.json +++ b/data/hulls/0_stock_marauder_lineship.json @@ -16,7 +16,11 @@ "Sb5-VSuwlkWpT6ViRiJ3vg": "3x4x3", "6ZiODnoXqkaNWvaqyGjnwg": "3x4x3", "87PSgg9GREmGU9MIRAXXhg": "3x4x3", - "VDQhZPo-rkWkzwozat27fw": "3x4x3" + "VDQhZPo-rkWkzwozat27fw": "3x4x3", + "sTr26YTLmkOZTo_rNevp-g": "2x2x2", + "PRLtjo7PfECpLy8CGW9T8A": "2x2x2", + "eBuzS9wNkECmPqJ9vVsa0A": "2x2x2", + "JZ1htG-iLE-VFOBegJXCJw": "2x2x2" }, "compartments": { "y1Cs8LR0KUyCKUAJBIOyOg": "8x3x8", diff --git a/data/hulls/0_stock_container_hauler.json b/data/hulls/0_stock_moorline_hauler.json similarity index 100% rename from data/hulls/0_stock_container_hauler.json rename to data/hulls/0_stock_moorline_hauler.json diff --git a/data/hulls/0_stock_moorline_hauler_refit.json b/data/hulls/0_stock_moorline_hauler_refit.json new file mode 100644 index 0000000..4550bed --- /dev/null +++ b/data/hulls/0_stock_moorline_hauler_refit.json @@ -0,0 +1,35 @@ +{ + "key": "Stock/Container Hauler Refit", + "name": "'Moorline' class Line Ship", + "mounts": { + "uLHDwjLFekuYaY3h0JwZoQ": "20x5x30", + "44SMwZSbRkOQyQmJ458Y1Q": "20x5x30", + "VkODw--0zk-K4FkajpPjwQ": "20x5x20", + "F-nHNZm4Z0WZMJakJAwlPw": "20x5x20", + "6HbbAtLFGUOi-kq06ErQdA": "6x4x6", + "3WEnDKibY0-WJvtq9-tmuA": "6x4x6", + "y70HHuLWd0uphO2H-hvZGQ": "3x4x5", + "NjfVPFfJqUmkw-AR_2KBjg": "3x4x3", + "bF4isjieO0m0PsOlE-zgkQ": "3x4x3", + "KuKTAiCM50uIV7XV1S8wrw": "3x4x3" + }, + "compartments": { + "iWiBr9uCyUCBub-IIW2bZg": "8x3x16", + "y1Cs8LR0KUyCKUAJBIOyOg": "8x3x8", + "QhdtovcTk0WSpMAUsBIF6Q": "8x3x8", + "T4d-8WnA_UiHSJh6PXiXpA": "8x1x8", + "T9TN0ZYumUaCxcSRjO_qTw": "8x1x8", + "hs-SaPpehUu8ZbwsuJSvXw": "8x1x8", + "OE8qVccIYEGwfvJXsiFgoA": "8x1x8", + "jhY0RlqxLkW69clFCGXELA": "8x1x8", + "UAmAj39M3E2zPnVXF46kZA": "8x1x8" + }, + "modules": { + "yxnQxeuUHUO22pm-LQu4Cg": "12x12x12", + "_uEQzHKRzEqqIqa1c8wJcw": "6x6x6", + "M0ewvimLKU2vXoznZNDoYQ": "3x3x3", + "cXpBal32p0-R2pA6hN056w": "3x3x3", + "OY726V7rAUKDR92MQM7gnQ": "3x3x3", + "SmUC0Jc9FEuCeKc_ZJMxIg": "3x3x3" + } +} diff --git a/data/missiles/CM-442 Lockley.missile b/data/missiles/CM-442 Lockley.missile new file mode 100644 index 0000000..872d658 --- /dev/null +++ b/data/missiles/CM-442 Lockley.missile @@ -0,0 +1,119 @@ + + + CM-442 + Lockley + CRUISE - ACT(<color=#3BC81E>RADAR</color>)/[PSV(<color=#D4211D>WAKE</color>)]/HOJ(<color=#3BC81E>RADAR</color>) - SUBMN + The <noparse>CM-442 Lockley</noparse> is a size 4 waypoint-capable cruise missile. It is based on the CM-4 body, which is a heavy anti-ship torpedo. This missile will deliver a Submunition Delivery warhead. It homes in on its target using an Active Radar seeker, validating that it is the correct target using a Passive Wake seeker If the primary seeker does not find a target or is jammed, it can fall back on a Radar Home-on-Jam seeker. + +Control Method: CRUISE (Waypoint Capable) +Targeting Modes: <b><color=#3BC81E>POSITION</color> <color=#3BC81E>TRACK[+TRP]</color></b> + +Primary Seeker: ACTIVE <color=#3BC81E>RADAR</color> +Validation Seeker: PASSIVE (<color=#D4211D>WAKE</color>) +Backup Seeker: HOME-ON-JAM (<color=#3BC81E>RADAR</color> JAMMING Signals Only) + +Speed: 200 m/s +Distance: 24,000 m +Top Speed In: 2.6 s +Turn Rate: 1.6 G +Terminal Maneuvers: None + +Warhead: Submunition Delivery +Submunition Type: R-2 'Piranha' Rocket +Submunition Count: 4 +Total Volume: 38.00 m<sup>2</sup> +Spread Angle: NARROW CONE +Release Time: LONG (1s) + +Body Integrity: 150 +Wall Thickness: 0.2 +Programming Time: 20 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 7 + Stock/CM-4 Body + d60686ea-af24-4a8d-954a-96ecd2aa3e70 + + 0 + 0 + 0 + 1 + + + 0 + 0 + 0 + 1 + + + + 1 + + Stock/Steerable Active Radar Seeker + Targeting + false + false + + + + 1 + + Stock/Wake-Homing Seeker + Validation + false + false + + + + 1 + + Stock/Cruise Guidance + Offensive + true + false + None + + 12 + All + Descending + 0 + false + + + + + 7 + + Stock/Selectable Submunition + TargetAcquisition + 0 + 205 + Stock/S1 Rocket + 3 + + + + 7 + + + + 0.500804543 + 0.387017727 + 0.11217773 + + + + + 1 + + Stock/Fixed Anti-Radiation Seeker + Targeting + false + JammingOnly + + + + \ No newline at end of file diff --git a/data/missiles/SDM-100 Lunge.missile b/data/missiles/SDM-100 Lunge.missile new file mode 100644 index 0000000..5bcebb5 --- /dev/null +++ b/data/missiles/SDM-100 Lunge.missile @@ -0,0 +1,113 @@ + + + SDM-100 + Lunge + DIRECT - <color=#D3D11F>CMD</color> - HE FRAG + The <noparse>SDM-100 Lunge</noparse> is a size 1 direct guidance missile. It is based on the SDM-1 body, which is a flexible defensive missile with a booster. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using command guidance from its launching ship. + +Control Method: DIRECT +Targeting Modes: <b><color=#D4211D>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: COMMAND (<color=#D3D11F>Requires COMMS Enabled</color>) + +<b>Boost</b> +Speed: 650 m/s +Distance: 3,759 m +Top Speed In: 0.4 s +Turn Rate: 6.5 G + +<b>Main</b> +Speed: 295 m/s +Distance: 1,701 m +Top Speed In: 0.5 s +Turn Rate: 11.6 G + +: Stage Trigger at 1,340m from Target or On Burnout + +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.31cm +Component: 65.34hp +Blast Radius: 61 m + +Body Integrity: 10 +Wall Thickness: 0.05 +Programming Time: 6 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 9 + Stock/SDM-1 Body + b0c6834c-b347-4926-8d09-06f54a5370a0 + + 1 + 0.4862745 + 0 + 1 + + + 0.254901975 + 0.254901975 + 0.254901975 + 1 + + + + 1 + + Stock/Command Receiver + Targeting + false + + + + 1 + + Stock/Direct Guidance + Offensive + false + false + None + + 12 + All + Descending + 0 + false + + true + + + + 4 + + Stock/Blast Fragmentation EL + + + + 3 + + + + 0.300303042 + 1.93631111E-09 + 0.699696958 + + + + + 1 + + + + 0 + 1 + 0 + + + + + \ No newline at end of file diff --git a/data/missiles/SDM-252 Tsawassen.missile b/data/missiles/SDM-252 Tsawassen.missile new file mode 100644 index 0000000..937548e --- /dev/null +++ b/data/missiles/SDM-252 Tsawassen.missile @@ -0,0 +1,124 @@ + + + SDM-252 Tsawassen + SDM-252 + Tsawassen + DIRECT - <color=#D3D11F>CMD</color>/PSV(<color=#D4211D>WAKE</color>) - HE FRAG + The <noparse>SDM-252 Tsawassen</noparse> is a size 2 direct guidance missile. It is based on the SDM-2 body, which is a flexible defensive missile with a booster. This missile will deliver a Proximity Fuze, High Explosive, Blast Fragmentation warhead. It homes in on its target using command guidance from its launching ship If the primary seeker does not find a target or is jammed, it can fall back on a Passive Wake seeker. + +Control Method: DIRECT +Targeting Modes: <b><color=#3BC81E>POSITION</color> <color=#3BC81E>TRACK</color></b> + +Primary Seeker: COMMAND (<color=#D3D11F>Requires COMMS Enabled</color>) +Backup Seeker: PASSIVE (<color=#D4211D>WAKE</color>) + +<b>Boost</b> +Speed: 737 m/s +Distance: 9,000 m +Top Speed In: 1.2 s +Turn Rate: 4.7 G + +<b>Main</b> +Speed: 150 m/s +Distance: 1,165 m +Top Speed In: 0.5 s +Turn Rate: 8.2 G + +: Stage Trigger at 530m from Target or On Burnout + +Terminal Maneuvers: None + +Warhead: Proximity Fuze, High Explosive, Blast Fragmentation +Armor: 0.35cm +Component: 110.12hp +Blast Radius: 79 m + +Body Integrity: 25 +Wall Thickness: 0.05 +Programming Time: 10 s +Radar Signature Bonus: 100 % +Boost-Phase Duration: 3 s +Boost-Phase Strafe: 100 % +Boost-Phase Turn Rate: 100 % +Failure Rate: 0 % + 7 + Stock/SDM-2 Body + f034f09d-3561-4c20-bd81-cf3f0451dfac + + 0.384356856 + 0.384356856 + 0.384356856 + 1 + + + 0.129411772 + 0.262856424 + 0.7058824 + 1 + + + + 1 + + Stock/Command Receiver + Targeting + false + + + + 1 + + Stock/Wake-Homing Seeker + Targeting + false + true + + + + 1 + + Stock/Direct Guidance + Defensive + false + false + None + + 14 + SmallCraft + Descending + 0 + false + + true + + + + 5 + + Stock/Blast Fragmentation + + + + 2 + + + + 0 + 0 + 1 + + + + + 1 + + + + 0.434351921 + 0.5656481 + 0 + + + + + \ No newline at end of file diff --git a/data/munitions.json b/data/munitions.json index bd55152..7d51ddf 100644 --- a/data/munitions.json +++ b/data/munitions.json @@ -36,9 +36,15 @@ "PointCost": "1", "PointDivision": "2000" }, + { + "Key": "Stock/50mm Slug", + "Name": "35mm Slug", + "PointCost": "1", + "PointDivision": "1000" + }, { "Key": "Stock/Flak Round", - "Name": "Flak Round", + "Name": "50mm Flak Shell", "PointCost": "1", "PointDivision": "75" }, @@ -86,10 +92,40 @@ }, { "Key": "Stock/EA99 Active Decoy", - "Name": "EA99 Active Decoy", + "Name": "EA99 'Conure' Active Decoy", "PointCost": "8", "PointDivision": "1" }, + { + "Key": "Stock/S1 Glide Bomb", + "Name": "KBU-15 Bomb", + "PointCost": "1", + "PointDivision": "1" + }, + { + "Key": "Stock/S1 Boosted Bomb", + "Name": "RBU-15 Boosted Bomb", + "PointCost": "3", + "PointDivision": "1" + }, + { + "Key": "Stock/S2 Glide Bomb", + "Name": "KBU-22 Bomb", + "PointCost": "1", + "PointDivision": "1" + }, + { + "Key": "Stock/S3 Cluster Bomb", + "Name": "CBU-40 Cluster Bomb", + "PointCost": "10", + "PointDivision": "1" + }, + { + "Key": "Stock/35mm Flechette", + "Name": "35mm Flechette", + "PointCost": "1", + "PointDivision": "500" + }, { "Key": "Stock/100mm HE Shell", "Name": "100mm HE Shell", @@ -114,6 +150,12 @@ "PointCost": "1", "PointDivision": "250" }, + { + "Key": "Stock/100mm Flak", + "Name": "100mm Flak Shell", + "PointCost": "1", + "PointDivision": "250" + }, { "Key": "Stock/400mm Plasma Ampoule", "Name": "400mm Plasma Ampoule", @@ -138,16 +180,28 @@ "PointCost": "1", "PointDivision": "25" }, + { + "Key": "Stock/S0 Rocket", + "Name": "R-1 'Perch' Rocket", + "PointCost": "1", + "PointDivision": "1" + }, { "Key": "Stock/S1 Rocket", "Name": "R-2 'Piranha' Rocket", - "PointCost": "3", + "PointCost": "2", + "PointDivision": "1" + }, + { + "Key": "Stock/S3 Rocket", + "Name": "R-3 'Spearfish' Rocket", + "PointCost": "2", "PointDivision": "1" }, { "Key": "Stock/S3 Mine", "Name": "M-30 'Mattock' Mine", - "PointCost": "6", + "PointCost": "5", "PointDivision": "1" }, { @@ -162,24 +216,6 @@ "PointCost": "10", "PointDivision": "1" }, - { - "Key": "Stock/Mine Container", - "Name": "CM-4M Mine Container", - "PointCost": "15", - "PointDivision": "1" - }, - { - "Key": "Stock/Rocket Container", - "Name": "CM-4R6 Rocket Container", - "PointCost": "10", - "PointDivision": "1" - }, - { - "Key": "Stock/Rocket Container 12", - "Name": "CM-4R12 Rocket Container", - "PointCost": "35", - "PointDivision": "1" - }, { "Key": "Stock/Decoy Container (Clipper)", "Name": "CM-4D1 Decoy Container (Clipper)", @@ -191,6 +227,12 @@ "Name": "CM-4D2 Decoy Container (Line Ship)", "PointCost": "6", "PointDivision": "1" + }, + { + "Key": "Stock/EA14 Chaff Decoy", + "Name": "EA14 Chaff Decoy", + "PointCost": "2", + "PointDivision": "1" } ] } \ No newline at end of file diff --git a/nfcli/models.py b/nfcli/models.py index 37de3f4..277fa53 100644 --- a/nfcli/models.py +++ b/nfcli/models.py @@ -172,23 +172,21 @@ def __init__( self.description = description self.cost = cost full_stats = [stats.replace("\n\t", " ") for stats in long_description.split("\n\n")] - if len(full_stats) == 4: - full_stats.append("") - if len(full_stats) == 5: - full_stats.append("") - ( - self.long_description, - self.avionics, - self.flight_characteristics, - self.damage, - self.additional_stats, - self.extra_field, - ) = full_stats - if self.extra_field: - self.flight_characteristics += self.damage - self.damage = self.additional_stats - self.additional_stats = self.extra_field - self.extra_field = "" + + self.long_description = full_stats[0] + self.avionics = "" + self.avionics += full_stats[1] + self.avionics += "\n" + self.avionics += full_stats[2] + + self.flight_characteristics = "" + for x in range(3, len(full_stats)-2): + self.flight_characteristics += full_stats[x] + if x < len(full_stats)-3: + self.flight_characteristics += "\n" + + self.damage = full_stats[len(full_stats)-2] + self.additional_stats = full_stats[len(full_stats)-1] @property def size(self) -> str: diff --git a/nfcli/parsers.py b/nfcli/parsers.py index cf6c0fa..e3c911b 100644 --- a/nfcli/parsers.py +++ b/nfcli/parsers.py @@ -10,6 +10,24 @@ def get_content(content_data: dict) -> list[Content]: all_loads = [] + + if content_data.get("StoredCraft"): + all_loads += content_data["StoredCraft"]["SavedStoredCraft"] + + craft_dict = {} + for load in all_loads: + if isinstance(load, dict): + if load["CraftTemplateKey"] in craft_dict: + craft_dict[load["CraftTemplateKey"]] = craft_dict.get(load["CraftTemplateKey"]) + 1 + else: + craft_dict[load["CraftTemplateKey"]] = 1 + + all_content = [] + for craft in craft_dict: + all_content.append(Content(craft, craft_dict[craft])) + + return all_content + for key in ["MissileLoad", "Load"]: if content_data.get(key): all_loads += content_data[key]["MagSaveData"] From 40fe15a15e2d8ac76e61bad083f5897b886faf28 Mon Sep 17 00:00:00 2001 From: cannonfodder1 Date: Tue, 7 Jan 2025 19:46:28 -0800 Subject: [PATCH 2/3] Cleanup changes to missile parsing and hangar contents printing --- nfcli/models.py | 19 ++++----------- nfcli/parsers.py | 61 ++++++++++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 37 deletions(-) diff --git a/nfcli/models.py b/nfcli/models.py index 277fa53..fa35ce0 100644 --- a/nfcli/models.py +++ b/nfcli/models.py @@ -172,21 +172,12 @@ def __init__( self.description = description self.cost = cost full_stats = [stats.replace("\n\t", " ") for stats in long_description.split("\n\n")] - + self.long_description = full_stats[0] - self.avionics = "" - self.avionics += full_stats[1] - self.avionics += "\n" - self.avionics += full_stats[2] - - self.flight_characteristics = "" - for x in range(3, len(full_stats)-2): - self.flight_characteristics += full_stats[x] - if x < len(full_stats)-3: - self.flight_characteristics += "\n" - - self.damage = full_stats[len(full_stats)-2] - self.additional_stats = full_stats[len(full_stats)-1] + self.avionics = "\n".join(full_stats[1:2]) + self.flight_characteristics = "\n".join(full_stats[3:-2]) + self.damage = full_stats[-2] + self.additional_stats = full_stats[-1] @property def size(self) -> str: diff --git a/nfcli/parsers.py b/nfcli/parsers.py index e3c911b..dc3c6b3 100644 --- a/nfcli/parsers.py +++ b/nfcli/parsers.py @@ -9,30 +9,35 @@ def get_content(content_data: dict) -> list[Content]: - all_loads = [] - - if content_data.get("StoredCraft"): - all_loads += content_data["StoredCraft"]["SavedStoredCraft"] - - craft_dict = {} - for load in all_loads: - if isinstance(load, dict): - if load["CraftTemplateKey"] in craft_dict: - craft_dict[load["CraftTemplateKey"]] = craft_dict.get(load["CraftTemplateKey"]) + 1 - else: - craft_dict[load["CraftTemplateKey"]] = 1 - - all_content = [] - for craft in craft_dict: - all_content.append(Content(craft, craft_dict[craft])) - - return all_content - + all_magazine_loads = [] + all_hangar_loads = [] + for key in ["MissileLoad", "Load"]: if content_data.get(key): - all_loads += content_data[key]["MagSaveData"] + all_magazine_loads += content_data[key]["MagSaveData"] + + all_munitions = [ + Content(Munitions.get_name_or_key(load["MunitionKey"]), load["Quantity"]) + for load in all_magazine_loads + ] + + for key in ["StoredCraft"]: + if content_data.get(key): + all_hangar_loads += content_data[key]["SavedStoredCraft"] + + craft_dict = {} + for load in all_hangar_loads: + if load["CraftTemplateKey"] in craft_dict: + craft_dict[load["CraftTemplateKey"]] = craft_dict.get(load["CraftTemplateKey"]) + 1 + else: + craft_dict[load["CraftTemplateKey"]] = 1 + + all_craft = [ + Content(craft, craft_dict[craft]) + for craft in craft_dict + ] - return [Content(Munitions.get_name_or_key(load["MunitionKey"]), load["Quantity"]) for load in all_loads] + return all_munitions + all_craft def get_socket(socket_data: dict) -> Socket: @@ -88,13 +93,23 @@ def parse_missile(xml_data: str) -> Missile: def parse_ship(xml_data: str) -> Ship: - xmld = xmltodict.parse(xml_data, force_list=("MagSaveData", "HullSocket")) + xmld = xmltodict.parse(xml_data, force_list=( + "MagSaveData", + "HullSocket", + "SavedStoredCraft" + )) ship_data: dict = xmld.get("Ship") # type: ignore return get_ship(ship_data) def parse_fleet(xml_data: str) -> Fleet: - xmld = xmltodict.parse(xml_data, force_list=("MagSaveData", "Ship", "HullSocket", "MissileTemplate")) + xmld = xmltodict.parse(xml_data, force_list=( + "MagSaveData", + "Ship", + "HullSocket", + "MissileTemplate", + "SavedStoredCraft" + )) fleet_data: dict = xmld.get("Fleet") # type: ignore fleet = Fleet(fleet_data["Name"], fleet_data["TotalPoints"], fleet_data["FactionKey"]) logging.debug("Parsing ships.") From cec3b4da1deb759407ca0614e9bbd2a36973d435 Mon Sep 17 00:00:00 2001 From: cannonfodder1 Date: Fri, 17 Jan 2025 18:06:55 -0800 Subject: [PATCH 3/3] Fix incorrect socket ID for the Journeyman's Compartment 1 --- data/hulls/0_stock_journeyman_light_carrier.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/hulls/0_stock_journeyman_light_carrier.json b/data/hulls/0_stock_journeyman_light_carrier.json index 5950254..2027ca1 100644 --- a/data/hulls/0_stock_journeyman_light_carrier.json +++ b/data/hulls/0_stock_journeyman_light_carrier.json @@ -7,7 +7,7 @@ "O5f_mflyPEKi1lfh7sBXEQ": "3x4x5" }, "compartments": { - "F6bmJdCO3EqzXK9SBJoXUw": "4x1x6", + "DLNetkwH9kerkhRuQ4lIjQ": "4x1x6", "9EA-sLPvv0yedARGhtJv3Q": "4x1x6", "utS8omLdfUCo4DXRpR4Hyw": "6x1x8", "ZwILnhyKLkigJgek0cM9Lw": "6x1x8",