Fort LoneStar Fixes/Changes

Added:
-Game-play Balance changes
-Greater Difficulty
-Added Boss(es)
This commit is contained in:
Grant H.
2013-06-02 18:54:53 -05:00
parent 130300074e
commit 1456cd6254
2 changed files with 268 additions and 200 deletions

View File

@@ -35,23 +35,23 @@ namespace OpenRA.Mods.RA.Missions
Actor paradrop2; Actor paradrop2;
Actor paradrop3; Actor paradrop3;
Actor paradrop4; Actor paradrop4;
Actor patrol1;
Actor baseA; Actor patrol2;
Actor baseB; Actor patrol3;
Actor patrol4;
World world; World world;
int WaveNumber = 0; int WaveNumber = 0;
InfoWidget evacuateWidget; InfoWidget evacuateWidget;
const string ShortEvacuateTemplate = "Wave {0}"; const string ShortEvacuateTemplate = "Wave {0}";
static readonly string[] PatrolA = { "e1", "e2", "e1" }; static readonly string[] Patrol = { "e1", "e2", "e1" };
static readonly string[] Infantry = { "e4", "e1", "e1", "e2", "e1", "e2" }; static readonly string[] Infantry = { "e4", "e1", "e1", "e2", "e1", "e2" };
static readonly string[] InfantryAdvanced = { "e4", "e1", "e1", "shok", "e1", "e2", "e4" }; static readonly string[] Vehicles = { "arty", "ftrk", "ftrk", "apc", "apc", };
static readonly string[] Vehicles = { "arty", "ftrk", "ftrk", "jeep", "jeep", "jeep", "apc", "apc", }; const string tank = "3tnk";
static readonly string[] Volkov = { "e8" }; const string v2 = "v2rl";
const string boss = "4tnk"; const string boss = "4tnk";
const int TimerTicks = 1; const int TimerTicks = 1;
const int PatrolTicks = 1500;
int AttackSquad = 6; int AttackSquad = 6;
int AttackSquadCount = 1; int AttackSquadCount = 1;
@@ -87,14 +87,16 @@ namespace OpenRA.Mods.RA.Missions
{ {
for (int i = 1; i <= VehicleSquadCount; i++) for (int i = 1; i <= VehicleSquadCount; i++)
{ {
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == soviets)
&& !u.HasTrait<Mobile>());
var route = world.SharedRandom.Next(sovietEntryPoints.Length); var route = world.SharedRandom.Next(sovietEntryPoints.Length);
var spawnPoint = sovietEntryPoints[route]; var spawnPoint = sovietEntryPoints[route];
for (int r = 1; r <= VehicleSquad; r++) for (int r = 1; r <= VehicleSquad; r++)
{ {
var squad = world.CreateActor(Vehicles.Random(world.SharedRandom), var squad = world.CreateActor(Vehicles.Random(world.SharedRandom),
new TypeDictionary { new LocationInit(spawnPoint), new OwnerInit(soviets) }); new TypeDictionary
{
new LocationInit(spawnPoint),
new OwnerInit(soviets)
});
squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3))); squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3)));
} }
} }
@@ -107,23 +109,18 @@ namespace OpenRA.Mods.RA.Missions
{ {
for (int i = 1; i <= AttackSquadCount; i++) for (int i = 1; i <= AttackSquadCount; i++)
{ {
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == soviets) world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == soviets)
&& !u.HasTrait<Mobile>()); && !u.HasTrait<Mobile>());
var route = world.SharedRandom.Next(sovietEntryPoints.Length); var route = world.SharedRandom.Next(sovietEntryPoints.Length);
var spawnPoint = sovietEntryPoints[route]; var spawnPoint = sovietEntryPoints[route];
IEnumerable<string> units;
if (world.FrameNumber >= 1500 * 10)
{
units = InfantryAdvanced;
}
else
{
units = Infantry;
}
for (int r = 1; r < AttackSquad; r++) for (int r = 1; r < AttackSquad; r++)
{ {
var squad = world.CreateActor(Infantry.Random(world.SharedRandom), var squad = world.CreateActor(Infantry.Random(world.SharedRandom),
new TypeDictionary { new LocationInit(spawnPoint), new OwnerInit(soviets) }); new TypeDictionary
{
new LocationInit(spawnPoint),
new OwnerInit(soviets)
});
squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3))); squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3)));
var scatteredUnits = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 15) var scatteredUnits = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 15)
.Where(unit => unit.IsIdle && unit.HasTrait<Mobile>() && unit.Owner == soviets); .Where(unit => unit.IsIdle && unit.HasTrait<Mobile>() && unit.Owner == soviets);
@@ -136,75 +133,35 @@ namespace OpenRA.Mods.RA.Missions
} }
} }
void SendPatrol() void SendPatrol(string[] squad, Player owner, CPos location, CPos move)
{ {
if (SpawnPatrol == true) if (SpawnPatrol)
{ {
for (int i = 0; i < PatrolA.Length; i++) for (int i = 0; i < squad.Length; i++)
{ {
var inf = world.CreateActor(PatrolA.Random(world.SharedRandom), var actor = world.CreateActor(squad[i], new TypeDictionary
new TypeDictionary { new LocationInit(paradrop1.Location + new CVec(0, -10)), new OwnerInit(soviets) }); {
inf.QueueActivity(new AttackMove.AttackMoveActivity(inf, new Move.Move(paradrop1.Location + new CVec(0, 0)))); new OwnerInit(owner),
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 20) new LocationInit(location)
.Where(u => u.Owner == soviets); });
foreach (var unit in units) actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(move, 3)));
{ AttackNearestAlliedActor(actor);
AttackNearestAlliedActor(unit);
}
}
for (int i = 0; i < PatrolA.Length; i++)
{
var inf = world.CreateActor(PatrolA.Random(world.SharedRandom),
new TypeDictionary { new LocationInit(paradrop4.Location + new CVec(10, 0)), new OwnerInit(soviets) });
inf.QueueActivity(new AttackMove.AttackMoveActivity(inf, new Move.Move(paradrop4.Location + new CVec(0, 0))));
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 20)
.Where(u => u.Owner == soviets);
foreach (var unit in units)
{
AttackNearestAlliedActor(unit);
}
}
for (int i = 0; i < PatrolA.Length; i++)
{
var inf = world.CreateActor(PatrolA.Random(world.SharedRandom),
new TypeDictionary { new LocationInit(paradrop3.Location + new CVec(0, 10)), new OwnerInit(soviets) });
inf.QueueActivity(new AttackMove.AttackMoveActivity(inf, new Move.Move(paradrop3.Location + new CVec(0, 0))));
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 20)
.Where(u => u.Owner == soviets);
foreach (var unit in units)
{
AttackNearestAlliedActor(unit);
}
}
for (int i = 0; i < PatrolA.Length; i++)
{
var inf = world.CreateActor(PatrolA.Random(world.SharedRandom),
new TypeDictionary { new LocationInit(paradrop2.Location + new CVec(-10, 0)), new OwnerInit(soviets) });
inf.QueueActivity(new AttackMove.AttackMoveActivity(inf, new Move.Move(paradrop2.Location + new CVec(0, 0))));
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 20)
.Where(u => u.Owner == soviets);
foreach (var unit in units)
{
AttackNearestAlliedActor(unit);
}
} }
} }
} }
void SendVolkov() void SendBoss(string unit)
{ {
for (int i = 0; i < Volkov.Length; i++) var route = world.SharedRandom.Next(sovietEntryPoints.Length);
var spawnPoint = sovietEntryPoints[route];
var actor = world.CreateActor(unit, new TypeDictionary
{
new OwnerInit(soviets),
new LocationInit(spawnPoint)
});
if (multi0 != null)
{ {
var route = world.SharedRandom.Next(sovietEntryPoints.Length); AttackNearestAlliedActor(actor);
var spawnPoint = sovietEntryPoints[route];
var actor = world.CreateActor(Volkov[i], new TypeDictionary { new OwnerInit(soviets), new LocationInit(spawnPoint) });
actor.QueueActivity(new Move.Move(paradrop1.Location + new CVec(4, -11)));
var scatteredUnits = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location + new CVec(4, -11)), 4)
.Where(unit => unit.IsIdle && unit.HasTrait<Mobile>() && unit.Owner == soviets);
foreach (var unit in scatteredUnits)
{
AttackNearestAlliedActor(unit);
}
} }
} }
@@ -213,23 +170,16 @@ namespace OpenRA.Mods.RA.Missions
Game.AddChatLine(Color.Cyan, "Wave Sequence", text); Game.AddChatLine(Color.Cyan, "Wave Sequence", text);
} }
void FinalWave(string text)
{
Game.AddChatLine(Color.DarkRed, "Boss Wave Sequence Initializing", text);
}
public void Tick(Actor self) public void Tick(Actor self)
{ {
var unitsAndBuildings = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && (a.HasTrait<Mobile>() && a.HasTrait<IMove>()));
if (!unitsAndBuildings.Any(a => a.Owner == soviets))
{
MissionAccomplished("You and your mates have survived the onslaught!");
}
if (world.FrameNumber == patrolAttackFrame) if (world.FrameNumber == patrolAttackFrame)
{ {
patrolAttackFrame += patrolattackAtFrameIncrement; patrolAttackFrame += patrolattackAtFrameIncrement;
patrolattackAtFrameIncrement = Math.Max(patrolattackAtFrameIncrement - 5, 100); patrolattackAtFrameIncrement = Math.Max(patrolattackAtFrameIncrement - 5, 100);
SendPatrol(); SendPatrol(Patrol, soviets, patrol1.Location, paradrop1.Location);
SendPatrol(Patrol, soviets, patrol2.Location, paradrop2.Location);
SendPatrol(Patrol, soviets, patrol3.Location, paradrop3.Location);
SendPatrol(Patrol, soviets, patrol4.Location, paradrop4.Location);
} }
if (world.FrameNumber == WaveAttackFrame) if (world.FrameNumber == WaveAttackFrame)
{ {
@@ -286,11 +236,11 @@ namespace OpenRA.Mods.RA.Missions
Wave("Five Initializing"); Wave("Five Initializing");
UpdateWaveSequence(); UpdateWaveSequence();
AttackSquad = 10; AttackSquad = 10;
SendVolkov();
VehicleSquad = 4; VehicleSquad = 4;
VehicleSquadCount = 2; VehicleSquadCount = 2;
SendBoss(tank);
} }
if (world.FrameNumber == 1500 * 10) if (world.FrameNumber == 1500 * 11)
{ {
WaveNumber++; WaveNumber++;
Wave("Six Initializing"); Wave("Six Initializing");
@@ -301,8 +251,10 @@ namespace OpenRA.Mods.RA.Missions
MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop1.Location); MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop1.Location);
MissionUtils.Parabomb(world, soviets, entry6.Location, paradrop3.Location); MissionUtils.Parabomb(world, soviets, entry6.Location, paradrop3.Location);
MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location); MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location);
SendBoss(tank);
SendBoss(tank);
} }
if (world.FrameNumber == 1500 * 12) if (world.FrameNumber == 1500 * 14)
{ {
WaveNumber++; WaveNumber++;
Wave("Seven Initializing"); Wave("Seven Initializing");
@@ -310,9 +262,9 @@ namespace OpenRA.Mods.RA.Missions
AttackSquad = 12; AttackSquad = 12;
VehicleSquad = 5; VehicleSquad = 5;
VehicleSquadCount = 3; VehicleSquadCount = 3;
SendVolkov(); SendBoss(v2);
} }
if (world.FrameNumber == 1500 * 14) if (world.FrameNumber == 1500 * 17)
{ {
SpawnVehicles = true; SpawnVehicles = true;
WaveNumber++; WaveNumber++;
@@ -326,8 +278,11 @@ namespace OpenRA.Mods.RA.Missions
MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location); MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location);
MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop2.Location); MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop2.Location);
MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location); MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location);
SendBoss(v2);
SendBoss(tank);
SendBoss(v2);
} }
if (world.FrameNumber == 1500 * 16) if (world.FrameNumber == 1500 * 21)
{ {
WaveNumber++; WaveNumber++;
Wave("Nine Initializing"); Wave("Nine Initializing");
@@ -335,30 +290,36 @@ namespace OpenRA.Mods.RA.Missions
AttackSquad = 14; AttackSquad = 14;
VehicleSquad = 6; VehicleSquad = 6;
VehicleSquadCount = 4; VehicleSquadCount = 4;
SendVolkov(); SendBoss(v2);
SendBoss(tank);
SendBoss(tank);
} }
if (world.FrameNumber == 1500 * 18) if (world.FrameNumber == 1500 * 25)
{ {
WaveNumber++; WaveNumber++;
Wave("Ten Initializing"); Wave("Ten Initializing");
UpdateWaveSequence(); UpdateWaveSequence();
AttackSquad = 15; AttackSquad = 15;
AttackSquadCount = 6; AttackSquadCount = 6;
MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location + new CVec(0, -2)); for (int i = 0; i < 2; i++)
MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop3.Location + new CVec(0, -2)); {
MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop2.Location + new CVec(0, -2)); MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location + new CVec(0, -2));
MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, -2)); MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop3.Location + new CVec(0, -2));
MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop1.Location + new CVec(0, 2)); MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop2.Location + new CVec(0, -2));
MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop3.Location + new CVec(0, 2)); MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, -2));
MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location + new CVec(0, 2)); MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop1.Location + new CVec(0, 2));
MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, 2)); MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop3.Location + new CVec(0, 2));
MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location + new CVec(0, 2));
MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, 2));
}
SendBoss(boss);
} }
if (world.FrameNumber == 1500 * 19) if (world.FrameNumber == 1500 * 30)
{ {
SpawnWave = false; SpawnWave = false;
SpawnVehicles = false; SpawnVehicles = false;
} }
if (world.FrameNumber == 1500 * 20) if (world.FrameNumber == 1500 * 31)
{ {
MissionAccomplished("You and your mates have Survived the Onslaught!"); MissionAccomplished("You and your mates have Survived the Onslaught!");
} }
@@ -400,8 +361,10 @@ namespace OpenRA.Mods.RA.Missions
paradrop2 = actors["Paradrop2"]; paradrop2 = actors["Paradrop2"];
paradrop3 = actors["Paradrop3"]; paradrop3 = actors["Paradrop3"];
paradrop4 = actors["Paradrop4"]; paradrop4 = actors["Paradrop4"];
baseA = actors["BaseA"]; patrol1 = actors["Patrol1"];
baseB = actors["BaseB"]; patrol2 = actors["Patrol2"];
patrol3 = actors["Patrol3"];
patrol4 = actors["Patrol4"];
MissionUtils.PlayMissionMusic(); MissionUtils.PlayMissionMusic();
Game.AddChatLine(Color.Cyan, "Mission", "Defend Fort LoneStar At All costs!"); Game.AddChatLine(Color.Cyan, "Mission", "Defend Fort LoneStar At All costs!");
} }

