Skip to content

Commit

Permalink
fix reflector crash
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickwieth committed Dec 17, 2022
1 parent ac538da commit bdf088f
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 118 deletions.
64 changes: 37 additions & 27 deletions OpenRA.Mods.CA/Widgets/Logic/Ingame/ProductionTooltipLogicCA.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,38 +141,48 @@ public ProductionTooltipLogicCA(Widget widget, TooltipContainerWidget tooltipCon
if(warheads.Count > 0)
{
var dmgWarhead = warheads.OfType<DamageWarhead>().FirstOrDefault();
if (dmgWarhead != null && dmgWarhead.Versus.Count() >= 6)
if (dmgWarhead != null)
{
versusLabel.Text += "\\nEffective versus:";
versusNoneLabel.Text += "Infantry: ";
versusNoneLabel.TextColor = Color.LightSalmon;
effectVersusNoneLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["None"], 70);
effectVersusNoneLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["None"], 70);
versusLightLabel.Text += "Light: ";
versusLightLabel.TextColor = Color.Khaki;
effectVersusLightLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Light"], 70);
effectVersusLightLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Light"], 70);
versusHeavyLabel.Text += "Heavy: ";
versusHeavyLabel.TextColor = Color.Crimson;
effectVersusHeavyLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Heavy"], 60);
effectVersusHeavyLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Heavy"], 60);
versusReflectorLabel.Text += "Reflector: ";
versusReflectorLabel.TextColor = Color.SkyBlue;
effectVersusReflectorLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Reflector"], 70);
effectVersusReflectorLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Reflector"], 70);
versusWoodLabel.Text += "Building: ";
versusWoodLabel.TextColor = Color.IndianRed;
effectVersusWoodLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Wood"], 60);
effectVersusWoodLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Wood"], 60);
versusConcreteLabel.Text += "Fortified: ";
versusConcreteLabel.TextColor = Color.Gray;
effectVersusConcreteLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Concrete"], 40);
effectVersusConcreteLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Concrete"], 40);

if (dmgWarhead.Versus.ContainsKey("None")) {
versusNoneLabel.Text += "Infantry: ";
versusNoneLabel.TextColor = Color.LightSalmon;
effectVersusNoneLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["None"], 70);
effectVersusNoneLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["None"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Light")) {
versusLightLabel.Text += "Light: ";
versusLightLabel.TextColor = Color.Khaki;
effectVersusLightLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Light"], 70);
effectVersusLightLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Light"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Heavy")) {
versusHeavyLabel.Text += "Heavy: ";
versusHeavyLabel.TextColor = Color.Crimson;
effectVersusHeavyLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Heavy"], 60);
effectVersusHeavyLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Heavy"], 60);
}
if ( dmgWarhead.Versus.ContainsKey("Reflector")) {
versusReflectorLabel.Text += "Reflector: ";
versusReflectorLabel.TextColor = Color.SkyBlue;
effectVersusReflectorLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Reflector"], 70);
effectVersusReflectorLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Reflector"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Wood")) {
versusWoodLabel.Text += "Building: ";
versusWoodLabel.TextColor = Color.IndianRed;
effectVersusWoodLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Wood"], 60);
effectVersusWoodLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Wood"], 60);
}
if (dmgWarhead.Versus.ContainsKey("Concrete")) {
versusConcreteLabel.Text += "Fortified: ";
versusConcreteLabel.TextColor = Color.Gray;
effectVersusConcreteLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Concrete"], 40);
effectVersusConcreteLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Concrete"], 40);
}
versusLabel.Text = versusLabel.Text.Replace("\\n", "\n");
}
}

}
}
}
Expand Down
63 changes: 37 additions & 26 deletions OpenRA.Mods.CA/Widgets/Logic/Ingame/SelectionTooltipLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,34 +142,45 @@ void UpdateTooltip()
if (weapon != null)
{
var dmgWarhead = weapon.Warheads.OfType<DamageWarhead>().FirstOrDefault();
if (dmgWarhead != null && dmgWarhead.Versus.Count() >= 6)
if (dmgWarhead != null)
{
versusLabel.Text += "\\nEffective versus:";
versusNoneLabel.Text += "Infantry: ";
versusNoneLabel.TextColor = Color.LightSalmon;
effectVersusNoneLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["None"], 70);
effectVersusNoneLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["None"], 70);
versusLightLabel.Text += "Light: ";
versusLightLabel.TextColor = Color.Khaki;
effectVersusLightLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Light"], 70);
effectVersusLightLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Light"], 70);
versusHeavyLabel.Text += "Heavy: ";
versusHeavyLabel.TextColor = Color.Crimson;
effectVersusHeavyLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Heavy"], 60);
effectVersusHeavyLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Heavy"], 60);
versusReflectorLabel.Text += "Reflector: ";
versusReflectorLabel.TextColor = Color.SkyBlue;
effectVersusReflectorLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Reflector"], 70);
effectVersusReflectorLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Reflector"], 70);
versusWoodLabel.Text += "Building: ";
versusWoodLabel.TextColor = Color.IndianRed;
effectVersusWoodLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Wood"], 60);
effectVersusWoodLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Wood"], 60);
versusConcreteLabel.Text += "Fortified: ";
versusConcreteLabel.TextColor = Color.Gray;
effectVersusConcreteLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Concrete"], 40);
effectVersusConcreteLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Concrete"], 40);

