diff --git a/megamek/data/images/units/Infantry/Branth.png b/megamek/data/images/units/Infantry/Branth.png new file mode 100644 index 00000000000..1ea70b12747 Binary files /dev/null and b/megamek/data/images/units/Infantry/Branth.png differ diff --git a/megamek/data/images/units/Infantry/Camel.png b/megamek/data/images/units/Infantry/Camel.png new file mode 100644 index 00000000000..dff1d5fccca Binary files /dev/null and b/megamek/data/images/units/Infantry/Camel.png differ diff --git a/megamek/data/images/units/Infantry/Donkey.png b/megamek/data/images/units/Infantry/Donkey.png new file mode 100644 index 00000000000..6e31a60a38e Binary files /dev/null and b/megamek/data/images/units/Infantry/Donkey.png differ diff --git a/megamek/data/images/units/Infantry/Horse.png b/megamek/data/images/units/Infantry/Horse.png new file mode 100644 index 00000000000..46fc66c05a2 Binary files /dev/null and b/megamek/data/images/units/Infantry/Horse.png differ diff --git a/megamek/data/images/units/mechset.txt b/megamek/data/images/units/mechset.txt index 0d26d6d1dc7..7cbfd273030 100644 --- a/megamek/data/images/units/mechset.txt +++ b/megamek/data/images/units/mechset.txt @@ -7118,6 +7118,12 @@ exact "Foot Platoon (Laser TAG)" "Infantry/laser_infantry_platoon.png" exact "Foot Platoon (Laser XCT)" "Infantry/laser_infantry_platoon.png" exact "Foot Platoon (Laser Heavy XCT)" "Infantry/xenoplanetary_infantry.png" +#Beast Infantry +chassis "Beast Infantry (Branth)" "Infantry/Branth.png" +chassis "Beast Infantry (Camel)" "Infantry/Camel.png" +chassis "Beast Infantry (Donkey)" "Infantry/Donkey.png" +chassis "Beast Infantry (Horse)" "Infantry/Horse.png" + #Jumpships chassis "Invader Jumpship" "jumpships/invader.png" chassis "Invader" "jumpships/invader.png" diff --git a/megamek/data/mechfiles/infantry/3085/Marik/Beast Infantry (Aerial).blk b/megamek/data/mechfiles/infantry/3085/Marik/Beast Infantry (Aerial).blk new file mode 100644 index 00000000000..793614a5f9a --- /dev/null +++ b/megamek/data/mechfiles/infantry/3085/Marik/Beast Infantry (Aerial).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry + + + +(Aerial) + + + +12 + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +Branth Irregulars, 5th Legion, Beta Regiment + + + +TRO 3085 + + + +7 + + + +1 + + + +Elephant Gun + + + +Free Worlds League Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Auto Rifle).blk new file mode 100644 index 00000000000..7b00e154243 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Auto Rifle).blk @@ -0,0 +1,57 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Auto-Rifle) + + + +2401 + + + +2401 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +InfantryAssaultRifle + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Gyrojet).blk new file mode 100644 index 00000000000..e896b76f41b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Laser Rifle).blk new file mode 100644 index 00000000000..ebcd449140c --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Laser Rifle).blk @@ -0,0 +1,57 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Laser Rifle) + + + +2401 + + + +2401 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Laser Rifle + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Needler).blk new file mode 100644 index 00000000000..a96038d99e5 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Pulse Laser).blk new file mode 100644 index 00000000000..230dcb4c0da --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(SMG).blk new file mode 100644 index 00000000000..b7fff2fc755 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(SMG).blk @@ -0,0 +1,57 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(SMG) + + + +2401 + + + +2401 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Submachine Gun + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Shotgun).blk new file mode 100644 index 00000000000..8a972c94a5b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Sniper).blk new file mode 100644 index 00000000000..acbfaca839c --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Branth/Beast Infantry (Branth)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Branth) + + + +(Sniper) + + + +2500 + + + +2500 + + + +IS Level 3 + + + +Beast:Branth + + + + + + +7 + + + +1 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Auto Rifle).blk new file mode 100644 index 00000000000..7c5c46c8058 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Auto Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Auto-Rifle) + + + +2000 + + + +2000 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Gyrojet).blk new file mode 100644 index 00000000000..eda6f3b2dec --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Laser Rifle).blk new file mode 100644 index 00000000000..c3226da46dd --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Laser Rifle) + + + +2230 + + + +2230 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Needler).blk new file mode 100644 index 00000000000..8d1833b632b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Pulse Laser).blk new file mode 100644 index 00000000000..7b610ff75eb --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(SMG).blk new file mode 100644 index 00000000000..a37c06bfedb --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(SMG) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Shotgun).blk new file mode 100644 index 00000000000..698d328f0db --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Sniper).blk new file mode 100644 index 00000000000..cd840dc41bd --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Camel/Beast Infantry (Camel)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Camel) + + + +(Sniper) + + + +2500 + + + +2500 + + + +IS Level 3 + + + +Beast:Camel + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Auto Rifle).blk new file mode 100644 index 00000000000..8cd49629a3d --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Auto Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Auto-Rifle) + + + +2380 + + + +2380 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Gyrojet).blk new file mode 100644 index 00000000000..ce18e845153 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Laser Rifle).blk new file mode 100644 index 00000000000..8d0ff35d185 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Laser Rifle) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Needler).blk new file mode 100644 index 00000000000..6cfd9dda540 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Pulse Laser).blk new file mode 100644 index 00000000000..a5ce67dd644 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(SMG).blk new file mode 100644 index 00000000000..a84eea0fdb0 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(SMG) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Shotgun).blk new file mode 100644 index 00000000000..d5e5e1db0c5 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Sniper).blk new file mode 100644 index 00000000000..ce8bfacf847 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Coventry Kangaroo/Beast Infantry (Kangaroo)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Kangaroo) + + + +(Sniper) + + + +2380 + + + +2380 + + + +IS Level 3 + + + +Beast:Coventry Kangaroo + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Auto Rifle).blk new file mode 100644 index 00000000000..47fa0da618f --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Auto Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Auto-Rifle) + + + +2000 + + + +2000 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Gyrojet).blk new file mode 100644 index 00000000000..26592f00d94 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Laser Rifle).blk new file mode 100644 index 00000000000..953b07aae80 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Laser Rifle) + + + +2230 + + + +2230 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Needler).blk new file mode 100644 index 00000000000..3c9abf3dce1 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Pulse Laser).blk new file mode 100644 index 00000000000..0751007cc22 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(SMG).blk new file mode 100644 index 00000000000..3dcf440a13b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(SMG) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Shotgun).blk new file mode 100644 index 00000000000..a98f2aa4db9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Sniper).blk new file mode 100644 index 00000000000..5a36c3f50c9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Donkey/Beast Infantry (Donkey)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Donkey) + + + +(Sniper) + + + +2500 + + + +2500 + + + +IS Level 3 + + + +Beast:Donkey + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Auto-Rifle_MG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Auto-Rifle_MG).blk new file mode 100644 index 00000000000..5d1b1348e8d --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Auto-Rifle_MG).blk @@ -0,0 +1,73 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Auto-Rifle/MG) + + + +2000 + + + +2000 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +InfantryAssaultRifle + + + +Machine Gun (Support) + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + + +2.0 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Gyrojet_GL).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Gyrojet_GL).blk new file mode 100644 index 00000000000..e3281229497 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Gyrojet_GL).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Gyrojet/GL) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Gyrojet Rifle + + + +InfantryAutoGL + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_MRR).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_MRR).blk new file mode 100644 index 00000000000..08b36053964 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_MRR).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Laser Refile/MRR) + + + +2230 + + + +2230 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Laser Rifle + + + +InfantryMRR + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_Support PPC).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_Support PPC).blk new file mode 100644 index 00000000000..5f09e7c2d49 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Laser Rifle_Support PPC).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Laser Rifle/Support PPC) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Laser Rifle + + + +Particle Cannon (Semi-Portable) + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Needler_SRM).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Needler_SRM).blk new file mode 100644 index 00000000000..d3bd45e09c6 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Needler_SRM).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Needler/SRM) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Needler Rifle + + + +InfantryStandardSRMInferno + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pistol_Mortar).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pistol_Mortar).blk new file mode 100644 index 00000000000..c5674f4a553 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pistol_Mortar).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Pistol/Mortar) + + + +2000 + + + +2000 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +InfantryAssaultRifle + + + +InfantryLightMortar + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Plasma Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Plasma Rifle).blk new file mode 100644 index 00000000000..e363a55f715 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Plasma Rifle).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Pulse Laser/Plasma Rifle) + + + +3065 + + + +3065 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Pulse Laser Rifle (Inner Sphere) + + + +Plasma Rifle (Man-Portable) + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Support Pulse).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Support Pulse).blk new file mode 100644 index 00000000000..5a2fadb9294 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Elephant/Beast Infantry (Elephant)(Pulse Laser_Support Pulse).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Elephant) + + + +(Pulse Laser/Support Pulse) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Elephant + + + + + + +2 + + + +5 + + + +1 + + + +Pulse Laser Rifle (Inner Sphere) + + + +Support Pulse Laser + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Auto-Cannon).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Auto-Cannon).blk new file mode 100644 index 00000000000..3fce5bfec93 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Auto-Cannon).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(Auto-Rifle/Auto-Cannon) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +InfantryAssaultRifle + + + +Autocannon (Semi-Portable) + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_LRR).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_LRR).blk new file mode 100644 index 00000000000..0554bfb9389 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_LRR).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(Auto-Rifle/LRR) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +InfantryAssaultRifle + + + +InfantryLRR + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_SRM).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_SRM).blk new file mode 100644 index 00000000000..f8a2309f7f4 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_SRM).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(Auto-Rifle/SRM) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +Laser Rifle + + + +InfantryStandardSRM + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Support MG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Support MG).blk new file mode 100644 index 00000000000..af738ae1276 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Auto-Rifle_Support MG).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(Auto-Rifle/Support MG) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +InfantryAssaultRifle + + + +Machine Gun (Support) + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Laser Rifle_GL).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Laser Rifle_GL).blk new file mode 100644 index 00000000000..18d1280ec7c --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(Laser Rifle_GL).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(Laser Rifle/GL) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +Laser Rifle + + + +InfantryAutoGL + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(SMG_GL).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(SMG_GL).blk new file mode 100644 index 00000000000..a3b97d2c9d5 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Hipposaur/Beast Infantry (Hipposaur)(SMG_GL).blk @@ -0,0 +1,77 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Hipposaur) + + + +(SMG/GL) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Hipposaur + + + + + + +2 + + + +4 + + + +2 + + + +Submachine Gun + + + +InfantryAutoGL + + + +Environment Suit, Hostile + + + +true + + + +true + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Auto Rifle).blk new file mode 100644 index 00000000000..6168c398fb1 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Auto Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Auto-Rifle) + + + +2000 + + + +2000 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Gyrojet).blk new file mode 100644 index 00000000000..2e3fd6a12ea --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Laser Rifle).blk new file mode 100644 index 00000000000..9a5aa6cf4ad --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Laser Rifle) + + + +2230 + + + +2230 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Needler).blk new file mode 100644 index 00000000000..e9f6f07b9b1 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Pulse Laser).blk new file mode 100644 index 00000000000..1c94fe0ea29 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(SMG).blk new file mode 100644 index 00000000000..a9ce40e6b2e --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(SMG) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Shotgun).blk new file mode 100644 index 00000000000..8d2c68ed52a --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Sniper).blk new file mode 100644 index 00000000000..653fc5e600d --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Horse/Beast Infantry (Horse)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Horse) + + + +(Sniper) + + + +2500 + + + +2500 + + + +IS Level 3 + + + +Beast:Horse + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Auto-Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Auto-Rifle).blk new file mode 100644 index 00000000000..ca5b2c401b9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Auto-Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Auto-Rifle) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Gyrojet).blk new file mode 100644 index 00000000000..9eaaca4e3ab --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Laser Rifle).blk new file mode 100644 index 00000000000..8f06deabe36 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Laser Rifle) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Needler).blk new file mode 100644 index 00000000000..38739d412a6 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Pulse Laser).blk new file mode 100644 index 00000000000..7e20cc45f51 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(SMG).blk new file mode 100644 index 00000000000..a98cbefaa25 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(SMG) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Shotgun).blk new file mode 100644 index 00000000000..c4e9fca8fa6 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Shotgun) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Sniper).blk new file mode 100644 index 00000000000..cac46f96bf9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Odessan Raxx/Beast Infantry (Odessan Raxx)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Odessan Raxx) + + + +(Sniper) + + + +2340 + + + +2340 + + + +IS Level 3 + + + +Beast:Odessan Raxx + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Gyrojet_Support Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Gyrojet_Support Laser).blk new file mode 100644 index 00000000000..aae0afb5553 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Gyrojet_Support Laser).blk @@ -0,0 +1,69 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Orca) + + + +(Gyrojet/Support Laser) + + + +2570 + + + +2570 + + + +IS Level 3 + + + +Beast:Orca + + + + + + +2 + + + +5 + + + +1 + + + +Gyrojet Rifle + + + +Support Laser (Heavy) + + + +Environment Suit, Hostile + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Laser Rifle).blk new file mode 100644 index 00000000000..d52cbd8017e --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Orca/Beast Infantry (Orca)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Orca) + + + +(Laser Rifle) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Orca + + + + + + +2 + + + +5 + + + +Laser Rifle + + + +Environment Suit, Hostile + + + +4096 + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Auto Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Auto Rifle).blk new file mode 100644 index 00000000000..4de8fb70348 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Auto Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Auto-Rifle) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Gyrojet).blk new file mode 100644 index 00000000000..aa438804bbf --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Gyrojet) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Laser Rifle).blk new file mode 100644 index 00000000000..9e637a84062 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Laser Rifle) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Needler).blk new file mode 100644 index 00000000000..ebec8f76d82 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Needler) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Pulse Laser).blk new file mode 100644 index 00000000000..4093a6f80e9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Pulse Laser) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(SMG).blk new file mode 100644 index 00000000000..310c15ac9db --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(SMG) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Shotgun).blk new file mode 100644 index 00000000000..6456fdaa36b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Shotgun) + + + +2680 + + + +2680 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Sniper).blk new file mode 100644 index 00000000000..c45981683d6 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tabiranth/Beast Infantry (Tabiranth)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tabiranth) + + + +(Sniper) + + + +2300 + + + +2300 + + + +IS Level 3 + + + +Beast:Tabiranth + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Auto-Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Auto-Rifle).blk new file mode 100644 index 00000000000..9ed4e71f1b7 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Auto-Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Auto-Rifle) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +InfantryAssaultRifle + + + +5 + + + +Clothing, Fatigues/Civilian/Non-Armored + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Gyrojet).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Gyrojet).blk new file mode 100644 index 00000000000..4b1635edd03 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Gyrojet).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Gyrojet) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Gyrojet Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Laser Rifle).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Laser Rifle).blk new file mode 100644 index 00000000000..e08e751449b --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Laser Rifle).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Laser Rifle) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Laser Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Needler).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Needler).blk new file mode 100644 index 00000000000..59fe1e8c9e6 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Needler).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Needler) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Needler Rifle + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Pulse Laser).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Pulse Laser).blk new file mode 100644 index 00000000000..553694e4481 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Pulse Laser).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Pulse Laser) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Pulse Laser Rifle (Inner Sphere) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(SMG).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(SMG).blk new file mode 100644 index 00000000000..4f3b4b682c9 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(SMG).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(SMG) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Submachine Gun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Shotgun).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Shotgun).blk new file mode 100644 index 00000000000..ba90216b183 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Shotgun).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Shotgun) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Auto-Shotgun + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Sniper).blk b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Sniper).blk new file mode 100644 index 00000000000..0d870a82774 --- /dev/null +++ b/megamek/data/mechfiles/infantry/Beast Mounted/Tariq/Beast Infantry (Tariq)(Sniper).blk @@ -0,0 +1,61 @@ +#building block data file + +1 + + +##Write the version number just in case... + +MAM0 + + + +Infantry + + + +Beast Infantry (Tariq) + + + +(Sniper) + + + +2750 + + + +2750 + + + +IS Level 3 + + + +Beast:Tariq + + + + + + +7 + + + +3 + + + +Sniper Rifle (Bolt Action) + + + +5 + + + +Generic Infantry Kit + + diff --git a/megamek/i18n/megamek/client/messages.properties b/megamek/i18n/megamek/client/messages.properties index 99db501900a..9a5b98d8a7f 100644 --- a/megamek/i18n/megamek/client/messages.properties +++ b/megamek/i18n/megamek/client/messages.properties @@ -498,6 +498,7 @@ BoardView1.Tooltip.HotLoaded=Hot-Loaded BoardView1.Tooltip.HotLoadedParens=(Hot-Loaded) BoardView1.Tooltip.Immobile=Immobile BoardView1.Tooltip.InfSpec=Specialization: {0} +BoardView1.Tooltip.InfUWDuration=Rounds of Air: {0} BoardView1.Tooltip.Internals=Internal: {0} BoardView1.Tooltip.Jammed=Jammed by Enemy ECM BoardView1.Tooltip.JumpBoosters=Jump Boosters @@ -2468,6 +2469,7 @@ MovementDisplay.ConfirmPilotingRoll=You must make the following piloting\nskill MovementDisplay.ConfirmSprint=Are you sure you want to sprint? MovementDisplay.ConfirmSuperchargerRoll=The movement you have selected will require a roll of {0} or higher\nto avoid Supercharger failure. Do you wish to proceed? MovementDisplay.ConfirmLandingGearDamage=Landing in a rough or rubble hex will damage the landing ger.\n\nAre you sure you want to land here? +MovementDisplay.ConfirmMountSuffocation=This unit will be destroyed if it does not surface for air this round.\nDo you wish to proceed? MovementDisplay.DFADialog.message=To Hit: {0} ({1}%) ({2})\nDamage to Target: {3} (in 5pt clusters){4}\nDamage to Self: {5} (in 5pt clusters) (using Kick table) MovementDisplay.DFADialog.title=D.F.A. {0}? MovementDisplay.Done=Done @@ -3795,6 +3797,7 @@ WeaponAttackAction.TeNonAeroAirborne=targeting non-aerospace airborne unit WeaponAttackAction.PutOutInferno=target is inferno fire WeaponAttackAction.SensorShadow=Target in Sensor Shadow WeaponAttackAction.SquadTarget=infantry squad target +WeaponAttackAction.MountSize=mount size WeaponAttackAction.TeGroundAttack=target making air-to-ground attack WeaponAttackAction.TeSuperheavyMech=target is superheavy mech WeaponAttackAction.TeLargeSupportUnit=target is large support unit @@ -4073,6 +4076,7 @@ GeneralInfoMapSet.over=Over: GeneralInfoMapSet.vehicle.mpL1=Cruise: GeneralInfoMapSet.vehicle.mpL2=Flank: GeneralInfoMapSet.curMoveL=Currently: +GeneralInfoMapSet.uwCounterL=Rounds of Air Remaining: GeneralInfoMapSet.currentSensorsL=Current Sensors: GeneralInfoMapSet.capacity=capacity GeneralInfoMapSet.heatL=Heat: diff --git a/megamek/i18n/megamek/common/messages.properties b/megamek/i18n/megamek/common/messages.properties index a9d87770aa0..05eed7b3bfb 100644 --- a/megamek/i18n/megamek/common/messages.properties +++ b/megamek/i18n/megamek/common/messages.properties @@ -577,6 +577,7 @@ TROView.BAModularTurret=Configurable Turret Mount TROView.Foot=Foot TROView.Mechanized=Mechanized TROView.MechanizedSCUBA=Mechanized SCUBA +TROView.BeastMounted=Beast-Mounted TROView.InfantryNote.FieldGuns=%d %s with %d rounds of ammo each. Each gun requires %d soldiers to operate. TROView.InfantryNote.SingleFieldGun=1 %s with %d rounds of ammo. Requires %d soldiers to operate. TROView.InfantryNote.SCUBA=Weapon range is halved (round down) underwater. @@ -590,6 +591,9 @@ TROView.InfantryNote.CamoArmor=+3/+2/+1 to-hit modifier to attackers if unit doe TROView.InfantryNote.IRArmor=Non-infantry units suffer a +1/+1/+2 to-hit modifier for S/M/L ranges. TROView.InfantryNote.ECMArmor=Invisible to standard/light active probes. TROView.InfantryNote.Augmented=Cybernetically enhanced infantry: +TROView.InfantryNote.MountInfantryDamage.format=+%dD6 damage vs. infantry +TROView.InfantryNote.MountVehicleDamage.format=+%d damage vs. Vehicles/'Mechs +TROView.InfantryNote.MountSizeMod.format=%d attacker to-hit MovementType.None=None MovementType.Biped=Biped MovementType.Quad=Quad @@ -622,4 +626,8 @@ MiscType.ton=ton PilotingSPA.EnvSpec.RainSpec=Rain Specialist PilotingSPA.EnvSpec.SnowSpec=Snow Specialist -PilotingSPA.EnvSpec.WindSpec=Wind Specialist \ No newline at end of file +PilotingSPA.EnvSpec.WindSpec=Wind Specialist + +BeastSize.large=Large +BeastSize.very_large=Very Large +BeastSize.monstrous=Monstrous \ No newline at end of file diff --git a/megamek/i18n/megamek/common/report-messages.properties b/megamek/i18n/megamek/common/report-messages.properties index dba621a1c8c..f7763be873b 100755 --- a/megamek/i18n/megamek/common/report-messages.properties +++ b/megamek/i18n/megamek/common/report-messages.properties @@ -209,6 +209,7 @@ 2404= () takes additional damage from beginning and ending movement in a magma hex! 2405= () is damaged by the extreme heat of liquid magma! 2410= () breaks through ice from below +2412= () runs out of air and is destroyed. 2415= collapes due to nuclear explosion ground zero. 2420= () automatically avoids the skid. 2425= () needs to avoid the skid (), rolls . diff --git a/megamek/src/megamek/client/ui/swing/DeploymentDisplay.java b/megamek/src/megamek/client/ui/swing/DeploymentDisplay.java index 78f626d89ae..447df21f3dc 100644 --- a/megamek/src/megamek/client/ui/swing/DeploymentDisplay.java +++ b/megamek/src/megamek/client/ui/swing/DeploymentDisplay.java @@ -530,10 +530,12 @@ public void hexMoused(BoardViewEvent b) { } else if (!isAero && !isWiGE) { // hovers and naval units go on the surface if ((ce().getMovementMode() == EntityMovementMode.NAVAL) - || (ce().getMovementMode() == EntityMovementMode.SUBMARINE) || (ce().getMovementMode() == EntityMovementMode.HYDROFOIL) || (ce().getMovementMode() == EntityMovementMode.HOVER)) { ce().setElevation(0); + } else if (ce().getMovementMode().isSubmarine()) { + // submarines have one level above the surface + ce().setElevation(-ce().height()); } else if (isVTOL) { // VTOLs go to elevation 1... unless set in the Lounge. // or if mechanized BA, since VTOL movement is then illegal diff --git a/megamek/src/megamek/client/ui/swing/MovementDisplay.java b/megamek/src/megamek/client/ui/swing/MovementDisplay.java index 71ba509c442..39ab6c74e55 100644 --- a/megamek/src/megamek/client/ui/swing/MovementDisplay.java +++ b/megamek/src/megamek/client/ui/swing/MovementDisplay.java @@ -1703,7 +1703,7 @@ && ce().getGame().getBoard().getHex(cmd.getFinalCoords()) if (landingPath.stream().map(c -> game().getBoard().getHex(c)).filter(Objects::nonNull) .anyMatch(h -> h.containsTerrain(Terrains.ROUGH) || h.containsTerrain(Terrains.RUBBLE))) { ConfirmDialog nag = new ConfirmDialog(clientgui.frame, - Messages.getString("MovementDisplay.areYourSure"), + Messages.getString("MovementDisplay.areYouSure"), Messages.getString("MovementDisplay.ConfirmLandingGearDamage"), false); nag.setVisible(true); @@ -1718,6 +1718,21 @@ && ce().getGame().getBoard().getHex(cmd.getFinalCoords()) isUsingChaff = false; } + if (ce() instanceof Infantry) { + InfantryMount mount = ((Infantry) ce()).getMount(); + if ((mount != null) && ce().getMovementMode().isSubmarine() && (ce().underwaterRounds >= mount.getUWEndurance()) + && cmd.isAllUnderwater(game())) { + ConfirmDialog nag = new ConfirmDialog(clientgui.frame, + Messages.getString("MovementDisplay.areYouSure"), + Messages.getString("MovementDisplay.ConfirmMountSuffocation"), + false); + nag.setVisible(true); + if (!nag.getAnswer()) { + return; + } + } + } + disableButtons(); clientgui.getBoardView().clearMovementData(); clientgui.getBoardView().clearMovementEnvelope(); diff --git a/megamek/src/megamek/client/ui/swing/tooltip/UnitToolTip.java b/megamek/src/megamek/client/ui/swing/tooltip/UnitToolTip.java index 7d46ea42e26..3b9dbb9717e 100644 --- a/megamek/src/megamek/client/ui/swing/tooltip/UnitToolTip.java +++ b/megamek/src/megamek/client/ui/swing/tooltip/UnitToolTip.java @@ -1316,6 +1316,17 @@ private static StringBuilder inGameValues(Entity entity, Player localPlayer, boo } } + if (entity instanceof Infantry) { + InfantryMount mount = ((Infantry) entity).getMount(); + if ((mount != null) && entity.getMovementMode().isSubmarine() && (entity.underwaterRounds > 0)) { + String uw = "
" + addToTT("InfUWDuration", NOBR, mount.getUWEndurance() - entity.underwaterRounds).toString(); + if (entity.underwaterRounds >=mount.getUWEndurance()) { + uw = guiScaledFontHTML(GUIP.getWarningColor()) + uw + ""; + } + result += uw; + } + } + String sAeroInfo = ""; if (entity.isAero()) { diff --git a/megamek/src/megamek/common/Entity.java b/megamek/src/megamek/common/Entity.java index 423dc5e681e..9a49f73ed52 100644 --- a/megamek/src/megamek/common/Entity.java +++ b/megamek/src/megamek/common/Entity.java @@ -289,6 +289,7 @@ public abstract class Entity extends TurnOrdered implements Transporter, Targeta public int coolFromExternal = 0; public int delta_distance = 0; public int mpUsed = 0; + public int underwaterRounds = 0; public EntityMovementType moved = EntityMovementType.MOVE_NONE; public EntityMovementType movedLastRound = EntityMovementType.MOVE_NONE; private boolean movedBackwards = false; @@ -1947,7 +1948,7 @@ public void setElevation(int elevation) { /** * A helper function for fiddling with elevation. Takes the current hex, a * hex being moved to, returns the elevation the Entity will be considered - * to be at w/r/t it's new hex. + * to be at w/r/t its new hex. */ public int calcElevation(Hex current, Hex next, int assumedElevation, boolean climb, boolean wigeEndClimbPrevious) { @@ -1990,12 +1991,11 @@ public int calcElevation(Hex current, Hex next, int assumedElevation, } // Elevation is this height of the level above the actual surface elevation of the hex. retVal = nextLevel - next.getLevel(); - } else if ((getMovementMode() == EntityMovementMode.SUBMARINE) - || ((getMovementMode() == EntityMovementMode.INF_UMU) + } else if (((getMovementMode().isSubmarine() || getMovementMode().isUMUInfantry()) && next.containsTerrain(Terrains.WATER) && current.containsTerrain(Terrains.WATER)) - || (getMovementMode() == EntityMovementMode.VTOL) - || ((getMovementMode() == EntityMovementMode.QUAD_SWIM) && hasUMU()) - || ((getMovementMode() == EntityMovementMode.BIPED_SWIM) && hasUMU())) { + || getMovementMode().isVTOL() + || (getMovementMode().isQuadSwim() && hasUMU()) + || (getMovementMode().isBipedSwim() && hasUMU())) { retVal += current.getLevel(); retVal -= next.getLevel(); } else { @@ -2350,8 +2350,8 @@ && getMovementMode() == EntityMovementMode.INF_UMU) { } // only mechs can move underwater if (hex.containsTerrain(Terrains.WATER) - && (assumedAlt < hex.getLevel()) && !(this instanceof Mech) - && !(this instanceof Protomech)) { + && (assumedAlt < hex.getLevel()) && !(this instanceof Mech) + && !(this instanceof Protomech)) { return false; } // can move on the ground unless its underwater diff --git a/megamek/src/megamek/common/Infantry.java b/megamek/src/megamek/common/Infantry.java index d2de88f3641..e7dd34a47ef 100644 --- a/megamek/src/megamek/common/Infantry.java +++ b/megamek/src/megamek/common/Infantry.java @@ -21,6 +21,7 @@ import megamek.MMConstants; import megamek.client.ui.swing.calculationReport.CalculationReport; +import megamek.common.annotations.Nullable; import megamek.common.cost.InfantryCostCalculator; import megamek.common.enums.AimingMode; import megamek.common.enums.GamePhase; @@ -119,6 +120,7 @@ public class Infantry extends Entity { private boolean isTakingCover = false; private boolean canCallSupport = true; private boolean isCallingSupport = false; + private InfantryMount mount = null; /** The maximum number of troopers in an infantry platoon. */ public static final int INF_PLT_MAX_MEN = 30; @@ -169,6 +171,17 @@ public CrewType defaultCrewType() { return CrewType.INFANTRY_CREW; } + public TechAdvancement getMotiveTechAdvancement() { + return getMotiveTechAdvancement(mount == null ? getMovementMode() : EntityMovementMode.NONE); + } + + /** + * Generates the {@link TechAdvancement} for the unit's motive type. A value of EntityMovementMode.NONE indicates + * Beast-mounted infantry. + * + * @param movementMode An infantry movement mode. + * @return The Tech Advancement data for the movement mode. + */ public static TechAdvancement getMotiveTechAdvancement(EntityMovementMode movementMode) { TechAdvancement techAdvancement = new TechAdvancement(TECH_BASE_ALL) .setAdvancement(DATE_PS, DATE_PS, DATE_PS) @@ -214,6 +227,12 @@ public static TechAdvancement getMotiveTechAdvancement(EntityMovementMode moveme .setAvailability(RATING_D, RATING_D, RATING_D, RATING_D) .setStaticTechLevel(SimpleTechLevel.ADVANCED); break; + case NONE: + // Beast-mounted + techAdvancement.setAdvancement(DATE_PS, DATE_PS).setTechRating(RATING_A) + .setAvailability(RATING_A, RATING_A, RATING_A, RATING_A) + .setStaticTechLevel(SimpleTechLevel.ADVANCED); + break; case INF_LEG: default: techAdvancement.setTechRating(RATING_A) @@ -288,7 +307,7 @@ public static TechAdvancement getAntiMekTA() { @Override protected void addSystemTechAdvancement(CompositeTechLevel ctl) { super.addSystemTechAdvancement(ctl); - ctl.addComponent(Infantry.getMotiveTechAdvancement(movementMode)); + ctl.addComponent(getMotiveTechAdvancement()); if (hasSpecialization(COMBAT_ENGINEERS)) { ctl.addComponent(Infantry.getCombatEngineerTA()); } @@ -346,33 +365,36 @@ public boolean getIsCallingSupport() { @Override public int getWalkMP(MPCalculationSetting mpCalculationSetting) { int mp = getOriginalWalkMP(); - // Encumbering armor (TacOps, pg. 318) - if (encumbering) { - mp = Math.max(mp - 1, 1); - } - if ((getSecondaryWeaponsPerSquad() > 1) - && !hasAbility(OptionsConstants.MD_TSM_IMPLANT) - && !hasAbility(OptionsConstants.MD_DERMAL_ARMOR) - && (null != secondaryWeapon) && secondaryWeapon.hasFlag(WeaponType.F_INF_SUPPORT) - && !getMovementMode().isTracked() - && !getMovementMode().isJumpInfantry()) { - mp = Math.max(mp - 1, 0); - } - // PL-MASC IntOps p.84 - if ((null != getCrew()) - && hasAbility(OptionsConstants.MD_PL_MASC) - && getMovementMode().isLegInfantry() - && isConventionalInfantry()) { - mp += 1; - } + // Beast mounted infantry depends entirely on the creature + if (mount == null) { + // Encumbering armor (TacOps, pg. 318) + if (encumbering) { + mp = Math.max(mp - 1, 1); + } + if ((getSecondaryWeaponsPerSquad() > 1) + && !hasAbility(OptionsConstants.MD_TSM_IMPLANT) + && !hasAbility(OptionsConstants.MD_DERMAL_ARMOR) + && (null != secondaryWeapon) && secondaryWeapon.hasFlag(WeaponType.F_INF_SUPPORT) + && !getMovementMode().isTracked() + && !getMovementMode().isJumpInfantry()) { + mp = Math.max(mp - 1, 0); + } + // PL-MASC IntOps p.84 + if ((null != getCrew()) + && hasAbility(OptionsConstants.MD_PL_MASC) + && getMovementMode().isLegInfantry() + && isConventionalInfantry()) { + mp += 1; + } - if ((null != getCrew()) && hasAbility(OptionsConstants.INFANTRY_FOOT_CAV) - && ((getMovementMode().isLegInfantry()) || (getMovementMode().isJumpInfantry()))) { - mp += 1; - } + if ((null != getCrew()) && hasAbility(OptionsConstants.INFANTRY_FOOT_CAV) + && ((getMovementMode().isLegInfantry()) || (getMovementMode().isJumpInfantry()))) { + mp += 1; + } - if (hasActiveFieldArtillery()) { - mp = Math.min(mp, 1); + if (hasActiveFieldArtillery()) { + mp = Math.min(mp, 1); + } } if (!mpCalculationSetting.ignoreWeather && (null != game)) { @@ -428,14 +450,16 @@ public int getRunMP(MPCalculationSetting mpCalculationSetting) { @Override public int getJumpMP(MPCalculationSetting mpCalculationSetting) { int mp = hasUMU() ? 0 : getOriginalJumpMP(); - if ((getSecondaryWeaponsPerSquad() > 1) - && !hasAbility(OptionsConstants.MD_TSM_IMPLANT) - && !hasAbility(OptionsConstants.MD_DERMAL_ARMOR) - && !getMovementMode().isSubmarine() - && (null != secondaryWeapon) && secondaryWeapon.hasFlag(WeaponType.F_INF_SUPPORT)) { - mp = Math.max(mp - 1, 0); - } else if (movementMode.isVTOL() && getSecondaryWeaponsPerSquad() > 0) { - mp = Math.max(mp - 1, 0); + if (mount == null) { + if ((getSecondaryWeaponsPerSquad() > 1) + && !hasAbility(OptionsConstants.MD_TSM_IMPLANT) + && !hasAbility(OptionsConstants.MD_DERMAL_ARMOR) + && !getMovementMode().isSubmarine() + && (null != secondaryWeapon) && secondaryWeapon.hasFlag(WeaponType.F_INF_SUPPORT)) { + mp = Math.max(mp - 1, 0); + } else if (movementMode.isVTOL() && getSecondaryWeaponsPerSquad() > 0) { + mp = Math.max(mp - 1, 0); + } } if (!mpCalculationSetting.ignoreGravity) { @@ -476,6 +500,11 @@ public int getAllUMUCount() { return hasUMU() ? jumpMP : 0; } + @Override + public int height() { + return mount == null ? 0 : mount.getSize().height; + } + @Override public boolean antiTSMVulnerable() { if (!hasAbility(OptionsConstants.MD_TSM_IMPLANT)) { @@ -558,17 +587,36 @@ public boolean isLocationProhibited(Coords c, int currElevation) { } if ((hex.terrainLevel(Terrains.WATER) <= 0) && getMovementMode().isSubmarine()) { - return true; + return (mount == null) || (mount.getSecondaryGroundMP() == 0); } if ((hex.terrainLevel(Terrains.WATER) > 0) && !hex.containsTerrain(Terrains.ICE)) { - return !getMovementMode().isHover() && !getMovementMode().isUMUInfantry() - && !getMovementMode().isSubmarine() && !getMovementMode().isVTOL(); + if (mount == null) { + return !getMovementMode().isHover() && !getMovementMode().isUMUInfantry() + && !getMovementMode().isSubmarine() && !getMovementMode().isVTOL(); + } else { + return hex.terrainLevel(Terrains.WATER) > mount.getMaxWaterDepth(); + } } return false; } @Override + public boolean isElevationValid(int assumedElevation, Hex hex) { + if (mount != null) { + // Mounted infantry can enter water hexes if the mount allows it + if (hex.containsTerrain(Terrains.WATER) && (hex.terrainLevel(Terrains.WATER) <= mount.getMaxWaterDepth())) { + return true; + } + // Aquatic mounts may be able to move onto land + if (!hex.containsTerrain(Terrains.WATER) && movementMode.isSubmarine()) { + return mount.getSecondaryGroundMP() > 0; + } + } + return super.isElevationValid(assumedElevation, hex); + } + + @Override public String getMovementString(EntityMovementType mtype) { switch (mtype) { case MOVE_NONE: @@ -577,7 +625,7 @@ public String getMovementString(EntityMovementType mtype) { case MOVE_RUN: switch (getMovementMode()) { case INF_LEG: - return "Walked"; + return mount == null ? "Walked" : "Rode"; case INF_MOTORIZED: return "Biked"; case HOVER: @@ -1215,7 +1263,6 @@ public void setArmorKit(EquipmentType armorKit) { } catch (LocationFullException ex) { LogManager.getLogger().error("", ex); } - damageDivisor = ((MiscType) armorKit).getDamageDivisor(); encumbering = (armorKit.getSubType() & MiscType.S_ENCUMBERING) != 0; spaceSuit = (armorKit.getSubType() & MiscType.S_SPACE_SUIT) != 0; dest = (armorKit.getSubType() & MiscType.S_DEST) != 0; @@ -1223,10 +1270,15 @@ public void setArmorKit(EquipmentType armorKit) { sneak_ir = (armorKit.getSubType() & MiscType.S_SNEAK_IR) != 0; sneak_ecm = (armorKit.getSubType() & MiscType.S_SNEAK_ECM) != 0; } + calcDamageDivisor(); } public double calcDamageDivisor() { - double divisor = damageDivisor; + double divisor = 1.0; + EquipmentType armorKit = getArmorKit(); + if (armorKit != null) { + divisor = ((MiscType) armorKit).getDamageDivisor(); + } // TSM implant reduces divisor to 0.5 if no other armor is worn if ((divisor == 1.0) && hasAbility(OptionsConstants.MD_TSM_IMPLANT)) { divisor = 0.5; @@ -1235,6 +1287,9 @@ public double calcDamageDivisor() { if (hasAbility(OptionsConstants.MD_DERMAL_ARMOR)) { divisor += 1.0; } + if (mount != null) { + divisor *= mount.getDamageDivisor(); + } return divisor; } @@ -1447,6 +1502,25 @@ public void setMicrolite(boolean microlite) { this.isMicrolite = microlite; } + public void setMount(InfantryMount mount) { + this.mount = mount; + if (mount != null) { + setMovementMode(mount.getMovementMode()); + if (mount.getMovementMode().isLegInfantry()) { + setOriginalWalkMP(mount.getMP()); + } else { + setOriginalWalkMP(mount.getSecondaryGroundMP()); + setOriginalJumpMP(mount.getMP()); + } + setArmorDamageDivisor(mount.getDamageDivisor()); + } + calcDamageDivisor(); + } + + public @Nullable InfantryMount getMount() { + return mount; + } + /** * Used to check for standard or motorized SCUBA infantry, which have a maximum depth of 2. * @return true if this is a conventional infantry unit with non-mechanized SCUBA specialization @@ -1581,7 +1655,7 @@ public void setMovementMode(EntityMovementMode movementMode) { default: setOriginalWalkMP(1); } - addTechComponent(Infantry.getMotiveTechAdvancement(movementMode)); + addTechComponent(getMotiveTechAdvancement()); } } @@ -1619,6 +1693,13 @@ public boolean canMakeAntiMekAttacks() { @Override public double getWeight() { + if (mount != null) { + if (mount.getSize().troopsPerCreature > 1) { + return (mount.getWeight() + 0.2 * getSquadSize()) * getSquadCount(); + } else { + return (mount.getWeight() + 0.2) * activeTroopers; + } + } double mult; switch (getMovementMode()) { case INF_MOTORIZED: diff --git a/megamek/src/megamek/common/InfantryMount.java b/megamek/src/megamek/common/InfantryMount.java new file mode 100644 index 00000000000..32e1a3ea353 --- /dev/null +++ b/megamek/src/megamek/common/InfantryMount.java @@ -0,0 +1,305 @@ +/* + * MegaMek - + * Copyright (c) 2023 - The MegaMek Team. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ +package megamek.common; + +import java.io.Serializable; +import java.util.List; +import java.util.StringJoiner; + +/** + * Stats for beast mounted infantry units. See TO:AU&E, p. 106 + */ +public class InfantryMount implements Serializable { + public enum BeastSize { + LARGE(1, 21, 0, 0, true, true, 0, 0, "BeastSize.large"), + VERY_LARGE(2, 7, -1, 2, true, false, 1, 1, "BeastSize.very_large"), + MONSTROUS(4, 2, -2, 3, false, false, 2, 1, "BeastSize.monstrous"); + + /** Maximum number of troopers that can be mounted on each beast. For values > 2, + * each creature is a separate squad. */ + public final int troopsPerCreature; + /** Maximum number of creatures allowed in a single platoon */ + public final int creaturesPerPlatoon; + /** Modifer to attack rolls against the beast-mounted infantry due to size */ + public final int toHitMod; + /** Maximum number of support weapons allowed per creature. Divide weapon crew needs by 2, rounding up */ + public final int supportWeaponsPerCreature; + /** Whether the infantry unit is permitted to make anti-mech leg attacks */ + public final boolean canMakeLegAttacks; + /** Whether the infantry unit is permitted to make anti-=mech swarm attacks */ + public final boolean canMakeSwarmAttacks; + /** Additional MP required to enter a building hex. The building takes twice this much CF damage. */ + public final int buildingMP; + public final int height; + private final String messageId; + + BeastSize(int troopsPerCreature, int creaturesPerPlatoon, int toHitMod, + int supportWeaponsPerCreature, boolean canMakeLegAttacks, + boolean canMakeSwarmAttacks, int buildingMP, int height, String messageId) { + this.troopsPerCreature = troopsPerCreature; + this.creaturesPerPlatoon = creaturesPerPlatoon; + this.toHitMod = toHitMod; + this.supportWeaponsPerCreature = supportWeaponsPerCreature; + this.canMakeLegAttacks = canMakeLegAttacks; + this.canMakeSwarmAttacks = canMakeSwarmAttacks; + this.buildingMP = buildingMP; + this.height = height; + this.messageId = messageId; + } + + /** + * @return The amount of CF damage done to a building when entering its hex. + */ + public int buildingDamage() { + return buildingMP * 2; + } + + public String displayName() { + return Messages.getString(messageId); + } + } + + private final String name; + private final BeastSize size; + private final double weight; + private final int movementPoints; + private final EntityMovementMode movementMode; + private final int burstDamage; + private final int vehicleDamage; + private final double damageDivisor; + private final int maxWaterDepth; + private final int secondaryGroundMP; + private final int uwEndurance; + private final boolean custom; + + private InfantryMount(String name, BeastSize size, double weight, int movementPoints, + EntityMovementMode movementMode, int burstDamage, + int vehicleDamage, double damageDivisor, int maxWaterDepth, + int secondaryGroundMP, int uwEndurance, boolean custom) { + this.name = name; + this.size = size; + this.weight = weight; + this.movementPoints = movementPoints; + this.movementMode = movementMode; + this.burstDamage = burstDamage; + this.vehicleDamage = vehicleDamage; + this.damageDivisor = damageDivisor; + this.maxWaterDepth = maxWaterDepth; + this.secondaryGroundMP = secondaryGroundMP; + this.uwEndurance = uwEndurance; + this.custom = custom; + } + + public InfantryMount(String name, BeastSize size, double weight, int movementPoints, + EntityMovementMode movementMode, int burstDamage, + int vehicleDamage, double damageDivisor, int maxWaterDepth, + int secondaryGroundMP, int uwEndurance) { + this(name, size, weight, movementPoints, movementMode, burstDamage, vehicleDamage, damageDivisor, + maxWaterDepth, secondaryGroundMP, uwEndurance, true); + } + + + /** + * @return The name of the beast. + */ + public String getName() { + return name; + } + + /** + * @return The size class of the beast. + */ + public BeastSize getSize() { + return size; + } + + /** + * @return The weight of each beast in tons. Add 2t per trooper to get total weight. + */ + public double getWeight() { + return weight; + } + + /** + * @return The number of movement points using the primary movement node. + */ + public int getMP() { + return movementPoints; + } + + /** + * @return The primary movement mode. + */ + public EntityMovementMode getMovementMode() { + return movementMode; + } + + /** + * + * @return The number of damage dice to use as burst damage against conventional infantry + * in the same hex. + */ + public int getBurstDamageDice() { + return burstDamage; + } + + /** + * @return The amount of additonal damage done to units other than conventional infantry in the same hex. + */ + public int getVehicleDamage() { + return vehicleDamage; + } + + /** + * @return The number used to divide any damage received in combat. + */ + public double getDamageDivisor() { + return damageDivisor; + } + + /** + * @return The maximum depth of water the unit may enter. + */ + public int getMaxWaterDepth() { + return maxWaterDepth; + } + + /** + * @return For units with a primary movement mode other than ground, this is + * the number of ground MP available. + */ + public int getSecondaryGroundMP() { + return secondaryGroundMP; + } + + /** + * @return For creatures with underwater movement, this is the number of turns they + * can stay underwater before needing to resurface. + */ + public int getUWEndurance() { + return uwEndurance; + } + + @Override + public String toString() { + if (custom) { + StringJoiner sj = new StringJoiner(","); + sj.add(name).add(size.name()).add(String.valueOf(weight)).add(String.valueOf(movementPoints)) + .add(movementMode.name()).add(String.valueOf(burstDamage)).add(String.valueOf(vehicleDamage)) + .add(String.valueOf(damageDivisor)).add(String.valueOf(maxWaterDepth)) + .add(String.valueOf(secondaryGroundMP)).add(String.valueOf(uwEndurance)); + return "Beast:Custom:" + sj; + } else { + return "Beast:" + name; + } + } + + public static InfantryMount parse(String str) { + final String toParse = str.trim().replace("Beast:", ""); + if (toParse.startsWith("Custom:")) { + // Provide some decent information about which field is causing the problem + String[] fields = toParse.replace("Custom:", "").split(","); + if (fields.length < 11) { + throw new IllegalArgumentException("Infantry mount string " + str + " does not have enough fields."); + } + BeastSize size; + try { + size = BeastSize.valueOf(fields[1]); + } catch (Exception ex) { + throw new IllegalArgumentException("Could not parse BeastSize " + fields[1]); + } + double weight; + try { + weight = Double.parseDouble(fields[2]); + } catch (Exception ex) { + throw new IllegalArgumentException("Could not parse InfantryMount movementMode " + fields[4]); + } + EntityMovementMode mode; + try { + mode = EntityMovementMode.valueOf(fields[4]); + } catch (Exception ex) { + throw new IllegalArgumentException("Could not parse InfantryMount movementMode " + fields[4]); + } + double divisor; + try { + divisor = Double.parseDouble(fields[7]); + } catch (Exception ex) { + throw new IllegalArgumentException("Could not parse InfantryMount damageDivisor " + fields[7]); + } + return new InfantryMount(fields[0], size, weight, parseIntField(fields[3], "movementPoints"), + mode, parseIntField(fields[5], "burstDamage"), parseIntField(fields[6], "vehicleDamage"), + divisor, parseIntField(fields[8], "maxWaterDepth"), parseIntField(fields[9], "secondaryGroundMP"), + parseIntField(fields[10], "uwEndurance")); + } else { + return sampleMounts.stream().filter(it -> it.name.equals(toParse)).findFirst() + .orElseThrow(() -> new IllegalArgumentException("Could not parse beast mount " + toParse)); + } + } + + private static int parseIntField(String field, String fieldName) { + try { + return Integer.parseInt(field); + } catch (Exception ex) { + throw new IllegalArgumentException("Could not parse InfantryMount field " + fieldName + " value " + field); + } + } + + public static final InfantryMount DONKEY = new InfantryMount("Donkey", BeastSize.LARGE, + 0.15, 2, EntityMovementMode.INF_LEG, 0, 0, 1.0, + 0, 0, 0, false); + + public static final InfantryMount COVENTRY_KANGAROO = new InfantryMount("Coventry Kangaroo", BeastSize.LARGE, + 0.11, 3, EntityMovementMode.INF_LEG, 1, 1, 1.0, + 0, 0, 0, false); + + public static final InfantryMount HORSE = new InfantryMount("Horse", BeastSize.LARGE, + 0.5, 3, EntityMovementMode.INF_LEG, 0, 0, 1.0, + 0, 0, 0, false); + + public static final InfantryMount CAMEL = new InfantryMount("Camel", BeastSize.LARGE, + 0.65, 2, EntityMovementMode.INF_LEG, 0, 0, 1.0, + 0, 0, 0, false); + + public static final InfantryMount BRANTH = new InfantryMount("Branth", BeastSize.LARGE, + 0.72, 6, EntityMovementMode.VTOL, 2, 1, 1.0, + 0, 0, 0, false); + + public static final InfantryMount ODESSAN_RAXX = new InfantryMount("Odessan Raxx", BeastSize.LARGE, + 2.4, 2, EntityMovementMode.INF_LEG, 1, 1, 1.0, + 0, 0, 0, false); + + public static final InfantryMount TABIRANTH = new InfantryMount("Tabiranth", BeastSize.LARGE, + 0.25, 2, EntityMovementMode.INF_LEG, 1, 1, 1.0, + 0, 0, 0, false); + + public static final InfantryMount TARIQ = new InfantryMount("Tariq", BeastSize.LARGE, + 0.51, 5, EntityMovementMode.INF_LEG, 0, 0, 1.0, + 0, 0, 0, false); + + public static final InfantryMount ELEPHANT = new InfantryMount("Elephant", BeastSize.VERY_LARGE, + 6.0, 2, EntityMovementMode.INF_LEG, 1, 1, 2.0, + 1, 0, 0, false); + + public static final InfantryMount ORCA = new InfantryMount("Orca", BeastSize.VERY_LARGE, + 7.2, 5, EntityMovementMode.SUBMARINE, 2, 1, 2.0, + Integer.MAX_VALUE, 0, 180, false); + + public static final InfantryMount HIPPOSAUR = new InfantryMount("Hipposaur", BeastSize.MONSTROUS, + 35.5, 2, EntityMovementMode.SUBMARINE, 10, 4, 4.0, + Integer.MAX_VALUE, 1, 2, false); + + public static final List sampleMounts = List.of(DONKEY, COVENTRY_KANGAROO, HORSE, CAMEL, BRANTH, + ODESSAN_RAXX, TABIRANTH, TARIQ, ELEPHANT, ORCA, HIPPOSAUR); +} diff --git a/megamek/src/megamek/common/MechFileParser.java b/megamek/src/megamek/common/MechFileParser.java index f44bca7d6b2..94dc820763b 100644 --- a/megamek/src/megamek/common/MechFileParser.java +++ b/megamek/src/megamek/common/MechFileParser.java @@ -734,15 +734,20 @@ else if (m.getType().hasFlag(MiscType.F_APOLLO) // physical attacks for conventional infantry else if ((ent instanceof Infantry) && ((Infantry) ent).canMakeAntiMekAttacks()) { try { - ent.addEquipment(EquipmentType.get(Infantry.SWARM_MEK), - Infantry.LOC_INFANTRY, false, - BattleArmor.MOUNT_LOC_NONE, false); - ent.addEquipment(EquipmentType.get(Infantry.STOP_SWARM), - Infantry.LOC_INFANTRY, false, - BattleArmor.MOUNT_LOC_NONE, false); - ent.addEquipment(EquipmentType.get(Infantry.LEG_ATTACK), - Infantry.LOC_INFANTRY, false, - BattleArmor.MOUNT_LOC_NONE, false); + InfantryMount mount = ((Infantry) ent).getMount(); + if ((mount == null) || mount.getSize().canMakeSwarmAttacks) { + ent.addEquipment(EquipmentType.get(Infantry.SWARM_MEK), + Infantry.LOC_INFANTRY, false, + BattleArmor.MOUNT_LOC_NONE, false); + ent.addEquipment(EquipmentType.get(Infantry.STOP_SWARM), + Infantry.LOC_INFANTRY, false, + BattleArmor.MOUNT_LOC_NONE, false); + } + if ((mount == null) || mount.getSize().canMakeLegAttacks) { + ent.addEquipment(EquipmentType.get(Infantry.LEG_ATTACK), + Infantry.LOC_INFANTRY, false, + BattleArmor.MOUNT_LOC_NONE, false); + } } catch (LocationFullException ex) { throw new EntityLoadingException(ex.getMessage()); } diff --git a/megamek/src/megamek/common/MechView.java b/megamek/src/megamek/common/MechView.java index f3e5bd4083c..a5ceccc6046 100644 --- a/megamek/src/megamek/common/MechView.java +++ b/megamek/src/megamek/common/MechView.java @@ -340,6 +340,9 @@ public MechView(final Entity entity, final boolean showDetail, final boolean use .append(warningEnd()); } } + if (entity.isConventionalInfantry() && ((Infantry) entity).getMount() != null) { + moveString.append(" (").append(((Infantry) entity).getMount().getName()).append(")"); + } // TODO : Add STOL message as part of the movement line if (isConvFighter && ((Aero) entity).isVSTOL()) { diff --git a/megamek/src/megamek/common/MovePath.java b/megamek/src/megamek/common/MovePath.java index 91dcb05abf1..0dcc284d871 100644 --- a/megamek/src/megamek/common/MovePath.java +++ b/megamek/src/megamek/common/MovePath.java @@ -1669,6 +1669,21 @@ public boolean automaticWiGELanding(boolean includeMovePathHexes) { } } + /** + * @return Whether the entire path is submerged. A unit is only considered submerged when entirely undewater. + */ + public boolean isAllUnderwater(Game game) { + for (MoveStep step : steps) { + Hex hex = game.getBoard().getHex(step.getPosition()); + if (!hex.containsTerrain(Terrains.WATER) + || (step.getElevation() >= -entity.height())) { + return false; + } + } + return game.getBoard().getHex(entity.getPosition()).containsTerrain(Terrains.WATER) + && entity.relHeight() < 0; + } + protected static class MovePathComparator implements Comparator { private final Coords destination; boolean backward; diff --git a/megamek/src/megamek/common/MoveStep.java b/megamek/src/megamek/common/MoveStep.java index 9618436dd16..4740d116d7a 100644 --- a/megamek/src/megamek/common/MoveStep.java +++ b/megamek/src/megamek/common/MoveStep.java @@ -2334,7 +2334,8 @@ && getClearance() < 0) { if ((getEntity().getMovementMode() == EntityMovementMode.BIPED_SWIM) || (getEntity().getMovementMode() == EntityMovementMode.QUAD_SWIM) || ((getEntity() instanceof Infantry - && getEntity().getMovementMode() == EntityMovementMode.SUBMARINE))) { + && getEntity().getMovementMode().isSubmarine() + && (currHex.terrainLevel(Terrains.WATER) > 0)))) { tmpWalkMP = entity.getActiveUMUCount(); } @@ -3167,6 +3168,8 @@ && getClearance() == 0) { } else if (isMechanizedInfantry) { // mechanized infantry pays 1 extra mp += 1; + } else if (isInfantry && (((Infantry) entity).getMount() != null)) { + mp += ((Infantry) entity).getMount().getSize().buildingMP; } } diff --git a/megamek/src/megamek/common/actions/WeaponAttackAction.java b/megamek/src/megamek/common/actions/WeaponAttackAction.java index 2f67648ec58..f24806450a7 100644 --- a/megamek/src/megamek/common/actions/WeaponAttackAction.java +++ b/megamek/src/megamek/common/actions/WeaponAttackAction.java @@ -4208,9 +4208,15 @@ else if ((atype != null) toHit.addModifier(1, Messages.getString("WeaponAttackAction.BaTarget")); } - // infantry squads are also hard to hit - if ((te instanceof Infantry) && te.isConventionalInfantry() && ((Infantry) te).isSquad()) { - toHit.addModifier(1, Messages.getString("WeaponAttackAction.SquadTarget")); + if ((te instanceof Infantry) && te.isConventionalInfantry()) { + // infantry squads are also hard to hit + if (((Infantry) te).isSquad()) { + toHit.addModifier(1, Messages.getString("WeaponAttackAction.SquadTarget")); + } + InfantryMount mount = ((Infantry) te).getMount(); + if ((mount != null) && (mount.getSize().toHitMod != 0)) { + toHit.addModifier(mount.getSize().toHitMod, Messages.getString("WeaponAttackAction.MountSize")); + } } // pl-masc makes foot infantry harder to hit - IntOps p.84 diff --git a/megamek/src/megamek/common/cost/InfantryCostCalculator.java b/megamek/src/megamek/common/cost/InfantryCostCalculator.java index b0d27da9383..7ede4d0dbef 100644 --- a/megamek/src/megamek/common/cost/InfantryCostCalculator.java +++ b/megamek/src/megamek/common/cost/InfantryCostCalculator.java @@ -92,11 +92,13 @@ public static double calculateCost(Infantry infantry, CalculationReport costRepo costs[idx++] = -infantry.getPriceMultiplier(); // add in field gun costs - costs[idx] = infantry.originalFieldWeapons().stream() + costs[idx++] = infantry.originalFieldWeapons().stream() .mapToDouble(m -> m.getType().getCost(infantry, false, m.getLocation())).sum(); + costs[idx] = infantry.getMount() == null ? 0 : 5000 * infantry.getWeight(); + double cost = CostCalculator.calculateCost(costs); - String[] systemNames = { "Weapons", "Armor", "Multiplier", "Field Gun" }; + String[] systemNames = { "Weapons", "Armor", "Multiplier", "Field Gun", "Mount" }; CostCalculator.fillInReport(costReport, infantry, ignoreAmmo, systemNames, -1, cost, costs); return cost; } diff --git a/megamek/src/megamek/common/loaders/BLKFile.java b/megamek/src/megamek/common/loaders/BLKFile.java index fee0c2482ca..18667a452c9 100644 --- a/megamek/src/megamek/common/loaders/BLKFile.java +++ b/megamek/src/megamek/common/loaders/BLKFile.java @@ -595,7 +595,11 @@ public static BuildingBlock getBlock(Entity t) { } blk.writeBlockData("type", type); - blk.writeBlockData("motion_type", t.getMovementModeAsString()); + if ((t instanceof Infantry) && ((Infantry) t).getMount() != null) { + blk.writeBlockData("motion_type", ((Infantry) t).getMount().toString()); + } else { + blk.writeBlockData("motion_type", t.getMovementModeAsString()); + } if(t.getTransports().size() > 0) { // We should only write the transporters block for units that can and do diff --git a/megamek/src/megamek/common/loaders/BLKInfantryFile.java b/megamek/src/megamek/common/loaders/BLKInfantryFile.java index 9db1a166463..cb27ffa9dd6 100644 --- a/megamek/src/megamek/common/loaders/BLKInfantryFile.java +++ b/megamek/src/megamek/common/loaders/BLKInfantryFile.java @@ -13,13 +13,7 @@ */ package megamek.common.loaders; -import megamek.common.Entity; -import megamek.common.EntityMovementMode; -import megamek.common.EquipmentType; -import megamek.common.Infantry; -import megamek.common.LocationFullException; -import megamek.common.MiscType; -import megamek.common.WeaponType; +import megamek.common.*; import megamek.common.util.BuildingBlock; import megamek.common.weapons.infantry.InfantryWeapon; @@ -81,15 +75,19 @@ public Entity getEntity() throws EntityLoadingException { } String sMotion = dataFile.getDataAsString("motion_type")[0]; t.setMicrolite(sMotion.equalsIgnoreCase("microlite")); - EntityMovementMode nMotion = EntityMovementMode.parseFromString(sMotion); - if (nMotion.isNone()) { - throw new EntityLoadingException("Invalid movement type: " + sMotion); - } - if (nMotion == EntityMovementMode.INF_UMU - && sMotion.toLowerCase().contains("motorized")) { - t.setMotorizedScuba(); + if (sMotion.startsWith("Beast:")) { + t.setMount(InfantryMount.parse(sMotion)); } else { - t.setMovementMode(nMotion); + EntityMovementMode nMotion = EntityMovementMode.parseFromString(sMotion); + if (nMotion.isNone()) { + throw new EntityLoadingException("Invalid movement type: " + sMotion); + } + if (nMotion == EntityMovementMode.INF_UMU + && sMotion.toLowerCase().contains("motorized")) { + t.setMotorizedScuba(); + } else { + t.setMovementMode(nMotion); + } } // get primary and secondary weapons diff --git a/megamek/src/megamek/common/templates/InfantryTROView.java b/megamek/src/megamek/common/templates/InfantryTROView.java index d5c806a3778..2227f13c342 100644 --- a/megamek/src/megamek/common/templates/InfantryTROView.java +++ b/megamek/src/megamek/common/templates/InfantryTROView.java @@ -77,22 +77,26 @@ protected void initModel(EntityVerifier verifier) { setModelData("notes", String.join(" ", notes)); } - switch (inf.getMovementMode()) { - case INF_LEG: - setModelData("motiveType", Messages.getString("TROView.Foot")); - break; - case TRACKED: - case HOVER: - case WHEELED: - setModelData("motiveType", - Messages.getString("TROView.Mechanized") + "/" + inf.getMovementModeAsString()); - break; - case SUBMARINE: - setModelData("motiveType", Messages.getString("TROView.MechanizedSCUBA")); - break; - default: - setModelData("motiveType", inf.getMovementModeAsString()); - break; + if (inf.getMount() != null) { + setModelData("motiveType", Messages.getString("TROView.BeastMounted") + ", " + inf.getMount().getName()); + } else { + switch (inf.getMovementMode()) { + case INF_LEG: + setModelData("motiveType", Messages.getString("TROView.Foot")); + break; + case TRACKED: + case HOVER: + case WHEELED: + setModelData("motiveType", + Messages.getString("TROView.Mechanized") + "/" + inf.getMovementModeAsString()); + break; + case SUBMARINE: + setModelData("motiveType", Messages.getString("TROView.MechanizedSCUBA")); + break; + default: + setModelData("motiveType", inf.getMovementModeAsString()); + break; + } } StringJoiner sj = new StringJoiner(", "); for (int i = 0; i < Infantry.NUM_SPECIALIZATIONS; i++) { @@ -193,6 +197,20 @@ private void addWeaponNotes(List notes) { notes.add(Messages.getString("TROView.InfantryNote.Heat")); } } + if (inf.getMount() != null) { + if (inf.getMount().getBurstDamageDice() > 0) { + notes.add(String.format(Messages.getString("TROView.InfantryNote.MountInfantryDamage.format"), + inf.getMount().getBurstDamageDice())); + } + if (inf.getMount().getVehicleDamage() > 0) { + notes.add(String.format(Messages.getString("TROView.InfantryNote.MountVehicleDamage.format"), + inf.getMount().getVehicleDamage())); + } + if (inf.getMount().getSize().toHitMod != 0) { + notes.add(String.format(Messages.getString("TROView.InfantryNote.MountSizeMod.format"), + inf.getMount().getSize().toHitMod)); + } + } } private void addArmorNotes(List notes, EquipmentType armorKit) { diff --git a/megamek/src/megamek/common/verifier/TestInfantry.java b/megamek/src/megamek/common/verifier/TestInfantry.java index 27719f314d9..5fbe9625110 100644 --- a/megamek/src/megamek/common/verifier/TestInfantry.java +++ b/megamek/src/megamek/common/verifier/TestInfantry.java @@ -17,6 +17,8 @@ import megamek.common.Entity; import megamek.common.EntityMovementMode; import megamek.common.Infantry; +import megamek.common.InfantryMount; +import megamek.common.annotations.Nullable; import megamek.common.options.OptionsConstants; /** @@ -137,6 +139,10 @@ public boolean correctEntity(StringBuffer buff, int ammoTechLvl) { if (inf.getSecondaryWeapon() != null) { int secondaryCrew = inf.getSecondaryWeapon().getCrew(); + // Beast mounted infantry divide crew requirement in half, rounding up. + if (inf.getMount() != null) { + secondaryCrew = secondaryCrew / 2 + secondaryCrew % 2; + } if (inf.getCrew() != null) { if (inf.hasAbility(OptionsConstants.MD_TSM_IMPLANT)) { secondaryCrew--; @@ -152,14 +158,14 @@ public boolean correctEntity(StringBuffer buff, int ammoTechLvl) { } } - max = maxSquadSize(inf.getMovementMode(), inf.hasMicrolite() || (inf.getAllUMUCount() > 1)); + max = maxSquadSize(inf.getMovementMode(), inf.hasMicrolite() || (inf.getAllUMUCount() > 1), inf.getMount()); if (inf.getSquadSize() > max) { buff.append("Maximum squad size is " + max + "\n\n"); correct = false; } max = maxUnitSize(inf.getMovementMode(), inf.hasMicrolite() || (inf.getAllUMUCount() > 1), - inf.hasSpecialization(Infantry.COMBAT_ENGINEERS | Infantry.MOUNTAIN_TROOPS)); + inf.hasSpecialization(Infantry.COMBAT_ENGINEERS | Infantry.MOUNTAIN_TROOPS), inf.getMount()); if (inf.getShootingStrength() > max) { buff.append("Maximum platoon size is " + max + "\n\n"); correct = false; @@ -169,12 +175,17 @@ public boolean correctEntity(StringBuffer buff, int ammoTechLvl) { } public static int maxSecondaryWeapons(Infantry inf) { - int max = 2; - if (inf.getMovementMode() == EntityMovementMode.VTOL) { + int max; + if (inf.getMount() != null) { + max = inf.getMount().getSize().supportWeaponsPerCreature; + } else if (inf.getMovementMode() == EntityMovementMode.VTOL) { max = inf.hasMicrolite() ? 0 : 1; } else if (inf.getMovementMode() == EntityMovementMode.INF_UMU) { max = inf.getAllUMUCount(); + } else { + max = 2; } + if (inf.hasSpecialization(Infantry.COMBAT_ENGINEERS)) { max = 0; } @@ -197,52 +208,64 @@ public static int maxSecondaryWeapons(Infantry inf) { * * @param movementMode The platoon's movement mode * @param alt True indicates that VTOL is microlite and INF_UMU is motorized. + * @param mount The mount if the unit is beast-mounted, otherwise null. * @return The maximum size of a squad. */ - public static int maxSquadSize(EntityMovementMode movementMode, boolean alt) { - switch (movementMode) { - case HOVER: - case SUBMARINE: - return 5; - case WHEELED: - return 6; - case TRACKED: - return 7; - case INF_UMU: - return alt? 6 : 10; - case VTOL: - return alt? 2 : 4; - default: - return 10; + public static int maxSquadSize(EntityMovementMode movementMode, boolean alt, @Nullable InfantryMount mount) { + if (mount == null) { + switch (movementMode) { + case HOVER: + case SUBMARINE: + return 5; + case WHEELED: + return 6; + case TRACKED: + return 7; + case INF_UMU: + return alt ? 6 : 10; + case VTOL: + return alt ? 2 : 4; + default: + return 10; + } + } else if (mount.getSize().troopsPerCreature == 1) { + return 10; // use foot infantry limit + } else { + return mount.getSize().troopsPerCreature; } } - public static int maxUnitSize(EntityMovementMode movementMode, boolean alt, boolean engOrMountain) { + public static int maxUnitSize(EntityMovementMode movementMode, boolean alt, boolean engOrMountain, + InfantryMount mount) { int max; - switch (movementMode) { - case INF_UMU: - if (alt) { - max = 12; - } else { + if (mount == null) { + switch (movementMode) { + case INF_UMU: + if (alt) { + max = 12; + } else { + max = 30; + } + break; + case HOVER: + case SUBMARINE: + max = 20; + break; + case WHEELED: + max = 24; + break; + case TRACKED: + max = 28; + break; + case VTOL: + max = maxSquadSize(movementMode, alt, mount) * 4; + break; + default: max = 30; - } - break; - case HOVER: - case SUBMARINE: - max = 20; - break; - case WHEELED: - max = 24; - break; - case TRACKED: - max = 28; - break; - case VTOL: - max = maxSquadSize(movementMode, alt) * 4; - break; - default: - max = 30; - break; + break; + } + } else { + max = mount.getSize().creaturesPerPlatoon * mount.getSize().troopsPerCreature; } if (engOrMountain) { max = Math.min(max, 20); diff --git a/megamek/src/megamek/common/weapons/infantry/InfantryWeaponHandler.java b/megamek/src/megamek/common/weapons/infantry/InfantryWeaponHandler.java index 440251184b2..d12327c0ece 100644 --- a/megamek/src/megamek/common/weapons/infantry/InfantryWeaponHandler.java +++ b/megamek/src/megamek/common/weapons/infantry/InfantryWeaponHandler.java @@ -91,9 +91,16 @@ protected int calcHits(Vector vPhaseReport) { double damage = calculateBaseDamage(ae, weapon, wtype); if ((ae instanceof Infantry) - && nRange == 0 - && ae.hasAbility(OptionsConstants.MD_TSM_IMPLANT)) { - damage += 0.14; + && (nRange == 0)) { + if (ae.hasAbility(OptionsConstants.MD_TSM_IMPLANT)) { + damage += 0.14; + } + InfantryMount mount = ((Infantry) ae).getMount(); + if ((mount != null) && target.isConventionalInfantry() && (mount.getBurstDamageDice() > 0)) { + damage += Compute.d6(mount.getBurstDamageDice()); + } else if ((mount != null) && !target.isConventionalInfantry()) { + damage += mount.getVehicleDamage(); + } } int damageDealt = (int) Math.round(damage * troopersHit); diff --git a/megamek/src/megamek/server/GameManager.java b/megamek/src/megamek/server/GameManager.java index 38f01ab3032..38f97537c0f 100644 --- a/megamek/src/megamek/server/GameManager.java +++ b/megamek/src/megamek/server/GameManager.java @@ -8419,6 +8419,19 @@ else if ((step.getElevation() + entity.height()) == 0) { entity.delta_distance = distance; entity.moved = moveType; entity.mpUsed = mpUsed; + if (md.isAllUnderwater(game)) { + entity.underwaterRounds++; + if ((entity instanceof Infantry) && (((Infantry) entity).getMount() != null) + && entity.getMovementMode().isSubmarine() + && entity.underwaterRounds > ((Infantry) entity).getMount().getUWEndurance()) { + r = new Report(2412); + r.addDesc(entity); + addReport(r); + destroyEntity(entity, "mount drowned"); + } + } else { + entity.underwaterRounds = 0; + } entity.setClimbMode(curClimbMode); if (!sideslipped && !fellDuringMovement && !crashedDuringMovement && (entity.getMovementMode() == EntityMovementMode.VTOL)) { @@ -11631,9 +11644,16 @@ public Vector doSetLocationsExposure(Entity entity, Hex hex, vPhaseReport.addAll(breachCheck(entity, Mech.LOC_CLEG, hex)); } } else { + int status = ILocationExposureStatus.WET; + if (entity.relHeight() >= 0) { + status = game.getPlanetaryConditions().isVacuum() ? + ILocationExposureStatus.VACUUM : ILocationExposureStatus.NORMAL; + } for (int loop = 0; loop < entity.locations(); loop++) { - entity.setLocationStatus(loop, ILocationExposureStatus.WET); - vPhaseReport.addAll(breachCheck(entity, loop, hex)); + entity.setLocationStatus(loop, status); + if (status == ILocationExposureStatus.WET) { + vPhaseReport.addAll(breachCheck(entity, loop, hex)); + } } } } else { @@ -30777,13 +30797,20 @@ private void passBuildingWall(Entity entity, Building bldg, Coords lastPos, Coor } } - // Infantry and BA are damaged by buildings but do not damage them + // Damage the building. The CF can never drop below 0. + int toBldg; + // Infantry and BA are damaged by buildings but do not damage them, except large beast-mounted infantry if (entity instanceof Infantry) { - return; + InfantryMount mount = ((Infantry) entity).getMount(); + if ((mount != null) && (mount.getSize().buildingDamage() > 0)) { + toBldg = mount.getSize().buildingDamage(); + } else { + return; + } + } else { + toBldg = (int) Math.floor(bldg.getDamageToScale() + * Math.ceil(entity.getWeight() / 10.0)); } - // Damage the building. The CF can never drop below 0. - int toBldg = (int) Math.floor(bldg.getDamageToScale() - * Math.ceil(entity.getWeight() / 10.0)); int curCF = bldg.getCurrentCF(entering ? curPos : lastPos); curCF -= Math.min(curCF, toBldg); bldg.setCurrentCF(curCF, entering ? curPos : lastPos);