Add static Tiberian Sun low bridges.
This commit is contained in:
committed by
Paul Chote
parent
5482fdb839
commit
4717d3e190
@@ -50,6 +50,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
yield return tile + position;
|
||||
}
|
||||
|
||||
public static IEnumerable<CPos> PathableTiles(string name, BuildingInfo buildingInfo, CPos position)
|
||||
{
|
||||
var footprint = buildingInfo.Footprint.Where(x => !char.IsWhiteSpace(x)).ToArray();
|
||||
foreach (var tile in TilesWhere(name, buildingInfo.Dimensions, footprint, a => a == '_'))
|
||||
yield return tile + position;
|
||||
}
|
||||
|
||||
static IEnumerable<CVec> TilesWhere(string name, CVec dim, char[] footprint, Func<char, bool> cond)
|
||||
{
|
||||
if (footprint.Length != dim.X * dim.Y)
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Activities\VoxelHarvesterDockSequence.cs" />
|
||||
<Compile Include="SpriteLoaders\TmpTSLoader.cs" />
|
||||
<Compile Include="Traits\Buildings\LowBridge.cs" />
|
||||
<Compile Include="Traits\Buildings\TiberianSunRefinery.cs" />
|
||||
<Compile Include="Traits\Render\WithDockingOverlay.cs" />
|
||||
<Compile Include="Traits\Render\WithPermanentInjury.cs" />
|
||||
|
||||
72
OpenRA.Mods.TS/Traits/Buildings/LowBridge.cs
Normal file
72
OpenRA.Mods.TS/Traits/Buildings/LowBridge.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
#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 OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.TS.Traits
|
||||
{
|
||||
[Desc("Bridge actor that can't be passed underneath.")]
|
||||
class LowBridgeInfo : ITraitInfo, Requires<BuildingInfo>
|
||||
{
|
||||
public readonly string TerrainType = "Road";
|
||||
|
||||
public object Create(ActorInitializer init) { return new LowBridge(init.Self, this); }
|
||||
}
|
||||
|
||||
class LowBridge : INotifyAddedToWorld, INotifyRemovedFromWorld
|
||||
{
|
||||
readonly LowBridgeInfo info;
|
||||
readonly IEnumerable<CPos> cells;
|
||||
|
||||
public LowBridge(Actor self, LowBridgeInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
|
||||
var buildingInfo = self.Info.TraitInfo<BuildingInfo>();
|
||||
cells = FootprintUtils.PathableTiles(self.Info.Name, buildingInfo, self.Location);
|
||||
}
|
||||
|
||||
void UpdateTerrain(Actor self, byte terrainIndex)
|
||||
{
|
||||
foreach (var cell in cells)
|
||||
self.World.Map.CustomTerrain[cell] = terrainIndex;
|
||||
|
||||
var domainIndex = self.World.WorldActor.TraitOrDefault<DomainIndex>();
|
||||
if (domainIndex != null)
|
||||
domainIndex.UpdateCells(self.World, cells);
|
||||
}
|
||||
|
||||
void INotifyAddedToWorld.AddedToWorld(Actor self)
|
||||
{
|
||||
var tileSet = self.World.Map.Rules.TileSet;
|
||||
var terrainIndex = tileSet.GetTerrainIndex(info.TerrainType);
|
||||
UpdateTerrain(self, terrainIndex);
|
||||
}
|
||||
|
||||
void KillUnitsOnBridge(Actor self)
|
||||
{
|
||||
foreach (var c in cells)
|
||||
foreach (var a in self.World.ActorMap.GetActorsAt(c))
|
||||
if (a.Info.HasTraitInfo<IPositionableInfo>() && !a.Trait<IPositionable>().CanEnterCell(c))
|
||||
a.Kill(self);
|
||||
}
|
||||
|
||||
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
|
||||
{
|
||||
UpdateTerrain(self, byte.MaxValue);
|
||||
KillUnitsOnBridge(self);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ using OpenRA.FileSystem;
|
||||
using OpenRA.Mods.Common;
|
||||
using OpenRA.Mods.Common.FileFormats;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.TS.UtilityCommands
|
||||
{
|
||||
@@ -72,40 +73,41 @@ namespace OpenRA.Mods.TS.UtilityCommands
|
||||
{ 0x47, "palet02" },
|
||||
{ 0x48, "palet03" },
|
||||
{ 0x49, "palet04" },
|
||||
/*
|
||||
{ 0x4A, "lobrdg01" },
|
||||
{ 0x4B, "lobrdg02" },
|
||||
{ 0x4C, "lobrdg03" },
|
||||
{ 0x4D, "lobrdg04" },
|
||||
{ 0x4E, "lobrdg05" },
|
||||
{ 0x4F, "lobrdg06" },
|
||||
{ 0x50, "lobrdg07" },
|
||||
{ 0x51, "lobrdg08" },
|
||||
{ 0x52, "lobrdg09" },
|
||||
{ 0x53, "lobrdg10" },
|
||||
{ 0x54, "lobrdg11" },
|
||||
{ 0x55, "lobrdg12" },
|
||||
{ 0x56, "lobrdg13" },
|
||||
{ 0x57, "lobrdg14" },
|
||||
{ 0x58, "lobrdg15" },
|
||||
{ 0x59, "lobrdg16" },
|
||||
{ 0x5A, "lobrdg17" },
|
||||
{ 0x5B, "lobrdg18" },
|
||||
{ 0x5C, "lobrdg19" },
|
||||
{ 0x5D, "lobrdg20" },
|
||||
{ 0x5E, "lobrdg21" },
|
||||
{ 0x5F, "lobrdg22" },
|
||||
{ 0x60, "lobrdg23" },
|
||||
{ 0x61, "lobrdg24" },
|
||||
{ 0x62, "lobrdg25" },
|
||||
{ 0x63, "lobrdg26" },
|
||||
{ 0x64, "lobrdg27" },
|
||||
{ 0x65, "lobrdg28" },
|
||||
{ 0x7A, "lobrdg1" },
|
||||
{ 0x7B, "lobrdg2" },
|
||||
{ 0x7C, "lobrdg3" },
|
||||
{ 0x7D, "lobrdg4" },
|
||||
*/
|
||||
|
||||
{ 0x4A, "lobrdg_b" }, // lobrdg01
|
||||
{ 0x4B, "lobrdg_b" }, // lobrdg02
|
||||
{ 0x4C, "lobrdg_b" }, // lobrdg03
|
||||
{ 0x4D, "lobrdg_b" }, // lobrdg04
|
||||
{ 0x4E, "lobrdg_b" }, // lobrdg05
|
||||
{ 0x4F, "lobrdg_b" }, // lobrdg06
|
||||
{ 0x50, "lobrdg_b" }, // lobrdg07
|
||||
{ 0x51, "lobrdg_b" }, // lobrdg08
|
||||
{ 0x52, "lobrdg_b" }, // lobrdg09
|
||||
{ 0x53, "lobrdg_a" }, // lobrdg10
|
||||
{ 0x54, "lobrdg_a" }, // lobrdg11
|
||||
{ 0x55, "lobrdg_a" }, // lobrdg12
|
||||
{ 0x56, "lobrdg_a" }, // lobrdg13
|
||||
{ 0x57, "lobrdg_a" }, // lobrdg14
|
||||
{ 0x58, "lobrdg_a" }, // lobrdg15
|
||||
{ 0x59, "lobrdg_a" }, // lobrdg16
|
||||
{ 0x5A, "lobrdg_a" }, // lobrdg17
|
||||
{ 0x5B, "lobrdg_a" }, // lobrdg18
|
||||
{ 0x5C, "lobrdg_r_se" }, // lobrdg19
|
||||
{ 0x5D, "lobrdg_r_se" }, // lobrdg20
|
||||
{ 0x5E, "lobrdg_r_nw" }, // lobrdg21
|
||||
{ 0x5F, "lobrdg_r_nw" }, // lobrdg22
|
||||
{ 0x60, "lobrdg_r_ne" }, // lobrdg23
|
||||
{ 0x61, "lobrdg_r_ne" }, // lobrdg24
|
||||
{ 0x62, "lobrdg_r_sw" }, // lobrdg25
|
||||
{ 0x63, "lobrdg_r_sw" }, // lobrdg26
|
||||
{ 0x64, "lobrdg_b_d" }, // lobrdg27
|
||||
{ 0x65, "lobrdg_a_d" }, // lobrdg28
|
||||
|
||||
{ 0x7A, "lobrdg_r_se" }, // lobrdg1
|
||||
{ 0x7B, "lobrdg_r_nw" }, // lobrdg2
|
||||
{ 0x7C, "lobrdg_r_ne" }, // lobrdg3
|
||||
{ 0x7D, "lobrdg_r_sw" }, // lobrdg4
|
||||
|
||||
{ 0xA7, "veinhole" },
|
||||
{ 0xA8, "srock01" },
|
||||
{ 0xA9, "srock02" },
|
||||
@@ -157,6 +159,57 @@ namespace OpenRA.Mods.TS.UtilityCommands
|
||||
{ 0x7D, new Size(3, 1) },
|
||||
};
|
||||
|
||||
static readonly Dictionary<byte, DamageState> OverlayToHealth = new Dictionary<byte, DamageState>()
|
||||
{
|
||||
// 1,3 bridge tiles
|
||||
{ 0x4A, DamageState.Undamaged },
|
||||
{ 0x4B, DamageState.Undamaged },
|
||||
{ 0x4C, DamageState.Undamaged },
|
||||
{ 0x4D, DamageState.Undamaged },
|
||||
|
||||
{ 0x4E, DamageState.Heavy },
|
||||
{ 0x4F, DamageState.Heavy },
|
||||
|
||||
{ 0x50, DamageState.Heavy },
|
||||
|
||||
{ 0x51, DamageState.Critical },
|
||||
{ 0x52, DamageState.Critical },
|
||||
|
||||
// 3,1 bridge tiles
|
||||
{ 0x53, DamageState.Undamaged },
|
||||
{ 0x54, DamageState.Undamaged },
|
||||
{ 0x55, DamageState.Undamaged },
|
||||
{ 0x56, DamageState.Undamaged },
|
||||
|
||||
{ 0x57, DamageState.Heavy },
|
||||
{ 0x58, DamageState.Heavy },
|
||||
|
||||
{ 0x59, DamageState.Heavy },
|
||||
|
||||
{ 0x5A, DamageState.Critical },
|
||||
{ 0x5B, DamageState.Critical },
|
||||
|
||||
// Ramps
|
||||
{ 0x5C, DamageState.Undamaged },
|
||||
{ 0x5D, DamageState.Heavy },
|
||||
{ 0x5E, DamageState.Undamaged },
|
||||
{ 0x5F, DamageState.Heavy },
|
||||
{ 0x60, DamageState.Undamaged },
|
||||
{ 0x61, DamageState.Heavy },
|
||||
{ 0x62, DamageState.Undamaged },
|
||||
{ 0x63, DamageState.Heavy },
|
||||
|
||||
// Ramp duplicates
|
||||
{ 0x7A, DamageState.Undamaged },
|
||||
{ 0x7B, DamageState.Undamaged },
|
||||
{ 0x7C, DamageState.Undamaged },
|
||||
{ 0x7D, DamageState.Undamaged },
|
||||
|
||||
// actually dead, placeholders for resurrection
|
||||
{ 0x64, DamageState.Undamaged },
|
||||
{ 0x65, DamageState.Undamaged },
|
||||
};
|
||||
|
||||
static readonly Dictionary<byte, byte[]> ResourceFromOverlay = new Dictionary<byte, byte[]>()
|
||||
{
|
||||
// "tib" - Regular Tiberium
|
||||
@@ -367,6 +420,21 @@ namespace OpenRA.Mods.TS.UtilityCommands
|
||||
new OwnerInit("Neutral")
|
||||
};
|
||||
|
||||
DamageState damageState;
|
||||
if (OverlayToHealth.TryGetValue(overlayType, out damageState))
|
||||
{
|
||||
var health = 100;
|
||||
if (damageState == DamageState.Critical)
|
||||
health = 25;
|
||||
else if (damageState == DamageState.Heavy)
|
||||
health = 50;
|
||||
else if (damageState == DamageState.Medium)
|
||||
health = 75;
|
||||
|
||||
if (health != 100)
|
||||
ar.Add(new HealthInit(health));
|
||||
}
|
||||
|
||||
map.ActorDefinitions.Add(new MiniYamlNode("Actor" + map.ActorDefinitions.Count, ar.Save()));
|
||||
|
||||
continue;
|
||||
|
||||
@@ -81,6 +81,7 @@ Rules:
|
||||
ts|rules/shared-support.yaml
|
||||
ts|rules/shared-vehicles.yaml
|
||||
ts|rules/trees.yaml
|
||||
ts|rules/bridges.yaml
|
||||
|
||||
Weapons:
|
||||
ts|weapons/bombsandgrenades.yaml
|
||||
@@ -101,6 +102,7 @@ Sequences:
|
||||
ts|sequences/structures.yaml
|
||||
ts|sequences/vehicles.yaml
|
||||
ts|sequences/trees.yaml
|
||||
ts|sequences/bridges.yaml
|
||||
|
||||
VoxelSequences:
|
||||
ts|sequences/voxels.yaml
|
||||
|
||||
47
mods/ts/rules/bridges.yaml
Normal file
47
mods/ts/rules/bridges.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
LOBRDG_A:
|
||||
Inherits: ^LowBridge_A
|
||||
|
||||
LOBRDG_A_D:
|
||||
Inherits: ^LowBridge_A
|
||||
-RenderSprites:
|
||||
RenderSpritesEditorOnly:
|
||||
Palette: terrainalpha
|
||||
EditorOnlyTooltip:
|
||||
Name: Dead Bridge
|
||||
-LowBridge:
|
||||
|
||||
LOBRDG_B:
|
||||
Inherits: ^LowBridge_B
|
||||
|
||||
LOBRDG_B_D:
|
||||
Inherits: ^LowBridge_B
|
||||
-RenderSprites:
|
||||
RenderSpritesEditorOnly:
|
||||
Palette: terrainalpha
|
||||
EditorOnlyTooltip:
|
||||
Name: Dead Bridge
|
||||
-LowBridge:
|
||||
|
||||
LOBRDG_R_SE:
|
||||
Inherits: ^LowBridge_B
|
||||
EditorOnlyTooltip:
|
||||
Name: Bridge Ramp
|
||||
Description: South East
|
||||
|
||||
LOBRDG_R_NW:
|
||||
Inherits: ^LowBridge_B
|
||||
EditorOnlyTooltip:
|
||||
Name: Bridge Ramp
|
||||
Description: North West
|
||||
|
||||
LOBRDG_R_NE:
|
||||
Inherits: ^LowBridge_A
|
||||
EditorOnlyTooltip:
|
||||
Name: Bridge Ramp
|
||||
Description: North East
|
||||
|
||||
LOBRDG_R_SW:
|
||||
Inherits: ^LowBridge_A
|
||||
EditorOnlyTooltip:
|
||||
Name: Bridge Ramp
|
||||
Description: South West
|
||||
@@ -883,6 +883,36 @@
|
||||
LineBuildNode:
|
||||
Connections: 0,-1, 0,1
|
||||
|
||||
^LowBridge:
|
||||
AlwaysVisible:
|
||||
RenderSprites:
|
||||
Palette: terraindecoration
|
||||
WithSpriteBody:
|
||||
AutoSelectionSize:
|
||||
AppearsOnRadar:
|
||||
RadarColorFromTerrain:
|
||||
Terrain: Road
|
||||
BodyOrientation:
|
||||
UseClassicPerspectiveFudge: false
|
||||
QuantizedFacings: 1
|
||||
Tooltip:
|
||||
Name: Bridge
|
||||
Health:
|
||||
|
||||
^LowBridge_A:
|
||||
Inherits: ^LowBridge
|
||||
Building:
|
||||
Footprint: ___
|
||||
Dimensions: 3, 1
|
||||
LowBridge:
|
||||
|
||||
^LowBridge_B:
|
||||
Inherits: ^LowBridge
|
||||
Building:
|
||||
Footprint: _ _ _
|
||||
Dimensions: 1, 3
|
||||
LowBridge:
|
||||
|
||||
^HealsOnTiberium:
|
||||
DamagedByTerrain:
|
||||
Damage: -2
|
||||
|
||||
@@ -109,5 +109,9 @@
|
||||
BaseName: cloak
|
||||
BasePalette: player
|
||||
Alpha: 0.55
|
||||
PaletteFromPaletteWithAlpha@terrainalpha:
|
||||
BasePalette: terraindecoration
|
||||
Name: terrainalpha
|
||||
Alpha: 0.55
|
||||
PlayerHighlightPalette:
|
||||
MenuPaletteEffect:
|
||||
|
||||
70
mods/ts/sequences/bridges.yaml
Normal file
70
mods/ts/sequences/bridges.yaml
Normal file
@@ -0,0 +1,70 @@
|
||||
lobrdg_a:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg10 # lobrdg11, 12, 13
|
||||
damaged-idle: lobrdg16
|
||||
sw: lobrdg14
|
||||
damaged-sw: lobrdg17
|
||||
ne: lobrdg15
|
||||
damaged-ne: lobrdg18
|
||||
|
||||
lobrdg_a_d:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg10 # actually lobrdg28
|
||||
|
||||
lobrdg_b:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg01 # lobrdg02, 03, 04
|
||||
damaged-idle: lobrdg07
|
||||
se: lobrdg06
|
||||
damaged-se: lobrdg09
|
||||
nw: lobrdg05
|
||||
damaged-nw: lobrdg08
|
||||
|
||||
lobrdg_b_d:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg01 # actually lobrdg27
|
||||
|
||||
lobrdg_r_se:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg19
|
||||
damaged-idle: lobrdg20
|
||||
|
||||
lobrdg_r_nw:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg21
|
||||
damaged-idle: lobrdg22
|
||||
|
||||
lobrdg_r_ne:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg23
|
||||
damaged-idle: lobrdg24
|
||||
|
||||
lobrdg_r_sw:
|
||||
Defaults:
|
||||
ZOffset: -1c511
|
||||
UseTilesetExtension: true
|
||||
Start: 1
|
||||
idle: lobrdg25
|
||||
damaged-idle: lobrdg26
|
||||
|
||||
Reference in New Issue
Block a user