Merge pull request #5305 from Mailaender/harvester-splatter-resoures
Added resource splattering to destroyed harvesters
This commit is contained in:
@@ -22,8 +22,10 @@ namespace OpenRA.GameRules
|
|||||||
[FieldLoader.LoadUsing("LoadVersus")]
|
[FieldLoader.LoadUsing("LoadVersus")]
|
||||||
[Desc("Damage vs each armortype. 0% = can't target.")]
|
[Desc("Damage vs each armortype. 0% = can't target.")]
|
||||||
public readonly Dictionary<string, float> Versus;
|
public readonly Dictionary<string, float> Versus;
|
||||||
[Desc("Can this damage ore?")]
|
[Desc("Can this damage resource patches?")]
|
||||||
public readonly bool Ore = false;
|
public readonly bool DestroyResources = false;
|
||||||
|
[Desc("Will this splatter resources and which?")]
|
||||||
|
public readonly string AddsResourceType = null;
|
||||||
[Desc("Explosion effect to use.")]
|
[Desc("Explosion effect to use.")]
|
||||||
public readonly string Explosion = null;
|
public readonly string Explosion = null;
|
||||||
[Desc("Palette to use for explosion effect.")]
|
[Desc("Palette to use for explosion effect.")]
|
||||||
|
|||||||
@@ -37,39 +37,39 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
[Sync] public int Cash;
|
[Sync] public int Cash;
|
||||||
|
|
||||||
[Sync] public int Ore;
|
[Sync] public int Resources;
|
||||||
[Sync] public int OreCapacity;
|
[Sync] public int ResourceCapacity;
|
||||||
|
|
||||||
public int DisplayCash;
|
public int DisplayCash;
|
||||||
public int DisplayOre;
|
public int DisplayResources;
|
||||||
public bool AlertSilo;
|
public bool AlertSilo;
|
||||||
|
|
||||||
public int Earned;
|
public int Earned;
|
||||||
public int Spent;
|
public int Spent;
|
||||||
|
|
||||||
public bool CanGiveOre(int amount)
|
public bool CanGiveResources(int amount)
|
||||||
{
|
{
|
||||||
return Ore + amount <= OreCapacity;
|
return Resources + amount <= ResourceCapacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GiveOre(int num)
|
public void GiveResources(int num)
|
||||||
{
|
{
|
||||||
Ore += num;
|
Resources += num;
|
||||||
Earned += num;
|
Earned += num;
|
||||||
|
|
||||||
if (Ore > OreCapacity)
|
if (Resources > ResourceCapacity)
|
||||||
{
|
{
|
||||||
nextSiloAdviceTime = 0;
|
nextSiloAdviceTime = 0;
|
||||||
|
|
||||||
Earned -= Ore - OreCapacity;
|
Earned -= Resources - ResourceCapacity;
|
||||||
Ore = OreCapacity;
|
Resources = ResourceCapacity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TakeOre(int num)
|
public bool TakeResources(int num)
|
||||||
{
|
{
|
||||||
if (Ore < num) return false;
|
if (Resources < num) return false;
|
||||||
Ore -= num;
|
Resources -= num;
|
||||||
Spent += num;
|
Spent += num;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -83,15 +83,15 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
public bool TakeCash(int num)
|
public bool TakeCash(int num)
|
||||||
{
|
{
|
||||||
if (Cash + Ore < num) return false;
|
if (Cash + Resources < num) return false;
|
||||||
|
|
||||||
// Spend ore before cash
|
// Spend ore before cash
|
||||||
Ore -= num;
|
Resources -= num;
|
||||||
Spent += num;
|
Spent += num;
|
||||||
if (Ore < 0)
|
if (Resources < 0)
|
||||||
{
|
{
|
||||||
Cash += Ore;
|
Cash += Resources;
|
||||||
Ore = 0;
|
Resources = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -107,16 +107,16 @@ namespace OpenRA.Traits
|
|||||||
if (nextCashTickTime > 0)
|
if (nextCashTickTime > 0)
|
||||||
nextCashTickTime--;
|
nextCashTickTime--;
|
||||||
|
|
||||||
OreCapacity = self.World.ActorsWithTrait<IStoreOre>()
|
ResourceCapacity = self.World.ActorsWithTrait<IStoreResources>()
|
||||||
.Where(a => a.Actor.Owner == Owner)
|
.Where(a => a.Actor.Owner == Owner)
|
||||||
.Sum(a => a.Trait.Capacity);
|
.Sum(a => a.Trait.Capacity);
|
||||||
|
|
||||||
if (Ore > OreCapacity)
|
if (Resources > ResourceCapacity)
|
||||||
Ore = OreCapacity;
|
Resources = ResourceCapacity;
|
||||||
|
|
||||||
if (--nextSiloAdviceTime <= 0)
|
if (--nextSiloAdviceTime <= 0)
|
||||||
{
|
{
|
||||||
if (Ore > 0.8 * OreCapacity)
|
if (Resources > 0.8 * ResourceCapacity)
|
||||||
{
|
{
|
||||||
Sound.PlayNotification(self.World.Map.Rules, Owner, "Speech", "SilosNeeded", Owner.Country.Race);
|
Sound.PlayNotification(self.World.Map.Rules, Owner, "Speech", "SilosNeeded", Owner.Country.Race);
|
||||||
AlertSilo = true;
|
AlertSilo = true;
|
||||||
@@ -143,18 +143,18 @@ namespace OpenRA.Traits
|
|||||||
playCashTickDown(self);
|
playCashTickDown(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
diff = Math.Abs(Ore - DisplayOre);
|
diff = Math.Abs(Resources - DisplayResources);
|
||||||
move = Math.Min(Math.Max((int)(diff * displayCashFracPerFrame),
|
move = Math.Min(Math.Max((int)(diff * displayCashFracPerFrame),
|
||||||
displayCashDeltaPerFrame), diff);
|
displayCashDeltaPerFrame), diff);
|
||||||
|
|
||||||
if (DisplayOre < Ore)
|
if (DisplayResources < Resources)
|
||||||
{
|
{
|
||||||
DisplayOre += move;
|
DisplayResources += move;
|
||||||
playCashTickUp(self);
|
playCashTickUp(self);
|
||||||
}
|
}
|
||||||
else if (DisplayOre > Ore)
|
else if (DisplayResources > Resources)
|
||||||
{
|
{
|
||||||
DisplayOre -= move;
|
DisplayResources -= move;
|
||||||
playCashTickDown(self);
|
playCashTickDown(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
3
OpenRA.Game/Traits/TraitsInterfaces.cs
Executable file → Normal file
3
OpenRA.Game/Traits/TraitsInterfaces.cs
Executable file → Normal file
@@ -90,8 +90,9 @@ namespace OpenRA.Traits
|
|||||||
bool IsValidTarget(Actor self, Actor saboteur);
|
bool IsValidTarget(Actor self, Actor saboteur);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IStoreOre { int Capacity { get; } }
|
public interface IStoreResources { int Capacity { get; } }
|
||||||
public interface INotifyDocking { void Docked(Actor self, Actor harvester); void Undocked(Actor self, Actor harvester); }
|
public interface INotifyDocking { void Docked(Actor self, Actor harvester); void Undocked(Actor self, Actor harvester); }
|
||||||
|
|
||||||
public interface IEffectiveOwner
|
public interface IEffectiveOwner
|
||||||
{
|
{
|
||||||
bool Disguised { get; }
|
bool Disguised { get; }
|
||||||
|
|||||||
@@ -153,6 +153,13 @@ namespace OpenRA.Traits
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanSpawnResourceAt(ResourceType newResourceType, CPos cell)
|
||||||
|
{
|
||||||
|
var currentResourceType = GetResource(cell);
|
||||||
|
return currentResourceType == newResourceType
|
||||||
|
|| (currentResourceType == null && AllowResourceAt(newResourceType, cell));
|
||||||
|
}
|
||||||
|
|
||||||
CellContents CreateResourceCell(ResourceType t, CPos p)
|
CellContents CreateResourceCell(ResourceType t, CPos p)
|
||||||
{
|
{
|
||||||
world.Map.CustomTerrain[p.X, p.Y] = world.TileSet.GetTerrainIndex(t.Info.TerrainType);
|
world.Map.CustomTerrain[p.X, p.Y] = world.TileSet.GetTerrainIndex(t.Info.TerrainType);
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
|
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
|
||||||
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
|
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
|
||||||
sidebarRoot.Get<LabelWidget>("CASH").GetText = () =>
|
sidebarRoot.Get<LabelWidget>("CASH").GetText = () =>
|
||||||
"${0}".F(playerResources.DisplayCash + playerResources.DisplayOre);
|
"${0}".F(playerResources.DisplayCash + playerResources.DisplayResources);
|
||||||
|
|
||||||
playerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
|
playerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
|
||||||
|
|
||||||
@@ -104,14 +104,14 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
};
|
};
|
||||||
|
|
||||||
var siloBar = playerWidgets.Get<ResourceBarWidget>("SILOBAR");
|
var siloBar = playerWidgets.Get<ResourceBarWidget>("SILOBAR");
|
||||||
siloBar.GetProvided = () => playerResources.OreCapacity;
|
siloBar.GetProvided = () => playerResources.ResourceCapacity;
|
||||||
siloBar.GetUsed = () => playerResources.Ore;
|
siloBar.GetUsed = () => playerResources.Resources;
|
||||||
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
|
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
|
||||||
siloBar.GetBarColor = () =>
|
siloBar.GetBarColor = () =>
|
||||||
{
|
{
|
||||||
if (playerResources.Ore == playerResources.OreCapacity)
|
if (playerResources.Resources == playerResources.ResourceCapacity)
|
||||||
return Color.Red;
|
return Color.Red;
|
||||||
if (playerResources.Ore >= 0.8 * playerResources.OreCapacity)
|
if (playerResources.Resources >= 0.8 * playerResources.ResourceCapacity)
|
||||||
return Color.Orange;
|
return Color.Orange;
|
||||||
return Color.LimeGreen;
|
return Color.LimeGreen;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
|
|
||||||
var costString = "$: {0}".F(cost);
|
var costString = "$: {0}".F(cost);
|
||||||
costLabel.GetText = () => costString;
|
costLabel.GetText = () => costString;
|
||||||
costLabel.GetColor = () => pr.DisplayCash + pr.DisplayOre >= cost
|
costLabel.GetColor = () => pr.DisplayCash + pr.DisplayResources >= cost
|
||||||
? Color.White : Color.Red;
|
? Color.White : Color.Red;
|
||||||
|
|
||||||
var descString = tooltip.Description.Replace("\\n", "\n");
|
var descString = tooltip.Description.Replace("\\n", "\n");
|
||||||
|
|||||||
35
OpenRA.Mods.RA/Combat.cs
Executable file → Normal file
35
OpenRA.Mods.RA/Combat.cs
Executable file → Normal file
@@ -18,7 +18,8 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
public static class Combat /* some utility bits that are shared between various things */
|
// some utility bits that are shared between various things
|
||||||
|
public static class Combat
|
||||||
{
|
{
|
||||||
static string GetImpactSound(WarheadInfo warhead, bool isWater)
|
static string GetImpactSound(WarheadInfo warhead, bool isWater)
|
||||||
{
|
{
|
||||||
@@ -49,10 +50,10 @@ namespace OpenRA.Mods.RA
|
|||||||
Sound.Play(GetImpactSound(warhead, isWater), pos);
|
Sound.Play(GetImpactSound(warhead, isWater), pos);
|
||||||
|
|
||||||
var smudgeLayers = world.WorldActor.TraitsImplementing<SmudgeLayer>().ToDictionary(x => x.Info.Type);
|
var smudgeLayers = world.WorldActor.TraitsImplementing<SmudgeLayer>().ToDictionary(x => x.Info.Type);
|
||||||
|
var resLayer = warhead.DestroyResources || !string.IsNullOrEmpty(warhead.AddsResourceType) ? world.WorldActor.Trait<ResourceLayer>() : null;
|
||||||
|
|
||||||
if (warhead.Size[0] > 0)
|
if (warhead.Size[0] > 0)
|
||||||
{
|
{
|
||||||
var resLayer = world.WorldActor.Trait<ResourceLayer>();
|
|
||||||
var allCells = world.Map.FindTilesInCircle(targetTile, warhead.Size[0]).ToList();
|
var allCells = world.Map.FindTilesInCircle(targetTile, warhead.Size[0]).ToList();
|
||||||
|
|
||||||
// `smudgeCells` might want to just be an outer shell of the cells:
|
// `smudgeCells` might want to just be an outer shell of the cells:
|
||||||
@@ -71,15 +72,34 @@ namespace OpenRA.Mods.RA
|
|||||||
throw new NotImplementedException("Unknown smudge type `{0}`".F(smudgeType));
|
throw new NotImplementedException("Unknown smudge type `{0}`".F(smudgeType));
|
||||||
|
|
||||||
smudgeLayer.AddSmudge(sc);
|
smudgeLayer.AddSmudge(sc);
|
||||||
if (warhead.Ore)
|
if (warhead.DestroyResources)
|
||||||
resLayer.Destroy(sc);
|
resLayer.Destroy(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destroy all resources in range, not just the outer shell:
|
// Destroy all resources in range, not just the outer shell:
|
||||||
foreach (var cell in allCells)
|
if (warhead.DestroyResources)
|
||||||
{
|
foreach (var cell in allCells)
|
||||||
if (warhead.Ore)
|
|
||||||
resLayer.Destroy(cell);
|
resLayer.Destroy(cell);
|
||||||
|
|
||||||
|
// Splatter resources:
|
||||||
|
if (!string.IsNullOrEmpty(warhead.AddsResourceType))
|
||||||
|
{
|
||||||
|
var resourceType = world.WorldActor.TraitsImplementing<ResourceType>()
|
||||||
|
.FirstOrDefault(t => t.Info.Name == warhead.AddsResourceType);
|
||||||
|
|
||||||
|
if (resourceType == null)
|
||||||
|
Log.Write("debug", "Warhead defines an invalid resource type '{0}'".F(warhead.AddsResourceType));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var cell in allCells)
|
||||||
|
{
|
||||||
|
if (!resLayer.CanSpawnResourceAt(resourceType, cell))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var splash = world.SharedRandom.Next(1, resourceType.Info.MaxDensity - resLayer.GetResourceDensity(cell));
|
||||||
|
resLayer.AddResource(resourceType, cell, splash);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -95,7 +115,7 @@ namespace OpenRA.Mods.RA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (warhead.Ore)
|
if (warhead.DestroyResources)
|
||||||
world.WorldActor.Trait<ResourceLayer>().Destroy(targetTile);
|
world.WorldActor.Trait<ResourceLayer>().Destroy(targetTile);
|
||||||
|
|
||||||
switch (warhead.DamageModel)
|
switch (warhead.DamageModel)
|
||||||
@@ -202,6 +222,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var falloff = (float)GetDamageFalloff(distance * 1f / warhead.Spread.Range);
|
var falloff = (float)GetDamageFalloff(distance * 1f / warhead.Spread.Range);
|
||||||
rawDamage = (float)(falloff * rawDamage);
|
rawDamage = (float)(falloff * rawDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (float)(rawDamage * modifier * (float)warhead.EffectivenessAgainst(target.Info));
|
return (float)(rawDamage * modifier * (float)warhead.EffectivenessAgainst(target.Info));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var targetResources = self.Owner.PlayerActor.Trait<PlayerResources>();
|
var targetResources = self.Owner.PlayerActor.Trait<PlayerResources>();
|
||||||
var spyResources = infiltrator.Owner.PlayerActor.Trait<PlayerResources>();
|
var spyResources = infiltrator.Owner.PlayerActor.Trait<PlayerResources>();
|
||||||
|
|
||||||
var toTake = (targetResources.Cash + targetResources.Ore) * info.Percentage / 100;
|
var toTake = (targetResources.Cash + targetResources.Resources) * info.Percentage / 100;
|
||||||
var toGive = Math.Max(toTake, info.Minimum);
|
var toGive = Math.Max(toTake, info.Minimum);
|
||||||
|
|
||||||
targetResources.TakeCash(toTake);
|
targetResources.TakeCash(toTake);
|
||||||
|
|||||||
@@ -358,7 +358,7 @@
|
|||||||
<Compile Include="SpawnMPUnits.cs" />
|
<Compile Include="SpawnMPUnits.cs" />
|
||||||
<Compile Include="SpawnMapActors.cs" />
|
<Compile Include="SpawnMapActors.cs" />
|
||||||
<Compile Include="Disguise.cs" />
|
<Compile Include="Disguise.cs" />
|
||||||
<Compile Include="StoresOre.cs" />
|
<Compile Include="StoresResources.cs" />
|
||||||
<Compile Include="StrategicVictoryConditions.cs" />
|
<Compile Include="StrategicVictoryConditions.cs" />
|
||||||
<Compile Include="SupplyTruck.cs" />
|
<Compile Include="SupplyTruck.cs" />
|
||||||
<Compile Include="SupportPowers\AirstrikePower.cs" />
|
<Compile Include="SupportPowers\AirstrikePower.cs" />
|
||||||
|
|||||||
@@ -63,11 +63,11 @@ namespace OpenRA.Mods.RA
|
|||||||
.Where(a => a.Trait.LinkedProc == self);
|
.Where(a => a.Trait.LinkedProc == self);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanGiveOre(int amount) { return PlayerResources.CanGiveOre(amount); }
|
public bool CanGiveOre(int amount) { return PlayerResources.CanGiveResources(amount); }
|
||||||
|
|
||||||
public void GiveOre(int amount)
|
public void GiveOre(int amount)
|
||||||
{
|
{
|
||||||
PlayerResources.GiveOre(amount);
|
PlayerResources.GiveResources(amount);
|
||||||
if (Info.ShowTicks)
|
if (Info.ShowTicks)
|
||||||
currentDisplayValue += amount;
|
currentDisplayValue += amount;
|
||||||
}
|
}
|
||||||
|
|||||||
5
OpenRA.Mods.RA/Render/RenderBuildingSilo.cs
Executable file → Normal file
5
OpenRA.Mods.RA/Render/RenderBuildingSilo.cs
Executable file → Normal file
@@ -30,9 +30,10 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public void BuildingComplete(Actor self)
|
public void BuildingComplete(Actor self)
|
||||||
{
|
{
|
||||||
var animation = (self.GetDamageState() >= DamageState.Heavy) ? "damaged-idle" : "idle";
|
var animation = (self.GetDamageState() >= DamageState.Heavy) ? "damaged-idle" : "idle";
|
||||||
|
|
||||||
DefaultAnimation.PlayFetchIndex(animation,
|
DefaultAnimation.PlayFetchIndex(animation,
|
||||||
() => playerResources.OreCapacity != 0
|
() => playerResources.ResourceCapacity != 0
|
||||||
? ((10 * DefaultAnimation.CurrentSequence.Length - 1) * playerResources.Ore) / (10 * playerResources.OreCapacity)
|
? ((10 * DefaultAnimation.CurrentSequence.Length - 1) * playerResources.Resources) / (10 * playerResources.ResourceCapacity)
|
||||||
: 0);
|
: 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
OpenRA.Mods.RA/Render/WithResources.cs
Executable file → Normal file
4
OpenRA.Mods.RA/Render/WithResources.cs
Executable file → Normal file
@@ -37,8 +37,8 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
|
|
||||||
anim = new Animation(self.World, rs.GetImage(self));
|
anim = new Animation(self.World, rs.GetImage(self));
|
||||||
anim.PlayFetchIndex(info.Sequence,
|
anim.PlayFetchIndex(info.Sequence,
|
||||||
() => playerResources.OreCapacity != 0
|
() => playerResources.ResourceCapacity != 0
|
||||||
? ((10 * anim.CurrentSequence.Length - 1) * playerResources.Ore) / (10 * playerResources.OreCapacity)
|
? ((10 * anim.CurrentSequence.Length - 1) * playerResources.Resources) / (10 * playerResources.ResourceCapacity)
|
||||||
: 0);
|
: 0);
|
||||||
|
|
||||||
rs.Add("resources_{0}".F(info.Sequence), new AnimationWithOffset(
|
rs.Add("resources_{0}".F(info.Sequence), new AnimationWithOffset(
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ namespace OpenRA.Mods.RA.Scripting
|
|||||||
[Desc("The amount of harvestable resources held by the player.")]
|
[Desc("The amount of harvestable resources held by the player.")]
|
||||||
public int Resources
|
public int Resources
|
||||||
{
|
{
|
||||||
get { return pr.Ore; }
|
get { return pr.Resources; }
|
||||||
set { pr.Ore = value.Clamp(0, pr.OreCapacity); }
|
set { pr.Resources = value.Clamp(0, pr.ResourceCapacity); }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Desc("The maximum resource storage of the player.")]
|
[Desc("The maximum resource storage of the player.")]
|
||||||
public int ResourceCapacity { get { return pr.OreCapacity; } }
|
public int ResourceCapacity { get { return pr.ResourceCapacity; } }
|
||||||
|
|
||||||
[Desc("The amount of cash held by the player.")]
|
[Desc("The amount of cash held by the player.")]
|
||||||
public int Cash
|
public int Cash
|
||||||
|
|||||||
@@ -63,16 +63,13 @@ namespace OpenRA.Mods.RA
|
|||||||
.SkipWhile(p => resLayer.GetResource(p) == resourceType && resLayer.IsFull(p.X, p.Y))
|
.SkipWhile(p => resLayer.GetResource(p) == resourceType && resLayer.IsFull(p.X, p.Y))
|
||||||
.Cast<CPos?>().FirstOrDefault();
|
.Cast<CPos?>().FirstOrDefault();
|
||||||
|
|
||||||
if (cell != null && self.World.Map.IsInMap(cell.Value) &&
|
if (cell != null && resLayer.CanSpawnResourceAt(resourceType, cell.Value))
|
||||||
(resLayer.GetResource(cell.Value) == resourceType
|
|
||||||
|| (resLayer.GetResource(cell.Value) == null && resLayer.AllowResourceAt(resourceType, cell.Value))))
|
|
||||||
resLayer.AddResource(resourceType, cell.Value, 1);
|
resLayer.AddResource(resourceType, cell.Value, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static IEnumerable<CPos> RandomWalk(CPos p, MersenneTwister r)
|
static IEnumerable<CPos> RandomWalk(CPos p, MersenneTwister r)
|
||||||
{
|
{
|
||||||
for (; ; )
|
for (;;)
|
||||||
{
|
{
|
||||||
var dx = r.Next(-1, 2);
|
var dx = r.Next(-1, 2);
|
||||||
var dy = r.Next(-1, 2);
|
var dy = r.Next(-1, 2);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
* available to you under the terms of the GNU General Public License
|
* available to you under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation. For more information,
|
* as published by the Free Software Foundation. For more information,
|
||||||
@@ -13,23 +13,23 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class StoresOreInfo : ITraitInfo
|
class StoresResourcesInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[Desc("Number of little squares used to display how filled unit is.")]
|
[Desc("Number of little squares used to display how filled unit is.")]
|
||||||
public readonly int PipCount = 0;
|
public readonly int PipCount = 0;
|
||||||
public readonly PipType PipColor = PipType.Yellow;
|
public readonly PipType PipColor = PipType.Yellow;
|
||||||
public readonly int Capacity = 0;
|
public readonly int Capacity = 0;
|
||||||
public object Create(ActorInitializer init) { return new StoresOre(init.self, this); }
|
public object Create(ActorInitializer init) { return new StoresResources(init.self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class StoresOre : IPips, INotifyCapture, INotifyKilled, IExplodeModifier, IStoreOre, ISync
|
class StoresResources : IPips, INotifyCapture, INotifyKilled, IExplodeModifier, IStoreResources, ISync
|
||||||
{
|
{
|
||||||
readonly StoresOreInfo Info;
|
readonly StoresResourcesInfo Info;
|
||||||
|
|
||||||
[Sync] public int Stored { get { return Player.OreCapacity == 0 ? 0 : Info.Capacity * Player.Ore / Player.OreCapacity; } }
|
[Sync] public int Stored { get { return Player.ResourceCapacity == 0 ? 0 : Info.Capacity * Player.Resources / Player.ResourceCapacity; } }
|
||||||
|
|
||||||
PlayerResources Player;
|
PlayerResources Player;
|
||||||
public StoresOre(Actor self, StoresOreInfo info)
|
public StoresResources(Actor self, StoresResourcesInfo info)
|
||||||
{
|
{
|
||||||
Player = self.Owner.PlayerActor.Trait<PlayerResources>();
|
Player = self.Owner.PlayerActor.Trait<PlayerResources>();
|
||||||
Info = info;
|
Info = info;
|
||||||
@@ -39,22 +39,22 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
|
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||||
{
|
{
|
||||||
var ore = Stored;
|
var resources = Stored;
|
||||||
Player.TakeOre(ore);
|
Player.TakeResources(resources);
|
||||||
Player = newOwner.PlayerActor.Trait<PlayerResources>();
|
Player = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||||
Player.GiveOre(ore);
|
Player.GiveResources(resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Killed(Actor self, AttackInfo e)
|
public void Killed(Actor self, AttackInfo e)
|
||||||
{
|
{
|
||||||
Player.TakeOre(Stored); // Lose the stored ore
|
Player.TakeResources(Stored); // lose the stored resources
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<PipType> GetPips(Actor self)
|
public IEnumerable<PipType> GetPips(Actor self)
|
||||||
{
|
{
|
||||||
return Exts.MakeArray( Info.PipCount,
|
return Exts.MakeArray(Info.PipCount,
|
||||||
i => ( Player.Ore * Info.PipCount > i * Player.OreCapacity )
|
i => (Player.Resources * Info.PipCount > i * Player.ResourceCapacity)
|
||||||
? Info.PipColor : PipType.Transparent );
|
? Info.PipColor : PipType.Transparent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ShouldExplode(Actor self) { return Stored > 0; }
|
public bool ShouldExplode(Actor self) { return Stored > 0; }
|
||||||
@@ -489,7 +489,7 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
var power = pl.PlayerActor.Trait<PowerManager>();
|
var power = pl.PlayerActor.Trait<PowerManager>();
|
||||||
|
|
||||||
DrawRightAligned("${0}".F(cost), pos + new int2(-5, 5),
|
DrawRightAligned("${0}".F(cost), pos + new int2(-5, 5),
|
||||||
(resources.DisplayCash + resources.DisplayOre >= cost ? Color.White : Color.Red));
|
(resources.DisplayCash + resources.DisplayResources >= cost ? Color.White : Color.Red));
|
||||||
|
|
||||||
var lowpower = power.PowerState != PowerState.Normal;
|
var lowpower = power.PowerState != PowerState.Normal;
|
||||||
var time = CurrentQueue.GetBuildTime(info.Name)
|
var time = CurrentQueue.GetBuildTime(info.Name)
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
|
var stats = player.PlayerActor.TraitOrDefault<PlayerStatistics>();
|
||||||
if (stats == null) return template;
|
if (stats == null) return template;
|
||||||
|
|
||||||
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.DisplayCash + res.DisplayOre);
|
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.DisplayCash + res.DisplayResources);
|
||||||
template.Get<LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned);
|
template.Get<LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned);
|
||||||
template.Get<LabelWidget>("EARNED_THIS_MIN").GetText = () => "$" + stats.EarnedThisMinute;
|
template.Get<LabelWidget>("EARNED_THIS_MIN").GetText = () => "$" + stats.EarnedThisMinute;
|
||||||
template.Get<LabelWidget>("EARNED").GetText = () => "$" + res.Earned;
|
template.Get<LabelWidget>("EARNED").GetText = () => "$" + res.Earned;
|
||||||
@@ -251,7 +251,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
LobbyUtils.AddPlayerFlagAndName(template, player);
|
LobbyUtils.AddPlayerFlagAndName(template, player);
|
||||||
|
|
||||||
var res = player.PlayerActor.Trait<PlayerResources>();
|
var res = player.PlayerActor.Trait<PlayerResources>();
|
||||||
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.DisplayCash + res.DisplayOre);
|
template.Get<LabelWidget>("CASH").GetText = () => "$" + (res.DisplayCash + res.DisplayResources);
|
||||||
template.Get<LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned);
|
template.Get<LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned);
|
||||||
|
|
||||||
var powerRes = player.PlayerActor.Trait<PowerManager>();
|
var powerRes = player.PlayerActor.Trait<PowerManager>();
|
||||||
|
|||||||
2
OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs
Executable file → Normal file
2
OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs
Executable file → Normal file
@@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
new float2(Bounds.Left, 0));
|
new float2(Bounds.Left, 0));
|
||||||
|
|
||||||
// Cash
|
// Cash
|
||||||
var cashDigits = (playerResources.DisplayCash + playerResources.DisplayOre).ToString();
|
var cashDigits = (playerResources.DisplayCash + playerResources.DisplayResources).ToString();
|
||||||
var x = Bounds.Right - 65;
|
var x = Bounds.Right - 65;
|
||||||
|
|
||||||
foreach (var d in cashDigits.Reverse())
|
foreach (var d in cashDigits.Reverse())
|
||||||
|
|||||||
@@ -246,6 +246,12 @@ namespace OpenRA.Utility
|
|||||||
node.Value.Nodes.RemoveAll(n => n.Key == "TeslaInstantKills");
|
node.Value.Nodes.RemoveAll(n => n.Key == "TeslaInstantKills");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineVersion < 20140615)
|
||||||
|
{
|
||||||
|
if (depth == 1 && node.Key == "StoresOre")
|
||||||
|
node.Key = "StoresResources";
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -308,6 +314,12 @@ namespace OpenRA.Utility
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineVersion < 20140615)
|
||||||
|
{
|
||||||
|
if (depth == 2 && parentKey == "Warhead" && node.Key == "Ore" )
|
||||||
|
node.Key = "DestroyResources";
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ PROC:
|
|||||||
TiberiumRefinery:
|
TiberiumRefinery:
|
||||||
DockOffset: 0,2
|
DockOffset: 0,2
|
||||||
TickRate: 15
|
TickRate: 15
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipColor: Green
|
PipColor: Green
|
||||||
PipCount: 10
|
PipCount: 10
|
||||||
Capacity: 2000
|
Capacity: 2000
|
||||||
@@ -158,7 +158,7 @@ SILO:
|
|||||||
Bib:
|
Bib:
|
||||||
HasMinibib: Yes
|
HasMinibib: Yes
|
||||||
RenderBuildingSilo:
|
RenderBuildingSilo:
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipCount: 10
|
PipCount: 10
|
||||||
PipColor: Green
|
PipColor: Green
|
||||||
Capacity: 2000
|
Capacity: 2000
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ HARV:
|
|||||||
HuskActor: HARV.Husk
|
HuskActor: HARV.Husk
|
||||||
-GainsExperience:
|
-GainsExperience:
|
||||||
RenderHarvester:
|
RenderHarvester:
|
||||||
|
Explodes:
|
||||||
|
Weapon: TiberiumExplosion
|
||||||
|
|
||||||
APC:
|
APC:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ Atomic:
|
|||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Spread: 2c512
|
Spread: 2c512
|
||||||
Size: 3
|
Size: 3
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 100%
|
None: 100%
|
||||||
Wood: 100%
|
Wood: 100%
|
||||||
@@ -92,7 +92,7 @@ Atomic:
|
|||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Spread: 3c768
|
Spread: 3c768
|
||||||
Size: 4
|
Size: 4
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 100%
|
None: 100%
|
||||||
Wood: 100%
|
Wood: 100%
|
||||||
@@ -105,7 +105,7 @@ Atomic:
|
|||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Spread: 5c0
|
Spread: 5c0
|
||||||
Size: 5
|
Size: 5
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 100%
|
None: 100%
|
||||||
Wood: 100%
|
Wood: 100%
|
||||||
@@ -119,14 +119,14 @@ IonCannon:
|
|||||||
Warhead@impact:
|
Warhead@impact:
|
||||||
Damage: 900
|
Damage: 900
|
||||||
Spread: 853
|
Spread: 853
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
InfDeath: 5
|
InfDeath: 5
|
||||||
Warhead@area:
|
Warhead@area:
|
||||||
DamageModel: PerCell
|
DamageModel: PerCell
|
||||||
Damage: 0
|
Damage: 0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 2,1
|
Size: 2,1
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Delay: 3
|
Delay: 3
|
||||||
InfDeath: 5
|
InfDeath: 5
|
||||||
|
|
||||||
@@ -877,6 +877,21 @@ Tiberium:
|
|||||||
Damage: 2
|
Damage: 2
|
||||||
PreventProne: yes
|
PreventProne: yes
|
||||||
|
|
||||||
|
TiberiumExplosion:
|
||||||
|
Warhead:
|
||||||
|
Damage: 10
|
||||||
|
Spread: 9
|
||||||
|
Size: 1,1
|
||||||
|
Versus:
|
||||||
|
None: 90%
|
||||||
|
Wood: 75%
|
||||||
|
Light: 60%
|
||||||
|
Heavy: 25%
|
||||||
|
Explosion: chemball
|
||||||
|
InfDeath: 3
|
||||||
|
ImpactSound: xplosml2.aud
|
||||||
|
AddsResourceType: Tiberium
|
||||||
|
|
||||||
Heal:
|
Heal:
|
||||||
ROF: 4
|
ROF: 4
|
||||||
Warhead:
|
Warhead:
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ CONCRETEB:
|
|||||||
DockOffset: 2,1
|
DockOffset: 2,1
|
||||||
DockAngle: 160
|
DockAngle: 160
|
||||||
TickRate: 20
|
TickRate: 20
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipColor: green
|
PipColor: green
|
||||||
PipCount: 10
|
PipCount: 10
|
||||||
Capacity: 2000
|
Capacity: 2000
|
||||||
@@ -220,7 +220,7 @@ CONCRETEB:
|
|||||||
Range: 4c0
|
Range: 4c0
|
||||||
-RenderBuilding:
|
-RenderBuilding:
|
||||||
RenderBuildingSilo:
|
RenderBuildingSilo:
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipColor: green
|
PipColor: green
|
||||||
PipCount: 5
|
PipCount: 5
|
||||||
Capacity: 2000
|
Capacity: 2000
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ HARVESTER:
|
|||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 4c0
|
Range: 4c0
|
||||||
Explodes:
|
Explodes:
|
||||||
Weapon: UnitExplodeScale
|
Weapon: SpiceExplosion
|
||||||
EmptyWeapon: UnitExplodeScale
|
EmptyWeapon: UnitExplodeScale
|
||||||
LeavesHusk:
|
LeavesHusk:
|
||||||
HuskActor: Harvester.Husk
|
HuskActor: Harvester.Husk
|
||||||
|
|||||||
@@ -649,3 +649,18 @@ Shrapnel:
|
|||||||
Damage: 60
|
Damage: 60
|
||||||
ImpactSound: EXPLLG5.WAV
|
ImpactSound: EXPLLG5.WAV
|
||||||
|
|
||||||
|
SpiceExplosion:
|
||||||
|
Warhead:
|
||||||
|
Damage: 10
|
||||||
|
Spread: 9
|
||||||
|
Size: 2,2
|
||||||
|
Versus:
|
||||||
|
None: 90%
|
||||||
|
Wood: 75%
|
||||||
|
Light: 60%
|
||||||
|
Heavy: 25%
|
||||||
|
Explosion: med_explosion
|
||||||
|
InfDeath: 3
|
||||||
|
ImpactSound: EXPLLG5.WAV
|
||||||
|
AddsResourceType: Spice
|
||||||
|
|
||||||
|
|||||||
@@ -850,7 +850,7 @@ PROC:
|
|||||||
Range: 6c0
|
Range: 6c0
|
||||||
Bib:
|
Bib:
|
||||||
OreRefinery:
|
OreRefinery:
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipCount: 17
|
PipCount: 17
|
||||||
Capacity: 2000
|
Capacity: 2000
|
||||||
IronCurtainable:
|
IronCurtainable:
|
||||||
@@ -897,7 +897,7 @@ SILO:
|
|||||||
Bib:
|
Bib:
|
||||||
HasMinibib: Yes
|
HasMinibib: Yes
|
||||||
RenderBuildingSilo:
|
RenderBuildingSilo:
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipCount: 5
|
PipCount: 5
|
||||||
Capacity: 1500
|
Capacity: 1500
|
||||||
IronCurtainable:
|
IronCurtainable:
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ HARV:
|
|||||||
FullHuskActor: HARV.FullHusk
|
FullHuskActor: HARV.FullHusk
|
||||||
FullnessThreshold: 50
|
FullnessThreshold: 50
|
||||||
Explodes:
|
Explodes:
|
||||||
Weapon: UnitExplodeSmall
|
Weapon: OreExplosion
|
||||||
EmptyWeapon: UnitExplodeSmall
|
EmptyWeapon: UnitExplodeSmall
|
||||||
|
|
||||||
MCV:
|
MCV:
|
||||||
|
|||||||
@@ -639,7 +639,7 @@ CrateNuke:
|
|||||||
Warhead@impact:
|
Warhead@impact:
|
||||||
Damage: 1000
|
Damage: 1000
|
||||||
Spread: 256
|
Spread: 256
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 90%
|
None: 90%
|
||||||
Light: 60%
|
Light: 60%
|
||||||
@@ -654,7 +654,7 @@ CrateNuke:
|
|||||||
Damage: 250
|
Damage: 250
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 5,4
|
Size: 5,4
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 90%
|
None: 90%
|
||||||
Light: 60%
|
Light: 60%
|
||||||
@@ -1021,7 +1021,7 @@ Atomic:
|
|||||||
Spread: 1c0
|
Spread: 1c0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 1
|
Size: 1
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Explosion: nuke
|
Explosion: nuke
|
||||||
@@ -1033,7 +1033,7 @@ Atomic:
|
|||||||
Spread: 2c0
|
Spread: 2c0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 2
|
Size: 2
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 5
|
Delay: 5
|
||||||
@@ -1044,7 +1044,7 @@ Atomic:
|
|||||||
Spread: 3c0
|
Spread: 3c0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 3
|
Size: 3
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 10
|
Delay: 10
|
||||||
@@ -1054,7 +1054,7 @@ Atomic:
|
|||||||
Spread: 4c0
|
Spread: 4c0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 4
|
Size: 4
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 15
|
Delay: 15
|
||||||
@@ -1064,7 +1064,7 @@ Atomic:
|
|||||||
Spread: 5c0
|
Spread: 5c0
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Size: 5
|
Size: 5
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 20
|
Delay: 20
|
||||||
@@ -1076,7 +1076,7 @@ MiniNuke:
|
|||||||
Damage: 1500
|
Damage: 1500
|
||||||
Spread: 1c0
|
Spread: 1c0
|
||||||
Size: 1
|
Size: 1
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Explosion: nuke
|
Explosion: nuke
|
||||||
@@ -1087,7 +1087,7 @@ MiniNuke:
|
|||||||
Damage: 600
|
Damage: 600
|
||||||
Spread: 2c0
|
Spread: 2c0
|
||||||
Size: 2
|
Size: 2
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 5
|
Delay: 5
|
||||||
@@ -1097,7 +1097,7 @@ MiniNuke:
|
|||||||
Damage: 600
|
Damage: 600
|
||||||
Spread: 3c0
|
Spread: 3c0
|
||||||
Size: 3
|
Size: 3
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 10
|
Delay: 10
|
||||||
@@ -1107,7 +1107,7 @@ MiniNuke:
|
|||||||
Spread: 4c0
|
Spread: 4c0
|
||||||
Size: 4
|
Size: 4
|
||||||
SmudgeType: Scorch
|
SmudgeType: Scorch
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
Concrete: 25%
|
Concrete: 25%
|
||||||
Delay: 15
|
Delay: 15
|
||||||
@@ -1360,3 +1360,18 @@ MADTankDetonate:
|
|||||||
ImpactSound: mineblo1.aud
|
ImpactSound: mineblo1.aud
|
||||||
SmudgeType: Crater
|
SmudgeType: Crater
|
||||||
|
|
||||||
|
OreExplosion:
|
||||||
|
Warhead:
|
||||||
|
Damage: 10
|
||||||
|
Spread: 9
|
||||||
|
Size: 1,1
|
||||||
|
Versus:
|
||||||
|
None: 90%
|
||||||
|
Wood: 75%
|
||||||
|
Light: 60%
|
||||||
|
Heavy: 25%
|
||||||
|
Explosion: med_explosion
|
||||||
|
InfDeath: 3
|
||||||
|
ImpactSound: kaboom25.aud
|
||||||
|
AddsResourceType: Ore
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ PROC:
|
|||||||
Range: 6
|
Range: 6
|
||||||
# Bib:
|
# Bib:
|
||||||
TiberiumRefinery:
|
TiberiumRefinery:
|
||||||
StoresOre:
|
StoresResources:
|
||||||
PipColor: Green
|
PipColor: Green
|
||||||
PipCount: 15
|
PipCount: 15
|
||||||
Capacity: 1500
|
Capacity: 1500
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ SuicideBomb:
|
|||||||
Warhead:
|
Warhead:
|
||||||
Damage: 11000
|
Damage: 11000
|
||||||
Spread: 256
|
Spread: 256
|
||||||
Ore: true
|
DestroyResources: true
|
||||||
Versus:
|
Versus:
|
||||||
None: 90%
|
None: 90%
|
||||||
Light: 60%
|
Light: 60%
|
||||||
|
|||||||
Reference in New Issue
Block a user