View File

@@ -55,7 +55,7 @@ Players:
PlayerReference@Soviets: PlayerReference@Soviets:
Name: Soviets Name: Soviets
Race: soviet Race: soviet
ColorRamp: 0,255,128,10 ColorRamp: 0,255,128
Enemies: Multi0,Multi1,Multi2,Multi3 Enemies: Multi0,Multi1,Multi2,Multi3
Actors: Actors:
@@ -392,32 +392,20 @@ Actors:
Paradrop4: waypoint Paradrop4: waypoint
Location: 36,32 Location: 36,32
Owner: Neutral Owner: Neutral
Rally1: waypoint Patrol3: waypoint
Location: 25,17 Location: 32,46
Owner: Neutral Owner: Neutral
Rally2: waypoint Patrol4: waypoint
Location: 38,17 Location: 46,32
Owner: Neutral
Rally3: waypoint
Location: 16,31
Owner: Neutral
Rally4: waypoint
Location: 24,47
Owner: Neutral
Rally5: waypoint
Location: 37,47
Owner: Neutral
Rally6: waypoint
Location: 47,32
Owner: Neutral Owner: Neutral
Actor20: apwr Actor20: apwr
Location: 37,4 Location: 37,4
Owner: Soviets Owner: Soviets
BaseA: waypoint Patrol2: waypoint
Location: 24,24 Location: 17,32
Owner: Neutral Owner: Neutral
BaseB: waypoint Patrol1: waypoint
Location: 40,40 Location: 32,18
Owner: Neutral Owner: Neutral
Actor34: sniper Actor34: sniper
Location: 9,26 Location: 9,26
@@ -741,41 +729,45 @@ Rules:
Prerequisites: barr,oilb Prerequisites: barr,oilb
Valued: Valued:
Cost: 750 Cost: 750
E8: 3TNK:
Inherits: ^Infantry Inherits: ^Tank
Buildable: Buildable:
Queue: Infantry Queue: Vehicle
BuildPaletteOrder: 110 BuildPaletteOrder: 40
Prerequisites: stek Prerequisites: fix
Owner: None Owner: soviet
Hotkey: h
Valued: Valued:
Cost: 1800 Cost: 1150
Tooltip:
Name: Volkov
Description: Elite commando infantry, armed with \nmodular cannons and grenade launcher.\n Strong vs Vehicles, Infantry\n Weak vs Aircraft
Selectable:
Voice: VolkovVoice
Bounds: 12,17,0,-9
Health: Health:
HP: 200 HP: 700
Armor: Armor:
Type: Heavy Type: Heavy
Mobile: Mobile:
Speed: 5 Speed: 5
Crushes: wall, atmine, crate, infantry
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Passenger: Turreted:
PipType: Red ROT: 5
AttackFrontal: Armament:
PrimaryWeapon: VolkNapalm Weapon: VolkNapalm
Recoil: 200
RecoilRecovery: 38
LocalOffset: 0,85,0, 0,-85,0
AttackTurreted:
RenderUnit:
WithTurret:
AutoTarget:
Explodes: Explodes:
Weapon: UnitExplodeSmall Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Chance: 100 Chance: 100
TakeCover: LeavesHusk:
-RenderInfantry: HuskActor: 3TNK.Husk
RenderInfantryProne: Selectable:
IdleAnimations: idle1 Bounds: 30,30
-CrushableInfantry:
MECH: MECH:
Buildable: Buildable:
Owner: None Owner: None
@@ -789,14 +781,32 @@ Rules:
Buildable: Buildable:
Owner: soviet,allies Owner: soviet,allies
Prerequisites: barr,oilb Prerequisites: barr,oilb
Valued:
Cost: 120
SNIPER:
Buildable:
Owner: allies,soviet
Prerequisites: barr,oilb
Valued: Valued:
Cost: 150 Cost: 150
SNIPER:
Inherits: ^Infantry
Valued:
Cost: 300
Buildable:
Queue: Infantry
BuildPaletteOrder: 80
Owner: soviet
Prerequisites: barr,oilb
Hotkey: n
Selectable:
Bounds: 12,17,0,-6
Mobile:
Speed: 4
Health:
HP: 200
Passenger:
PipType: Red
RevealsShroud:
Range: 6
AutoTarget:
InitialStance: HoldFire
Armament:
Weapon: Sniper
SPY: SPY:
Inherits: ^Infantry Inherits: ^Infantry
Buildable: Buildable:
@@ -806,9 +816,6 @@ Rules:
Owner: allies, soviets Owner: allies, soviets
Valued: Valued:
Cost: 300 Cost: 300
SpyToolTip:
Name: Spy
Description: Infiltrates enemy structures to gather \nintelligence. Exact effect depends on the \nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised
Selectable: Selectable:
Voice: SpyVoice Voice: SpyVoice
Bounds: 12,17,0,-9 Bounds: 12,17,0,-9
@@ -830,6 +837,56 @@ Rules:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
AttackFrontal: AttackFrontal:
PrimaryWeapon: SilencedPPK PrimaryWeapon: SilencedPPK
FTRK:
Inherits: ^Vehicle
Valued:
Cost: 600
Health:
HP: 150
Armor:
Type: Light
Mobile:
ROT: 10
Speed: 9
RevealsShroud:
Range: 4
Turreted:
ROT: 5
Offset: -298,0,298
Armament:
Weapon: FLAK-23
Recoil: 85
AttackTurreted:
RenderUnit:
WithTurret:
AutoTarget:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 28,28,0,0
APC:
Inherits: ^Tank
Health:
HP: 400
Armor:
Type: Heavy
Mobile:
Speed: 10
RevealsShroud:
Range: 5
Armament:
Weapon: M60mg
LocalOffset: 0,0,171
AttackFrontal:
RenderUnit:
WithMuzzleFlash:
AutoTarget:
Cargo:
Types: Infantry
MaxWeight: 5
PipCount: 5
UnloadFacing: 220
ARTY: ARTY:
Inherits: ^Tank Inherits: ^Tank
Buildable: Buildable:
@@ -859,25 +916,35 @@ Rules:
Weapon: UnitExplode Weapon: UnitExplode
Chance: 50 Chance: 50
AutoTarget: AutoTarget:
V2RL:
Inherits: ^Vehicle
Valued:
Cost: 700
Health:
HP: 150
Armor:
Type: Light
Mobile:
Speed: 7
RevealsShroud:
Range: 5
Armament:
Weapon: SCUD
AttackFrontal:
RenderUnitReload:
AutoTarget:
Explodes:
Weapon: SCUD
EmptyWeapon:
4TNK: 4TNK:
Inherits: ^Tank Inherits: ^Tank
Buildable: Buildable:
Queue: Vehicle
BuildPaletteOrder: 100
Prerequisites: fix,stek
Owner: soviet
Valued:
Cost: 1800
Tooltip:
Name: Mammoth Tank
Description: Big and slow tank, with anti-air capability.\n Strong vs Tanks, Aircraft\n Weak vs Infantry
Health: Health:
HP: 5000 HP: 2500
Armor: Armor:
Type: Heavy Type: Heavy
Mobile: Mobile:
Speed: 4 Speed: 4
Crushes: wall, atmine, crate, infantry
RevealsShroud: RevealsShroud:
Range: 14 Range: 14
Turreted: Turreted:
@@ -890,7 +957,8 @@ Rules:
PrimaryRecoil: 8 PrimaryRecoil: 8
PrimaryRecoilRecovery: 0.7 PrimaryRecoilRecovery: 0.7
SecondaryRecoil: 2 SecondaryRecoil: 2
RenderUnitTurreted: RenderUnit:
WithTurret:
AutoTarget: AutoTarget:
Explodes: Explodes:
Weapon: napalm Weapon: napalm
@@ -900,7 +968,7 @@ Rules:
SelfHealing: SelfHealing:
Step: 2 Step: 2
Ticks: 1 Ticks: 1
HealIfBelow: 80% HealIfBelow: 40%
DamageCooldown: 150 DamageCooldown: 150
Selectable: Selectable:
Bounds: 44,38,0,-4 Bounds: 44,38,0,-4
@@ -940,20 +1008,10 @@ Rules:
-GainsExperience: -GainsExperience:
Tooltip: Tooltip:
Name: Badger Name: Badger
Contrail@1:
ContrailOffset: 11, -11
Contrail@2:
ContrailOffset: -11, -11
FallsToEarth: FallsToEarth:
Spins: no Spins: no
Moves: yes Moves: yes
Explosion: UnitExplode Explosion: UnitExplode
SmokeTrailWhenDamaged@0:
Offset: 11, -11
Interval: 2
SmokeTrailWhenDamaged@1:
Offset: -11, -11
Interval: 2
-EjectOnDeath: -EjectOnDeath:
-GpsDot: -GpsDot:
@@ -996,18 +1054,18 @@ Weapons:
Shadow: false Shadow: false
Proximity: true Proximity: true
Trail: smokey Trail: smokey
ContrailLength: 10 ContrailLength: 150
Inaccuracy: 20 Inaccuracy: 20
Image: DRAGON Image: DRAGON
ROT: 10 ROT: 10
RangeLimit: 80 RangeLimit: 80
Warhead: Warhead:
Spread: 12 Spread: 15
Versus: Versus:
None: 90% None: 125%
Wood: 150% Wood: 110%
Light: 150% Light: 110%
Heavy: 150% Heavy: 100%
Concrete: 200% Concrete: 200%
Explosion: nuke Explosion: nuke
WaterExplosion: nuke WaterExplosion: nuke
@@ -1016,7 +1074,7 @@ Weapons:
Damage: 250 Damage: 250
VolkNapalm: VolkNapalm:
ROF: 40 ROF: 40
Range: 7 Range: 8
Report: volknapalm Report: volknapalm
ValidTargets: Ground ValidTargets: Ground
Burst: 6 Burst: 6
@@ -1077,17 +1135,64 @@ Weapons:
Warhead: Warhead:
Spread: 10 Spread: 10
Versus: Versus:
None: 100% None: 80%
Wood: 100% Wood: 100%
Light: 60% Light: 60%
Heavy: 25% Heavy: 75%
Concrete: 35% Concrete: 35%
Explosion: small_napalm Explosion: small_napalm
WaterExplosion: small_napalm WaterExplosion: small_napalm
InfDeath: 5 InfDeath: 5
SmudgeType: Scorch SmudgeType: Scorch
ImpactSound: firebl3 ImpactSound: firebl3
Damage: 6 Damage: 10
FLAK-23:
ROF: 10
Range: 8
Report: AACANON3
ValidTargets: Air,Ground
Projectile: Bullet
Speed: 100
High: true
Warhead:
Spread: 5
Versus:
None: 35%
Wood: 30%
Light: 30%
Heavy: 40%
Concrete: 30%
Explosion: med_explosion
Damage: 25
SCUD:
ROF: 280
Range: 10
MinRange: 3
Report: MISSILE1
Projectile: Bullet
Speed: 10
Arm: 10
High: true
Shadow: false
Proximity: true
Trail: smokey
Inaccuracy: 10
Image: V2
Angle: .1
Warhead:
Spread: 20
Versus:
None: 100%
Wood: 90%
Light: 80%
Heavy: 70%
Explosion: nuke
WaterExplosion: large_splash
InfDeath: 3
SmudgeType: Crater
Damage: 500
ImpactSound: kaboom1
WaterImpactSound: kaboom1
SilencedPPK: SilencedPPK:
ROF: 80 ROF: 80
Range: 2.5 Range: 2.5