Add soviet-06b

This commit is contained in:
Biofreak1987
2015-10-11 20:38:35 +02:00
parent 76ada5176f
commit 4b7f5f2c1f
8 changed files with 883 additions and 1 deletions

View File

@@ -70,6 +70,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re
mods\ra\maps\soviet-05\soviet05-reinforcements_teams.lua = mods\ra\maps\soviet-05\soviet05-reinforcements_teams.lua
mods\ra\maps\soviet-06a\soviet06a.lua = mods\ra\maps\soviet-06a\soviet06a.lua
mods\ra\maps\soviet-06a\soviet06a-AI.lua = mods\ra\maps\soviet-06a\soviet06a-AI.lua
mods\ra\maps\soviet-06b\soviet06b.lua = mods\ra\maps\soviet-06b\soviet06b.lua
mods\ra\maps\soviet-06b\soviet06b-AI.lua = mods\ra\maps\soviet-06b\soviet06b-AI.lua
mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua
mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua
mods\ra\maps\survival02\survival02.lua = mods\ra\maps\survival02\survival02.lua

View File

@@ -43,7 +43,7 @@ BuildBuilding = function(building)
enemy.Cash = enemy.Cash - building[3]
building[4] = true
Trigger.OnKilled(actor, function() building[4] = true end)
Trigger.OnKilled(actor, function() building[4] = false end)
Trigger.OnDamaged(actor, function(building)
if building.Owner == enemy and building.Health < building.MaxHealth * 3/4 then
building.StartBuildingRepairs()

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,660 @@
MapFormat: 7
RequiresMod: ra
Title: Soviet 06b: Bridge over the River VizchGoi
Description: There is a special cargo that needs to be transported to a nearby Soviet base in the northeast.\n\nMake sure the trucks reach their destination intact. Along the way, there is a bridge which the Allies may have destroyed.\n\nIf so, use the Naval options at your disposal. Our attack subs will make short work of any Allied boats you discover.
Author: Westwood Studios
Tileset: TEMPERAT
MapSize: 128,128
Bounds: 18,10,81,58
Visibility: MissionSelector
Type: Campaign
Videos:
Briefing: soviet6.vqa
GameStart: onthprwl.vqa
GameWon: sitduck.vqa
GameLost: dpthchrg.vqa
Options:
Crates: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
StartingCash: 11500
ConfigurableStartingUnits: False
ShortGame: False
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: allies
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
PlayerReference@Greece:
Name: Greece
Faction: allies
ColorRamp: 161,134,236
Enemies: USSR
PlayerReference@USSR:
Name: USSR
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: soviet
LockColor: True
ColorRamp: 3,255,127
LockSpawn: True
LockTeam: True
Enemies: Greece, Creeps
Actors:
Actor0: cycl
Location: 17,14
Owner: Neutral
Actor1: cycl
Location: 17,15
Owner: Neutral
Actor2: cycl
Location: 17,16
Owner: Neutral
Actor3: cycl
Location: 17,17
Owner: Neutral
Actor4: cycl
Location: 17,18
Owner: Neutral
Actor5: sbag
Location: 62,37
Owner: Greece
Actor6: sbag
Location: 63,37
Owner: Greece
Actor7: sbag
Location: 64,37
Owner: Greece
Actor8: sbag
Location: 65,37
Owner: Greece
Actor9: sbag
Location: 65,38
Owner: Greece
Actor10: sbag
Location: 66,38
Owner: Greece
Actor11: sbag
Location: 71,38
Owner: Greece
Actor12: sbag
Location: 72,38
Owner: Greece
Actor13: sbag
Location: 73,38
Owner: Greece
Actor14: sbag
Location: 74,38
Owner: Greece
Actor15: sbag
Location: 82,38
Owner: Greece
Actor16: sbag
Location: 83,38
Owner: Greece
Actor17: sbag
Location: 70,39
Owner: Greece
Actor18: sbag
Location: 71,39
Owner: Greece
Actor19: sbag
Location: 83,39
Owner: Greece
Actor20: sbag
Location: 83,40
Owner: Greece
Actor21: sbag
Location: 57,43
Owner: Greece
Actor22: sbag
Location: 58,43
Owner: Greece
Actor23: sbag
Location: 57,44
Owner: Greece
Actor24: sbag
Location: 80,46
Owner: Greece
Actor25: sbag
Location: 80,47
Owner: Greece
Actor26: sbag
Location: 63,48
Owner: Greece
Actor27: sbag
Location: 64,48
Owner: Greece
Actor28: sbag
Location: 79,48
Owner: Greece
Actor29: sbag
Location: 80,48
Owner: Greece
Actor30: sbag
Location: 64,49
Owner: Greece
Actor31: sbag
Location: 64,50
Owner: Greece
Actor32: sbag
Location: 65,50
Owner: Greece
Actor33: t17
Location: 66,28
Owner: Neutral
Actor34: t08
Location: 83,35
Owner: Neutral
Actor35: t16
Location: 82,34
Owner: Neutral
Actor36: tc04
Location: 63,26
Owner: Neutral
Actor37: tc05
Location: 67,30
Owner: Neutral
Actor38: tc01
Location: 79,32
Owner: Neutral
Actor39: tc04
Location: 34,20
Owner: Neutral
Actor40: tc05
Location: 82,15
Owner: Neutral
Actor41: tc04
Location: 90,17
Owner: Neutral
Actor42: tc01
Location: 92,18
Owner: Neutral
Actor43: tc03
Location: 82,14
Owner: Neutral
Actor44: tc01
Location: 95,15
Owner: Neutral
Actor45: tc02
Location: 83,12
Owner: Neutral
Actor46: t17
Location: 85,12
Owner: Neutral
Actor47: t16
Location: 86,13
Owner: Neutral
Actor48: t16
Location: 92,24
Owner: Neutral
Actor49: t14
Location: 93,24
Owner: Neutral
Actor50: t11
Location: 93,21
Owner: Neutral
Actor51: tc05
Location: 54,23
Owner: Neutral
Actor52: tc05
Location: 74,46
Owner: Neutral
Actor53: tc04
Location: 80,43
Owner: Neutral
Actor54: tc02
Location: 81,42
Owner: Neutral
Actor55: tc01
Location: 73,40
Owner: Neutral
Actor56: t17
Location: 71,40
Owner: Neutral
Actor57: t15
Location: 80,36
Owner: Neutral
Actor58: t12
Location: 31,57
Owner: Neutral
Actor59: tc04
Location: 54,26
Owner: Neutral
Actor60: t14
Location: 50,31
Owner: Neutral
Actor62: t05
Location: 48,39
Owner: Neutral
Actor63: t06
Location: 47,39
Owner: Neutral
Actor66: t08
Location: 49,38
Owner: Neutral
Actor68: t08
Location: 50,39
Owner: Neutral
Actor69: tc05
Location: 35,58
Owner: Neutral
Actor70: tc04
Location: 44,55
Owner: Neutral
Actor71: tc02
Location: 34,66
Owner: Neutral
Actor72: tc04
Location: 56,65
Owner: Neutral
Actor73: t17
Location: 49,66
Owner: Neutral
Actor74: t16
Location: 50,65
Owner: Neutral
Actor75: tc02
Location: 54,66
Owner: Neutral
Actor76: tc01
Location: 52,66
Owner: Neutral
Actor77: tc02
Location: 58,58
Owner: Neutral
Actor78: t15
Location: 59,60
Owner: Neutral
Actor79: t14
Location: 48,38
Owner: Neutral
Actor81: tc03
Location: 49,20
Owner: Neutral
Actor82: tc02
Location: 36,19
Owner: Neutral
Actor83: t15
Location: 39,25
Owner: Neutral
Actor84: t08
Location: 38,27
Owner: Neutral
Actor85: t08
Location: 40,25
Owner: Neutral
Actor86: t13
Location: 49,40
Owner: Neutral
Actor88: t02
Location: 50,37
Owner: Neutral
Actor90: hbox
Location: 58,46
Owner: Greece
Actor91: hbox
Location: 62,47
Owner: Greece
Actor92: gun
Location: 57,46
Owner: Greece
Facing: 160
Actor93: gun
Location: 61,48
Owner: Greece
Facing: 160
Actor95: dome
Location: 67,49
Owner: Greece
Actor103: 2tnk
Location: 76,30
Owner: Greece
Facing: 160
Actor104: 2tnk
Location: 76,29
Owner: Greece
Facing: 160
Actor106: arty
Location: 63,47
Owner: Greece
Facing: 160
Actor107: arty
Location: 58,44
Owner: Greece
Facing: 160
Actor110: 3tnk
Location: 43,63
Owner: USSR
Health: 99
Facing: 32
Actor111: 3tnk
Location: 44,62
Owner: USSR
Health: 99
Facing: 32
Actor112: v2rl
Location: 41,64
Owner: USSR
Facing: 32
Actor113: v2rl
Location: 43,64
Owner: USSR
Facing: 32
Actor115: 2tnk
Location: 75,30
Owner: Greece
Facing: 160
Actor116: 2tnk
Location: 75,31
Owner: Greece
Facing: 160
Actor117: 2tnk
Location: 83,20
Owner: Greece
Facing: 160
Actor118: 2tnk
Location: 88,21
Owner: Greece
Facing: 160
Actor119: 2tnk
Location: 62,44
Owner: Greece
Facing: 160
Actor120: 1tnk
Location: 59,44
Owner: Greece
Facing: 160
Actor121: 1tnk
Location: 63,46
Owner: Greece
Facing: 160
Actor123: ca
Location: 87,29
Owner: Greece
Facing: 224
Actor124: ca
Location: 87,31
Owner: Greece
Facing: 160
Actor125: ca
Location: 75,25
Owner: Greece
Facing: 224
Actor126: pt
Location: 71,16
Owner: Greece
Facing: 224
Actor127: pt
Location: 65,20
Owner: Greece
Facing: 224
Actor128: dd
Location: 70,20
Owner: Greece
Facing: 224
Actor129: waypoint
Location: 46,60
Owner: Neutral
Actor144: silo
Owner: Greece
Location: 73,46
Actor145: silo
Owner: Greece
Location: 73,47
Actor146: silo
Owner: Greece
Location: 73,48
Actor147: silo
Owner: Greece
Location: 73,49
waypoint69: waypoint
Location: 21,28
Owner: Neutral
waypoint78: waypoint
Location: 83,23
Owner: Neutral
waypoint79: waypoint
Location: 87,19
Owner: Neutral
waypoint80: waypoint
Location: 84,22
Owner: Neutral
waypoint81: waypoint
Location: 76,22
Owner: Neutral
waypoint82: waypoint
Location: 87,29
Owner: Neutral
waypoint94: waypoint
Location: 49,16
Owner: Neutral
APCWaypoint1: waypoint
Location: 39,62
Owner: Neutral
APCWaypoint2: waypoint
Location: 46,66
Owner: Neutral
Apwr: apwr
Location: 76,40
Owner: Greece
Apwr2: apwr
Location: 77,44
Owner: Greece
AttackWaypoint1: waypoint
Owner: Neutral
Location: 26,55
AttackWaypoint2: waypoint
Owner: Neutral
Location: 41,55
Barr: tent
Location: 67,45
Owner: Greece
CameraStart: camera
Location: 46,61
Owner: Neutral
CYard: fact
Location: 70,46
Owner: Greece
CYardLocation: waypoint
Owner: Neutral
Location: 71,49
Harvester: harv
Location: 77,39
Owner: Greece
IntroEnemy1: 1tnk
Location: 55,49
Owner: Greece
Facing: 160
IntroEnemy2: 2tnk
Location: 56,50
Owner: Greece
Facing: 160
IntroEnemy3: 1tnk
Location: 58,50
Owner: Greece
Facing: 160
Mcv: mcv
Location: 51,55
Owner: USSR
Health: 82
Facing: 160
McvWaypoint: waypoint
Location: 39,67
Owner: Neutral
Proc: proc
Location: 71,41
Owner: Greece
FreeActor: False
Truck1: truk
Location: 42,66
Owner: USSR
Facing: 32
Truck2: truk
Location: 39,65
Owner: USSR
Facing: 32
Weap: weap
Location: 67,41
Owner: Greece
Smudges:
Rules:
Player:
-ConquestVictoryConditions:
MissionObjectives:
EarlyGameOver: true
-EnemyWatcher:
World:
-CrateSpawner:
-SpawnMPUnits:
-MPStartLocations:
LuaScript:
Scripts: soviet06b.lua, soviet06b-AI.lua
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
^Building:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Vehicle:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Ship:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Plane:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Wall:
Tooltip:
ShowOwnerRow: false
^TechBuilding:
Tooltip:
ShowOwnerRow: false
^Crate:
Tooltip:
ShowOwnerRow: false
^Husk:
Tooltip:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
APWR:
Buildable:
Prerequisites: ~disabled
ARTY:
Buildable:
Prerequisites: ~vehicles.allies, ~techlevel.low
BRIK:
Buildable:
Prerequisites: ~disabled
TSLA:
Buildable:
Prerequisites: ~disabled
SAM:
Buildable:
Prerequisites: ~disabled
IRON:
Buildable:
Prerequisites: ~disabled
MSLO:
Buildable:
Prerequisites: ~disabled
E3:
Buildable:
Prerequisites: ~tent
SHOK:
Buildable:
Prerequisites: ~disabled
SNIPER:
Buildable:
Prerequisites: ~disabled
HIJACKER:
Buildable:
Prerequisites: ~disabled
MIG:
Buildable:
Prerequisites: ~disabled
FTRK:
Buildable:
Prerequisites: ~disabled
2TNK:
Buildable:
Prerequisites: ~vehicles.allies, ~techlevel.low
4TNK:
Buildable:
Prerequisites: ~disabled
APC:
Buildable:
Prerequisites: ~disabled
TRUK:
-SpawnActorOnDeath:
-SupplyTruck:
Buildable:
Prerequisites: ~disabled
QTNK:
Buildable:
Prerequisites: ~disabled
MCV:
Buildable:
Prerequisites: ~disabled
MSUB:
Buildable:
Prerequisites: ~disabled
STEK:
Buildable:
Prerequisites: ~disabled
DOG:
Health:
HP: 25
AutoTarget:
ScanRadius: 5
HARV:
Harvester:
SearchFromProcRadius: 50
SearchFromOrderRadius: 50
AFLD:
ParatroopersPower@paratroopers:
DropItems: E1,E1,E1,E1,E1
Sequences:
VoxelSequences:
Weapons:
Voices:
Notifications:
Translations:

View File

@@ -0,0 +1,112 @@
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end
IdlingUnits = function()
local lazyUnits = enemy.GetGroundAttackers()
Utils.Do(lazyUnits, function(unit)
Trigger.OnDamaged(unit, function()
Trigger.ClearAll(unit)
Trigger.AfterDelay(0, function() IdleHunt(unit) end)
end)
end)
end
BaseBuildings =
{
{ "apwr", CVec.New(5, -9), 500, true },
{ "tent", CVec.New(-4, -4), 400, true },
{ "proc", CVec.New(0, -8), 1400, true },
{ "weap", CVec.New(-4, -8), 2000, true },
{ "apwr", CVec.New(6, -5), 500, true }
}
BuildBase = function()
if CYard.IsDead or CYard.Owner ~= enemy then
return
elseif Harvester.IsDead and enemy.Resources <= 299 then
return
end
for i,v in ipairs(BaseBuildings) do
if not v[4] then
BuildBuilding(v)
return
end
end
Trigger.AfterDelay(DateTime.Seconds(10), BuildBase)
end
BuildBuilding = function(building)
Trigger.AfterDelay(Actor.BuildTime(building[1]), function()
local actor = Actor.Create(building[1], true, { Owner = enemy, Location = CYardLocation.Location + building[2] })
enemy.Cash = enemy.Cash - building[3]
building[4] = true
Trigger.OnKilled(actor, function() building[4] = false end)
Trigger.OnDamaged(actor, function(building)
if building.Owner == enemy and building.Health < building.MaxHealth * 3/4 then
building.StartBuildingRepairs()
end
end)
Trigger.AfterDelay(DateTime.Seconds(10), BuildBase)
end)
end
ProduceInfantry = function()
if not BaseBuildings[2][4] then
return
elseif Harvester.IsDead and enemy.Resources <= 299 then
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9))
local toBuild = { Utils.Random(AlliedInfantryTypes) }
local Path = Utils.Random(AttackPaths)
enemy.Build(toBuild, function(unit)
InfAttack[#InfAttack + 1] = unit[1]
if #InfAttack >= 10 then
SendUnits(InfAttack, Path)
InfAttack = { }
Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry)
else
Trigger.AfterDelay(delay, ProduceInfantry)
end
end)
end
ProduceArmor = function()
if not BaseBuildings[4][4] then
return
elseif Harvester.IsDead and enemy.Resources <= 599 then
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17))
local toBuild = { Utils.Random(AlliedArmorTypes) }
local Path = Utils.Random(AttackPaths)
enemy.Build(toBuild, function(unit)
ArmorAttack[#ArmorAttack + 1] = unit[1]
if #ArmorAttack >= 6 then
SendUnits(ArmorAttack, Path)
ArmorAttack = { }
Trigger.AfterDelay(DateTime.Minutes(3), ProduceArmor)
else
Trigger.AfterDelay(delay, ProduceArmor)
end
end)
end
SendUnits = function(units, waypoints)
Utils.Do(units, function(unit)
if not unit.IsDead then
Utils.Do(waypoints, function(waypoint)
unit.AttackMove(waypoint.Location)
end)
IdleHunt(unit)
end
end)
end

View File

@@ -0,0 +1,107 @@
IntroAttackers = { IntroEnemy1, IntroEnemy2, IntroEnemy3 }
Trucks = { Truck1, Truck2 }
InfAttack = { }
ArmorAttack = { }
AttackPaths = { { AttackWaypoint1 }, { AttackWaypoint2 } }
AlliedInfantryTypes = { "e1", "e1", "e3" }
AlliedArmorTypes = { "jeep", "jeep", "1tnk", "1tnk", "2tnk", "2tnk", "arty" }
SovietReinforcements1 = { "e6", "e6", "e6", "e6", "e6" }
SovietReinforcements2 = { "e4", "e4", "e2", "e2", "e2" }
SovietReinforcements1Waypoints = { McvWaypoint.Location, APCWaypoint1.Location }
SovietReinforcements2Waypoints = { McvWaypoint.Location, APCWaypoint2.Location }
TruckGoalTrigger = { CPos.New(85, 10), CPos.New(85, 11), CPos.New(85, 12), CPos.New(86, 13), CPos.New(87, 13), CPos.New(88, 13), CPos.New(88, 14), CPos.New(89, 14), CPos.New(90, 14), CPos.New(90, 15), CPos.New(91, 15), CPos.New(91, 16), CPos.New(91, 17), CPos.New(92, 17), CPos.New(93, 17), CPos.New(94, 17), CPos.New(94, 18), CPos.New(95, 18), CPos.New(96, 18), CPos.New(96, 19), CPos.New(97, 19), CPos.New(98, 19)}
Trigger.OnEnteredFootprint(TruckGoalTrigger, function(a, id)
if not truckGoalTrigger and a.Owner == player and a.Type == "truk" then
truckGoalTrigger = true
player.MarkCompletedObjective(sovietObjective)
end
end)
Trigger.OnAllKilled(Trucks, function()
if not controlCenterTrigger then
enemy.MarkCompletedObjective(alliedObjective)
end
end)
Trigger.OnKilled(Apwr, function(building)
BaseBuildings[1][4] = false
end)
Trigger.OnKilled(Barr, function(building)
BaseBuildings[2][4] = false
end)
Trigger.OnKilled(Proc, function(building)
BaseBuildings[3][4] = false
end)
Trigger.OnKilled(Weap, function(building)
BaseBuildings[4][4] = false
end)
Trigger.OnKilled(Apwr2, function(building)
BaseBuildings[5][4] = false
end)
Trigger.OnRemovedFromWorld(Mcv, function()
if not mcvDeployed then
mcvDeployed = true
BuildBase()
Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry)
Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor)
end
end)
WorldLoaded = function()
player = Player.GetPlayer("USSR")
enemy = Player.GetPlayer("Greece")
Camera.Position = CameraStart.CenterPosition
Mcv.Move(McvWaypoint.Location)
Harvester.FindResources()
Utils.Do(IntroAttackers, function(actor)
IdleHunt(actor)
end)
Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements1, SovietReinforcements1Waypoints)
Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements2, SovietReinforcements2Waypoints)
Utils.Do(Map.NamedActors, function(actor)
if actor.Owner == enemy and actor.HasProperty("StartBuildingRepairs") then
Trigger.OnDamaged(actor, function(building)
if building.Owner == enemy and building.Health < 3/4 * building.MaxHealth then
building.StartBuildingRepairs()
end
end)
end
end)
Trigger.OnObjectiveAdded(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win")
end)
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose")
end)
alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.")
sovietObjective = player.AddPrimaryObjective("Escort the Convoy.")
end
Tick = function()
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(alliedObjective)
end
if enemy.Resources >= enemy.ResourceCapacity * 0.75 then
enemy.Cash = enemy.Cash + enemy.Resources - enemy.ResourceCapacity * 0.25
enemy.Resources = enemy.ResourceCapacity * 0.25
end
end

View File

@@ -13,4 +13,5 @@ Soviet Campaign:
./mods/ra/maps/soviet-04b
./mods/ra/maps/soviet-05
./mods/ra/maps/soviet-06a
./mods/ra/maps/soviet-06b
./mods/ra/maps/soviet-07