Skip to content

Commit

Permalink
Setup Tiberian Sun forest fires.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mailaender committed Feb 15, 2022
1 parent 5bf4dad commit bc5b849
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 6 deletions.
72 changes: 72 additions & 0 deletions OpenRA.Mods.Common/Traits/Conditions/SpreadsCondition.cs
@@ -0,0 +1,72 @@
#region Copyright & License Information
/*
* Copyright 2007-2020 The OpenRA Developers (see AUTHORS)
* 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
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion

using System.Linq;
using OpenRA.Traits;

namespace OpenRA.Mods.Common.Traits
{
[Desc("Any actor with this trait enabled has a chance to affect others with this trait.")]
public class SpreadsConditionInfo : ConditionalTraitInfo
{
[Desc("The chance this actor is going to affect an adjacent actor.")]
public readonly int Probability = 5;

[Desc("How far the condition can spread from one actor to another.")]
public readonly WDist Range = WDist.FromCells(3);

[GrantedConditionReference]
[Desc("Condition to grant onto another actor in range with the same trait.")]
public readonly string SpreadCondition = "spreading";

[Desc("Time in ticks to wait between spreading further.")]
public int Delay = 5;

public override object Create(ActorInitializer init) { return new SpreadsCondition(this); }
}

public class SpreadsCondition : ConditionalTrait<SpreadsConditionInfo>, ITick
{
readonly SpreadsConditionInfo info;

int delay;

public SpreadsCondition(SpreadsConditionInfo info)
: base(info)
{
this.info = info;
delay = info.Delay;
}

void ITick.Tick(Actor self)
{
if (IsTraitDisabled)
return;

if (delay-- > 0)
return;

delay = info.Delay;

if (self.World.SharedRandom.Next(100) <= info.Probability)
{
var actorsInRange = self.World.FindActorsInCircle(self.CenterPosition, info.Range)
.Where(a => a.TraitOrDefault<SpreadsCondition>() != null);

if (!actorsInRange.Any())
return;

var target = actorsInRange.Random(self.World.SharedRandom);
target.GrantCondition(info.SpreadCondition);
}
}
}
}
31 changes: 30 additions & 1 deletion mods/ts/rules/defaults.yaml
Expand Up @@ -1034,8 +1034,9 @@

^Tree:
Inherits@1: ^SpriteActor
Inherits@2: ^ExistsInWorld
Interactable:
HiddenUnderShroud:
FrozenUnderFog:
RenderSprites:
Palette: terraindecoration
WithSpriteBody:
Expand All @@ -1048,6 +1049,34 @@
Categories: Tree
RequiresSpecificOwners:
ValidOwnerNames: Neutral
HitShape:
Health:
HP: 200000
Armor:
Type: Wood
Targetable:
TargetTypes: Trees, NoAutoTarget
GrantConditionOnDamageState@Small:
Condition: small-fire
ValidDamageStates: Medium
GrantConditionOnDamageState@Large:
Condition: large-fire
ValidDamageStates: Heavy, Critical
WithIdleOverlay@SmallFire:
Image: fire2
Palette: effect
RequiresCondition: small-fire
WithIdleOverlay@LargeFire:
Image: fire1
Palette: effect
RequiresCondition: large-fire
SpreadsCondition@Fire:
RequiresCondition: small-fire || large-fire
SpreadCondition: burning
ChangesHealth:
StartIfBelow: 101
Step: -500
RequiresCondition: small-fire || large-fire || burning

^Rock:
Inherits@1: ^SpriteActor
Expand Down
14 changes: 14 additions & 0 deletions mods/ts/sequences/misc.yaml
Expand Up @@ -709,3 +709,17 @@ podring:
Frames: 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
Length: *
AlphaFade: True

fire1:
idle-overlay:
Length: 17
BlendMode: Translucent
Offset: 0, -24, 24
ZOffset: 1023

fire2:
idle-overlay:
Length: 17
BlendMode: Translucent
Offset: 0, -18, 18
ZOffset: 1023
2 changes: 2 additions & 0 deletions mods/ts/weapons/ballisticweapons.yaml
Expand Up @@ -134,6 +134,7 @@ Grenade:
ReloadDelay: 60
Range: 4c512
-Report:
ValidTargets: Ground, Trees
Projectile: Bullet
Speed: 226
Blockable: true
Expand All @@ -150,6 +151,7 @@ Grenade:
Light: 70
Concrete: 28
DamageTypes: Prone70Percent, TriggerProne, ExplosionDeath
ValidTargets: Ground, Trees
Warhead@2Eff: CreateEffect
Explosions: small_grey_explosion
ImpactSounds: expnew13.aud
3 changes: 3 additions & 0 deletions mods/ts/weapons/energyweapons.yaml
Expand Up @@ -57,6 +57,7 @@ SonicZap:
ReloadDelay: 180
Range: 6c0
Report: sonic4.aud
ValidTargets: Ground, Trees
Projectile: AreaBeam
Speed: 0c128
Duration: 90
Expand Down Expand Up @@ -85,6 +86,7 @@ SonicZap:
InvalidTargets: Disruptor # Does not affect friendly disruptors at all
AffectsParent: false
ValidRelationships: Ally
ValidTargets: Ground, Trees
Versus:
Heavy: 80
Concrete: 60
Expand Down Expand Up @@ -124,6 +126,7 @@ CyCannon:
RangeLimit: 8c0
TerrainHeightAware: true
Warhead@1Dam: SpreadDamage
ValidTargets: Ground, Trees
Spread: 43
Damage: 12000
Versus:
Expand Down
4 changes: 4 additions & 0 deletions mods/ts/weapons/otherweapons.yaml
@@ -1,4 +1,5 @@
FireballLauncher:
ValidTargets: Ground, Trees
ReloadDelay: 50
Range: 4c256
Report: flamtnk1.aud
Expand All @@ -11,6 +12,7 @@ FireballLauncher:
Warhead@1Dam: SpreadDamage
Spread: 288
Falloff: 100, 50, 25, 12, 6, 3, 0
ValidTargets: Ground, Trees
Damage: 2500
Versus:
None: 600
Expand All @@ -29,6 +31,7 @@ Bomb:
BurstDelays: 6
Range: 2c512
TargetActorCenter: true
ValidTargets: Ground, Trees
Projectile: GravityBomb
Velocity: 72, 0, -90
Acceleration: 0, 0, -8
Expand All @@ -46,6 +49,7 @@ Bomb:
Heavy: 32
Concrete: 100
DamageTypes: Prone100Percent, TriggerProne, ExplosionDeath
ValidTargets: Ground, Trees
Warhead@2Eff: CreateEffect
Explosions: large_explosion
ImpactSounds: expnew09.aud
Expand Down
10 changes: 5 additions & 5 deletions mods/ts/weapons/superweapons.yaml
@@ -1,6 +1,6 @@
MultiCluster:
Inherits: ^DefaultMissile
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
Projectile: Missile
MaximumLaunchSpeed: 120
Inaccuracy: 1c0
Expand All @@ -14,7 +14,7 @@ MultiCluster:
Warhead@1Dam: SpreadDamage
Spread: 216
Damage: 13000
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
Versus:
None: 100
Wood: 85
Expand All @@ -34,7 +34,7 @@ ClusterMissile:
Spread: 512
Falloff: 100, 100, 0
Damage: 26000
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
Versus:
None: 100
Wood: 85
Expand Down Expand Up @@ -69,7 +69,7 @@ SuicideBomb:
ValidTargets: Vehicle, Building, Defense, Infantry

IonCannon:
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
Warhead@1Dam_impact: SpreadDamage
Spread: 1c0
Damage: 10000
Expand All @@ -81,7 +81,7 @@ IonCannon:
Damage: 25000
Falloff: 100, 50, 25, 0
Delay: 3
ValidTargets: Ground, Water, Air
ValidTargets: Ground, Water, Air, Trees
DamageTypes: Prone50Percent, TriggerProne, EnergyDeath
Warhead@3Smu_area: LeaveSmudge
SmudgeType: SmallScorch
Expand Down

0 comments on commit bc5b849

Please sign in to comment.