Merge pull request #6837 from obrakmann/mission-polish

Another mission polish PR
This commit is contained in:
Matthias Mailänder
2014-10-26 07:47:47 +01:00
20 changed files with 114 additions and 101 deletions

View File

@@ -20,8 +20,9 @@ namespace OpenRA.Mods.RA
{
class CrateInfo : ITraitInfo, IOccupySpaceInfo, Requires<RenderSpritesInfo>
{
[Desc("Seconds")]
public readonly int Lifetime = 5;
[Desc("Length of time (in seconds) until the crate gets removed automatically. " +
"A value of zero disables auto-removal.")]
public readonly int Lifetime = 0;
[Desc("Allowed to land on.")]
public readonly string[] TerrainTypes = { };
@@ -57,26 +58,29 @@ namespace OpenRA.Mods.RA
if (collected)
return;
var shares = self.TraitsImplementing<CrateAction>()
.Select(a => Pair.New(a, a.GetSelectionSharesOuter(crusher)));
var totalShares = shares.Sum(a => a.Second);
var n = self.World.SharedRandom.Next(totalShares);
var crateActions = self.TraitsImplementing<CrateAction>();
self.Destroy();
collected = true;
if (crateActions.Any())
{
var shares = crateActions.Select(a => Pair.New(a, a.GetSelectionSharesOuter(crusher)));
var totalShares = shares.Sum(a => a.Second);
var n = self.World.SharedRandom.Next(totalShares);
foreach (var s in shares)
{
if (n < s.Second)
{
s.First.Activate(crusher);
return;
}
else
} else
n -= s.Second;
}
}
}
public void OnLanded()
{
@@ -107,7 +111,7 @@ namespace OpenRA.Mods.RA
public void Tick(Actor self)
{
if (++ticks >= info.Lifetime * 25)
if (info.Lifetime != 0 && ++ticks >= info.Lifetime * 25)
self.Destroy();
}

View File

@@ -202,7 +202,8 @@ namespace OpenRA.Mods.RA.Scripting
"The function will return true if production could be started, false otherwise. " +
"If an actionFunc is given, it will be called as actionFunc(Actor[] actors) once " +
"production of all actors has been completed. The actors array is guaranteed to " +
"only contain alive actors.")]
"only contain alive actors. Note: This function will fail to work when called " +
"during the first tick")]
public bool Build(string[] actorTypes, LuaFunction actionFunc = null)
{
var typeToQueueMap = new Dictionary<string, string>();

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -483,6 +483,8 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -765,6 +765,8 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy

View File

@@ -133,9 +133,14 @@ WorldLoaded = function()
end)
end)
Media.PlayMovieFullscreen("bkground.vqa", function()
Media.PlayMovieFullscreen("nitejump.vqa", function()
gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.")
reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
nod.AddPrimaryObjective("Defend against the GDI forces.")
end)
end)
BuildNod1()
Utils.Do(NodHelis, function(heli)
@@ -161,6 +166,4 @@ WorldLoaded = function()
end)
Camera.Position = Actor56.CenterPosition
Media.PlayMovieFullscreen("bkground.vqa", function() Media.PlayMovieFullscreen("nitejump.vqa") end)
end

View File

@@ -25,7 +25,7 @@ Type: Campaign
Options:
Cheats: False
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -545,7 +545,7 @@ Actors:
GDIHeliLZ: waypoint
Location: 27,58
Owner: Neutral
crate: CRATE
crate: CRATE.plain
Location: 25,58
Owner: Neutral
@@ -575,11 +575,12 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
@@ -604,17 +605,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
CRATE:
Crate:
Lifetime: 9999
HealUnitsCrateAction:
-RevealMapCrateAction:
-GiveMcvCrateAction:
-GiveCashCrateAction:
-ExplodeCrateAction@fire:
-GrantUpgradeCrateAction@cloak:
-DuplicateUnitCrateAction:
ScriptTriggers:
Sequences:

View File

@@ -138,9 +138,13 @@ WorldLoaded = function()
end)
end)
Media.PlayMovieFullscreen("bkground.vqa", function()
Media.PlayMovieFullscreen("nitejump.vqa", function()
gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.")
reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
nod.AddPrimaryObjective("Defend against the GDI forces.")
end)
end)
SetupWorld()
@@ -193,6 +197,4 @@ WorldLoaded = function()
end)
Camera.Position = GDIReinforcementsWP1.CenterPosition
Media.PlayMovieFullscreen("bkground.vqa", function() Media.PlayMovieFullscreen("nitejump.vqa") end)
end

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -594,7 +594,7 @@ Actors:
GDIReinforcementsWP1: waypoint
Location: 50,45
Owner: Neutral
crate: CRATE
crate: CRATE.plain
Location: 14,13
Owner: Neutral
HeliEntry: waypoint
@@ -630,11 +630,12 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
@@ -662,17 +663,6 @@ Rules:
E3:
AutoTarget:
ScanRadius: 5
CRATE:
Crate:
Lifetime: 9999
HealUnitsCrateAction:
-RevealMapCrateAction:
-GiveMcvCrateAction:
-GiveCashCrateAction:
-ExplodeCrateAction@fire:
-GrantUpgradeCrateAction@cloak:
-DuplicateUnitCrateAction:
ScriptTriggers:
Sequences:

View File

