Merge pull request #11407 from reaperrr/ts-infantry-tweaks

Various TS infantry fixes
This commit is contained in:
abcdefg30
2016-06-12 14:42:12 +02:00
committed by GitHub
16 changed files with 405 additions and 1405 deletions

View File

@@ -332,6 +332,7 @@
<Compile Include="Traits\EmitInfantryOnSell.cs" />
<Compile Include="Traits\EngineerRepair.cs" />
<Compile Include="Traits\Explodes.cs" />
<Compile Include="Traits\ExplosionOnDamageTransition.cs" />
<Compile Include="Traits\ExternalCapturable.cs" />
<Compile Include="Traits\ExternalCapturableBar.cs" />
<Compile Include="Traits\ExternalCaptures.cs" />

View File

@@ -0,0 +1,70 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 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.Collections.Generic;
using System.Linq;
using OpenRA.GameRules;
using OpenRA.Mods.Common.Warheads;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("This actor triggers an explosion on itself when transitioning to a specific damage state.")]
public class ExplosionOnDamageTransitionInfo : ITraitInfo, IRulesetLoaded, Requires<HealthInfo>
{
[WeaponReference, FieldLoader.Require, Desc("Weapon to use for explosion.")]
public readonly string Weapon = null;
[Desc("At which damage state explosion will trigger.")]
public readonly DamageState DamageState = DamageState.Heavy;
[Desc("Should the explosion only be triggered once?")]
public readonly bool TriggerOnlyOnce = false;
public WeaponInfo WeaponInfo { get; private set; }
public object Create(ActorInitializer init) { return new ExplosionOnDamageTransition(this, init.Self); }
public void RulesetLoaded(Ruleset rules, ActorInfo ai)
{
WeaponInfo = string.IsNullOrEmpty(Weapon) ? null : rules.Weapons[Weapon.ToLowerInvariant()];
}
}
public class ExplosionOnDamageTransition : INotifyDamageStateChanged
{
readonly ExplosionOnDamageTransitionInfo info;
bool triggered;
public ExplosionOnDamageTransition(ExplosionOnDamageTransitionInfo info, Actor self)
{
this.info = info;
}
public void DamageStateChanged(Actor self, AttackInfo e)
{
if (!self.IsInWorld)
return;
if (triggered)
return;
if (e.DamageState >= info.DamageState && e.PreviousDamageState < info.DamageState)
{
if (info.TriggerOnlyOnce)
triggered = true;
// Use .FromPos since the actor might have been killed, don't use Target.FromActor
info.WeaponInfo.Impact(Target.FromPos(self.CenterPosition), e.Attacker, Enumerable.Empty<int>());
}
}
}
}

View File

@@ -44,7 +44,7 @@ namespace OpenRA.Mods.Common.Traits.Render
[FieldLoader.LoadUsing("LoadDeathTypes")]
[Desc("Death animation to use for each damage type (defined on the warheads).",
"Is only used if UseDeathTypeSuffix is `True`.")]
public readonly Dictionary<string, int> DeathTypes = new Dictionary<string, int>();
public readonly Dictionary<string, string> DeathTypes = new Dictionary<string, string>();
[Desc("Sequence to use when the actor is killed by some non-standard means (e.g. suicide).")]
[SequenceReference] public readonly string FallbackSequence = null;
@@ -54,8 +54,8 @@ namespace OpenRA.Mods.Common.Traits.Render
var md = yaml.ToDictionary();
return md.ContainsKey("DeathTypes")
? md["DeathTypes"].ToDictionary(my => FieldLoader.GetValue<int>("(value)", my.Value))
: new Dictionary<string, int>();
? md["DeathTypes"].ToDictionary(my => FieldLoader.GetValue<string>("(value)", my.Value))
: new Dictionary<string, string>();
}
public object Create(ActorInitializer init) { return new WithDeathAnimation(init.Self, this); }

View File