if (dmgWarhead.Versus.ContainsKey("None")) {
versusNoneLabel.Text += "Infantry: ";
versusNoneLabel.TextColor = Color.LightSalmon;
effectVersusNoneLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["None"], 70);
effectVersusNoneLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["None"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Light")) {
versusLightLabel.Text += "Light: ";
versusLightLabel.TextColor = Color.Khaki;
effectVersusLightLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Light"], 70);
effectVersusLightLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Light"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Heavy")) {
versusHeavyLabel.Text += "Heavy: ";
versusHeavyLabel.TextColor = Color.Crimson;
effectVersusHeavyLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Heavy"], 60);
effectVersusHeavyLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Heavy"], 60);
}
if ( dmgWarhead.Versus.ContainsKey("Reflector")) {
versusReflectorLabel.Text += "Reflector: ";
versusReflectorLabel.TextColor = Color.SkyBlue;
effectVersusReflectorLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Reflector"], 70);
effectVersusReflectorLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Reflector"], 70);
}
if (dmgWarhead.Versus.ContainsKey("Wood")) {
versusWoodLabel.Text += "Building: ";
versusWoodLabel.TextColor = Color.IndianRed;
effectVersusWoodLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Wood"], 60);
effectVersusWoodLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Wood"], 60);
}
if (dmgWarhead.Versus.ContainsKey("Concrete")) {
versusConcreteLabel.Text += "Fortified: ";
versusConcreteLabel.TextColor = Color.Gray;
effectVersusConcreteLabel.Text += GetEffectiveLabelText(dmgWarhead.Versus["Concrete"], 40);
effectVersusConcreteLabel.TextColor = GetEffectiveLabelColor(dmgWarhead.Versus["Concrete"], 40);
}
versusLabel.Text = versusLabel.Text.Replace("\\n", "\n");
}
}
Expand Down
Binary file added mods/ca/maps/grassyknoll.oramap
Binary file not shown.
13 changes: 2 additions & 11 deletions mods/ca/rules/china/weapons.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1017,6 +1017,7 @@ ChinaMGatt.3:
# Bomber Weapons
#####################################################
GECarpetBomb:
Inherits: ^ShellArtillery
Inherits@Rad: CHFlameRadiation
ReloadDelay: 3
Range: 4c0
Expand All @@ -1029,11 +1030,6 @@ GECarpetBomb:
Warhead@1Dam: SpreadDamage
Spread: 768
Damage: 17500
Versus:
None: 100
Wood: 50
Light: 100
Concrete: 75
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
Warhead@2Smu: LeaveSmudge
SmudgeType: Crater
Expand All @@ -1049,6 +1045,7 @@ GECarpetBomb:
InvalidTargets: Ship, Structure

GECarpetNuke:
Inherits: ^Nuke
ReloadDelay: 3
Range: 4c0
Report: vkiratta.wav
Expand All @@ -1060,12 +1057,6 @@ GECarpetNuke:
Warhead@1Dam: SpreadDamage
Spread: 1c0
Damage: 18000
Versus:
None: 100
Wood: 50
Light: 100
Medium: 100
Concrete: 75
DamageTypes: Prone100Percent, TriggerProne, FireDeath, Incendiary
Warhead@2Eff: CreateEffect
Explosions: nuke_small
Expand Down
14 changes: 5 additions & 9 deletions mods/ca/rules/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3413,15 +3413,6 @@
Condition: unloaded
Color: FF0000

^ReflectorArmor:
WithModifiedPalette@energized:
RequiresCondition: energized
Palette: nrepair
Armor:
Type: Reflector
ExternalCondition@energized:
Condition: energized

^RenderVoxel:
BodyOrientation:
QuantizedFacings: 32
Expand Down Expand Up @@ -3882,8 +3873,13 @@
Type: Heavy

^ReflectorArmor:
WithModifiedPalette@energized:
RequiresCondition: energized
Palette: nrepair
Armor:
Type: Reflector
ExternalCondition@energized:
Condition: energized

^WoodArmor:
Armor:
Expand Down
7 changes: 1 addition & 6 deletions mods/ca/weapons/explosions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ UnitExplodeIraqTank:
-Warhead@Flash:

