From 8c7f77d2c76b170080ce42f41f880c7dcf825cbd Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 9 Dec 2013 23:22:01 +1300 Subject: [PATCH 1/4] Convert SmudgeLayer to sequences. --- OpenRA.Game/Graphics/SequenceProvider.cs | 9 ++++ OpenRA.Mods.RA/World/SmudgeLayer.cs | 61 +++++++++++++++++------- mods/cnc/rules/system.yaml | 6 +-- mods/cnc/sequences/misc.yaml | 32 ++++++++++++- mods/d2k/rules/system.yaml | 6 +-- mods/d2k/sequences/misc.yaml | 12 +++++ mods/ra/rules/system.yaml | 6 +-- mods/ra/sequences/misc.yaml | 32 ++++++++++++- 8 files changed, 133 insertions(+), 31 deletions(-) diff --git a/OpenRA.Game/Graphics/SequenceProvider.cs b/OpenRA.Game/Graphics/SequenceProvider.cs index ea148f316c..02e2fe8cd5 100644 --- a/OpenRA.Game/Graphics/SequenceProvider.cs +++ b/OpenRA.Game/Graphics/SequenceProvider.cs @@ -68,5 +68,14 @@ namespace OpenRA.Graphics return units[unit].ContainsKey(seq); } + + public static IEnumerable Sequences(string unit) + { + if (!units.ContainsKey(unit)) + throw new InvalidOperationException( + "Unit `{0}` does not have all sequences defined.".F(unit)); + + return units[unit].Keys; + } } } diff --git a/OpenRA.Mods.RA/World/SmudgeLayer.cs b/OpenRA.Mods.RA/World/SmudgeLayer.cs index 47ac2709fc..49ef8f9551 100644 --- a/OpenRA.Mods.RA/World/SmudgeLayer.cs +++ b/OpenRA.Mods.RA/World/SmudgeLayer.cs @@ -21,36 +21,61 @@ namespace OpenRA.Mods.RA public class SmudgeLayerInfo : ITraitInfo { public readonly string Type = "Scorch"; - public readonly string[] Types = { "sc1", "sc2", "sc3", "sc4", "sc5", "sc6" }; - public readonly int[] Depths = { 1, 1, 1, 1, 1, 1 }; + public readonly string Sequence = "scorch"; + public readonly int SmokePercentage = 25; public readonly string SmokeType = "smoke_m"; + public object Create(ActorInitializer init) { return new SmudgeLayer(this); } } public class SmudgeLayer : IRenderOverlay, IWorldLoaded, ITickRender { + struct Smudge + { + public string Type; + public int Depth; + public Sprite Sprite; + } + public SmudgeLayerInfo Info; - Dictionary> tiles; - Dictionary> dirty; - Sprite[][] smudgeSprites; + Dictionary tiles; + Dictionary dirty; + Dictionary smudges; World world; public SmudgeLayer(SmudgeLayerInfo info) { this.Info = info; - smudgeSprites = Info.Types.Select(x => Game.modData.SpriteLoader.LoadAllSprites(x)).ToArray(); } public void WorldLoaded(World w, WorldRenderer wr) { world = w; - tiles = new Dictionary>(); - dirty = new Dictionary>(); + tiles = new Dictionary(); + dirty = new Dictionary(); + smudges = new Dictionary(); + + var types = SequenceProvider.Sequences(Info.Sequence); + foreach (var t in types) + { + var seq = SequenceProvider.GetSequence(Info.Sequence, t); + var sprites = Exts.MakeArray(seq.Length, x => seq.GetSprite(x)); + smudges.Add(t, sprites); + } // Add map smudges - foreach (var s in w.Map.Smudges.Value.Where(s => Info.Types.Contains(s.Type))) - tiles.Add((CPos)s.Location, new TileReference((byte)(Array.IndexOf(Info.Types, s.Type) + 1), (byte)s.Depth)); + foreach (var s in w.Map.Smudges.Value.Where(s => smudges.Keys.Contains(s.Type))) + { + var smudge = new Smudge + { + Type = s.Type, + Depth = s.Depth, + Sprite = smudges[s.Type][s.Depth] + }; + + tiles.Add((CPos)s.Location, smudge); + } } public void AddSmudge(CPos loc) @@ -61,16 +86,19 @@ namespace OpenRA.Mods.RA if (!dirty.ContainsKey(loc) && !tiles.ContainsKey(loc)) { // No smudge; create a new one - var st = (byte)(1 + world.SharedRandom.Next(Info.Types.Length - 1)); - dirty[loc] = new TileReference(st, (byte)0); + var st = smudges.Keys.Random(world.SharedRandom); + dirty[loc] = new Smudge { Type = st, Depth = 0, Sprite = smudges[st][0] }; } else { // Existing smudge; make it deeper var tile = dirty.ContainsKey(loc) ? dirty[loc] : tiles[loc]; - var depth = Info.Depths[tile.Type - 1]; - if (tile.Index < depth - 1) - tile.Index++; + var maxDepth = smudges[tile.Type].Length; + if (tile.Depth < maxDepth - 1) + { + tile.Depth++; + tile.Sprite = smudges[tile.Type][tile.Depth]; + } dirty[loc] = tile; } @@ -105,8 +133,7 @@ namespace OpenRA.Mods.RA if (world.ShroudObscures(kv.Key)) continue; - var tile = smudgeSprites[kv.Value.Type - 1][kv.Value.Index]; - new SpriteRenderable(tile, kv.Key.CenterPosition, + new SpriteRenderable(kv.Value.Sprite, kv.Key.CenterPosition, WVec.Zero, -511, pal, 1f, true).Render(wr); } } diff --git a/mods/cnc/rules/system.yaml b/mods/cnc/rules/system.yaml index ca3a0f8a1a..0f9110f9ac 100644 --- a/mods/cnc/rules/system.yaml +++ b/mods/cnc/rules/system.yaml @@ -313,13 +313,11 @@ World: AllowUnderActors: false SmudgeLayer@SCORCH: Type:Scorch + Sequence: scorches SmokePercentage:50 - Types:sc1,sc2,sc3,sc4,sc5,sc6 - Depths:1,1,1,1,1,1 SmudgeLayer@CRATER: Type:Crater - Types:cr1,cr2,cr3,cr4,cr5,cr6 - Depths:5,5,5,5,5,5 + Sequence: craters PathfinderDebugOverlay: SpawnMapActors: MPStartLocations: diff --git a/mods/cnc/sequences/misc.yaml b/mods/cnc/sequences/misc.yaml index ad893668bd..809742e8d5 100644 --- a/mods/cnc/sequences/misc.yaml +++ b/mods/cnc/sequences/misc.yaml @@ -374,4 +374,34 @@ shroud: Length: 12 typed: shadow Start: 36 - Length: 12 \ No newline at end of file + Length: 12 + +# Note: The order of smudges and craters determines +# the index that is mapped to them in maps +scorches: + sc1: sc1 + Length: * + sc2: sc2 + Length: * + sc3: sc3 + Length: * + sc4: sc4 + Length: * + sc5: sc5 + Length: * + sc6: sc6 + Length: * + +craters: + cr1: cr1 + Length: * + cr2: cr2 + Length: * + cr3: cr3 + Length: * + cr4: cr4 + Length: * + cr5: cr5 + Length: * + cr6: cr6 + Length: * diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 1079401928..a9fc3dd967 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -463,13 +463,11 @@ World: AllowUnderActors: false SmudgeLayer@Rock: Type: RockCrater - Types: rockcrater1, rockcrater2 - Depths: 15, 15 + Sequence: rockcraters SmokePercentage: 0 SmudgeLayer@Sand: Type: SandCrater - Types: sandcrater1, sandcrater2 - Depths: 15, 15 + Sequence: sandcraters SmokePercentage: 0 SpawnMapActors: CreateMPPlayers: diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index 533476230d..91f1b156ca 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -333,3 +333,15 @@ shroud: Length: 14 Offset: -16,-16 BlendMode: Multiply + +rockcraters: + rockcrater1: rockcrater1 + Length: * + rockcrater2: rockcrater2 + Length: * + +sandcraters: + sandcrater1: sandcrater1 + Length: * + sandcrater2: sandcrater2 + Length: * diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index d125c58b59..d45c03dd77 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -655,13 +655,11 @@ World: TerrainType: Gems SmudgeLayer@SCORCH: Type:Scorch + Sequence: scorches SmokePercentage:50 - Types:sc1,sc2,sc3,sc4,sc5,sc6 - Depths:1,1,1,1,1,1 SmudgeLayer@CRATER: Type:Crater - Types:cr1,cr2,cr3,cr4,cr5,cr6 - Depths:5,5,5,5,5,5 + Sequence: craters PathfinderDebugOverlay: SpawnMapActors: CreateMPPlayers: diff --git a/mods/ra/sequences/misc.yaml b/mods/ra/sequences/misc.yaml index 5db38a16db..e1255f9ac6 100644 --- a/mods/ra/sequences/misc.yaml +++ b/mods/ra/sequences/misc.yaml @@ -490,4 +490,34 @@ resources: shroud: shroud: shadow - Length: * \ No newline at end of file + Length: * + +# Note: The order of smudges and craters determines +# the index that is mapped to them in maps +scorches: + sc1: sc1 + Length: * + sc2: sc2 + Length: * + sc3: sc3 + Length: * + sc4: sc4 + Length: * + sc5: sc5 + Length: * + sc6: sc6 + Length: * + +craters: + cr1: cr1 + Length: * + cr2: cr2 + Length: * + cr3: cr3 + Length: * + cr4: cr4 + Length: * + cr5: cr5 + Length: * + cr6: cr6 + Length: * From 3abadd1ec63ea1588e5a14c9c6dad0c693112a12 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 9 Dec 2013 23:28:24 +1300 Subject: [PATCH 2/4] Use the original D2K craters. --- mods/d2k/bits/rockcrater1.shp | Bin 16830 -> 0 bytes mods/d2k/bits/rockcrater2.shp | Bin 16830 -> 0 bytes mods/d2k/bits/sandcrater1.shp | Bin 16830 -> 0 bytes mods/d2k/bits/sandcrater2.shp | Bin 16830 -> 0 bytes mods/d2k/sequences/misc.yaml | 24 ++++++++++++++++-------- 5 files changed, 16 insertions(+), 8 deletions(-) delete mode 100644 mods/d2k/bits/rockcrater1.shp delete mode 100644 mods/d2k/bits/rockcrater2.shp delete mode 100644 mods/d2k/bits/sandcrater1.shp delete mode 100644 mods/d2k/bits/sandcrater2.shp diff --git a/mods/d2k/bits/rockcrater1.shp b/mods/d2k/bits/rockcrater1.shp deleted file mode 100644 index 1a800f2d8b5077e0b75085ccf82db5f8ff93feae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16830 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 diff --git a/mods/d2k/bits/rockcrater2.shp b/mods/d2k/bits/rockcrater2.shp deleted file mode 100644 index ce4cca6e976382c5a92708afb7bc5b95c9d3f6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16830 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 K9pNLh8vX--`N-S= diff --git a/mods/d2k/bits/sandcrater1.shp b/mods/d2k/bits/sandcrater1.shp deleted file mode 100644 index 326dd7d78ab7ae1441c103b37b490dd69ca580bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16830 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 F@P8YfbYB1f diff --git a/mods/d2k/bits/sandcrater2.shp b/mods/d2k/bits/sandcrater2.shp deleted file mode 100644 index b2c6b5c03294a57ef7c1354d4a5afdce8f18213e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16830 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 kJ>>}Zk*i Date: Tue, 10 Dec 2013 00:02:30 +1300 Subject: [PATCH 3/4] Update CHANGELOG. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 6148371f7c..0ca7cafe4d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -143,6 +143,7 @@ NEW: Unified sprite loading allows any sprite type to be used anywhere: shp can now be used for terrain, and tmp for units. Harvestable resource definitions (ResourceTypes) have changed, and now specify their artwork using sequences. Shroud definitions (ShroudRenderer / ShroudPalette) have changed, and now specifies its artwork using sequences. + Crater and smudge definitions (SmudgeLayer) have changed, and now specify their artwork using sequences. 20130915: All mods: From e15637ad7fa43e31198a41162404a371c54604d3 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 10 Dec 2013 00:03:45 +1300 Subject: [PATCH 4/4] Fix typos spelling in changelog. --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 0ca7cafe4d..d394eb0e22 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -73,7 +73,7 @@ NEW: Added cash tick sounds. Disabled the main menu target reticle showing when a window is open. Added a display of the faction logos when the shellmap is disabled. - Visceriods now heal on Tiberium and move faster there. + Viceroids now heal on and move faster on Tiberium. Implemented the original shroud artwork. Dune 2000: Added buildable concrete walls.