Port map difficulty to new options backend.
This commit is contained in:
@@ -192,7 +192,6 @@ namespace OpenRA.Network
|
|||||||
public int OrderLatency = 3; // net tick frames (x 120 = ms)
|
public int OrderLatency = 3; // net tick frames (x 120 = ms)
|
||||||
public int RandomSeed = 0;
|
public int RandomSeed = 0;
|
||||||
public bool AllowSpectators = true;
|
public bool AllowSpectators = true;
|
||||||
public string Difficulty;
|
|
||||||
public string GameSpeedType = "default";
|
public string GameSpeedType = "default";
|
||||||
public bool AllowVersionMismatch;
|
public bool AllowVersionMismatch;
|
||||||
public string GameUid;
|
public string GameUid;
|
||||||
|
|||||||
@@ -105,7 +105,18 @@ namespace OpenRA.Mods.Common.Scripting
|
|||||||
public bool IsSinglePlayer { get { return Context.World.LobbyInfo.IsSinglePlayer; } }
|
public bool IsSinglePlayer { get { return Context.World.LobbyInfo.IsSinglePlayer; } }
|
||||||
|
|
||||||
[Desc("Returns the difficulty selected by the player before starting the mission.")]
|
[Desc("Returns the difficulty selected by the player before starting the mission.")]
|
||||||
public string Difficulty { get { return Context.World.LobbyInfo.GlobalSettings.Difficulty; } }
|
public string Difficulty
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Game.Debug("Map script is using deprecated Map.Difficulty API. This should be changed to Map.LobbyOption(\"difficulty\").");
|
||||||
|
Log.Write("lua", "Map script is using deprecated Map.Difficulty API. This should be changed to Map.LobbyOption(\"difficulty\").");
|
||||||
|
var option = Context.World.WorldActor.TraitsImplementing<ScriptLobbyDropdown>()
|
||||||
|
.FirstOrDefault(sld => sld.Info.ID == "difficulty");
|
||||||
|
|
||||||
|
return option != null ? option.Info.Values[option.Value] : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Desc("Returns the value of a `ScriptLobbyDropdown` selected in the game lobby.")]
|
[Desc("Returns the value of a `ScriptLobbyDropdown` selected in the game lobby.")]
|
||||||
public LuaValue LobbyOption(string id)
|
public LuaValue LobbyOption(string id)
|
||||||
|
|||||||
@@ -506,39 +506,6 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ "difficulty",
|
|
||||||
s =>
|
|
||||||
{
|
|
||||||
if (server.LobbyInfo.GlobalSettings.Difficulty == s)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!client.IsAdmin)
|
|
||||||
{
|
|
||||||
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var mapOptions = server.Map.Rules.Actors["world"].TraitInfo<MapOptionsInfo>();
|
|
||||||
if (mapOptions.DifficultyLocked || !mapOptions.Difficulties.Any())
|
|
||||||
{
|
|
||||||
server.SendOrderTo(conn, "Message", "Map has disabled difficulty configuration.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s != null && !mapOptions.Difficulties.Contains(s))
|
|
||||||
{
|
|
||||||
server.SendOrderTo(conn, "Message", "Invalid difficulty selected: {0}".F(s));
|
|
||||||
server.SendOrderTo(conn, "Message", "Supported values: {0}".F(mapOptions.Difficulties.JoinWith(", ")));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
server.LobbyInfo.GlobalSettings.Difficulty = s;
|
|
||||||
server.SyncLobbyGlobalSettings();
|
|
||||||
server.SendMessage("{0} changed difficulty to {1}.".F(client.Name, s));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ "gamespeed",
|
{ "gamespeed",
|
||||||
s =>
|
s =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,15 +30,6 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Prevent the tech level from being changed in the lobby.")]
|
[Desc("Prevent the tech level from being changed in the lobby.")]
|
||||||
public readonly bool TechLevelLocked = false;
|
public readonly bool TechLevelLocked = false;
|
||||||
|
|
||||||
[Desc("Difficulty levels supported by the map.")]
|
|
||||||
public readonly string[] Difficulties = { };
|
|
||||||
|
|
||||||
[Desc("Default difficulty level.")]
|
|
||||||
public readonly string Difficulty = null;
|
|
||||||
|
|
||||||
[Desc("Prevent the difficulty from being changed in the lobby.")]
|
|
||||||
public readonly bool DifficultyLocked = false;
|
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("shortgame", "Short Game", ShortGameEnabled, ShortGameLocked);
|
yield return new LobbyBooleanOption("shortgame", "Short Game", ShortGameEnabled, ShortGameLocked);
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
|
|
||||||
internal static void UpgradeActorRules(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
|
internal static void UpgradeActorRules(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
|
||||||
{
|
{
|
||||||
|
var addNodes = new List<MiniYamlNode>();
|
||||||
|
|
||||||
foreach (var node in nodes)
|
foreach (var node in nodes)
|
||||||
{
|
{
|
||||||
if (engineVersion < 20160515)
|
if (engineVersion < 20160515)
|
||||||
@@ -146,8 +148,48 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Map difficulty configuration was split to a generic trait
|
||||||
|
if (engineVersion < 20160614 && node.Key.StartsWith("MapOptions"))
|
||||||
|
{
|
||||||
|
var difficultiesNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "Difficulties");
|
||||||
|
if (difficultiesNode != null)
|
||||||
|
{
|
||||||
|
var difficulties = FieldLoader.GetValue<string[]>("Difficulties", difficultiesNode.Value.Value)
|
||||||
|
.ToDictionary(d => d.Replace(" ", "").ToLowerInvariant(), d => d);
|
||||||
|
node.Value.Nodes.Remove(difficultiesNode);
|
||||||
|
|
||||||
|
var childNodes = new List<MiniYamlNode>()
|
||||||
|
{
|
||||||
|
new MiniYamlNode("ID", "difficulty"),
|
||||||
|
new MiniYamlNode("Label", "Difficulty"),
|
||||||
|
new MiniYamlNode("Values", new MiniYaml("", difficulties.Select(kv => new MiniYamlNode(kv.Key, kv.Value)).ToList()))
|
||||||
|
};
|
||||||
|
|
||||||
|
var difficultyNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "Difficulty");
|
||||||
|
if (difficultyNode != null)
|
||||||
|
{
|
||||||
|
childNodes.Add(new MiniYamlNode("Default", difficultyNode.Value.Value.Replace(" ", "").ToLowerInvariant()));
|
||||||
|
node.Value.Nodes.Remove(difficultyNode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
childNodes.Add(new MiniYamlNode("Default", difficulties.Keys.First()));
|
||||||
|
|
||||||
|
var lockedNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "DifficultyLocked");
|
||||||
|
if (lockedNode != null)
|
||||||
|
{
|
||||||
|
childNodes.Add(new MiniYamlNode("Locked", lockedNode.Value.Value));
|
||||||
|
node.Value.Nodes.Remove(lockedNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
addNodes.Add(new MiniYamlNode("ScriptLobbyDropdown@difficulty", new MiniYaml("", childNodes)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var a in addNodes)
|
||||||
|
nodes.Add(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void UpgradeWeaponRules(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
|
internal static void UpgradeWeaponRules(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
|
||||||
|
|||||||
@@ -368,6 +368,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{ "TECHLEVEL", "techlevel" },
|
{ "TECHLEVEL", "techlevel" },
|
||||||
{ "STARTINGUNITS", "startingunits" },
|
{ "STARTINGUNITS", "startingunits" },
|
||||||
{ "STARTINGCASH", "startingcash" },
|
{ "STARTINGCASH", "startingcash" },
|
||||||
|
{ "DIFFICULTY", "difficulty" }
|
||||||
};
|
};
|
||||||
|
|
||||||
var allOptions = new CachedTransform<MapPreview, LobbyOption[]>(
|
var allOptions = new CachedTransform<MapPreview, LobbyOption[]>(
|
||||||
@@ -423,35 +424,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var difficulty = optionsBin.GetOrNull<DropDownButtonWidget>("DIFFICULTY_DROPDOWNBUTTON");
|
|
||||||
if (difficulty != null)
|
|
||||||
{
|
|
||||||
var mapOptions = new CachedTransform<MapPreview, MapOptionsInfo>(
|
|
||||||
map => map.Rules.Actors["world"].TraitInfo<MapOptionsInfo>());
|
|
||||||
|
|
||||||
difficulty.IsVisible = () => Map.RulesLoaded && mapOptions.Update(Map).Difficulties.Any();
|
|
||||||
difficulty.IsDisabled = () => configurationDisabled() || mapOptions.Update(Map).DifficultyLocked;
|
|
||||||
difficulty.GetText = () => orderManager.LobbyInfo.GlobalSettings.Difficulty;
|
|
||||||
difficulty.OnMouseDown = _ =>
|
|
||||||
{
|
|
||||||
var options = mapOptions.Update(Map).Difficulties.Select(d => new DropDownOption
|
|
||||||
{
|
|
||||||
Title = d,
|
|
||||||
IsSelected = () => orderManager.LobbyInfo.GlobalSettings.Difficulty == d,
|
|
||||||
OnClick = () => orderManager.IssueOrder(Order.Command("difficulty {0}".F(d)))
|
|
||||||
});
|
|
||||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
|
||||||
{
|
|
||||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
|
||||||
return item;
|
|
||||||
};
|
|
||||||
difficulty.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem);
|
|
||||||
};
|
|
||||||
|
|
||||||
optionsBin.Get<LabelWidget>("DIFFICULTY_DESC").IsVisible = difficulty.IsVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
var gameSpeed = optionsBin.GetOrNull<DropDownButtonWidget>("GAMESPEED_DROPDOWNBUTTON");
|
var gameSpeed = optionsBin.GetOrNull<DropDownButtonWidget>("GAMESPEED_DROPDOWNBUTTON");
|
||||||
if (gameSpeed != null)
|
if (gameSpeed != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
// Cache the rules on a background thread to avoid jank
|
// Cache the rules on a background thread to avoid jank
|
||||||
var difficultyDisabled = true;
|
var difficultyDisabled = true;
|
||||||
var difficulties = new string[0];
|
var difficulties = new Dictionary<string, string>();
|
||||||
|
|
||||||
var briefingVideo = "";
|
var briefingVideo = "";
|
||||||
var briefingVideoVisible = false;
|
var briefingVideoVisible = false;
|
||||||
@@ -206,11 +206,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
new Thread(() =>
|
new Thread(() =>
|
||||||
{
|
{
|
||||||
var mapOptions = preview.Rules.Actors["world"].TraitInfo<MapOptionsInfo>();
|
var mapDifficulty = preview.Rules.Actors["world"].TraitInfos<ScriptLobbyDropdownInfo>()
|
||||||
|
.FirstOrDefault(sld => sld.ID == "difficulty");
|
||||||
|
|
||||||
difficulty = mapOptions.Difficulty ?? mapOptions.Difficulties.FirstOrDefault();
|
if (mapDifficulty != null)
|
||||||
difficulties = mapOptions.Difficulties;
|
{
|
||||||
difficultyDisabled = mapOptions.DifficultyLocked || mapOptions.Difficulties.Length <= 1;
|
difficulty = mapDifficulty.Default;
|
||||||
|
difficulties = mapDifficulty.Values;
|
||||||
|
difficultyDisabled = mapDifficulty.Locked;
|
||||||
|
}
|
||||||
|
|
||||||
var missionData = preview.Rules.Actors["world"].TraitInfoOrDefault<MissionDataInfo>();
|
var missionData = preview.Rules.Actors["world"].TraitInfoOrDefault<MissionDataInfo>();
|
||||||
if (missionData != null)
|
if (missionData != null)
|
||||||
@@ -245,15 +249,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
if (difficultyButton != null)
|
if (difficultyButton != null)
|
||||||
{
|
{
|
||||||
|
var difficultyName = new CachedTransform<string, string>(id => id == null || !difficulties.ContainsKey(id) ? "Normal" : difficulties[id]);
|
||||||
difficultyButton.IsDisabled = () => difficultyDisabled;
|
difficultyButton.IsDisabled = () => difficultyDisabled;
|
||||||
difficultyButton.GetText = () => difficulty ?? "Normal";
|
difficultyButton.GetText = () => difficultyName.Update(difficulty);
|
||||||
difficultyButton.OnMouseDown = _ =>
|
difficultyButton.OnMouseDown = _ =>
|
||||||
{
|
{
|
||||||
var options = difficulties.Select(d => new DropDownOption
|
var options = difficulties.Select(kv => new DropDownOption
|
||||||
{
|
{
|
||||||
Title = d,
|
Title = kv.Value,
|
||||||
IsSelected = () => difficulty == d,
|
IsSelected = () => difficulty == kv.Key,
|
||||||
OnClick = () => difficulty = d
|
OnClick = () => difficulty = kv.Key
|
||||||
});
|
});
|
||||||
|
|
||||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||||
@@ -361,7 +366,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
var orders = new[] {
|
var orders = new[] {
|
||||||
Order.Command("gamespeed {0}".F(gameSpeed)),
|
Order.Command("gamespeed {0}".F(gameSpeed)),
|
||||||
Order.Command("difficulty {0}".F(difficulty)),
|
Order.Command("option difficulty {0}".F(difficulty)),
|
||||||
Order.Command("state {0}".F(Session.ClientState.Ready))
|
Order.Command("state {0}".F(Session.ClientState.Ready))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,15 @@ World:
|
|||||||
BriefingVideo: generic.vqa
|
BriefingVideo: generic.vqa
|
||||||
StartVideo: dino.vqa
|
StartVideo: dino.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal
|
|
||||||
ShortGameLocked: True
|
ShortGameLocked: True
|
||||||
ShortGameEnabled: False
|
ShortGameEnabled: False
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
Default: easy
|
||||||
|
|
||||||
Player:
|
Player:
|
||||||
EnemyWatcher:
|
EnemyWatcher:
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ World:
|
|||||||
WinVideo: nodlose.vqa
|
WinVideo: nodlose.vqa
|
||||||
LossVideo: gdilose.vqa
|
LossVideo: gdilose.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
|
||||||
ShortGameLocked: True
|
ShortGameLocked: True
|
||||||
ShortGameEnabled: False
|
ShortGameEnabled: False
|
||||||
SmudgeLayer@SCORCH:
|
SmudgeLayer@SCORCH:
|
||||||
@@ -27,6 +26,14 @@ World:
|
|||||||
41,54: cr1,0
|
41,54: cr1,0
|
||||||
13,52: cr1,0
|
13,52: cr1,0
|
||||||
11,51: cr1,0
|
11,51: cr1,0
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
Player:
|
Player:
|
||||||
EnemyWatcher:
|
EnemyWatcher:
|
||||||
|
|||||||
@@ -31,9 +31,16 @@ World:
|
|||||||
WinVideo: sabotage.vqa
|
WinVideo: sabotage.vqa
|
||||||
LossVideo: gdilose.vqa
|
LossVideo: gdilose.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
|
||||||
ShortGameLocked: True
|
ShortGameLocked: True
|
||||||
ShortGameEnabled: True
|
ShortGameEnabled: True
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
Player:
|
Player:
|
||||||
PlayerResources:
|
PlayerResources:
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ World:
|
|||||||
LossVideo: banner.vqa
|
LossVideo: banner.vqa
|
||||||
BriefingVideo: nod9.vqa
|
BriefingVideo: nod9.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
|
||||||
SmudgeLayer@SCORCH:
|
SmudgeLayer@SCORCH:
|
||||||
InitialSmudges:
|
InitialSmudges:
|
||||||
20,55: sc2,0
|
20,55: sc2,0
|
||||||
@@ -29,6 +28,14 @@ World:
|
|||||||
8,55: cr1,0
|
8,55: cr1,0
|
||||||
8,54: cr1,0
|
8,54: cr1,0
|
||||||
7,54: cr1,0
|
7,54: cr1,0
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
Player:
|
Player:
|
||||||
PlayerResources:
|
PlayerResources:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ World:
|
|||||||
BriefingVideo: A_BR01_E.VQA
|
BriefingVideo: A_BR01_E.VQA
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Low
|
TechLevel: Low
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
construction_yard:
|
construction_yard:
|
||||||
Production:
|
Production:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ World:
|
|||||||
BriefingVideo: A_BR01_E.VQA
|
BriefingVideo: A_BR01_E.VQA
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Low
|
TechLevel: Low
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
construction_yard:
|
construction_yard:
|
||||||
Production:
|
Production:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ World:
|
|||||||
BriefingVideo: A_BR02_E.VQA
|
BriefingVideo: A_BR02_E.VQA
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Low
|
TechLevel: Low
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
carryall.reinforce:
|
carryall.reinforce:
|
||||||
Cargo:
|
Cargo:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ World:
|
|||||||
BriefingVideo: A_BR02_E.VQA
|
BriefingVideo: A_BR02_E.VQA
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Low
|
TechLevel: Low
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
carryall.reinforce:
|
carryall.reinforce:
|
||||||
Cargo:
|
Cargo:
|
||||||
|
|||||||
@@ -10,7 +10,14 @@ World:
|
|||||||
BriefingVideo: A_BR03_E.VQA
|
BriefingVideo: A_BR03_E.VQA
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Low
|
TechLevel: Low
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
carryall.reinforce:
|
carryall.reinforce:
|
||||||
Cargo:
|
Cargo:
|
||||||
|
|||||||
@@ -12,11 +12,18 @@ World:
|
|||||||
WinVideo: montpass.vqa
|
WinVideo: montpass.vqa
|
||||||
LossVideo: frozen.vqa
|
LossVideo: frozen.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard, Real tough guy
|
|
||||||
SmudgeLayer@CRATER:
|
SmudgeLayer@CRATER:
|
||||||
InitialSmudges:
|
InitialSmudges:
|
||||||
60,79: cr1,0
|
60,79: cr1,0
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
realtoughguy: Real tough guy
|
||||||
|
Default: easy
|
||||||
|
|
||||||
HARV:
|
HARV:
|
||||||
Buildable:
|
Buildable:
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ World:
|
|||||||
WinVideo: toofar.vqa
|
WinVideo: toofar.vqa
|
||||||
LossVideo: sovtstar.vqa
|
LossVideo: sovtstar.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
Default: easy
|
||||||
|
|
||||||
^Building:
|
^Building:
|
||||||
Capturable:
|
Capturable:
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ World:
|
|||||||
WinVideo: toofar.vqa
|
WinVideo: toofar.vqa
|
||||||
LossVideo: sovtstar.vqa
|
LossVideo: sovtstar.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
Default: easy
|
||||||
|
|
||||||
^Building:
|
^Building:
|
||||||
Capturable:
|
Capturable:
|
||||||
|
|||||||
@@ -9,7 +9,15 @@ World:
|
|||||||
LossVideo: grvestne.vqa
|
LossVideo: grvestne.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Medium
|
TechLevel: Medium
|
||||||
Difficulties: Easy, Normal, Hard, Real tough guy
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
realtoughguy: Real tough guy
|
||||||
|
Default: easy
|
||||||
|
|
||||||
Camera.Truk:
|
Camera.Truk:
|
||||||
AlwaysVisible:
|
AlwaysVisible:
|
||||||
|
|||||||
@@ -13,8 +13,13 @@ World:
|
|||||||
Scripts: evacuation.lua
|
Scripts: evacuation.lua
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevelLocked: True
|
TechLevelLocked: True
|
||||||
Difficulties: Easy, Normal
|
ScriptLobbyDropdown@difficulty:
|
||||||
Difficulty: Normal
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
Default: normal
|
||||||
|
|
||||||
^Tanks:
|
^Tanks:
|
||||||
Demolishable:
|
Demolishable:
|
||||||
@@ -214,4 +219,3 @@ powerproxy.paras2:
|
|||||||
AlwaysVisible:
|
AlwaysVisible:
|
||||||
ParatroopersPower:
|
ParatroopersPower:
|
||||||
DropItems: E1,E1,E1,E2,E2
|
DropItems: E1,E1,E1,E2,E2
|
||||||
|
|
||||||
|
|||||||
@@ -38,9 +38,19 @@ World:
|
|||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevelLocked: True
|
TechLevelLocked: True
|
||||||
TechLevel: Unrestricted
|
TechLevel: Unrestricted
|
||||||
Difficulties: Hard (4P), Normal (3P), Easy (2P), Very Easy (1P), Real tough guy, Endless mode
|
|
||||||
ShortGameLocked: True
|
ShortGameLocked: True
|
||||||
ShortGameEnabled: False
|
ShortGameEnabled: False
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
hard(4p): Hard (4P)
|
||||||
|
normal(3p): Normal (3P)
|
||||||
|
easy(2p): Easy (2P)
|
||||||
|
veryeasy(1p): Very Easy (1P)
|
||||||
|
realtoughguy: Real tough guy
|
||||||
|
endlessmode: Endless mode
|
||||||
|
Default: hard(4p)
|
||||||
|
|
||||||
FORTCRATE:
|
FORTCRATE:
|
||||||
Inherits: ^Crate
|
Inherits: ^Crate
|
||||||
|
|||||||
@@ -8,7 +8,13 @@ World:
|
|||||||
MissionData:
|
MissionData:
|
||||||
Briefing: The Soviet Air Force is flying air raids against a civilian village.\n\nWe have to do everything in our power to stop them!\n\nYour job is to establish a base on the mainland ASAP. We can prevent the village's destruction by capturing the enemy's Air Force Headquarters building. The enemy base is heavily guarded, though. You will not have enough time to build a force big enough to overpower the Soviet defences. You will have to find a way to sneak in!\n\nGood luck, Commander!\n
|
Briefing: The Soviet Air Force is flying air raids against a civilian village.\n\nWe have to do everything in our power to stop them!\n\nYour job is to establish a base on the mainland ASAP. We can prevent the village's destruction by capturing the enemy's Air Force Headquarters building. The enemy base is heavily guarded, though. You will not have enough time to build a force big enough to overpower the Soviet defences. You will have to find a way to sneak in!\n\nGood luck, Commander!\n
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Medium, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
medium: Medium
|
||||||
|
hard: Hard
|
||||||
|
Default: medium
|
||||||
|
|
||||||
CAMERA:
|
CAMERA:
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
|
|||||||
@@ -8,7 +8,14 @@ World:
|
|||||||
WinVideo: execute.vqa
|
WinVideo: execute.vqa
|
||||||
LossVideo: take_off.vqa
|
LossVideo: take_off.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
^TechBuilding:
|
^TechBuilding:
|
||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ World:
|
|||||||
LossVideo: allymorf.vqa
|
LossVideo: allymorf.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Medium
|
TechLevel: Medium
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
AFLD:
|
AFLD:
|
||||||
ParatroopersPower@paratroopers:
|
ParatroopersPower@paratroopers:
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ World:
|
|||||||
LossVideo: allymorf.vqa
|
LossVideo: allymorf.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Medium
|
TechLevel: Medium
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
AFLD:
|
AFLD:
|
||||||
ParatroopersPower@paratroopers:
|
ParatroopersPower@paratroopers:
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ World:
|
|||||||
LossVideo: sovbatl.vqa
|
LossVideo: sovbatl.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
TechLevel: Medium
|
TechLevel: Medium
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
AFLD:
|
AFLD:
|
||||||
ParatroopersPower@paratroopers:
|
ParatroopersPower@paratroopers:
|
||||||
|
|||||||
@@ -12,7 +12,14 @@ World:
|
|||||||
WinVideo: sitduck.vqa
|
WinVideo: sitduck.vqa
|
||||||
LossVideo: dpthchrg.vqa
|
LossVideo: dpthchrg.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
APWR:
|
APWR:
|
||||||
Buildable:
|
Buildable:
|
||||||
|
|||||||
@@ -12,7 +12,14 @@ World:
|
|||||||
WinVideo: sitduck.vqa
|
WinVideo: sitduck.vqa
|
||||||
LossVideo: dpthchrg.vqa
|
LossVideo: dpthchrg.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
APWR:
|
APWR:
|
||||||
Buildable:
|
Buildable:
|
||||||
|
|||||||
@@ -8,7 +8,14 @@ World:
|
|||||||
WinVideo: averted.vqa
|
WinVideo: averted.vqa
|
||||||
LossVideo: nukestok.vqa
|
LossVideo: nukestok.vqa
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Normal, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
-GivesBounty:
|
-GivesBounty:
|
||||||
|
|||||||
@@ -8,7 +8,14 @@ World:
|
|||||||
MissionData:
|
MissionData:
|
||||||
Briefing: LANDCOM 66 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A34\n\nTHE SOVIETS STARTED HEAVY ATTACKS AT OUR POSITION.\n SURVIVE AND HOLD THE BASE UNTIL OUR FRENCH ALLIES ARRIVE.\n\nCONFIRMATION CODE 5593.\n\nTRANSMISSION ENDS.
|
Briefing: LANDCOM 66 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A34\n\nTHE SOVIETS STARTED HEAVY ATTACKS AT OUR POSITION.\n SURVIVE AND HOLD THE BASE UNTIL OUR FRENCH ALLIES ARRIVE.\n\nCONFIRMATION CODE 5593.\n\nTRANSMISSION ENDS.
|
||||||
MapOptions:
|
MapOptions:
|
||||||
Difficulties: Easy, Medium, Hard
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
medium: Medium
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
powerproxy.paratroopers:
|
powerproxy.paratroopers:
|
||||||
ParatroopersPower:
|
ParatroopersPower:
|
||||||
|
|||||||
Reference in New Issue
Block a user