MiniNuke:
Inherits: ^Nuke
ValidTargets: Ground, Trees, Water, Underwater, Air
Warhead@1Dam_impact: SpreadDamage
Spread: 1c0
Expand Down Expand Up @@ -540,8 +541,6 @@ UnitExplodeToxinTruck:
Falloff: 1000, 368, 135, 50, 18, 7, 0
ValidTargets: Ground, Water
InvalidTargets: Air, Creep
Versus:
Brick: 25
AffectsParent: true
DamageTypes: Prone50Percent, TriggerProne, ToxinDeath
Warhead@3Eff_impact: CreateEffect
Expand All @@ -555,8 +554,6 @@ UnitExplodeToxinTruck:
Delay: 5
ValidTargets: Ground, Water
InvalidTargets: Air, Creep
Versus:
Brick: 25
AffectsParent: true
DamageTypes: Prone50Percent, TriggerProne, ToxinDeath
Warhead@7Dam_areanuke2: SpreadDamage
Expand All @@ -566,8 +563,6 @@ UnitExplodeToxinTruck:
Delay: 10
ValidTargets: Ground, Water
InvalidTargets: Air, Creep
Versus:
Brick: 25
AffectsParent: true
DamageTypes: Prone50Percent, TriggerProne, ToxinDeath
Warhead@11Smu_areanuke3: LeaveSmudge
Expand Down
43 changes: 5 additions & 38 deletions mods/ca/weapons/superweapons.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,7 @@ DeathHand:
AirThreshold: 3c511

DeathHandCluster:
Inherits: ^MissileHE
ReloadDelay: 60
Range: 7c0
ValidTargets: Ground, Ship, Air
Expand All @@ -733,14 +734,6 @@ DeathHandCluster:
Delay: 1
Damage: 3500
Falloff: 1000, 500, 250, 100
Versus:
None: 90
Concrete: 30
Brick: 20
Wood: 30
Light: 60
Reflector: 60
Heavy: 60
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary
Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch
Expand Down Expand Up @@ -779,6 +772,7 @@ WeatherStormInit:
ValidTargets: Ground, Air, Water

WeatherCloudDirectInit:
Inherits: ^EnergyLight
Projectile: InstantHit
ReloadDelay: 140
ValidTargets: Air
Expand All @@ -790,16 +784,12 @@ WeatherCloudDirectInit:
ValidTargets: Air
Delay: 28
DamageTypes: TriggerProne, ElectritcyDeath
Versus:
Wood: 85
Heavy: 75
Concrete: 30
Brick: 55
Warhead@barrage3: FireFragment
Weapon: WeatherCloud
ValidTargets: Air, Ground, Water

WeatherCloudRandomInit:
Inherits: ^EnergyLight
Projectile: InstantHit
ReloadDelay: 8
Warhead@Dam1: SpreadDamage
Expand All @@ -810,11 +800,6 @@ WeatherCloudRandomInit:
ValidTargets: Air
Delay: 28
DamageTypes: TriggerProne, ElectricityDeath
Versus:
Wood: 85
Heavy: 75
Concrete: 15
Brick: 15
Warhead@barrage3: FireShrapnel
Weapon: WeatherCloud
Amount: 2
Expand All @@ -838,6 +823,7 @@ WeatherCloud:
ValidTargets: Ground, Air, Water

WeatherBolt:
Inherits: ^EnergyLight
Projectile: InstantHit
Range: 512
ValidTargets: Ground, Water, Air
Expand All @@ -848,12 +834,6 @@ WeatherBolt:
AffectsParent: true
ValidTargets: Ground, Air, Water
DamageTypes: TriggerProne, ElectricityDeath
Versus:
Wood: 80
Heavy: 55
Concrete: 35
Reflector: 20
Brick: 55
Warhead@4: CreateEffect
Explosions: weatherbolt1, weatherbolt2, weatherbolt3, weatherbolt1f, weatherbolt2f, weatherbolt3f
ImpactSounds: sweastra.aud, sweastrb.aud, sweastrc.aud, sweastrd.aud
Expand Down Expand Up @@ -897,6 +877,7 @@ GpsScramble:
Explosions: stealth

FirestormBarrage:
Inherits: ^MissileHE
ReloadDelay: 100
Range: 300c0
Burst: 3
Expand All @@ -920,21 +901,7 @@ FirestormBarrage:
Warhead@1Dam: SpreadDamage
Spread: 1c0
Damage: 30000
Versus:
None: 70
Wood: 40
Light: 100
Heavy: 80
Concrete: 80
Brick: 5
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary
Warhead@1Dam_cyborg: SpreadDamage
Spread: 1c0
Damage: 12000
ValidTargets: Cyborg
Versus:
Heavy: 0
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
Warhead@2Eff: CreateEffect
Explosions: b2bexp, b2bexp2
ExplosionPalette: tseffect
Expand Down
13 changes: 12 additions & 1 deletion mods/ca/weapons/weapontypes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@
Spread: 341
Falloff: 100, 50, 25, 0
Versus:
None: 50
None: 60
Light: 90
Reflector: 50
Heavy: 70
Expand Down Expand Up @@ -818,6 +818,17 @@
MaxLevel: 750
LayerName: toxin

^Nuke:
Warhead@1Dam: SpreadDamage
Versus:
None: 100
Light: 100
Reflector: 100
Heavy: 100
Wood: 100
Concrete: 100
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary

^EnergyPrototype:
Inherits: ^AllWeapons
Warhead@energy: GrantExternalCondition
Expand Down

0 comments on commit bdf088f

Please # to comment.