diff --git a/mods/ra/maps/fort-lonestar/fort-lonestar.lua b/mods/ra/maps/fort-lonestar/fort-lonestar.lua index f2df0c8962..0717c3d8e0 100644 --- a/mods/ra/maps/fort-lonestar/fort-lonestar.lua +++ b/mods/ra/maps/fort-lonestar/fort-lonestar.lua @@ -1,138 +1,159 @@ -Patrol = { "e1", "e2", "e1" } -Infantry = { "e4", "e1", "e1", "e2", "e1", "e2" } -Vehicles = { "arty", "ftrk", "ftrk", "apc", "apc" } -Tank = { "3tnk" } -LongRange = { "v2rl" } -Boss = { "4tnk" } SovietEntryPoints = { Entry1, Entry2, Entry3, Entry4, Entry5, Entry6, Entry7, Entry8 } PatrolWaypoints = { Entry2, Entry4, Entry6, Entry8 } ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4 } -OilDerricks = { OilDerrick1, OilDerrick2, OilDerrick3, OilDerrick4 } SpawnPoints = { Spawn1, Spawn2, Spawn3, Spawn4 } Snipers = { Sniper1, Sniper2, Sniper3, Sniper4, Sniper5, Sniper6, Sniper7, Sniper8, Sniper9, Sniper10, Sniper11, Sniper12 } +Walls = +{ + { WallTopRight1, WallTopRight2, WallTopRight3, WallTopRight4, WallTopRight5, WallTopRight6, WallTopRight7, WallTopRight8, WallTopRight9 }, + { WallTopLeft1, WallTopLeft2, WallTopLeft3, WallTopLeft4, WallTopLeft5, WallTopLeft6, WallTopLeft7, WallTopLeft8, WallTopLeft9 }, + { WallBottomLeft1, WallBottomLeft2, WallBottomLeft3, WallBottomLeft4, WallBottomLeft5, WallBottomLeft6, WallBottomLeft7, WallBottomLeft8, WallBottomLeft9 }, + { WallBottomRight1, WallBottomRight2, WallBottomRight3, WallBottomRight4, WallBottomRight5, WallBottomRight6, WallBottomRight7, WallBottomRight8, WallBottomRight9 } +} + +if Map.Difficulty == "Very Easy (1P)" then + ParaChance = 20 + Patrol = { "e1", "e2", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e2" } + Vehicles = { "apc" } + Tank = { "3tnk" } + LongRange = { "arty" } + Boss = { "v2rl" } + Swarm = { "shok", "shok", "shok" } +elseif Map.Difficulty == "Easy (2P)" then + ParaChance = 25 + Patrol = { "e1", "e2", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "ftrk", "apc", "arty" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "ttnk" } +elseif Map.Difficulty == "Normal (3P)" then + ParaChance = 30 + Patrol = { "e1", "e2", "e1", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "ftrk", "ftrk", "apc", "arty" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk" } +elseif Map.Difficulty == "Hard (4P)" then + ParaChance = 35 + Patrol = { "e1", "e2", "e1", "e1", "e4" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "arty", "ftrk", "ftrk", "apc", "apc" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk", "ttnk" } +else + ParaChance = 40 + Patrol = { "e1", "e2", "e1", "e1", "e4", "e4" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1", "e1" } + Vehicles = { "arty", "arty", "ftrk", "apc", "apc" } + Tank = { "ftrk", "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk", "ttnk", "ttnk" } +end + Wave = 0 Waves = { - { delay = 500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - - { delay = 750, entries = PatrolWaypoints, units = Patrol, targets = ParadropWaypoints }, - - { delay = 750, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Vehicles, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Vehicles, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Vehicles, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = LongRange, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = LongRange, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = LongRange, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = LongRange, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = LongRange, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Tank, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Vehicles, targets = SpawnPoints }, - - { delay = 1500, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Infantry, targets = SpawnPoints }, - { delay = 1, entries = SovietEntryPoints, units = Boss, targets = SpawnPoints } + { delay = 500, units = { Infantry } }, + { delay = 500, units = { Patrol, Patrol } }, + { delay = 700, units = { Infantry, Infantry, Vehicles }, }, + { delay = 1500, units = { Infantry, Infantry, Infantry, Infantry } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Tank, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Tank, Tank, Swarm } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, LongRange } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, LongRange, Tank, LongRange } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, LongRange, LongRange, Tank, Tank, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, Infantry, Boss, Swarm } } } -SendUnits = function(entryCell, unitTypes, interval, targetCell) - Reinforcements.Reinforce(soviets, unitTypes, { entryCell }, interval, function(a) - Trigger.OnIdle(a, function(a) - if a.Location ~= targetCell then - a.AttackMove(targetCell) - else - a.Hunt() - end - end) - end) +-- Now do some adjustments to the waves +if Map.Difficulty == "Real tough guy" or Map.Difficulty == "Endless mode" then + Waves[8] = { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry }, ironUnits = { LongRange } } + Waves[9] = { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, LongRange, LongRange, Vehicles, Tank }, ironUnits = { Tank } } + Waves[11] = { delay = 1500, units = { Vehicles, Infantry, Patrol, Patrol, Patrol, Infantry, LongRange, Tank, Boss, Infantry, Infantry, Patrol } } +end - if (Wave < #Waves) then - SendWave() - else - Trigger.AfterDelay(DateTime.Minutes(2), SovietsRetreating) - Media.DisplayMessage("You survived the onslaught! No more waves incoming.") - end +SendUnits = function(entryCell, unitTypes, targetCell, extraData) + Reinforcements.Reinforce(soviets, unitTypes, { entryCell }, 40, function(a) + if not a.HasProperty("AttackMove") then + Trigger.OnIdle(a, function(a) + a.Move(targetCell) + end) + return + end + + a.AttackMove(targetCell) + Trigger.OnIdle(a, function(a) + a.Hunt() + end) + + if extraData == "IronCurtain" then + a.GrantTimedUpgrade("invulnerability", DateTime.Seconds(25)) + end + end) end SendWave = function() Wave = Wave + 1 local wave = Waves[Wave] - local entry = Utils.Random(wave.entries).Location - local target = Utils.Random(wave.targets).Location - Trigger.AfterDelay(wave.delay, function() - SendUnits(entry, wave.units, 40, target) + Utils.Do(wave.units, function(units) + local entry = Utils.Random(SovietEntryPoints).Location + local target = Utils.Random(SpawnPoints).Location - if not played then - played = true - Utils.Do(players, function(player) - Media.PlaySpeechNotification(player, "EnemyUnitsApproaching") + SendUnits(entry, units, target) + end) + + if wave.ironUnits then + Utils.Do(wave.ironUnits, function(units) + local entry = Utils.Random(SovietEntryPoints).Location + local target = Utils.Random(SpawnPoints).Location + + SendUnits(entry, units, target, "IronCurtain") end) - Trigger.AfterDelay(DateTime.Seconds(1), function() played = false end) + end + + Utils.Do(players, function(player) + Media.PlaySpeechNotification(player, "EnemyUnitsApproaching") + end) + + if (Wave < #Waves) then + if Utils.RandomInteger(1, 100) < ParaChance then + local units = ParaProxy.SendParatroopers(Utils.Random(ParadropWaypoints).CenterPosition) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) + end) + + local delay = Utils.RandomInteger(DateTime.Seconds(20), DateTime.Seconds(45)) + Trigger.AfterDelay(delay, SendWave) + else + SendWave() + end + else + if Map.Difficulty == "Endless mode" then + Wave = 0 + IncreaseDifficulty() + SendWave() + return + end + + Trigger.AfterDelay(DateTime.Minutes(1), SovietsRetreating) + Media.DisplayMessage("You almost survived the onslaught! No more waves incoming.") end end) end @@ -145,6 +166,13 @@ SovietsRetreating = function() end) end +IncreaseDifficulty = function() + local additions = { Infantry, Patrol, Vehicles, Tank, LongRange, Boss, Swarm } + Utils.Do(Waves, function(wave) + wave.units[#wave.units + 1] = Utils.Random(additions) + end) +end + Tick = function() if (Utils.RandomInteger(1, 200) == 10) then local delay = Utils.RandomInteger(1, 10) @@ -158,6 +186,14 @@ Tick = function() end end +SetupWallOwners = function() + Utils.Do(players, function(player) + Utils.Do(Walls[player.Spawn], function(wall) + wall.Owner = player + end) + end) +end + WorldLoaded = function() soviets = Player.GetPlayer("Soviets") players = { } @@ -166,13 +202,10 @@ WorldLoaded = function() players[i] = player end - Utils.Do(Snipers, function(a) - if a.Owner == soviets then - a.GrantUpgrade("unkillable") - end - end) - Media.DisplayMessage("Defend Fort Lonestar at all costs!") + SetupWallOwners() + + ParaProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = soviets }) SendWave() end diff --git a/mods/ra/maps/fort-lonestar/map.yaml b/mods/ra/maps/fort-lonestar/map.yaml index d5a03e5708..7650a2d885 100644 --- a/mods/ra/maps/fort-lonestar/map.yaml +++ b/mods/ra/maps/fort-lonestar/map.yaml @@ -6,7 +6,7 @@ Title: Fort Lonestar Description: Survive multiple waves of attacking enemies. -Author: Nuke'm Bro. +Author: Nuke'm Bro, abcdefg30 Tileset: TEMPERAT @@ -23,12 +23,14 @@ Videos: Options: Fog: True Shroud: True - AllyBuildRadius: False + AllyBuildRadius: True FragileAlliances: False StartingCash: 50 TechLevel: Unrestricted + StartingUnitsClass: none ConfigurableStartingUnits: False ShortGame: False + Difficulties: Hard (4P), Normal (3P), Easy (2P), Very Easy (1P), Real tough guy, Endless mode Players: PlayerReference@Neutral: @@ -151,12 +153,6 @@ Actors: Actor73: tc05 Location: 16,34 Owner: Neutral - Actor30: tent - Location: 36,26 - Owner: Multi0 - Actor84: brik - Location: 35,25 - Owner: Neutral Actor32: tc01 Location: 8,24 Owner: Neutral @@ -166,27 +162,6 @@ Actors: Actor5: tc01 Location: 44,44 Owner: Neutral - Actor67: brik - Location: 29,25 - Owner: Neutral - Actor41: brik - Location: 25,25 - Owner: Neutral - Actor56: brik - Location: 26,25 - Owner: Neutral - Actor85: brik - Location: 39,26 - Owner: Neutral - Actor81: brik - Location: 38,25 - Owner: Neutral - Actor65: brik - Location: 27,25 - Owner: Neutral - Actor66: brik - Location: 28,25 - Owner: Neutral Actor51: t08 Location: 55,46 Owner: Neutral @@ -214,12 +189,6 @@ Actors: Actor17: tc03 Location: 54,26 Owner: Neutral - Actor83: brik - Location: 36,25 - Owner: Neutral - Actor197: brik - Location: 39,37 - Owner: Neutral Actor11: tc04 Location: 20,53 Owner: Neutral @@ -235,15 +204,6 @@ Actors: Actor1: t05 Location: 29,16 Owner: Neutral - Actor82: brik - Location: 37,25 - Owner: Neutral - Actor86: brik - Location: 39,27 - Owner: Neutral - Actor80: brik - Location: 39,25 - Owner: Neutral Actor71: tc02 Location: 15,40 Owner: Neutral @@ -271,42 +231,6 @@ Actors: Actor52: t12 Location: 44,53 Owner: Neutral - Actor87: brik - Location: 39,28 - Owner: Neutral - Actor91: brik - Location: 37,39 - Owner: Neutral - Actor196: brik - Location: 39,38 - Owner: Neutral - Actor195: brik - Location: 39,39 - Owner: Neutral - Actor45: brik - Location: 25,28 - Owner: Neutral - Actor92: brik - Location: 39,29 - Owner: Neutral - Actor194: brik - Location: 38,39 - Owner: Neutral - Actor55: brik - Location: 25,39 - Owner: Neutral - Actor200: brik - Location: 28,39 - Owner: Neutral - Actor233: brik - Location: 29,39 - Owner: Neutral - Actor240: brik - Location: 39,35 - Owner: Neutral - Actor199: brik - Location: 27,39 - Owner: Neutral Actor28: tc01 Location: 24,54 Owner: Neutral @@ -340,48 +264,114 @@ Actors: Actor68: tc05 Location: 35,7 Owner: Neutral - Actor239: brik - Location: 39,36 + WallTopLeft1: brik + Location: 25,28 Owner: Neutral - Actor89: brik - Location: 35,39 - Owner: Neutral - Actor90: brik - Location: 36,39 - Owner: Neutral - Actor237: brik - Location: 25,35 - Owner: Neutral - Actor236: brik - Location: 25,36 - Owner: Neutral - Actor235: brik - Location: 25,37 - Owner: Neutral - Actor234: brik - Location: 25,38 - Owner: Neutral - Actor44: brik + WallTopLeft2: brik Location: 25,27 Owner: Neutral - Actor43: brik + WallTopLeft3: brik Location: 25,26 Owner: Neutral - Actor198: brik - Location: 26,39 - Owner: Neutral - Actor88: brik + WallTopLeft4: brik Location: 25,29 Owner: Neutral - Actor100: tent - Location: 27,26 - Owner: Multi3 - Actor99: tent - Location: 27,36 - Owner: Multi2 - Actor31: tent - Location: 36,36 - Owner: Multi1 + WallTopLeft5: brik + Location: 29,25 + Owner: Neutral + WallTopLeft6: brik + Location: 25,25 + Owner: Neutral + WallTopLeft7: brik + Location: 26,25 + Owner: Neutral + WallTopLeft8: brik + Location: 27,25 + Owner: Neutral + WallTopLeft9: brik + Location: 28,25 + Owner: Neutral + WallTopRight1: brik + Location: 35,25 + Owner: Neutral + WallTopRight2: brik + Location: 36,25 + Owner: Neutral + WallTopRight3: brik + Location: 37,25 + Owner: Neutral + WallTopRight4: brik + Location: 38,25 + Owner: Neutral + WallTopRight5: brik + Location: 39,25 + Owner: Neutral + WallTopRight6: brik + Location: 39,26 + Owner: Neutral + WallTopRight7: brik + Location: 39,27 + Owner: Neutral + WallTopRight8: brik + Location: 39,28 + Owner: Neutral + WallTopRight9: brik + Location: 39,29 + Owner: Neutral + WallBottomRight1: brik + Location: 39,37 + Owner: Neutral + WallBottomRight2: brik + Location: 37,39 + Owner: Neutral + WallBottomRight3: brik + Location: 39,38 + Owner: Neutral + WallBottomRight4: brik + Location: 39,39 + Owner: Neutral + WallBottomRight5: brik + Location: 38,39 + Owner: Neutral + WallBottomRight6: brik + Location: 39,35 + Owner: Neutral + WallBottomRight7: brik + Location: 39,36 + Owner: Neutral + WallBottomRight8: brik + Location: 35,39 + Owner: Neutral + WallBottomRight9: brik + Location: 36,39 + Owner: Neutral + WallBottomLeft1: brik + Location: 25,39 + Owner: Neutral + WallBottomLeft2: brik + Location: 28,39 + Owner: Neutral + WallBottomLeft3: brik + Location: 29,39 + Owner: Neutral + WallBottomLeft4: brik + Location: 27,39 + Owner: Neutral + WallBottomLeft5: brik + Location: 25,35 + Owner: Neutral + WallBottomLeft6: brik + Location: 25,36 + Owner: Neutral + WallBottomLeft7: brik + Location: 25,37 + Owner: Neutral + WallBottomLeft8: brik + Location: 25,38 + Owner: Neutral + WallBottomLeft9: brik + Location: 26,39 + Owner: Neutral Sniper1: sniper.soviets Location: 9,26 Owner: Soviets @@ -431,16 +421,16 @@ Actors: Location: 30,30 Owner: Multi3 Spawn1: mpspawn - Location: 36,28 + Location: 36,26 Owner: Neutral Spawn2: mpspawn - Location: 27,28 + Location: 27,26 Owner: Neutral Spawn3: mpspawn - Location: 27,38 + Location: 27,36 Owner: Neutral Spawn4: mpspawn - Location: 36,38 + Location: 36,36 Owner: Neutral Entry1: waypoint Location: 8,8 @@ -496,17 +486,14 @@ Smudges: Rules: World: CrateSpawner: - Maximum: 1 - SpawnInterval: 2500 + InitialSpawnDelay: 0 + Maximum: 4 + SpawnInterval: 1000 CrateActors: fortcrate - -SpawnMPUnits: - -MPStartLocations: + MPStartUnits@mcvonly: + BaseActor: tent WeatherOverlay: - ParticleDensityFactor: 0.0007625 - ChangingWindLevel: true - WindLevels: -5, -3, -2, 0, 2, 3, 5 WindTick: 150, 550 - InstantWindChanges: false UseSquares: false ScatterDirection: 0, 0 Gravity: 8.00, 12.00 @@ -528,7 +515,7 @@ Rules: LuaScript: Scripts: fort-lonestar.lua ScriptUpgradesCache: - Upgrades: unkillable + Upgrades: invulnerability FORTCRATE: Inherits: ^Crate SupportPowerCrateAction@parabombs: @@ -546,12 +533,29 @@ Rules: GiveUnitCrateAction@e7: Units: e7 SelectionShares: 10 + GrantUpgradeCrateAction@ironcurtain: + SelectionShares: 10 + Effect: invuln + Notification: ironcur9.aud + Upgrades: invulnerability + Duration: 1200 + ExplodeCrateAction@bigboom: + Weapon: SCUD + SelectionShares: 5 + GiveMcvCrateAction: + SelectionShares: 0 + NoBaseSelectionShares: 1000 + Units: mobiletent + ValidFactions: allies Player: - PlayerResources: - InitialCash: 50 ClassicProductionQueue@Infantry: BuildSpeed: 1 -EnemyWatcher: + ^Infantry: + Inherits@IC: ^IronCurtainable + ^Husk: + TransformOnCapture: + ForceHealthPercentage: 80 OILB: Health: HP: 3000 @@ -563,16 +567,50 @@ Rules: CashTrickler: Period: 250 Amount: 50 + MOBILETENT: + Inherits: ^Vehicle + Valued: + Cost: 2000 + Tooltip: + Name: Mobile Tent + Selectable: + Priority: 4 + SelectionDecorations: + VisualBounds: 21,21 + Health: + HP: 600 + Armor: + Type: Light + Mobile: + Speed: 85 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 4c0 + MustBeDestroyed: + RequiredForShortGame: true + BaseBuilding: + Transforms: + IntoActor: tent + Offset: 0,0 + Facing: 96 + TransformSounds: placbldg.aud, build5.aud + NoTransformNotification: BuildingCannotPlaceAudio + RenderSprites: + Image: TRUK TENT: Health: HP: 1000 Production: - Produces: Defense, Infantry, Soldier, Dog + Produces: Infantry, Soldier, Dog, Defense -Sellable: BaseProvider: Range: 12c0 Power: Amount: 0 + ProductionBar@Defense: + ProductionType: Defense + Color: 8A8A8A + BaseBuilding: FTUR: Buildable: Prerequisites: barracks @@ -580,6 +618,7 @@ Rules: Cost: 400 Power: Amount: 0 + GivesBuildableArea: PBOX: Buildable: Prerequisites: barracks @@ -591,6 +630,7 @@ Rules: Type: Heavy Power: Amount: 0 + GivesBuildableArea: DOG: Buildable: Prerequisites: barracks @@ -607,7 +647,6 @@ Rules: Valued: Cost: 40 Explodes: - Weapon: UnitExplodeSmall Chance: 20 E3: Buildable: @@ -635,7 +674,6 @@ Rules: Weapon: TankNapalm Recoil: 200 RecoilRecovery: 38 - LocalOffset: 0,85,0, 0,-85,0 MEDI: Buildable: Prerequisites: barracks @@ -653,25 +691,24 @@ Rules: Prerequisites: barracks Health: HP: 200 - AutoTarget: - InitialStanceAI: Defend SNIPER.soviets: Inherits: SNIPER Buildable: Prerequisites: ~disabled MustBeDestroyed: - DamageMultiplier@UNKILLABLE: - UpgradeTypes: unkillable - Modifier: 0, 0 + Targetable: + TargetTypes: Disguise + AutoTarget: + InitialStanceAI: AttackAnything RenderSprites: Image: SNIPER SPY: Buildable: - Queue: Infantry BuildPaletteOrder: 60 Prerequisites: barracks Valued: Cost: 300 + -MustBeDestroyed: FTRK: -Armament@AA: -Armament@AG: @@ -694,22 +731,17 @@ Rules: 4TNK: Health: HP: 2500 - Armor: - Type: Heavy Mobile: Speed: 56 RevealsShroud: Range: 14c0 Turreted: ROT: 1 - AttackTurreted: - PrimaryWeapon: 120mm - SecondaryWeapon: MammothTusk - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25 - PrimaryRecoil: 8 - PrimaryRecoilRecovery: 0.7 - SecondaryRecoil: 2 + Armament@PRIMARY: + Recoil: 8 + RecoilRecovery: 0c7 + Armament@SECONDARY: + Recoil: 2 Explodes: Weapon: napalm EmptyWeapon: napalm @@ -717,31 +749,27 @@ Rules: Step: 2 Ticks: 1 HealIfBelow: 40% - DamageCooldown: 150 BADR.Bomber: - Inherits: ^Plane - AttackBomber: - Armament: - Weapon: ParaBomb Health: HP: 60 - Armor: - Type: Light Aircraft: - ROT: 5 Speed: 280 AmmoPool: Ammo: 30 - WithFacingSpriteBody: - WithShadow: - -Selectable: - -GainsExperience: Tooltip: Name: Mig Bomber - -EjectOnDeath: - AutoSelectionSize: + SpawnActorOnDeath: + Actor: MIG.Husk RenderSprites: Image: mig + MECH: + Buildable: + Prerequisites: barracks + Valued: + Cost: 1500 + powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E1,E2,E2 SILO: Buildable: Prerequisites: ~disabled @@ -781,9 +809,6 @@ Rules: TSLA: Buildable: Prerequisites: ~disabled - MECH: - Buildable: - Prerequisites: ~disabled HIJACKER: Buildable: Prerequisites: ~disabled @@ -796,46 +821,34 @@ Weapons: 120mm: ReloadDelay: 150 Range: 10c0 - Report: cannon1.aud Burst: 6 Projectile: Bullet Speed: 204 - High: true + Blockable: false Inaccuracy: 1c682 Image: 120MM ContrailLength: 50 - Warhead: SpreadDamage + Warhead@1Dam: SpreadDamage Spread: 256 Versus: None: 75 - Wood: 75 - Light: 75 Concrete: 100 Damage: 150 - DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath - Warhead@2Smu: LeaveSmudge - SmudgeType: Crater Warhead@3Eff: CreateEffect Explosions: self_destruct MammothTusk: ReloadDelay: 300 Range: 10c0 - Report: missile6.aud - Burst: 2 ValidTargets: Ground, Air Projectile: Missile MaximumLaunchSpeed: 128 - Arm: 2 - High: true - Shadow: false - Proximity: true + Blockable: false TrailImage: smokey ContrailLength: 150 - Inaccuracy: 853 - Image: DRAGON + Inaccuracy: 0c853 ROT: 10 RangeLimit: 80 - Warhead: SpreadDamage + Warhead@1Dam: SpreadDamage Spread: 640 ValidTargets: Ground, Air Versus: @@ -845,9 +858,6 @@ Weapons: Heavy: 100 Concrete: 200 Damage: 250 - DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath - Warhead@2Smu: LeaveSmudge - SmudgeType: Crater Warhead@3Eff: CreateEffect Explosions: nuke TankNapalm: @@ -861,8 +871,9 @@ Weapons: Speed: 426 Image: 120MM Inaccuracy: 2c512 - Trail: smokey + TrailImage: smokey ContrailLength: 2 + Blockable: false Warhead: SpreadDamage Spread: 341 ValidTargets: Ground @@ -882,11 +893,10 @@ Weapons: ParaBomb: ReloadDelay: 5 Range: 5c0 - Report: chute1.aud Projectile: GravityBomb Image: BOMBLET - -OpenSequence: - Warhead: SpreadDamage + OpenSequence: idle # TODO: This crashes otherwise + Warhead@1Dam: SpreadDamage Spread: 426 Versus: None: 125 @@ -895,8 +905,6 @@ Weapons: Concrete: 25 Damage: 200 DamageTypes: Prone50Percent, TriggerProne, FireDeath - Warhead@2Smu: LeaveSmudge - SmudgeType: Crater Warhead@3Eff: CreateEffect Explosions: napalm ImpactSounds: firebl3.aud @@ -904,28 +912,23 @@ Weapons: ReloadDelay: 10 Range: 7c5 Burst: 20 - MinRange: 3c0 -Report: Projectile: Bullet Speed: 170 - Trail: fb4 + TrailImage: fb4 Image: fb3 - High: true + Blockable: false Angle: 30 Inaccuracy: 1c682 ContrailLength: 2 - Warhead: SpreadDamage - Spread: 426 + Warhead@1Dam: SpreadDamage Versus: None: 80 Wood: 100 - Light: 60 Heavy: 75 Concrete: 35 - Damage: 10 + Damage: 20 DamageTypes: Prone50Percent, TriggerProne, FireDeath - Warhead@2Smu: LeaveSmudge - SmudgeType: Scorch Warhead@3Eff: CreateEffect Explosions: small_napalm ImpactSounds: firebl3.aud @@ -936,7 +939,7 @@ Weapons: ValidTargets: Air, Ground Projectile: Bullet Speed: 1c682 - High: true + Blockable: false Warhead: SpreadDamage Spread: 213 ValidTargets: Air, Ground @@ -955,54 +958,33 @@ Weapons: SCUD: ReloadDelay: 280 Range: 7c0 - MinRange: 3c0 - Report: missile1.aud Projectile: Bullet - Speed: 170 Arm: 10 - High: true - Shadow: false - Proximity: true - Trail: smokey - Inaccuracy: 426 - Image: V2 + TrailImage: smokey + Blockable: false + Inaccuracy: 0c426 Angle: 216 - Warhead: SpreadDamage + Warhead@1Dam: SpreadDamage Spread: 853 + Falloff: 100, 37, 14, 5, 0 Versus: None: 100 Wood: 90 Light: 80 Heavy: 70 Damage: 500 - DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath - Warhead@2Smu: LeaveSmudge - SmudgeType: Crater + AffectsParent: true Warhead@3Eff: CreateEffect Explosions: nuke ImpactSounds: kaboom1.aud - ValidImpactTypes: Ground - Warhead@4Eff: CreateEffect - Explosions: large_splash - ImpactSounds: kaboom1.aud - ValidImpactTypes: Water SilencedPPK: - ReloadDelay: 80 Range: 25c0 - Report: silppk.aud - Projectile: Bullet - Speed: 1c682 - Warhead: SpreadDamage - Spread: 128 + ValidTargets: Infantry, Tank, Vehicle, Husk + InvalidTargets: Water, Structure, Wall + Warhead@1Dam: SpreadDamage + ValidTargets: Infantry, Tank, Vehicle, Husk Versus: - Wood: 0 - Light: 0 Heavy: 50 - Concrete: 0 - Damage: 150 - DamageTypes: Prone50Percent, TriggerProne, BulletDeath - Warhead@2Eff: CreateEffect - Explosions: piffs Voices: