Skip to content

Commit 8e219c5

Browse files
Update Mantis.lua
Widened (long-range systems): Nike, Hawk, SA-5, SA-12, SA-20A/B, SA-21/S-400, SA-22, SA-23/B, Patriot PAC-2/3, NASAMS, HQ-22, THAAD, IRIS-T, SON-9 → matches actual radar coverage rather than missile kinematic range Tightened (short-range systems): SA-15, SA-19, HQ-7, HQ-17, Rapier → SHORAD shouldn't be jammable from absurd standoff
1 parent 09f99b9 commit 8e219c5

1 file changed

Lines changed: 130 additions & 93 deletions

File tree

Moose Development/Moose/Functional/Mantis.lua

Lines changed: 130 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -557,123 +557,153 @@ MANTIS.JammerLoadoutTiers = {
557557
-- @type MANTIS.JammerJitterPercent
558558
MANTIS.JammerJitterPercent = 0.10
559559

560-
--- Jammer SAM Parameters — v8 curves {peak%, mu_nm, sigma_L, tail_dist, band, floor%}
561-
-- floor: residual effectiveness inside burnthrough (noise injection)
560+
--- Jammer SAM Parameters — v9 curves (v8.1) {peak%, mu_nm, sigma_L, tail_dist, band, floor%}
561+
-- v9 changes from v8:
562+
-- * Width rework: curves now track radar detection/track envelope (not just missile range)
563+
-- * Long-range systems widened (SA-5, SA-21, SA-23, Nike, PAC-2, S-300/400 family)
564+
-- * Short-range systems tightened (SA-19, SON-9, HQ-7, Rapier)
565+
-- * HAWK widened to match CW illuminator envelope (~90nm)
566+
-- floor: residual effectiveness inside burnthrough (now tapers past mu with R^2 falloff)
562567
-- 5 = legacy radar, no ECCM | 3 = moderate ECCM | 2 = advanced ECCM/AESA | 0 = optical/IR
563568
-- @type MANTIS.JammerSAMParams
564569
MANTIS.JammerSAMParams = {
565-
["Nike"] ={peak=78,mu=35,sigma_L=14,tail_dist=80, band="S", floor=5},
566-
["Hawk"] ={peak=30,mu=15,sigma_L=6, tail_dist=28, band="IJ", floor=3},
567-
["SA-2"] ={peak=75,mu=40,sigma_L=16,tail_dist=85, band="S", floor=5},
568-
["SA-3"] ={peak=45,mu=22,sigma_L=10,tail_dist=50, band="IJ", floor=5},
569-
["SA-5"] ={peak=52,mu=60,sigma_L=22,tail_dist=110,band="S", floor=5},
570-
["SA-6"] ={peak=33,mu=18,sigma_L=8, tail_dist=42, band="IJ", floor=3},
571-
["SA-8"] ={peak=38,mu=10,sigma_L=4, tail_dist=22, band="IJ", floor=3},
570+
-- Standard SamData (canonical entries — aliases below point to these)
571+
["Nike"] ={peak=78,mu=55,sigma_L=22,tail_dist=110,band="S", floor=5},
572+
["Hawk"] ={peak=30,mu=22,sigma_L=9, tail_dist=55, band="IJ", floor=3},
573+
["SA-2"] ={peak=75,mu=40,sigma_L=16,tail_dist=90, band="S", floor=5},
574+
["SA-3"] ={peak=45,mu=22,sigma_L=10,tail_dist=52, band="IJ", floor=5},
575+
["SA-5"] ={peak=52,mu=75,sigma_L=26,tail_dist=145,band="S", floor=5},
576+
["SA-6"] ={peak=33,mu=18,sigma_L=8, tail_dist=48, band="IJ", floor=3},
577+
["SA-8"] ={peak=38,mu=10,sigma_L=4, tail_dist=24, band="IJ", floor=3},
572578
["SA-9"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
573-
["SA-10"] ={peak=32,mu=50,sigma_L=20,tail_dist=90, band="S", floor=3},
574-
["SA-11"] ={peak=52,mu=28,sigma_L=12,tail_dist=55, band="IJ", floor=3},
579+
["SA-10"] ={peak=32,mu=50,sigma_L=20,tail_dist=95, band="S", floor=3},
580+
["SA-10B"] ={peak=30,mu=52,sigma_L=20,tail_dist=100,band="S", floor=3},
581+
["SA-11"] ={peak=52,mu=28,sigma_L=12,tail_dist=58, band="IJ", floor=3},
575582
["SA-13"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
576-
["SA-15"] ={peak=30,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=3},
577-
["SA-19"] ={peak=25,mu=18,sigma_L=7, tail_dist=38, band="IJ", floor=2},
578-
["SA-10B"] ={peak=30,mu=52,sigma_L=20,tail_dist=95, band="S", floor=3},
579-
["SA-17"] ={peak=24,mu=32,sigma_L=14,tail_dist=65, band="IJ", floor=2},
580-
["SA-20A"] ={peak=22,mu=58,sigma_L=22,tail_dist=95, band="S", floor=2},
581-
["SA-20B"] ={peak=20,mu=60,sigma_L=22,tail_dist=100,band="S", floor=2},
582-
["S-300VM"] ={peak=16,mu=70,sigma_L=28,tail_dist=110,band="S", floor=2},
583-
["S-300V4"] ={peak=14,mu=75,sigma_L=28,tail_dist=115,band="S", floor=2},
584-
["S-400"] ={peak=18,mu=65,sigma_L=25,tail_dist=105,band="S", floor=2},
585-
["SA-21"] ={peak=18,mu=65,sigma_L=25,tail_dist=105,band="S", floor=2},
586-
-- NATO designation aliases (allow mission designers to use SA-NN naming)
587-
["SA-22"] ={peak=10,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=0}, -- alias for Pantsir S1
588-
["SA-23"] ={peak=16,mu=70,sigma_L=28,tail_dist=110,band="S", floor=2}, -- alias for S-300VM
589-
["SA-23B"] ={peak=14,mu=75,sigma_L=28,tail_dist=115,band="S", floor=2}, -- alias for S-300V4
590-
["SA-27"] ={peak=22,mu=38,sigma_L=16,tail_dist=72, band="IJ", floor=2}, -- alias for Buk-M3
591-
["SA-28"] ={peak=18,mu=35,sigma_L=15,tail_dist=75, band="IJ", floor=2}, -- alias for S-350
592-
["NASAMS"] ={peak=25,mu=28,sigma_L=12,tail_dist=55, band="IJ", floor=2},
593-
["Patriot"] ={peak=32,mu=50,sigma_L=20,tail_dist=90, band="S", floor=3},
594-
["Rapier"] ={peak=12,mu=8, sigma_L=3, tail_dist=18, band="IJ", floor=0},
595-
["Gepard"] ={peak=18,mu=6, sigma_L=2, tail_dist=15, band="IJ", floor=0},
583+
["SA-15"] ={peak=30,mu=11,sigma_L=5, tail_dist=22, band="IJ", floor=3},
584+
["SA-17"] ={peak=24,mu=32,sigma_L=14,tail_dist=68, band="IJ", floor=2},
585+
["SA-19"] ={peak=25,mu=8, sigma_L=3.5,tail_dist=16,band="IJ", floor=2},
586+
["SA-20A"] ={peak=22,mu=65,sigma_L=24,tail_dist=115,band="S", floor=2},
587+
["SA-20B"] ={peak=20,mu=68,sigma_L=24,tail_dist=120,band="S", floor=2},
588+
["S-300VM"] ={peak=16,mu=80,sigma_L=30,tail_dist=135,band="S", floor=2}, -- SA-23 canonical
589+
["S-300V4"] ={peak=14,mu=85,sigma_L=30,tail_dist=145,band="S", floor=2}, -- SA-23B canonical
590+
["S-400"] ={peak=18,mu=80,sigma_L=30,tail_dist=150,band="S", floor=2}, -- SA-21 canonical
591+
["NASAMS"] ={peak=25,mu=28,sigma_L=12,tail_dist=52, band="IJ", floor=2},
592+
["Patriot"] ={peak=32,mu=62,sigma_L=24,tail_dist=110,band="S", floor=3},
593+
["Rapier"] ={peak=12,mu=6, sigma_L=2.5,tail_dist=14,band="IJ", floor=0},
594+
["Gepard"] ={peak=18,mu=6, sigma_L=2, tail_dist=18, band="IJ", floor=0},
596595
["Roland"] ={peak=35,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=3},
597-
["HQ-7"] ={peak=38,mu=10,sigma_L=4, tail_dist=22, band="IJ", floor=3},
596+
["HQ-7"] ={peak=38,mu=8, sigma_L=3.5,tail_dist=18,band="IJ", floor=3},
598597
["HQ-2"] ={peak=70,mu=38,sigma_L=15,tail_dist=80, band="S", floor=5},
599598
["C-RAM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
600599
["Avenger"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
601600
["Chaparral"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
602601
["Linebacker"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
603602
["Silkworm"] ={peak=35,mu=20,sigma_L=8, tail_dist=40, band="IJ", floor=3},
604603
["Dog Ear"] ={peak=40,mu=10,sigma_L=4, tail_dist=20, band="IJ", floor=5},
605-
["Pantsir S1"] ={peak=10,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=0},
604+
["Pantsir S1"] ={peak=10,mu=9, sigma_L=4, tail_dist=20, band="IJ", floor=0}, -- SA-22 canonical
606605
["Tor M2"] ={peak=28,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=3},
607-
["IRIS-T SLM"] ={peak=18,mu=18,sigma_L=8, tail_dist=40, band="IJ", floor=2},
608-
["SON-9"] ={peak=48,mu=20,sigma_L=9, tail_dist=42, band="IJ", floor=5},
609-
["TAMIR IDFA"] ={peak=19,mu=25,sigma_L=12,tail_dist=55,band="S", floor=2},
606+
["IRIS-T SLM"] ={peak=18,mu=22,sigma_L=10,tail_dist=50, band="IJ", floor=2},
607+
["SON-9"] ={peak=48,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=5},
608+
-- IDF Mod
609+
["TAMIR IDFA"] ={peak=19,mu=25,sigma_L=12,tail_dist=52,band="S", floor=2},
610610
["STUNNER IDFA"]={peak=16,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2},
611-
["SA-2 HDS"] ={peak=75,mu=40,sigma_L=16,tail_dist=85, band="S", floor=5},
612-
["SA-3 HDS"] ={peak=45,mu=22,sigma_L=10,tail_dist=50, band="IJ", floor=5},
613-
["SA-10B HDS"] ={peak=30,mu=52,sigma_L=20,tail_dist=95, band="S", floor=3},
611+
-- HDS Mod (canonical for keys with no base equivalent)
614612
["SA-10C HDS"] ={peak=30,mu=50,sigma_L=20,tail_dist=92, band="S", floor=3},
615-
["SA-17 HDS"] ={peak=24,mu=32,sigma_L=14,tail_dist=65, band="IJ", floor=2},
616-
["SA-12 HDS"] ={peak=35,mu=42,sigma_L=16,tail_dist=75, band="S", floor=3},
617-
["SA-23 HDS"] ={peak=16,mu=70,sigma_L=28,tail_dist=110,band="S", floor=2},
618-
["HQ-2 HDS"] ={peak=70,mu=38,sigma_L=15,tail_dist=80, band="S", floor=5},
613+
["SA-12 HDS"] ={peak=35,mu=50,sigma_L=18,tail_dist=90, band="S", floor=3},
619614
["SAMPT Block 1 HDS"] ={peak=28,mu=45,sigma_L=18,tail_dist=85, band="S", floor=3},
620615
["SAMPT Block 1INT HDS"]={peak=26,mu=48,sigma_L=18,tail_dist=88,band="S", floor=3},
621616
["SAMPT Block 2 HDS"] ={peak=22,mu=52,sigma_L=20,tail_dist=92, band="S", floor=2},
622-
["RBS98M SMA"] ={peak=25,mu=12,sigma_L=5, tail_dist=25,band="IJ", floor=3},
623-
["RBS70 SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
624-
["RBS70M SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
625-
["RBS90 SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
626-
["RBS90M SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
627-
["RBS103A SMA"] ={peak=20,mu=55,sigma_L=20,tail_dist=90,band="S", floor=2},
628-
["RBS103B SMA"] ={peak=22,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2},
629-
["RBS103AM SMA"] ={peak=20,mu=55,sigma_L=20,tail_dist=90,band="S", floor=2},
630-
["RBS103BM SMA"] ={peak=22,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2},
631-
["Lvkv9040M SMA"]={peak=15,mu=3, sigma_L=1, tail_dist=8, band="OPT",floor=0},
617+
-- SMA Mod (canonical for SMA-only keys)
618+
["RBS70 SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0}, -- canonical for RBS70 family
619+
["RBS90 SMA"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0}, -- canonical for RBS90 family
620+
["RBS98M SMA"] ={peak=25,mu=12,sigma_L=5, tail_dist=25,band="IJ", floor=3}, -- canonical
621+
["RBS103A SMA"] ={peak=20,mu=55,sigma_L=20,tail_dist=90,band="S", floor=2}, -- canonical
622+
["RBS103B SMA"] ={peak=22,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2}, -- canonical
623+
["Lvkv9040M SMA"]={peak=15,mu=3, sigma_L=1, tail_dist=8, band="OPT",floor=0}, -- canonical
624+
-- CH Mod (canonical for CHM-only keys)
632625
["2S38 CHM"] ={peak=8, mu=3, sigma_L=1, tail_dist=8, band="OPT",floor=0},
633-
["PantsirS1 CHM"] ={peak=10,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=0},
634-
["PantsirS2 CHM"] ={peak=10,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=0},
635-
["PGL-625 CHM"] ={peak=12,mu=4, sigma_L=2, tail_dist=10, band="OPT",floor=0},
636-
["HQ-17A CHM"] ={peak=30,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=3},
637-
["M903PAC2 CHM"] ={peak=32,mu=50,sigma_L=20,tail_dist=90, band="S", floor=3},
638-
["M903PAC3 CHM"] ={peak=15,mu=55,sigma_L=22,tail_dist=95, band="S", floor=2},
639-
["M903PAC2KAT1 CHM"] ={peak=32,mu=50,sigma_L=20,tail_dist=90, band="S", floor=3},
640-
["TorM2 CHM"] ={peak=28,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=3},
641-
["TorM2K CHM"] ={peak=28,mu=14,sigma_L=6, tail_dist=30, band="IJ", floor=3},
642-
["TorM2M CHM"] ={peak=26,mu=16,sigma_L=6, tail_dist=32, band="IJ", floor=3},
626+
["PGL-625 CHM"] ={peak=12,mu=6, sigma_L=2.5,tail_dist=14,band="OPT",floor=0}, -- Type-08
627+
["HQ-17A CHM"] ={peak=30,mu=11,sigma_L=5, tail_dist=24, band="IJ", floor=3},
628+
["M903PAC3 CHM"] ={peak=15,mu=58,sigma_L=22,tail_dist=105,band="S", floor=2},
629+
["TorM2M CHM"] ={peak=26,mu=16,sigma_L=6, tail_dist=32, band="IJ", floor=3}, -- variant
643630
["NASAMS3-AMRAAMER CHM"] ={peak=20,mu=35,sigma_L=14,tail_dist=65, band="IJ", floor=2},
644631
["NASAMS3-AIM9X2 CHM"] ={peak=10,mu=15,sigma_L=6, tail_dist=30, band="IJ", floor=0},
645-
["C-RAM CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
646-
["PGZ-09 CHM"] ={peak=22,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=0},
632+
["PGZ-09 CHM"] ={peak=22,mu=5, sigma_L=2, tail_dist=14, band="IJ", floor=0}, -- Type-09
647633
["PGZ-95 CHM"] ={peak=15,mu=4, sigma_L=2, tail_dist=10, band="OPT",floor=0},
648-
["S350-9M100 CHM"] ={peak=18,mu=35,sigma_L=15,tail_dist=75, band="IJ", floor=2},
649-
["S350-9M96D CHM"] ={peak=18,mu=35,sigma_L=15,tail_dist=75, band="IJ", floor=2},
650-
["HQ-22 CHM"] ={peak=20,mu=58,sigma_L=22,tail_dist=100,band="S", floor=2},
651-
["LD-3000 CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
652-
["LD-3000M CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
653-
["FlaRakRad CHM"] ={peak=35,mu=5, sigma_L=2, tail_dist=12, band="IJ", floor=3},
654-
["IRIS-T SLM CHM"] ={peak=18,mu=18,sigma_L=8, tail_dist=40, band="IJ", floor=2},
634+
["S350-9M100 CHM"] ={peak=18,mu=35,sigma_L=15,tail_dist=78, band="IJ", floor=2}, -- SA-28 canonical
635+
["HQ-22 CHM"] ={peak=20,mu=70,sigma_L=26,tail_dist=120,band="S", floor=2},
636+
["IRIS-T SLM CHM"] ={peak=18,mu=22,sigma_L=10,tail_dist=50, band="IJ", floor=2}, -- will be aliased
655637
["Skynex CHM"] ={peak=12,mu=4, sigma_L=2, tail_dist=10, band="OPT",floor=0},
656638
["Skyshield CHM"] ={peak=12,mu=4, sigma_L=2, tail_dist=10, band="OPT",floor=0},
657-
["BukM3-9M317M CHM"] ={peak=22,mu=38,sigma_L=16,tail_dist=72, band="IJ", floor=2},
658-
["BukM3-9M317MA CHM"] ={peak=22,mu=38,sigma_L=16,tail_dist=72, band="IJ", floor=2},
639+
["BukM3-9M317M CHM"] ={peak=22,mu=38,sigma_L=16,tail_dist=75, band="IJ", floor=2}, -- SA-27 canonical
659640
["SkySabre CHM"] ={peak=18,mu=18,sigma_L=7, tail_dist=40, band="IJ", floor=2},
660641
["Stormer CHM"] ={peak=10,mu=5, sigma_L=2, tail_dist=12, band="OPT",floor=0},
661-
["THAAD CHM"] ={peak=10,mu=80,sigma_L=35,tail_dist=120,band="IJ", floor=0},
662-
["LAV-AD CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
642+
["THAAD CHM"] ={peak=10,mu=90,sigma_L=38,tail_dist=140,band="IJ", floor=0},
663643
["WieselOzelot CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
664644
["USInfantryFIM92K CHM"] ={peak=3, mu=3, sigma_L=1, tail_dist=5, band="OPT",floor=0},
665-
["RBS98M CHM"] ={peak=25,mu=12,sigma_L=5, tail_dist=25,band="IJ", floor=3},
666-
["RBS70 CHM"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
667-
["RBS70M CHM"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
668-
["RBS90 CHM"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
669-
["RBS90M CHM"] ={peak=5, mu=4, sigma_L=2, tail_dist=10,band="OPT",floor=0},
670-
["RBS103A CHM"] ={peak=20,mu=55,sigma_L=20,tail_dist=90,band="S", floor=2},
671-
["RBS103B CHM"] ={peak=22,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2},
672-
["RBS103AM CHM"] ={peak=20,mu=55,sigma_L=20,tail_dist=90,band="S", floor=2},
673-
["RBS103BM CHM"] ={peak=22,mu=45,sigma_L=18,tail_dist=80,band="S", floor=2},
674-
["Lvkv9040M CHM"]={peak=15,mu=3, sigma_L=1, tail_dist=8, band="OPT",floor=0},
675645
}
676646

647+
-- Alias entries: point alias keys to the canonical entry's table.
648+
-- Modifying any canonical entry above automatically updates all its aliases.
649+
-- This prevents parameter drift when updating values.
650+
do
651+
local p = MANTIS.JammerSAMParams
652+
-- NATO designation aliases
653+
p["SA-21"] = p["S-400"] -- SA-21 Growler
654+
p["SA-22"] = p["Pantsir S1"] -- SA-22 Greyhound
655+
p["SA-23"] = p["S-300VM"] -- SA-23 Gladiator
656+
p["SA-23B"] = p["S-300V4"] -- SA-23B Antey-2500 (improved)
657+
p["SA-27"] = p["BukM3-9M317M CHM"] -- SA-27 Gollum (Buk-M3)
658+
p["SA-28"] = p["S350-9M100 CHM"] -- SA-28 Vityaz (S-350)
659+
-- Buk-M3 variants (same radar)
660+
p["BukM3-9M317MA CHM"] = p["BukM3-9M317M CHM"]
661+
-- S-350 variants (same radar)
662+
p["S350-9M96D CHM"] = p["S350-9M100 CHM"]
663+
-- Pantsir variants
664+
p["PantsirS1 CHM"] = p["Pantsir S1"]
665+
p["PantsirS2 CHM"] = p["Pantsir S1"]
666+
-- Tor-M2 variants
667+
p["TorM2 CHM"] = p["Tor M2"]
668+
p["TorM2K CHM"] = p["Tor M2"]
669+
-- Patriot PAC-2 (same MPQ-65 radar)
670+
p["M903PAC2 CHM"] = p["Patriot"]
671+
p["M903PAC2KAT1 CHM"] = p["Patriot"]
672+
-- IRIS-T (base and CHM are same system)
673+
p["IRIS-T SLM CHM"] = p["IRIS-T SLM"]
674+
-- HDS variants (same radar as base entry)
675+
p["SA-2 HDS"] = p["SA-2"]
676+
p["SA-3 HDS"] = p["SA-3"]
677+
p["SA-10B HDS"] = p["SA-10B"]
678+
p["SA-17 HDS"] = p["SA-17"]
679+
p["SA-23 HDS"] = p["S-300VM"]
680+
p["HQ-2 HDS"] = p["HQ-2"]
681+
-- Roland / FlaRakRad (same system)
682+
p["FlaRakRad CHM"] = p["Roland"]
683+
-- Phalanx-class CIWS (Ka-band, essentially unjammable)
684+
p["C-RAM CHM"] = p["C-RAM"]
685+
p["LD-3000 CHM"] = p["C-RAM"]
686+
p["LD-3000M CHM"] = p["C-RAM"]
687+
-- SMA / CHM Swedish duplicates (CH mod re-implements SMA assets)
688+
p["RBS70 CHM"] = p["RBS70 SMA"]
689+
p["RBS70M SMA"] = p["RBS70 SMA"]
690+
p["RBS70M CHM"] = p["RBS70 SMA"]
691+
p["RBS90 CHM"] = p["RBS90 SMA"]
692+
p["RBS90M SMA"] = p["RBS90 SMA"]
693+
p["RBS90M CHM"] = p["RBS90 SMA"]
694+
p["RBS98M CHM"] = p["RBS98M SMA"]
695+
p["RBS103A CHM"] = p["RBS103A SMA"]
696+
p["RBS103AM SMA"] = p["RBS103A SMA"]
697+
p["RBS103AM CHM"] = p["RBS103A SMA"]
698+
p["RBS103B CHM"] = p["RBS103B SMA"]
699+
p["RBS103BM SMA"] = p["RBS103B SMA"]
700+
p["RBS103BM CHM"] = p["RBS103B SMA"]
701+
p["Lvkv9040M CHM"]= p["Lvkv9040M SMA"]
702+
-- IR MANPADS (all near-zero, different systems but share params)
703+
p["LAV-AD CHM"] = p["SA-9"]
704+
-- NOTE: SA-13, Avenger, Chaparral, Linebacker kept separate (different real systems)
705+
end
706+
677707

678708
-----------------------------------------------------------------------
679709
-- MANTIS System
@@ -2943,8 +2973,8 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
29432973
return self
29442974
end
29452975

2946-
--- [Internal] Core jamming probability curve (v8 engine).
2947-
-- Includes decoupled bt_mod/range_mod, ±10% jitter, and floor.
2976+
--- [Internal] Core jamming probability curve (v9 / v8.1 engine).
2977+
-- Features: decoupled bt_mod/range_mod, tapering residual floor, ±10% jitter.
29482978
-- @param #MANTIS self
29492979
-- @param #number d Distance in nautical miles
29502980
-- @param #table params {peak, mu, sigma_L, tail_dist, band, floor}
@@ -2962,7 +2992,7 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
29622992
elseif band == "S" then bm = cfg.mult_S
29632993
elseif band == "IJ" then bm = cfg.mult_IJ
29642994
else bm = cfg.mult_OPT end
2965-
-- Decoupled window modifiers (v8)
2995+
-- Decoupled window modifiers
29662996
local eff_sigma_L = sigma_L / cfg.bt_mod
29672997
local eff_tail_dist = tail_dist * cfg.range_mod
29682998
local eff_peak = math.min(95, peak * bm)
@@ -2973,12 +3003,19 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
29733003
local lambda = math.log(100.0) / eff_tail_dist
29743004
raw = eff_peak * math.exp(-lambda * (d - mu))
29753005
end
2976-
-- Stochastic jitter ±10% (v8)
3006+
-- Tapering residual floor (v9): floor full inside engagement band (d <= mu),
3007+
-- attenuates with R^2-like falloff past mu over 2.5x the main decay distance.
3008+
-- Prevents artificial hard cliff at 200nm cap; matches real radar/jammer physics.
3009+
local eff_floor = floor * bm
3010+
if eff_floor > 0 and d > mu then
3011+
local floorLambda = math.log(100.0) / (eff_tail_dist * 2.5)
3012+
eff_floor = eff_floor * math.exp(-floorLambda * (d - mu))
3013+
end
3014+
raw = math.max(eff_floor, raw)
3015+
-- Stochastic jitter ±10% applied AFTER floor (v9), so residual also varies.
3016+
-- Prevents gameable flat long-range value. Reflects S/N, RCS, atmospheric fluctuation.
29773017
local jitter = 1.0 + (math.random() * 2 - 1) * (self.JammerJitterPercent or 0.10)
29783018
raw = raw * jitter
2979-
-- Minimum effectiveness floor (residual noise injection, v8)
2980-
local eff_floor = (floor or 0) * bm
2981-
raw = math.max(eff_floor, raw)
29823019
return math.max(0, math.min(95, raw)) / 100.0
29833020
end
29843021

0 commit comments

Comments
 (0)