@@ -29,6 +29,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Levels of damage at which to grant upgrades.")]
public readonly DamageState ValidDamageStates = DamageState.Heavy | DamageState.Critical;
[Desc("Are upgrades irrevocable once the conditions have been met?")]
public readonly bool GrantPermanently = false;
public object Create(ActorInitializer init) { return new UpgradeOnDamage(init.Self, this); }
}
@@ -36,6 +39,7 @@ namespace OpenRA.Mods.Common.Traits
{
readonly UpgradeOnDamageInfo info;
readonly UpgradeManager um;
bool granted;
public UpgradeOnDamage(Actor self, UpgradeOnDamageInfo info)
{
@@ -43,12 +47,14 @@ namespace OpenRA.Mods.Common.Traits
um = self.TraitOrDefault<UpgradeManager>();
}
bool granted;
void INotifyDamageStateChanged.DamageStateChanged(Actor self, AttackInfo e)
{
if (um == null)
return;
if (granted && info.GrantPermanently)
return;
var rand = Game.CosmeticRandom;
if (!granted && info.ValidDamageStates.HasFlag(e.DamageState) && !info.ValidDamageStates.HasFlag(e.PreviousDamageState))
{

View File

@@ -7,6 +7,7 @@ Infantry:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Rocket:
Voices:
@@ -17,6 +18,7 @@ Rocket:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Umagon:
Voices:
@@ -26,6 +28,7 @@ Umagon:
Die: dedgirl1, dedgirl2, dedgirl4
Burned: dedgirl3
Zapped: electro1
Explode: expnew10
Ghost:
Voices:
@@ -35,6 +38,7 @@ Ghost:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Medic:
Voices:
@@ -44,6 +48,7 @@ Medic:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Engineer:
Voices:
@@ -53,6 +58,7 @@ Engineer:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
JumpJet:
Voices:
@@ -63,6 +69,7 @@ JumpJet:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Weed:
Voices:
@@ -73,6 +80,7 @@ Weed:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Spy:
Voices:
@@ -83,6 +91,7 @@ Spy:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Hijacker:
Voices:
@@ -92,24 +101,21 @@ Hijacker:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Cyborg:
Voices:
Select: 22-i000, 22-i002, 22-i006
Move: 22-i008, 22-i010, 22-i014, 22-i016, 22-i020
Attack: 22-i008, 22-i010, 22-i012, 22-i018
Die: 22-n104, 22-n108
Burned: 22-n106
Zapped: electro1
Die: 22-n104, 22-n106, 22-n108
CyborgCommando:
Voices:
Select: 23-i000, 23-i002, 23-i004, 23-i006
Move: 23-i008, 23-i010, 23-i012, 23-i016
Attack: 23-i014, 23-i018, 23-i020, 23-i022
Die: 22-n104, 22-n108
Burned: 22-n106
Zapped: electro1
Die: 22-n104, 22-n106, 22-n108
Mutant:
Voices:
@@ -119,6 +125,7 @@ Mutant:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Tratos:
Voices:
@@ -128,6 +135,7 @@ Tratos:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Oxanna:
Voices:
@@ -137,6 +145,7 @@ Oxanna:
Die: dedgirl1, dedgirl2, dedgirl4
Burned: dedgirl3
Zapped: electro1
Explode: expnew10
Slavick:
Voices:
@@ -146,6 +155,7 @@ Slavick:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
Fiend:
Voices:
@@ -155,6 +165,7 @@ Fiend:
Die: fiend1
Burned: fiend1
Zapped: fiend1
Explode: expnew10
Vehicle:
Voices:
@@ -183,6 +194,7 @@ Civilian:
Die: dedman1, dedman3, dedman4, dedman5, dedman6
Burned: dedman2
Zapped: electro1
Explode: expnew10
CivilianFemale: #can be used for female mutant as well
Voices:
@@ -192,6 +204,7 @@ CivilianFemale: #can be used for female mutant as well
Die: dedgirl1, dedgirl2, dedgirl4
Burned: dedgirl3
Zapped: electro1
Explode: expnew10
Scrin:
Voices:

Binary file not shown.

View File

@@ -19,8 +19,9 @@ WEEDGUY:
Voice: Attack
-SpawnActorOnDeath@FLAMEGUY:
WithDeathAnimation@fire:
DeathSequence: die-
DeathTypes:
FireDeath: 5
FireDeath: burning
UMAGON:
Inherits: ^Soldier
@@ -44,7 +45,7 @@ UMAGON:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -100,7 +101,7 @@ MUTANT:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -125,7 +126,7 @@ MWMN:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -150,7 +151,7 @@ MUTANT3:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -172,7 +173,7 @@ TRATOS:
Range: 4c0
-AutoTarget:
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
OXANNA:
Inherits: ^Soldier
@@ -190,7 +191,7 @@ OXANNA:
Range: 4c0
-AutoTarget:
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
SLAV:
Inherits: ^Soldier
@@ -208,10 +209,11 @@ SLAV:
Range: 4c0
-AutoTarget:
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
DOGGIE:
Inherits: ^Infantry
Inherits@1: ^Infantry
Inherits@2: ^RegularInfantryDeath
Tooltip:
Name: Tiberian Fiend
Health:
@@ -241,8 +243,9 @@ DOGGIE:
MaxMoveDelayInTicks: 45
-SpawnActorOnDeath@FLAMEGUY:
WithDeathAnimation@fire:
DeathSequence: die-
DeathTypes:
FireDeath: 5
FireDeath: burning
VISC_SML:
Inherits: ^Visceroid
@@ -282,7 +285,7 @@ VISC_LRG:
CIV1:
Inherits: ^CivilianInfantry
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
Armament:
Weapon: Pistola
AttackFrontal:
@@ -295,7 +298,7 @@ CIV2:
CIV3:
Inherits: ^CivilianInfantry
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
Armament:
Weapon: Pistola
AttackFrontal:

View File

@@ -274,24 +274,6 @@
QuantizeFacingsFromSequence:
Sequence: stand
WithInfantryBody:
WithDeathAnimation@normal:
DeathTypes:
BulletDeath: 1
SmallExplosionDeath: 2
HeadshotDeath: 3
SpawnActorOnDeath@FLAMEGUY:
Actor: FLAMEGUY
DeathType: FireDeath
WithDeathAnimation@explosion:
DeathSequencePalette: effect
DeathPaletteIsPlayerPalette: False
DeathTypes:
ExplosionDeath: 4
WithDeathAnimation@energy:
DeathSequencePalette: ra
DeathPaletteIsPlayerPalette: False
DeathTypes:
EnergyDeath: 6
AutoTarget:
AttackMove:
Voice: Move
@@ -300,27 +282,10 @@
Voice: Move
HiddenUnderFog:
ActorLostNotification:
Crushable:
CrushSound: squish6.aud
PoisonedByTiberium:
SpawnActorOnDeath:
Actor: visc_sml
Probability: 10
OwnerType: InternalName
InternalOwner: Creeps
DeathType: EnergyDeath # TODO: FIX ME! (Tiberium currently uses the wrong damage type!)
RequiresLobbyCreeps: true
Guard:
Voice: Move
Guardable:
DeathSounds@NORMAL:
DeathTypes: BulletDeath, SmallExplosionDeath, ExplosionDeath
DeathSounds@BURNED:
Voice: Burned
DeathTypes: FireDeath
DeathSounds@ZAPPED:
Voice: Zapped
DeathTypes: EnergyDeath
SelfHealing@HOSPITAL:
Step: 5
Delay: 100
@@ -339,8 +304,55 @@
UpgradeTypes: hospitalheal
UpgradeMinEnabledLevel: 1
^RegularInfantryDeath:
WithDeathAnimation@normal:
DeathSequence: die-
DeathTypes:
BulletDeath: twirling
SmallExplosionDeath: flying
WithDeathAnimation@explosion:
DeathSequence: die-
DeathSequencePalette: effect
DeathPaletteIsPlayerPalette: False
DeathTypes:
ExplosionDeath: exploding
WithDeathAnimation@energy:
DeathSequence: die-
DeathSequencePalette: ra
DeathPaletteIsPlayerPalette: False
DeathTypes:
EnergyDeath: melting
WithDeathAnimation:
CrushedSequence: die-crushed
CrushedSequencePalette: player
CrushedPaletteIsPlayerPalette: true
DeathSounds@NORMAL:
DeathTypes: BulletDeath, SmallExplosionDeath, ExplosionDeath
DeathSounds@EXPLOSION:
Voice: Explode
DeathTypes: ExplosionDeath
DeathSounds@BURNED:
Voice: Burned
DeathTypes: FireDeath
DeathSounds@ZAPPED:
Voice: Zapped
DeathTypes: EnergyDeath
Crushable:
CrushSound: squish6.aud
SpawnActorOnDeath:
Actor: visc_sml
Probability: 10
OwnerType: InternalName
InternalOwner: Creeps
DeathType: TriggerVisceroid
RequiresLobbyCreeps: true
SpawnActorOnDeath@FLAMEGUY:
Actor: FLAMEGUY
DeathType: FireDeath
^Soldier:
Inherits: ^Infantry
Inherits@1: ^Infantry
Inherits@2: ^RegularInfantryDeath
RevealsShroud:
Range: 4c0
MustBeDestroyed:
@@ -354,42 +366,43 @@
DamageTriggers: TriggerProne
WithInfantryBody:
IdleSequences: idle1,idle2
WithDeathAnimation:
CrushedSequence: die-crushed
CrushedSequencePalette: player
CrushedPaletteIsPlayerPalette: true
^Cyborg:
Inherits@1: ^Infantry
Inherits@2: ^EmpDisableMobile
ExplosionOnDamageTransition:
Weapon: CyborgExplode
DamageState: Critical
TriggerOnlyOnce: true
Explodes:
Weapon: CyborgExplode
EmptyWeapon: CyborgExplode
DeathSounds:
RevealsShroud:
Range: 4c0
MustBeDestroyed:
-Crushable:
PoisonedByTiberium:
Weapon: TiberiumHeal
WithPermanentInjury:
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
IdleSequences: idle1,idle2
UpgradeOnDamage@CRITICAL:
Upgrades: criticalspeed
ValidDamageStates: Critical
GrantPermanently: true
SpeedMultiplier@CRITICAL:
UpgradeTypes: criticalspeed
Modifier: 50
^CivilianInfantry:
Inherits: ^Infantry
Inherits@1: ^Infantry
Inherits@2: ^RegularInfantryDeath
Voiced:
VoiceSet: Civilian
Tooltip:
Name: Civilian
ScaredyCat:
WithDeathAnimation:
CrushedSequence: die-crushed
CrushedSequencePalette: player
CrushedPaletteIsPlayerPalette: true
^Vehicle:
Inherits@1: ^GainsExperience

View File

@@ -20,7 +20,7 @@ E2:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: throw
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -88,7 +88,7 @@ JUMPJET:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
-TakeCover:
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -129,6 +129,6 @@ GHOST:
DetonationDelay: 45
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded

View File

@@ -21,7 +21,7 @@ E3:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
@@ -57,10 +57,6 @@ CYBORG:
VisualBounds: 16,31,0,-10
ProducibleWithLevel:
Prerequisites: barracks.upgraded
-SpawnActorOnDeath@FLAMEGUY:
WithDeathAnimation@explosion:
DeathTypes:
FireDeath: 4
CYC2:
Inherits: ^Cyborg
@@ -96,10 +92,6 @@ CYC2:
VisualBounds: 16,32,-1,-12
ProducibleWithLevel:
Prerequisites: barracks.upgraded
-SpawnActorOnDeath@FLAMEGUY:
WithDeathAnimation@explosion:
DeathTypes:
FireDeath: 4
MHIJACK:
Inherits: ^Soldier
@@ -127,5 +119,3 @@ MHIJACK:
RevealsShroud:
Range: 6c0
-AutoTarget:
WithInfantryBody:
AttackSequence: shoot

View File

@@ -25,7 +25,7 @@ E1:
AttackFrontal:
Voice: Attack
WithInfantryBody:
AttackSequence: shoot
AttackSequence: attack
ProducibleWithLevel:
Prerequisites: barracks.upgraded
RenderSprites:

File diff suppressed because it is too large Load Diff

View File

@@ -23,7 +23,7 @@ LtRail:
Light: 150
Heavy: 110
Concrete: 5
DamageTypes: Prone100Percent, TriggerProne, SmallExplosionDeath
DamageTypes: Prone100Percent, TriggerProne, ExplosionDeath
Warhead@2Dam: SpreadDamage
Range: 0, 32
Falloff: 50, 50 # Only does half damage to friendly units
@@ -37,7 +37,7 @@ LtRail:
Light: 150
Heavy: 110
Concrete: 5
DamageTypes: Prone100Percent, TriggerProne, SmallExplosionDeath
DamageTypes: Prone100Percent, TriggerProne, ExplosionDeath
MechRailgun:
ReloadDelay: 60
@@ -62,7 +62,7 @@ MechRailgun:
Light: 160
Heavy: 100
Concrete: 25
DamageTypes: Prone100Percent, TriggerProne, FireDeath
DamageTypes: Prone100Percent, TriggerProne, ExplosionDeath
SonicZap:
ReloadDelay: 180
@@ -87,7 +87,7 @@ SonicZap:
Versus:
Heavy: 80
Concrete: 60
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath
Warhead@2Dam: SpreadDamage
Range: 0, 32
Falloff: 50, 50
@@ -98,7 +98,7 @@ SonicZap:
Versus:
Heavy: 80
Concrete: 60
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath
CyCannon:
ReloadDelay: 50

View File

@@ -27,6 +27,11 @@ UnitExplodeSmall:
Explosions: medium_brnl
ImpactSounds: expnew13.aud
CyborgExplode:
Warhead@1Eff: CreateEffect
Explosions: medium_bang
ImpactSounds: expnew10.aud
TiberiumExplosion:
Warhead@1Dam: SpreadDamage
Spread: 9

View File

@@ -65,14 +65,14 @@ Tiberium:
Warhead@1Dam: SpreadDamage
Spread: 42
Damage: 2
DamageTypes: EnergyDeath # TODO: FIX ME!
DamageTypes: ExplosionDeath, TriggerVisceroid
Veins:
ReloadDelay: 16
Warhead@Damage: SpreadDamage
Spread: 42
Damage: 5
DamageTypes: EnergyDeath # TODO: FIX ME!
DamageTypes: BulletDeath
Warhead@Effect: CreateEffect
Explosions: veins
ExplosionPalette: player

View File

@@ -274,4 +274,4 @@ Sniper:
Light: 5
Heavy: 5
Concrete: 5
DamageTypes: Prone100Percent, TriggerProne, HeadshotDeath
DamageTypes: Prone100Percent, TriggerProne, BulletDeath