From 0a6e21d90861a1a5c70b1fd22d4fe6f4463320c1 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 21 Mar 2015 16:54:01 +0000 Subject: [PATCH] Support tileset-specific art in TS. --- .../Graphics/TilesetSpecificSpriteSequence.cs | 38 ++++++--- mods/ts/mod.yaml | 8 +- mods/ts/sequences/civilian.yaml | 3 +- mods/ts/sequences/misc.yaml | 18 ++++ mods/ts/sequences/structures.yaml | 82 ++++++++++++++++++- mods/ts/sequences/trees.yaml | 29 +++++++ mods/ts/tilesets/temperat.yaml | 2 +- 7 files changed, 165 insertions(+), 15 deletions(-) diff --git a/OpenRA.Mods.Common/Graphics/TilesetSpecificSpriteSequence.cs b/OpenRA.Mods.Common/Graphics/TilesetSpecificSpriteSequence.cs index afe0a9fe70..97814dac92 100644 --- a/OpenRA.Mods.Common/Graphics/TilesetSpecificSpriteSequence.cs +++ b/OpenRA.Mods.Common/Graphics/TilesetSpecificSpriteSequence.cs @@ -20,6 +20,7 @@ namespace OpenRA.Mods.Common.Graphics { public readonly string DefaultSpriteExtension = ".shp"; public readonly Dictionary TilesetExtensions = new Dictionary(); + public readonly Dictionary TilesetCodes = new Dictionary(); public TilesetSpecificSpriteSequenceLoader(ModData modData) : base(modData) @@ -31,6 +32,9 @@ namespace OpenRA.Mods.Common.Graphics if (metadata.TryGetValue("TilesetExtensions", out yaml)) TilesetExtensions = yaml.ToDictionary(kv => kv.Value); + + if (metadata.TryGetValue("TilesetCodes", out yaml)) + TilesetCodes = yaml.ToDictionary(kv => kv.Value); } public override ISpriteSequence CreateSequence(ModData modData, TileSet tileSet, SpriteCache cache, string sequence, string animation, MiniYaml info) @@ -44,26 +48,40 @@ namespace OpenRA.Mods.Common.Graphics public TilesetSpecificSpriteSequence(ModData modData, TileSet tileSet, SpriteCache cache, ISpriteSequenceLoader loader, string sequence, string animation, MiniYaml info) : base(modData, tileSet, cache, loader, sequence, animation, info) { } + string ResolveTilesetId(TileSet tileSet, Dictionary d) + { + var tsId = tileSet.Id; + + MiniYaml yaml; + if (d.TryGetValue("TilesetOverrides", out yaml)) + { + var tsNode = yaml.Nodes.FirstOrDefault(n => n.Key == tsId); + if (tsNode != null) + tsId = tsNode.Value.Value; + } + + return tsId; + } + protected override string GetSpriteSrc(ModData modData, TileSet tileSet, string sequence, string animation, string sprite, Dictionary d) { var loader = (TilesetSpecificSpriteSequenceLoader)Loader; var spriteName = sprite ?? sequence; + + if (LoadField(d, "UseTilesetCode", false)) + { + string code; + if (loader.TilesetCodes.TryGetValue(ResolveTilesetId(tileSet, d), out code)) + spriteName = spriteName.Substring(0, 1) + code + spriteName.Substring(2, spriteName.Length - 2); + } + if (LoadField(d, "AddExtension", true)) { var useTilesetExtension = LoadField(d, "UseTilesetExtension", false); - var tsId = tileSet.Id; - - MiniYaml yaml; - if (d.TryGetValue("TilesetOverrides", out yaml)) - { - var tsNode = yaml.Nodes.FirstOrDefault(n => n.Key == tsId); - if (tsNode != null) - tsId = tsNode.Value.Value; - } string tilesetExtension; - if (useTilesetExtension && loader.TilesetExtensions.TryGetValue(tsId, out tilesetExtension)) + if (useTilesetExtension && loader.TilesetExtensions.TryGetValue(ResolveTilesetId(tileSet, d), out tilesetExtension)) return spriteName + tilesetExtension; return spriteName + loader.DefaultSpriteExtension; diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 08977ce406..8b01465f97 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -220,4 +220,10 @@ SupportsMapsFrom: ts SpriteFormats: ShpTS, TmpTS, ShpTD -SpriteSequenceFormat: DefaultSpriteSequence +SpriteSequenceFormat: TilesetSpecificSpriteSequence + TilesetExtensions: + TEMPERAT: .tem + SNOW: .sno + TilesetCodes: + TEMPERAT: t + SNOW: a diff --git a/mods/ts/sequences/civilian.yaml b/mods/ts/sequences/civilian.yaml index dcd97555ef..c065cebbff 100644 --- a/mods/ts/sequences/civilian.yaml +++ b/mods/ts/sequences/civilian.yaml @@ -679,5 +679,6 @@ ntpyra: ShadowStart: 5 ufo: - idle: ufo + idle: ufo.tem Offset: -24, -60 + AddExtension: false diff --git a/mods/ts/sequences/misc.yaml b/mods/ts/sequences/misc.yaml index e3b3ad4e68..f8e2820a59 100644 --- a/mods/ts/sequences/misc.yaml +++ b/mods/ts/sequences/misc.yaml @@ -171,6 +171,7 @@ crystal4: idle: Length: 15 ShadowStart: 15 + UseTilesetExtension: true 120mm: idle: @@ -216,6 +217,7 @@ moveflsh: resources: Defaults: + UseTilesetExtension: true Length: 12 ShadowStart: 12 Offset: 0, -12 @@ -248,6 +250,7 @@ shroud: smallscorches: Defaults: + UseTilesetExtension: true Offset: 0, -12 sc1: burnt01 sc2: burnt02 @@ -258,6 +261,7 @@ smallscorches: mediumscorches: Defaults: + UseTilesetExtension: true Offset: 0, -18 sc7: burnt07 sc8: burnt08 @@ -266,12 +270,14 @@ mediumscorches: largescorches: Defaults: + UseTilesetExtension: true Offset: 0, -24 sc11: burnt11 sc12: burnt12 smallcraters: Defaults: + UseTilesetExtension: true Offset: 0, -12 cr1: crater01 cr2: crater02 @@ -282,6 +288,7 @@ smallcraters: mediumcraters: Defaults: + UseTilesetExtension: true Offset: 0, -12 cr7: crater07 cr8: crater08 @@ -290,6 +297,7 @@ mediumcraters: largecraters: Defaults: + UseTilesetExtension: true Offset: 0, -24 cr11: crater11 cr12: crater12 @@ -312,39 +320,49 @@ ionbeam: trock01: idle: ShadowStart: 1 + UseTilesetExtension: true trock02: idle: ShadowStart: 1 + UseTilesetExtension: true trock03: idle: ShadowStart: 1 + UseTilesetExtension: true trock04: idle: ShadowStart: 1 + UseTilesetExtension: true trock05: idle: ShadowStart: 1 + UseTilesetExtension: true srock01: idle: ShadowStart: 1 + UseTilesetExtension: true srock02: idle: ShadowStart: 1 + UseTilesetExtension: true srock03: idle: ShadowStart: 1 + UseTilesetExtension: true srock04: idle: ShadowStart: 1 + UseTilesetExtension: true srock05: idle: ShadowStart: 1 + UseTilesetExtension: true diff --git a/mods/ts/sequences/structures.yaml b/mods/ts/sequences/structures.yaml index 27c6697140..19d726353f 100644 --- a/mods/ts/sequences/structures.yaml +++ b/mods/ts/sequences/structures.yaml @@ -1,6 +1,7 @@ gacnst: Defaults: Offset: 0, -36 + UseTilesetCode: true idle: gtcnst ShadowStart: 3 damaged-idle: gtcnst @@ -38,10 +39,12 @@ gacnst: Length: 10 icon: facticon Offset: 0,0 + UseTilesetCode: false gapowr: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: gtpowr ShadowStart: 3 damaged-idle: gtpowr @@ -69,10 +72,12 @@ gapowr: ShadowStart: 20 icon: powricon Offset: 0, 0 + UseTilesetCode: false gapile: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: gtpile ShadowStart: 3 damaged-idle: gtpile @@ -106,10 +111,12 @@ gapile: ShadowStart: 20 icon: brrkicon Offset: 0, 0 + UseTilesetCode: false gaweap: Defaults: Offset: -12, -42 + UseTilesetCode: true idle: gtweap ShadowStart: 3 damaged-idle: gtweap @@ -168,11 +175,13 @@ gaweap: Length: 1 icon: weapicon Offset: 0, 0 + UseTilesetCode: false # TODO: gtweap_1 & gtweap_a & gtweap_b & gtweap_c are unused napowr: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: ntpowr ShadowStart: 3 damaged-idle: ntpowr @@ -194,10 +203,12 @@ napowr: ShadowStart: 19 icon: npwricon Offset: 0, 0 + UseTilesetCode: false naapwr: Defaults: Offset: 12, -30 + UseTilesetCode: true idle: ntapwr ShadowStart: 3 damaged-idle: ntapwr @@ -219,10 +230,12 @@ naapwr: ShadowStart: 19 icon: apwricon Offset: 0, 0 + UseTilesetCode: false nahand: Defaults: Offset: -6, -30 + UseTilesetCode: true idle: nthand ShadowStart: 3 damaged-idle: nthand @@ -251,10 +264,12 @@ nahand: ShadowStart: 15 icon: handicon Offset: 0, 0 + UseTilesetCode: false naweap: Defaults: Offset: -12, -42 + UseTilesetCode: true idle: ntweap ShadowStart: 3 damaged-idle: ntweap @@ -294,11 +309,13 @@ naweap: Start: 2 icon: nwepicon Offset: 0, 0 + UseTilesetCode: false # TODO: ntweap_1 & ntweap_b & ntweap_c are unused naradr: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: ntradr ShadowStart: 3 damaged-idle: ntradr @@ -320,10 +337,12 @@ naradr: ShadowStart: 20 icon: nradicon Offset: 0, 0 + UseTilesetCode: false natech: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: nttech ShadowStart: 3 damaged-idle: nttech @@ -344,10 +363,12 @@ natech: ShadowStart: 18 icon: ntchicon Offset: 0, 0 + UseTilesetCode: false garadr: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: gtradr ShadowStart: 3 damaged-idle: gtradr @@ -371,10 +392,12 @@ garadr: ShadowStart: 20 icon: radricon Offset: 0, 0 + UseTilesetCode: false gatech: Defaults: Offset: -12, -30 + UseTilesetCode: true idle: gttech ShadowStart: 3 damaged-idle: gttech @@ -396,10 +419,12 @@ gatech: ShadowStart: 20 icon: techicon Offset: 0, 0 + UseTilesetCode: false gasand: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtsand Length: 16 ShadowStart: 32 @@ -409,10 +434,12 @@ gasand: ShadowStart: 48 icon: sbagicon Offset: 0, 0 + UseTilesetCode: false gawall: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtwall Length: 16 ShadowStart: 48 @@ -426,10 +453,12 @@ gawall: ShadowStart: 80 icon: wallicon Offset: 0, 0 + UseTilesetCode: false nawall: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ntwall Length: 16 ShadowStart: 48 @@ -443,10 +472,12 @@ nawall: ShadowStart: 80 icon: nwalicon Offset: 0, 0 + UseTilesetCode: false gatick: Defaults: Offset: 0, -13 + UseTilesetCode: true idle: ShadowStart: 3 damaged-idle: @@ -455,6 +486,7 @@ gatick: muzzle: gunfire Length: * Offset: 0, 0 + UseTilesetCode: false make: gatickmk Length: 24 ShadowStart: 24 @@ -462,6 +494,7 @@ gatick: gaicbm: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ShadowStart: 3 damaged-idle: @@ -474,6 +507,7 @@ gaicbm: gadpsa: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ShadowStart: 3 damaged-idle: @@ -486,6 +520,7 @@ gadpsa: gaarty: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ShadowStart: 3 damaged-idle: @@ -494,6 +529,7 @@ gaarty: muzzle: gunfire Length: * Offset: 0, 0 + UseTilesetCode: false make: gaartymk Length: 16 ShadowStart: 16 @@ -501,6 +537,7 @@ gaarty: naobel: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: ntobel ShadowStart: 3 damaged-idle: ntobel @@ -523,10 +560,12 @@ naobel: ShadowStart: 19 icon: obliicon Offset: 0, 0 + UseTilesetCode: false nalasr: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ntlasr ShadowStart: 3 damaged-idle: ntlasr @@ -541,10 +580,12 @@ nalasr: ShadowStart: 21 icon: plticon Offset: 0, 0 + UseTilesetCode: false nasam: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ntsam ShadowStart: 3 damaged-idle: ntsam @@ -562,10 +603,12 @@ nasam: ShadowStart: 8 icon: samicon Offset: 0, 0 + UseTilesetCode: false napuls: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: ntpuls ShadowStart: 3 damaged-idle: ntpuls @@ -582,10 +625,12 @@ napuls: ShadowStart: 20 icon: pulsicon Offset: 0, 0 + UseTilesetCode: false nastlh: Defaults: Offset: -6, -30 + UseTilesetCode: true idle: ntstlh ShadowStart: 3 damaged-idle: ntstlh @@ -607,10 +652,12 @@ nastlh: ShadowStart: 20 icon: clckicon Offset: 0, 0 + UseTilesetCode: false gavulc: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtctwr ShadowStart: 3 damaged-idle: gtctwr @@ -624,20 +671,28 @@ gavulc: Facings: 32 muzzle0: mgun-n Length: * + UseTilesetCode: false muzzle1: mgun-nw Length: * + UseTilesetCode: false muzzle2: mgun-w Length: * + UseTilesetCode: false muzzle3: mgun-sw Length: * + UseTilesetCode: false muzzle4: mgun-s Length: * + UseTilesetCode: false muzzle5: mgun-se Length: * + UseTilesetCode: false muzzle6: mgun-e Length: * + UseTilesetCode: false muzzle7: mgun-ne Length: * + UseTilesetCode: false idle-lights: gtctwr_a Length: 6 Tick: 200 @@ -649,10 +704,12 @@ gavulc: ShadowStart: 11 icon: twr1icon Offset: 0, 0 + UseTilesetCode: false garock: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtctwr ShadowStart: 3 damaged-idle: gtctwr @@ -675,10 +732,12 @@ garock: ShadowStart: 11 icon: twr2icon Offset: 0, 0 + UseTilesetCode: false gacsam: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtctwr ShadowStart: 3 damaged-idle: gtctwr @@ -701,10 +760,12 @@ gacsam: ShadowStart: 11 icon: twr3icon Offset: 0, 0 + UseTilesetCode: false gaspot: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: ShadowStart: 3 damaged-idle: @@ -726,10 +787,12 @@ gaspot: ShadowStart: 14 icon: spoticon Offset: 0, 0 + UseTilesetCode: false gahpad: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: gthpad ShadowStart: 3 ZOffset: -1c511 @@ -771,10 +834,12 @@ gahpad: ZOffset: -1c511 icon: heliicon Offset: 0, 0 + UseTilesetCode: false nahpad: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: nthpad ShadowStart: 3 ZOffset: -1c511 @@ -813,10 +878,12 @@ nahpad: ShadowStart: 20 icon: nhpdicon Offset: 0, 0 + UseTilesetCode: false proc: # TODO: unused narefn_a, narefn_b Defaults: Offset: -12, -42 + UseTilesetCode: true idle: ntrefn ShadowStart: 3 damaged-idle: ntrefn @@ -840,10 +907,12 @@ proc: # TODO: unused narefn_a, narefn_b Start: 1 icon: reficon Offset: 0, 0 + UseTilesetCode: false gasilo: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: gtsilo_a Length: 4 damaged-idle: gtsilo_a @@ -868,15 +937,17 @@ gasilo: Start: 16 Length: 16 Tick: 120 - icon: siloicon - Offset: 0, 0 make: gtsilomk Length: 18 ShadowStart: 20 + icon: siloicon + Offset: 0, 0 + UseTilesetCode: false galite: Defaults: Offset: 0, -12 + UseTilesetCode: true idle: gtlite ShadowStart: 2 damaged-idle: gtlite @@ -887,10 +958,12 @@ galite: # BlendMode: Alpha icon: liteicon Offset: 0, 0 + UseTilesetCode: false gadept: Defaults: Offset: 0, -36 + UseTilesetCode: true idle: gtdept ShadowStart: 3 damaged-idle: gtdept @@ -941,10 +1014,12 @@ gadept: ShadowStart: 10 icon: fixicon Offset: 0, 0 + UseTilesetCode: false namisl: Defaults: Offset: 0, -24 + UseTilesetCode: true idle: ntmisl damaged-idle: ntmisl Start: 1 @@ -970,10 +1045,12 @@ namisl: Tick: 80 icon: msslicon Offset: 0, 0 + UseTilesetCode: false gaplug: Defaults: Offset: 12, -30 + UseTilesetCode: true idle: gaplug ShadowStart: 3 damaged-idle: gaplug @@ -1009,3 +1086,4 @@ gaplug: ShadowStart: 17 icon: plugicon Offset: 0, 0 + UseTilesetCode: false diff --git a/mods/ts/sequences/trees.yaml b/mods/ts/sequences/trees.yaml index ca2eb4c751..b43f9fdf4c 100644 --- a/mods/ts/sequences/trees.yaml +++ b/mods/ts/sequences/trees.yaml @@ -1,5 +1,6 @@ tibtre01: Defaults: + UseTilesetExtension: true Offset: 0, -12 idle: ShadowStart: 11 @@ -11,6 +12,7 @@ tibtre01: tibtre02: Defaults: + UseTilesetExtension: true Offset: 0, -12 idle: ShadowStart: 11 @@ -22,6 +24,7 @@ tibtre02: tibtre03: Defaults: + UseTilesetExtension: true Offset: 0, -12 idle: ShadowStart: 11 @@ -45,103 +48,129 @@ bigblue: tree01: idle: ShadowStart: 1 + UseTilesetExtension: true tree02: idle: ShadowStart: 1 + UseTilesetExtension: true tree03: idle: ShadowStart: 1 + UseTilesetExtension: true tree04: idle: ShadowStart: 1 + UseTilesetExtension: true tree05: idle: ShadowStart: 1 + UseTilesetExtension: true tree06: idle: ShadowStart: 1 + UseTilesetExtension: true tree07: idle: ShadowStart: 1 + UseTilesetExtension: true tree08: idle: ShadowStart: 1 + UseTilesetExtension: true tree09: idle: ShadowStart: 1 + UseTilesetExtension: true tree10: idle: ShadowStart: 1 + UseTilesetExtension: true tree11: idle: ShadowStart: 1 + UseTilesetExtension: true tree12: idle: ShadowStart: 1 + UseTilesetExtension: true tree13: idle: ShadowStart: 1 + UseTilesetExtension: true tree14: idle: ShadowStart: 1 + UseTilesetExtension: true tree15: idle: ShadowStart: 1 + UseTilesetExtension: true tree16: idle: ShadowStart: 1 + UseTilesetExtension: true tree17: idle: ShadowStart: 1 + UseTilesetExtension: true tree18: idle: ShadowStart: 1 + UseTilesetExtension: true tree19: idle: ShadowStart: 1 + UseTilesetExtension: true tree20: idle: ShadowStart: 1 + UseTilesetExtension: true tree21: idle: ShadowStart: 1 + UseTilesetExtension: true tree22: idle: ShadowStart: 1 + UseTilesetExtension: true tree23: idle: ShadowStart: 1 + UseTilesetExtension: true tree24: idle: ShadowStart: 1 + UseTilesetExtension: true tree25: idle: ShadowStart: 1 + UseTilesetExtension: true veinhole: idle: ShadowStart: 1 + UseTilesetExtension: true diff --git a/mods/ts/tilesets/temperat.yaml b/mods/ts/tilesets/temperat.yaml index 881625ef7a..99d465feed 100644 --- a/mods/ts/tilesets/temperat.yaml +++ b/mods/ts/tilesets/temperat.yaml @@ -1,7 +1,7 @@ General: Name: Temperate Id: TEMPERAT - Extensions: .tem, .shp + Extensions: # Obsolete Palette: isotem.pal MaxGroundHeight: 16 HeightDebugColors: 128,0,0,0, 128,0,0,68, 128,0,0,136, 128,0,0,204, 128,0,0,255, 128,68,0,204, 128,136,0,136, 128,204,0,68, 128,255,17,0, 128,255,85,0, 128,255,153,0, 128,255,221,0, 128,221,255,0, 128,153,255,0, 128,85,255,0, 128,17,255,0