Merge pull request #7072 from obrakmann/fmv-overhaul

Move FMV playback from Lua scripts to widgets
This commit is contained in:
Paul Chote
2014-12-19 17:43:07 +13:00
32 changed files with 342 additions and 227 deletions

View File

@@ -91,6 +91,15 @@ namespace OpenRA
} }
} }
public class MapVideos
{
public string BackgroundInfo;
public string Briefing;
public string GameStart;
public string GameWon;
public string GameLost;
}
public class Map public class Map
{ {
[FieldLoader.Ignore] public IFolder Container; [FieldLoader.Ignore] public IFolder Container;
@@ -105,7 +114,6 @@ namespace OpenRA
public string Title; public string Title;
public string Type = "Conquest"; public string Type = "Conquest";
public string PreviewVideo;
public string Description; public string Description;
public string Author; public string Author;
public string Tileset; public string Tileset;
@@ -134,6 +142,19 @@ namespace OpenRA
return options; return options;
} }
[FieldLoader.LoadUsing("LoadVideos")]
public MapVideos Videos;
static object LoadVideos(MiniYaml y)
{
var videos = new MapVideos();
var nodesDict = y.ToDictionary();
if (nodesDict.ContainsKey("Videos"))
FieldLoader.Load(videos, nodesDict["Videos"]);
return videos;
}
[FieldLoader.Ignore] public Lazy<Dictionary<string, ActorReference>> Actors; [FieldLoader.Ignore] public Lazy<Dictionary<string, ActorReference>> Actors;
public int PlayerCount { get { return Players.Count(p => p.Value.Playable); } } public int PlayerCount { get { return Players.Count(p => p.Value.Playable); } }
@@ -375,7 +396,6 @@ namespace OpenRA
"Title", "Title",
"Description", "Description",
"Author", "Author",
"PreviewVideo",
"Tileset", "Tileset",
"MapSize", "MapSize",
"Bounds", "Bounds",
@@ -391,6 +411,8 @@ namespace OpenRA
root.Add(new MiniYamlNode(field, FieldSaver.FormatValue(this, f))); root.Add(new MiniYamlNode(field, FieldSaver.FormatValue(this, f)));
} }
root.Add(new MiniYamlNode("Videos", FieldSaver.SaveDifferences(Videos, new MapVideos())));
root.Add(new MiniYamlNode("Options", FieldSaver.SaveDifferences(Options, new MapOptions()))); root.Add(new MiniYamlNode("Options", FieldSaver.SaveDifferences(Options, new MapOptions())));
root.Add(new MiniYamlNode("Players", null, root.Add(new MiniYamlNode("Players", null,

View File

@@ -157,6 +157,8 @@ namespace OpenRA.Mods.Common.UtilityCommands
map.MapResources = Exts.Lazy(() => new CellLayer<ResourceTile>(TileShape.Rectangle, size)); map.MapResources = Exts.Lazy(() => new CellLayer<ResourceTile>(TileShape.Rectangle, size));
map.MapTiles = Exts.Lazy(() => new CellLayer<TerrainTile>(TileShape.Rectangle, size)); map.MapTiles = Exts.Lazy(() => new CellLayer<TerrainTile>(TileShape.Rectangle, size));
map.Videos = new MapVideos();
map.Options = new MapOptions(); map.Options = new MapOptions();
if (legacyMapFormat == IniMapFormat.RedAlert) if (legacyMapFormat == IniMapFormat.RedAlert)
@@ -174,6 +176,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
ReadCncTrees(file); ReadCncTrees(file);
} }
LoadVideos(file, "BASIC");
LoadActors(file, "STRUCTURES"); LoadActors(file, "STRUCTURES");
LoadActors(file, "UNITS"); LoadActors(file, "UNITS");
LoadActors(file, "INFANTRY"); LoadActors(file, "INFANTRY");
@@ -502,5 +505,33 @@ namespace OpenRA.Mods.Common.UtilityCommands
map.Players.Add(section, pr); map.Players.Add(section, pr);
} }
void LoadVideos(IniFile file, string section)
{
foreach (var s in file.GetSection(section))
{
if (s.Value != "x" && s.Value != "<none>")
{
switch (s.Key)
{
case "Intro":
map.Videos.BackgroundInfo = s.Value.ToLower() + ".vqa";
break;
case "Brief":
map.Videos.Briefing = s.Value.ToLower() + ".vqa";
break;
case "Action":
map.Videos.GameStart = s.Value.ToLower() + ".vqa";
break;
case "Win":
map.Videos.GameWon = s.Value.ToLower() + ".vqa";
break;
case "Lose":
map.Videos.GameLost = s.Value.ToLower() + ".vqa";
break;
}
}
}
}
} }
} }

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Widgets
{ {
class LeaveMapLogic class LeaveMapLogic
{ {
enum Tab { Objectives, Chat }; enum Tab { Objectives, Chat }
Tab currentTab; Tab currentTab;
OrderManager orderManager; OrderManager orderManager;
@@ -125,6 +125,13 @@ namespace OpenRA.Mods.RA.Widgets
var objectivesContainer = dialog.Get<ContainerWidget>("OBJECTIVES_PANEL"); var objectivesContainer = dialog.Get<ContainerWidget>("OBJECTIVES_PANEL");
Game.LoadWidget(world, panel, objectivesContainer, new WidgetArgs()); Game.LoadWidget(world, panel, objectivesContainer, new WidgetArgs());
objectivesContainer.IsVisible = () => currentTab == Tab.Objectives; objectivesContainer.IsVisible = () => currentTab == Tab.Objectives;
string video = null;
if (world.LocalPlayer.WinState != WinState.Undefined)
video = world.LocalPlayer.WinState == WinState.Won ? world.Map.Videos.GameWon : world.Map.Videos.GameLost;
if (!string.IsNullOrEmpty(video))
Media.PlayFMVFullscreen(world, video, () => { });
} }
if (isMultiplayer) if (isMultiplayer)

View File

@@ -23,14 +23,19 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{ {
public class MissionBrowserLogic public class MissionBrowserLogic
{ {
enum PlayingVideo { None, Info, Briefing, GameStart }
readonly Action onStart; readonly Action onStart;
readonly ScrollPanelWidget descriptionPanel; readonly ScrollPanelWidget descriptionPanel;
readonly LabelWidget description; readonly LabelWidget description;
readonly SpriteFont descriptionFont; readonly SpriteFont descriptionFont;
readonly DropDownButtonWidget difficultyButton; readonly DropDownButtonWidget difficultyButton;
readonly ButtonWidget startVideoButton; readonly ButtonWidget startBriefingVideoButton;
readonly ButtonWidget stopVideoButton; readonly ButtonWidget stopBriefingVideoButton;
readonly ButtonWidget startInfoVideoButton;
readonly ButtonWidget stopInfoVideoButton;
readonly VqaPlayerWidget videoPlayer; readonly VqaPlayerWidget videoPlayer;
readonly BackgroundWidget fullscreenVideoPlayer;
readonly ScrollPanelWidget missionList; readonly ScrollPanelWidget missionList;
readonly ScrollItemWidget headerTemplate; readonly ScrollItemWidget headerTemplate;
@@ -38,12 +43,12 @@ namespace OpenRA.Mods.RA.Widgets.Logic
MapPreview selectedMapPreview; MapPreview selectedMapPreview;
bool showVideoPlayer; PlayingVideo playingVideo;
string difficulty; string difficulty;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public MissionBrowserLogic(Widget widget, Action onStart, Action onExit) public MissionBrowserLogic(Widget widget, World world, Action onStart, Action onExit)
{ {
this.onStart = onStart; this.onStart = onStart;
@@ -54,16 +59,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var title = widget.GetOrNull<LabelWidget>("MISSIONBROWSER_TITLE"); var title = widget.GetOrNull<LabelWidget>("MISSIONBROWSER_TITLE");
if (title != null) if (title != null)
title.GetText = () => showVideoPlayer ? selectedMapPreview.Title : title.Text; title.GetText = () => playingVideo != PlayingVideo.None ? selectedMapPreview.Title : title.Text;
widget.Get("MISSION_INFO").IsVisible = () => selectedMapPreview != null; widget.Get("MISSION_INFO").IsVisible = () => selectedMapPreview != null;
var previewWidget = widget.Get<MapPreviewWidget>("MISSION_PREVIEW"); var previewWidget = widget.Get<MapPreviewWidget>("MISSION_PREVIEW");
previewWidget.Preview = () => selectedMapPreview; previewWidget.Preview = () => selectedMapPreview;
previewWidget.IsVisible = () => !showVideoPlayer; previewWidget.IsVisible = () => playingVideo == PlayingVideo.None;
videoPlayer = widget.Get<VqaPlayerWidget>("MISSION_VIDEO"); videoPlayer = widget.Get<VqaPlayerWidget>("MISSION_VIDEO");
widget.Get("MISSION_BIN").IsVisible = () => showVideoPlayer; widget.Get("MISSION_BIN").IsVisible = () => playingVideo != PlayingVideo.None;
fullscreenVideoPlayer = Ui.LoadWidget<BackgroundWidget>("FULLSCREEN_PLAYER", Ui.Root, new WidgetArgs { { "world", world } });
descriptionPanel = widget.Get<ScrollPanelWidget>("MISSION_DESCRIPTION_PANEL"); descriptionPanel = widget.Get<ScrollPanelWidget>("MISSION_DESCRIPTION_PANEL");
@@ -72,10 +78,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic
difficultyButton = widget.Get<DropDownButtonWidget>("DIFFICULTY_DROPDOWNBUTTON"); difficultyButton = widget.Get<DropDownButtonWidget>("DIFFICULTY_DROPDOWNBUTTON");
startVideoButton = widget.Get<ButtonWidget>("START_VIDEO_BUTTON"); startBriefingVideoButton = widget.Get<ButtonWidget>("START_BRIEFING_VIDEO_BUTTON");
stopVideoButton = widget.Get<ButtonWidget>("STOP_VIDEO_BUTTON"); stopBriefingVideoButton = widget.Get<ButtonWidget>("STOP_BRIEFING_VIDEO_BUTTON");
stopVideoButton.IsVisible = () => showVideoPlayer; stopBriefingVideoButton.IsVisible = () => playingVideo == PlayingVideo.Briefing;
stopVideoButton.OnClick = StopVideo; stopBriefingVideoButton.OnClick = () => StopVideo(videoPlayer);
startInfoVideoButton = widget.Get<ButtonWidget>("START_INFO_VIDEO_BUTTON");
stopInfoVideoButton = widget.Get<ButtonWidget>("STOP_INFO_VIDEO_BUTTON");
stopInfoVideoButton.IsVisible = () => playingVideo == PlayingVideo.Info;
stopInfoVideoButton.OnClick = () => StopVideo(videoPlayer);
var allMaps = new List<Map>(); var allMaps = new List<Map>();
missionList.RemoveChildren(); missionList.RemoveChildren();
@@ -114,12 +125,12 @@ namespace OpenRA.Mods.RA.Widgets.Logic
SelectMap(allMaps.First()); SelectMap(allMaps.First());
var startButton = widget.Get<ButtonWidget>("STARTGAME_BUTTON"); var startButton = widget.Get<ButtonWidget>("STARTGAME_BUTTON");
startButton.OnClick = StartMission; startButton.OnClick = StartMissionClicked;
startButton.IsDisabled = () => selectedMapPreview.RuleStatus != MapRuleStatus.Cached; startButton.IsDisabled = () => selectedMapPreview.RuleStatus != MapRuleStatus.Cached;
widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
{ {
StopVideo(); StopVideo(videoPlayer);
Game.Disconnect(); Game.Disconnect();
Ui.CloseWindow(); Ui.CloseWindow();
onExit(); onExit();
@@ -128,7 +139,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
void CreateMissionGroup(string title, IEnumerable<Map> maps) void CreateMissionGroup(string title, IEnumerable<Map> maps)
{ {
var header = ScrollItemWidget.Setup(headerTemplate, () => true, () => {}); var header = ScrollItemWidget.Setup(headerTemplate, () => true, () => { });
header.Get<LabelWidget>("LABEL").GetText = () => title; header.Get<LabelWidget>("LABEL").GetText = () => title;
missionList.AddChild(header); missionList.AddChild(header);
@@ -139,41 +150,35 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var item = ScrollItemWidget.Setup(template, var item = ScrollItemWidget.Setup(template,
() => selectedMapPreview != null && selectedMapPreview.Uid == map.Uid, () => selectedMapPreview != null && selectedMapPreview.Uid == map.Uid,
() => SelectMap(map), () => SelectMap(map),
StartMission); StartMissionClicked);
item.Get<LabelWidget>("TITLE").GetText = () => map.Title; item.Get<LabelWidget>("TITLE").GetText = () => map.Title;
missionList.AddChild(item); missionList.AddChild(item);
} }
} }
float cachedSoundVolume;
float cachedMusicVolume;
void SelectMap(Map map) void SelectMap(Map map)
{ {
StopVideo();
selectedMapPreview = Game.modData.MapCache[map.Uid]; selectedMapPreview = Game.modData.MapCache[map.Uid];
// Cache the rules on a background thread to avoid jank // Cache the rules on a background thread to avoid jank
new Thread(selectedMapPreview.CacheRules).Start(); new Thread(selectedMapPreview.CacheRules).Start();
var video = selectedMapPreview.Map.PreviewVideo; var briefingVideo = selectedMapPreview.Map.Videos.Briefing;
var videoVisible = video != null; var briefingVideoVisible = briefingVideo != null;
var videoDisabled = !(videoVisible && GlobalFileSystem.Exists(video)); var briefingVideoDisabled = !(briefingVideoVisible && GlobalFileSystem.Exists(briefingVideo));
startVideoButton.IsVisible = () => videoVisible && !showVideoPlayer; var infoVideo = selectedMapPreview.Map.Videos.BackgroundInfo;
startVideoButton.IsDisabled = () => videoDisabled; var infoVideoVisible = infoVideo != null;
startVideoButton.OnClick = () => var infoVideoDisabled = !(infoVideoVisible && GlobalFileSystem.Exists(infoVideo));
{
showVideoPlayer = true;
videoPlayer.Load(video);
videoPlayer.PlayThen(StopVideo);
// Mute other distracting sounds startBriefingVideoButton.IsVisible = () => briefingVideoVisible && playingVideo != PlayingVideo.Briefing;
cachedSoundVolume = Sound.SoundVolume; startBriefingVideoButton.IsDisabled = () => briefingVideoDisabled || playingVideo != PlayingVideo.None;
cachedMusicVolume = Sound.MusicVolume; startBriefingVideoButton.OnClick = () => PlayVideo(videoPlayer, briefingVideo, PlayingVideo.Briefing, () => StopVideo(videoPlayer));
Sound.SoundVolume = Sound.MusicVolume = 0;
}; startInfoVideoButton.IsVisible = () => infoVideoVisible && playingVideo != PlayingVideo.Info;
startInfoVideoButton.IsDisabled = () => infoVideoDisabled || playingVideo != PlayingVideo.None;
startInfoVideoButton.OnClick = () => PlayVideo(videoPlayer, infoVideo, PlayingVideo.Info, () => StopVideo(videoPlayer));
var text = map.Description != null ? map.Description.Replace("\\n", "\n") : ""; var text = map.Description != null ? map.Description.Replace("\\n", "\n") : "";
text = WidgetUtils.WrapText(text, description.Bounds.Width, descriptionFont); text = WidgetUtils.WrapText(text, description.Bounds.Width, descriptionFont);
@@ -205,25 +210,72 @@ namespace OpenRA.Mods.RA.Widgets.Logic
}; };
} }
void StopVideo() float cachedSoundVolume;
float cachedMusicVolume;
void MuteSounds()
{ {
if (!showVideoPlayer) cachedSoundVolume = Sound.SoundVolume;
return; cachedMusicVolume = Sound.MusicVolume;
Sound.SoundVolume = Sound.MusicVolume = 0;
Sound.SoundVolume = cachedSoundVolume;
Sound.MusicVolume = cachedMusicVolume;
videoPlayer.Stop();
showVideoPlayer = false;
} }
void StartMission() void UnMuteSounds()
{ {
StopVideo(); if (cachedSoundVolume > 0)
Sound.SoundVolume = cachedSoundVolume;
if (cachedMusicVolume > 0)
Sound.MusicVolume = cachedMusicVolume;
}
void PlayVideo(VqaPlayerWidget player, string video, PlayingVideo pv, Action onComplete)
{
StopVideo(player);
playingVideo = pv;
player.Load(video);
// video playback runs asynchronously
player.PlayThen(onComplete);
// Mute other distracting sounds
MuteSounds();
}
void StopVideo(VqaPlayerWidget player)
{
if (playingVideo == PlayingVideo.None)
return;
UnMuteSounds();
player.Stop();
playingVideo = PlayingVideo.None;
}
void StartMissionClicked()
{
StopVideo(videoPlayer);
if (selectedMapPreview.RuleStatus != MapRuleStatus.Cached) if (selectedMapPreview.RuleStatus != MapRuleStatus.Cached)
return; return;
var gameStartVideo = selectedMapPreview.Map.Videos.GameStart;
if (gameStartVideo != null && GlobalFileSystem.Exists(gameStartVideo))
{
var fsPlayer = fullscreenVideoPlayer.Get<VqaPlayerWidget>("PLAYER");
fullscreenVideoPlayer.Visible = true;
PlayVideo(fsPlayer, gameStartVideo, PlayingVideo.GameStart, () =>
{
StopVideo(fsPlayer);
StartMission();
});
}
else
StartMission();
}
void StartMission()
{
OrderManager om = null; OrderManager om = null;
Action lobbyReady = null; Action lobbyReady = null;

View File

@@ -21,7 +21,7 @@ Container@MISSIONBROWSER_PANEL:
X: 15 X: 15
Y: 15 Y: 15
Width: 239 Width: 239
Height: 347 Height: 307
Children: Children:
ScrollItem@HEADER: ScrollItem@HEADER:
Width: PARENT_RIGHT-27 Width: PARENT_RIGHT-27
@@ -74,6 +74,13 @@ Container@MISSIONBROWSER_PANEL:
Width: PARENT_RIGHT - 32 Width: PARENT_RIGHT - 32
VAlign: Top VAlign: Top
Font: Small Font: Small
DropDownButton@DIFFICULTY_DROPDOWNBUTTON:
X: 15
Y: 337
Width: 239
Height: 25
Text: Difficulty
Font: Regular
Button@BACK_BUTTON: Button@BACK_BUTTON:
Y: 376 Y: 376
Width: 140 Width: 140
@@ -81,20 +88,34 @@ Container@MISSIONBROWSER_PANEL:
Text: Back Text: Back
Font: Bold Font: Bold
Key: escape Key: escape
Button@START_VIDEO_BUTTON: Button@START_BRIEFING_VIDEO_BUTTON:
X: PARENT_RIGHT - 290 X: PARENT_RIGHT - 290
Y: 376 Y: 376
Width: 140 Width: 140
Height: 35 Height: 35
Text: View Briefing Text: Watch Briefing
Font: Bold Font: Bold
Button@STOP_VIDEO_BUTTON: Button@STOP_BRIEFING_VIDEO_BUTTON:
X: PARENT_RIGHT - 290 X: PARENT_RIGHT - 290
Y: 376 Y: 376
Width: 140 Width: 140
Height: 35 Height: 35
Text: Stop Briefing Text: Stop Briefing
Font: Bold Font: Bold
Button@START_INFO_VIDEO_BUTTON:
X: PARENT_RIGHT - 440
Y: 376
Width: 140
Height: 35
Text: Watch Info Video
Font: Bold
Button@STOP_INFO_VIDEO_BUTTON:
X: PARENT_RIGHT - 440
Y: 376
Width: 140
Height: 35
Text: Stop Info Video
Font: Bold
Button@STARTGAME_BUTTON: Button@STARTGAME_BUTTON:
X: PARENT_RIGHT - 140 X: PARENT_RIGHT - 140
Y: 376 Y: 376
@@ -102,13 +123,6 @@ Container@MISSIONBROWSER_PANEL:
Height: 35 Height: 35
Text: Play Text: Play
Font: Bold Font: Bold
DropDownButton@DIFFICULTY_DROPDOWNBUTTON:
X: PARENT_RIGHT - 290 - 150
Y: 376
Width: 140
Height: 35
Text: Difficulty
Font: Bold
Container@MISSION_BIN: Container@MISSION_BIN:
Children: Children:
VqaPlayer@MISSION_VIDEO: VqaPlayer@MISSION_VIDEO:
@@ -116,3 +130,14 @@ Container@MISSIONBROWSER_PANEL:
Y: 1 Y: 1
Width: 640 Width: 640
Height: 375 Height: 375
Background@FULLSCREEN_PLAYER:
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
Background: panel-allblack
Visible: False
Children:
VqaPlayer@PLAYER:
X: 0
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM

View File

@@ -83,26 +83,18 @@ WorldLoaded = function()
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(25, function()
Media.PlayMovieFullscreen("consyard.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(25, function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
Media.PlayMovieFullscreen("landing.vqa", function() nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops")
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops") gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area") gdiObjective2 = player.AddSecondaryObjective("Establish a beachhead")
gdiObjective2 = player.AddSecondaryObjective("Establish a beachhead")
ReinforceWithLandingCraft(MCVReinforcements, lstStart.Location + CVec.New(2, 0), lstEnd.Location + CVec.New(2, 0), mcvTarget.Location)
ReinforceWithLandingCraft(MCVReinforcements, lstStart.Location + CVec.New(2, 0), lstEnd.Location + CVec.New(2, 0), mcvTarget.Location) Reinforce(InfantryReinforcements)
Reinforce(InfantryReinforcements)
end)
Trigger.OnIdle(Gunboat, function() SetGunboatPath(Gunboat) end) Trigger.OnIdle(Gunboat, function() SetGunboatPath(Gunboat) end)

View File

@@ -10,8 +10,6 @@ Description: Use the units provided to protect the Mobile Construction Vehicle.
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi1.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: gdi1.vqa
GameStart: landing.vqa
GameWon: consyard.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -72,16 +72,10 @@ WorldLoaded = function()
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("flag.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops") nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops")

View File

@@ -10,8 +10,6 @@ Description: Defend your position, deploy the MCV, then build a sizable force to
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi2.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,11 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: gdi2.vqa
GameWon: flag.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -59,24 +59,16 @@ WorldLoaded = function()
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end) end)
Media.PlayMovieFullscreen("samdie.vqa", function() nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops")
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops") gdiMainObjective = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiMainObjective = player.AddPrimaryObjective("Eliminate all Nod forces in the area") gdiAirSupportObjective = player.AddSecondaryObjective("Destroy the SAM sites to receive air support")
gdiAirSupportObjective = player.AddSecondaryObjective("Destroy the SAM sites to receive air support")
end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("bombaway.vqa")
end)
end) end)
Trigger.OnAllKilled(SamSites, function() Trigger.OnAllKilled(SamSites, function()

View File

@@ -10,8 +10,6 @@ Description: Build up forces to destroy Nod base.\n\nOnce all Nod SAM sites are
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi3.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: gdi3.vqa
GameStart: samdie.vqa
GameWon: bombaway.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -121,26 +121,16 @@ WorldLoaded = function()
Trigger.OnPlayerWon(gdi, function() Trigger.OnPlayerWon(gdi, function()
Media.PlaySpeechNotification(gdi, "Win") Media.PlaySpeechNotification(gdi, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("burdet1.vqa")
end)
end) end)
Trigger.OnPlayerLost(gdi, function() Trigger.OnPlayerLost(gdi, function()
Media.PlaySpeechNotification(gdi, "Lose") Media.PlaySpeechNotification(gdi, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
Media.PlayMovieFullscreen("bkground.vqa", function() gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.")
Media.PlayMovieFullscreen("nitejump.vqa", function() reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.") nod.AddPrimaryObjective("Defend against the GDI forces.")
reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
nod.AddPrimaryObjective("Defend against the GDI forces.")
end)
end)
BuildNod1() BuildNod1()
Utils.Do(NodHelis, function(heli) Utils.Do(NodHelis, function(heli)

View File

@@ -10,8 +10,6 @@ Description: Nod has captured classified GDI property.\n\nYou must find and retr
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi4b.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,13 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
BackgroundInfo: bkground.vqa
Briefing: gdi4b.vqa
GameStart: nitejump.vqa
GameWon: burdet1.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Cheats: False Cheats: False

View File

@@ -126,25 +126,15 @@ WorldLoaded = function()
Trigger.OnPlayerWon(gdi, function() Trigger.OnPlayerWon(gdi, function()
Media.PlaySpeechNotification(gdi, "Win") Media.PlaySpeechNotification(gdi, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("burdet1.vqa")
end)
end) end)
Trigger.OnPlayerLost(gdi, function() Trigger.OnPlayerLost(gdi, function()
Media.PlaySpeechNotification(gdi, "Lose") Media.PlaySpeechNotification(gdi, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
Media.PlayMovieFullscreen("bkground.vqa", function() gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.")
Media.PlayMovieFullscreen("nitejump.vqa", function() reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
gdiObjective = gdi.AddPrimaryObjective("Retrieve the crate with the stolen rods.") nod.AddPrimaryObjective("Defend against the GDI forces.")
reinforcementsObjective = gdi.AddSecondaryObjective("Eliminate " .. KillsUntilReinforcements .. " Nod units for reinforcements.")
nod.AddPrimaryObjective("Defend against the GDI forces.")
end)
end)
SetupWorld() SetupWorld()

View File

@@ -10,8 +10,6 @@ Description: Nod has captured classified GDI property.\n\nYou must find and retr
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi4b.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,13 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
BackgroundInfo: bkground.vqa
Briefing: gdi4b.vqa
GameStart: nitejump.vqa
GameWon: burdet1.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -81,25 +81,15 @@ WorldLoaded = function()
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("burdet1.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("gameover.vqa")
end)
end) end)
Media.PlayMovieFullscreen("bkground.vqa", function() nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops")
Media.PlayMovieFullscreen("nodsweep.vqa", function() gdiObjective1 = player.AddPrimaryObjective("Defend the town of Bialystok")
nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops") gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective1 = player.AddPrimaryObjective("Defend the town of Bialystok")
gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
end)
end)
townAttackTrigger = false townAttackTrigger = false
Trigger.OnExitedFootprint(TownAttackTrigger, function(a, id) Trigger.OnExitedFootprint(TownAttackTrigger, function(a, id)

View File

@@ -10,8 +10,6 @@ Description: Nod is moving to capture and hold a civilian town.\n\nYour mission
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: gdi4a.vqa
Tileset: TEMPERAT Tileset: TEMPERAT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,13 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
BackgroundInfo: bkground.vqa
Briefing: gdi4a.vqa
GameStart: nodsweep.vqa
GameWon: burdet1.vqa
GameLost: gameover.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -10,8 +10,6 @@ Description: In order for the Brotherhood to gain a foothold, we must begin by e
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: nod1.vqa
Tileset: DESERT Tileset: DESERT
MapSize: 64,64 MapSize: 64,64
@@ -22,6 +20,10 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: nod1.vqa
GameLost: nodlose.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -52,9 +52,6 @@ WorldLoaded = function()
Trigger.OnPlayerLost(nod, function() Trigger.OnPlayerLost(nod, function()
Media.PlaySpeechNotification(nod, "Lose") Media.PlaySpeechNotification(nod, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("nodlose.vqa")
end)
end) end)
NodObjective1 = nod.AddPrimaryObjective("Kill Nikoomba") NodObjective1 = nod.AddPrimaryObjective("Kill Nikoomba")

View File

@@ -22,6 +22,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: nod3.vqa
GameStart: dessweep.vqa
GameWon: desflees.vqa
GameLost: flag.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -31,23 +31,15 @@ WorldLoaded = function()
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("desflees.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("flag.vqa")
end)
end) end)
Media.PlayMovieFullscreen("dessweep.vqa", function() gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area") nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective1 = player.AddPrimaryObjective("Capture the prison") nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
end)
Trigger.OnCapture(TechCenter, function() Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(DateTime.Seconds(2), function() Trigger.AfterDelay(DateTime.Seconds(2), function()

View File

@@ -22,6 +22,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: nod3.vqa
GameStart: dessweep.vqa
GameWon: desflees.vqa
GameLost: flag.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False

View File

@@ -47,23 +47,15 @@ WorldLoaded = function()
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("desflees.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("flag.vqa")
end)
end) end)
Media.PlayMovieFullscreen("dessweep.vqa", function() gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area") nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective1 = player.AddPrimaryObjective("Capture the prison") nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
end)
Trigger.OnKilled(TechCenter, function() player.MarkFailedObjective(nodObjective1) end) Trigger.OnKilled(TechCenter, function() player.MarkFailedObjective(nodObjective1) end)
Trigger.OnCapture(TechCenter, function() Trigger.OnCapture(TechCenter, function()

View File

@@ -16,7 +16,7 @@ Background@MISSIONBROWSER_PANEL:
X: 20 X: 20
Y: 50 Y: 50
Width: 270 Width: 270
Height: 377 Height: 332
Children: Children:
ScrollItem@HEADER: ScrollItem@HEADER:
BaseName: scrollheader BaseName: scrollheader
@@ -69,20 +69,34 @@ Background@MISSIONBROWSER_PANEL:
Width: PARENT_RIGHT - 32 Width: PARENT_RIGHT - 32
VAlign: Top VAlign: Top
Font: Small Font: Small
Button@START_VIDEO_BUTTON: Button@START_BRIEFING_VIDEO_BUTTON:
X: 20 X: 20
Y: PARENT_BOTTOM - 45 Y: PARENT_BOTTOM - 45
Width: 120 Width: 130
Height: 25 Height: 25
Text: Play Briefing Text: Watch Briefing
Font: Bold Font: Bold
Button@STOP_VIDEO_BUTTON: Button@STOP_BRIEFING_VIDEO_BUTTON:
X: 20 X: 20
Y: PARENT_BOTTOM - 45 Y: PARENT_BOTTOM - 45
Width: 120 Width: 130
Height: 25 Height: 25
Text: Stop Briefing Text: Stop Briefing
Font: Bold Font: Bold
Button@START_INFO_VIDEO_BUTTON:
X: 160
Y: PARENT_BOTTOM - 45
Width: 130
Height: 25
Text: Watch Info Video
Font: Bold
Button@STOP_INFO_VIDEO_BUTTON:
X: 160
Y: PARENT_BOTTOM - 45
Width: 130
Height: 25
Text: Stop Info Video
Font: Bold
Button@STARTGAME_BUTTON: Button@STARTGAME_BUTTON:
X: PARENT_RIGHT - 140 - 130 X: PARENT_RIGHT - 140 - 130
Y: PARENT_BOTTOM - 45 Y: PARENT_BOTTOM - 45
@@ -99,9 +113,9 @@ Background@MISSIONBROWSER_PANEL:
Font: Bold Font: Bold
Key: escape Key: escape
DropDownButton@DIFFICULTY_DROPDOWNBUTTON: DropDownButton@DIFFICULTY_DROPDOWNBUTTON:
X: PARENT_RIGHT - 140 - 130 - 150 X: 20
Y: PARENT_BOTTOM - 45 Y: 427 - HEIGHT
Width: 140 Width: 270
Height: 25 Height: 25
Text: Difficulty Text: Difficulty
Font: Bold Font: Bold
@@ -117,3 +131,14 @@ Background@MISSIONBROWSER_PANEL:
Y: 1 Y: 1
Width: 640 Width: 640
Height: 375 Height: 375
Background@FULLSCREEN_PLAYER:
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
Background: dialog5
Visible: False
Children:
VqaPlayer@PLAYER:
X: 0
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM

View File

@@ -142,14 +142,10 @@ end
MissionAccomplished = function() MissionAccomplished = function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("snowbomb.vqa")
end)
end end
MissionFailed = function() MissionFailed = function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlayMovieFullscreen("bmap.vqa") end)
end end
SetUnitStances = function() SetUnitStances = function()
@@ -182,14 +178,12 @@ WorldLoaded = function()
Trigger.OnPlayerLost(player, MissionFailed) Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished) Trigger.OnPlayerWon(player, MissionAccomplished)
Media.PlayMovieFullscreen("landing.vqa", function() FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.")
FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.") TanyaSurviveObjective = player.AddPrimaryObjective("Tanya must survive.")
TanyaSurviveObjective = player.AddPrimaryObjective("Tanya must survive.") EinsteinSurviveObjective = player.AddPrimaryObjective("Einstein must survive.")
EinsteinSurviveObjective = player.AddPrimaryObjective("Einstein must survive.") CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.")
CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.")
RunInitialActivities() RunInitialActivities()
end)
Trigger.OnKilled(Lab, LabDestroyed) Trigger.OnKilled(Lab, LabDestroyed)
Trigger.OnKilled(OilPump, OilPumpDestroyed) Trigger.OnKilled(OilPump, OilPumpDestroyed)

View File

@@ -10,8 +10,6 @@ Description: Rescue Einstein from the Headquarters inside this Soviet complex.\n
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: ally1.vqa
Tileset: SNOW Tileset: SNOW
MapSize: 128,128 MapSize: 128,128
@@ -22,6 +20,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: ally1.vqa
GameStart: landing.vqa
GameWon: snowbomb.vqa
GameLost: bmap.vqa
Options: Options:
Crates: False Crates: False
Fog: True Fog: True
@@ -586,7 +590,6 @@ Rules:
Scripts: allies01.lua Scripts: allies01.lua
ObjectivesPanel: ObjectivesPanel:
PanelName: MISSION_OBJECTIVES PanelName: MISSION_OBJECTIVES
-StartGameNotification:
TRAN.Extraction: TRAN.Extraction:
Inherits: TRAN Inherits: TRAN
RenderUnit: RenderUnit:

View File

@@ -22,16 +22,10 @@ end
MissionAccomplished = function() MissionAccomplished = function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("montpass.vqa")
end)
end end
MissionFailed = function() MissionFailed = function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("frozen.vqa")
end)
end end
Tick = function() Tick = function()
@@ -109,9 +103,7 @@ WorldLoaded = function()
Trigger.OnPlayerLost(player, MissionFailed) Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished) Trigger.OnPlayerWon(player, MissionAccomplished)
Media.PlayMovieFullscreen("mcv.vqa", function() ConquestObjective = player.AddPrimaryObjective("Secure the area.")
ConquestObjective = player.AddPrimaryObjective("Secure the area.")
end)
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end) Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end)

View File

@@ -10,8 +10,6 @@ Description: A critical supply convoy is due through this area in 10 minutes, bu
Author: Westwood Studios Author: Westwood Studios
PreviewVideo: ally2.vqa
Tileset: SNOW Tileset: SNOW
MapSize: 128,128 MapSize: 128,128
@@ -22,6 +20,12 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
Briefing: ally2.vqa
GameStart: mcv.vqa
GameWon: montpass.vqa
GameLost: frozen.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False
@@ -882,7 +886,6 @@ Rules:
Scripts: allies02.lua Scripts: allies02.lua
ObjectivesPanel: ObjectivesPanel:
PanelName: MISSION_OBJECTIVES PanelName: MISSION_OBJECTIVES
-StartGameNotification:
^Vehicle: ^Vehicle:
Tooltip: Tooltip:
GenericVisibility: Enemy GenericVisibility: Enemy

View File

@@ -114,13 +114,11 @@ InitObjectives = function()
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Trigger.AfterDelay(25, function() Trigger.AfterDelay(25, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlayMovieFullscreen("sovtstar.vqa") end)
end) end)
end) end)
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Trigger.AfterDelay(25, function() Trigger.AfterDelay(25, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlayMovieFullscreen("toofar.vqa") end)
end) end)
end) end)
end end
@@ -250,9 +248,7 @@ WorldLoaded = function()
InitPlayers() InitPlayers()
Media.PlayMovieFullscreen("brdgtilt.vqa", function() InitObjectives()
InitObjectives() InitTriggers()
InitTriggers() SendAlliedUnits()
SendAlliedUnits()
end)
end end

View File

@@ -20,6 +20,11 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
Videos:
GameStart: brdgtilt.vqa
GameWon: toofar.vqa
GameLost: sovtstar.vqa
Options: Options:
ShortGame: False ShortGame: False
Crates: False Crates: False
@@ -1380,7 +1385,6 @@ Rules:
Scripts: allies03a.lua Scripts: allies03a.lua
ObjectivesPanel: ObjectivesPanel:
PanelName: MISSION_OBJECTIVES PanelName: MISSION_OBJECTIVES
-StartGameNotification:
^Infantry: ^Infantry:
Tooltip: Tooltip:
GenericVisibility: Enemy GenericVisibility: Enemy

View File

@@ -20,7 +20,11 @@ UseAsShellmap: False
Type: Campaign Type: Campaign
PreviewVideo: soviet1.vqa Videos:
Briefing: soviet1.vqa
GameStart: flare.vqa
GameWon: snstrafe.vqa
GameLost: sfrozen.vqa
Options: Options:
ShortGame: False ShortGame: False
@@ -783,7 +787,6 @@ Rules:
Scripts: soviet01.lua Scripts: soviet01.lua
ObjectivesPanel: ObjectivesPanel:
PanelName: MISSION_OBJECTIVES PanelName: MISSION_OBJECTIVES
-StartGameNotification:
V01: V01:
LeavesHusk: LeavesHusk:
HuskActor: healcrate HuskActor: healcrate

View File

@@ -46,27 +46,16 @@ WorldLoaded = function()
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end) end)
Media.PlayMovieFullscreen("flare.vqa", function() CivilProtectionObjective = france.AddPrimaryObjective("Protect the civilians.")
CivilProtectionObjective = france.AddPrimaryObjective("Protect the civilians.") VillageRaidObjective = player.AddPrimaryObjective("Raze the village.")
VillageRaidObjective = player.AddPrimaryObjective("Raze the village.") JeepDemolishingBridge()
JeepDemolishingBridge()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(player, "StartGame")
end)
end)
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("snstrafe.vqa")
end)
end) end)
Trigger.OnPlayerLost(player, function() Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose") Media.PlaySpeechNotification(player, "Lose")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlayMovieFullscreen("sfrozen.vqa")
end)
end) end)
Trigger.AfterDelay(DateTime.Seconds(2), InsertYaks) Trigger.AfterDelay(DateTime.Seconds(2), InsertYaks)