@@ -93,9 +93,13 @@ WorldLoaded = function()
end)
end)
Media.PlayMovieFullscreen("bkground.vqa", function()
Media.PlayMovieFullscreen("nodsweep.vqa", function()
nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops")
gdiObjective1 = player.AddPrimaryObjective("Defend the town of Bialystok")
gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
end)
end)
townAttackTrigger = false
Trigger.OnExitedFootprint(TownAttackTrigger, function(a, id)
@@ -125,8 +129,6 @@ WorldLoaded = function()
end)
Camera.Position = Actor141.CenterPosition
Media.PlayMovieFullscreen("bkground.vqa", function() Media.PlayMovieFullscreen("nodsweep.vqa") end)
end
Tick = function()

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -899,6 +899,8 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -555,6 +555,8 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy

View File

@@ -43,9 +43,11 @@ WorldLoaded = function()
end)
end)
Media.PlayMovieFullscreen("dessweep.vqa", function()
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
end)
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(DateTime.Seconds(2), function()

View File

@@ -24,7 +24,7 @@ Type: Campaign
Options:
Crates: False
Fog: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
@@ -595,6 +595,8 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy

View File

@@ -59,9 +59,11 @@ WorldLoaded = function()
end)
end)
Media.PlayMovieFullscreen("dessweep.vqa", function()
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
end)
Trigger.OnKilled(TechCenter, function() player.MarkFailedObjective(nodObjective1) end)
Trigger.OnCapture(TechCenter, function()
@@ -74,7 +76,6 @@ WorldLoaded = function()
Trigger.AfterDelay(DateTime.Seconds(40), function() SendAttackWave(FirstAttackWaveUnits, FirstAttackWave) end)
Trigger.AfterDelay(DateTime.Seconds(80), function() SendAttackWave(SecondAttackWaveUnits, SecondAttackWave) end)
Trigger.AfterDelay(DateTime.Seconds(140), function() SendAttackWave(ThirdAttackWaveUnits, FirstAttackWave) end)
end
Tick = function()

View File

@@ -646,4 +646,18 @@
DestroyedSound: xplobig4.aud
BodyOrientation:
ScriptTriggers:
^Crate:
Tooltip:
Name: Crate
GenericName: Crate
Crate:
TerrainTypes: Clear, Rough, Road, Tiberium, BlueTiberium, Beach
RenderSprites:
Palette: effect
WithCrateBody:
XmasImages: xcratea, xcrateb, xcratec, xcrated
Selectable:
Selectable: false
Bounds: 15,15,-1,-1
BodyOrientation:

View File

@@ -1,9 +1,11 @@
CRATE.plain:
Inherits: ^Crate
ScriptTriggers:
CRATE:
Tooltip:
Name: Crate
Inherits: ^Crate
Crate:
Lifetime: 240
TerrainTypes: Clear, Rough, Road, Tiberium, BlueTiberium, Beach
GiveCashCrateAction:
Amount: 1000
SelectionShares: 20
@@ -27,14 +29,6 @@ CRATE:
SelectionShares: 0
NoBaseSelectionShares: 120
Units: mcv
RenderSprites:
Palette: effect
WithCrateBody:
XmasImages: xcratea, xcrateb, xcratec, xcrated
Selectable:
Selectable: false
Bounds: 15,15,-1,-1
BodyOrientation:
mpspawn:
Immobile:

View File

@@ -175,12 +175,16 @@ WorldLoaded = function()
Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished)
Media.PlayMovieFullscreen("landing.vqa", function()
FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.")
SurviveObjective = player.AddPrimaryObjective("Tanya and Einstein must survive.")
england.AddPrimaryObjective("Destroy the soviet base after a successful rescue.")
CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.")
DefendObjective = ussr.AddPrimaryObjective("Kill Tanya and keep Einstein hostage.")
RunInitialActivities()
end)
Trigger.OnKilled(Lab, LabDestroyed)
Trigger.OnKilled(OilPump, OilPumpDestroyed)
@@ -193,13 +197,9 @@ WorldLoaded = function()
civilianTeam = { Civilian1, Civilian2 }
Trigger.OnAnyKilled(civilianTeam, CiviliansKilled)
RunInitialActivities()
SetUnitStances()
Trigger.AfterDelay(DateTime.Seconds(5), function() Actor.Create("camera", true, { Owner = player, Location = BaseCameraPoint.Location }) end)
Camera.Position = InsertionLZ.CenterPosition
Media.PlayMovieFullscreen("landing.vqa")
end

View File

@@ -109,9 +109,11 @@ WorldLoaded = function()
Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished)
Media.PlayMovieFullscreen("mcv.vqa", function()
ConquestObjective = player.AddPrimaryObjective("Secure the area.")
ussr.AddPrimaryObjective("Defend your base.")
ukraine.AddPrimaryObjective("Destroy the convoy.")
end)
RunInitialActivities()
@@ -123,8 +125,6 @@ WorldLoaded = function()
Camera.Position = ReinforcementsEntryPoint.CenterPosition
Media.PlayMovieFullscreen("mcv.vqa")
ConvoyTimer(DateTime.Seconds(3), "TenMinutesRemaining")
ConvoyTimer(DateTime.Minutes(5), "WarningFiveMinutesRemaining")
ConvoyTimer(DateTime.Minutes(6), "WarningFourMinutesRemaining")

View File

@@ -100,8 +100,6 @@ InitPlayers = function()
ussr = Player.GetPlayer("USSR")
ussr.Cash = 10000
Media.PlayMovieFullscreen("brdgtilt.vqa")
end
InitObjectives = function()
@@ -263,8 +261,10 @@ end
WorldLoaded = function()
InitPlayers()
Media.PlayMovieFullscreen("brdgtilt.vqa", function()
InitObjectives()
InitTriggers()
SendAlliedUnits()
end)
end