From be3412ee741cabf46145c7dbd8a2a7fb74456e24 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 24 Jul 2021 23:39:08 +0100 Subject: [PATCH] Fix depth offsets for sprite with non-zero ZRamp. Bibs and other effects that should be drawn at ground level can now simply define ZRamp: 1, Offset: ,,1, avoiding the need to account for the Y offset or internal sprite offsets. --- .../Graphics/DefaultSpriteSequence.cs | 34 +++++--- mods/ts/rules/gdi-structures.yaml | 3 - mods/ts/rules/nod-structures.yaml | 3 - mods/ts/sequences/aircraft.yaml | 4 +- mods/ts/sequences/bridges.yaml | 10 +-- mods/ts/sequences/misc.yaml | 25 ++---- mods/ts/sequences/structures.yaml | 87 +++++++------------ mods/ts/sequences/trees.yaml | 2 +- mods/ts/sequences/vehicles.yaml | 4 +- 9 files changed, 73 insertions(+), 99 deletions(-) diff --git a/OpenRA.Mods.Common/Graphics/DefaultSpriteSequence.cs b/OpenRA.Mods.Common/Graphics/DefaultSpriteSequence.cs index 1926fdc69c..adc5ddcb66 100644 --- a/OpenRA.Mods.Common/Graphics/DefaultSpriteSequence.cs +++ b/OpenRA.Mods.Common/Graphics/DefaultSpriteSequence.cs @@ -288,11 +288,18 @@ namespace OpenRA.Mods.Common.Graphics }; var subSrc = GetSpriteSrc(modData, tileSet, sequence, animation, sub.Key, sd); - var subSprites = cache[subSrc, subGetUsedFrames].Select( - s => s != null ? new Sprite(s.Sheet, - FlipRectangle(s.Bounds, subFlipX, subFlipY), ZRamp, - new float3(subFlipX ? -s.Offset.X : s.Offset.X, subFlipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + subOffset + offset, - s.Channel, blendMode) : null).ToList(); + var subSprites = cache[subSrc, subGetUsedFrames].Select(s => + { + if (s == null) + return null; + + var bounds = FlipRectangle(s.Bounds, subFlipX, subFlipY); + var dx = subOffset.X + offset.X + (subFlipX ? -s.Offset.X : s.Offset.X); + var dy = subOffset.Y + offset.Y + (subFlipY ? -s.Offset.Y : s.Offset.Y); + var dz = subOffset.Z + offset.Z + s.Offset.Z + ZRamp * dy; + + return new Sprite(s.Sheet, bounds, ZRamp, new float3(dx, dy, dz), s.Channel, blendMode); + }).ToList(); var frames = subFrames != null ? subFrames.Skip(subStart).Take(subLength).ToArray() : Exts.MakeArray(subLength, i => subStart + i); combined = combined.Concat(frames.Select(i => subSprites[i])); @@ -306,11 +313,18 @@ namespace OpenRA.Mods.Common.Graphics // Apply offset to each sprite in the sequence // Different sequences may apply different offsets to the same frame var src = GetSpriteSrc(modData, tileSet, sequence, animation, info.Value, d); - sprites = cache[src, getUsedFrames].Select( - s => s != null ? new Sprite(s.Sheet, - FlipRectangle(s.Bounds, flipX, flipY), ZRamp, - new float3(flipX ? -s.Offset.X : s.Offset.X, flipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + offset, - s.Channel, blendMode) : null).ToArray(); + sprites = cache[src, getUsedFrames].Select(s => + { + if (s == null) + return null; + + var bounds = FlipRectangle(s.Bounds, flipX, flipY); + var dx = offset.X + (flipX ? -s.Offset.X : s.Offset.X); + var dy = offset.Y + (flipY ? -s.Offset.Y : s.Offset.Y); + var dz = offset.Z + s.Offset.Z + ZRamp * dy; + + return new Sprite(s.Sheet, bounds, ZRamp, new float3(dx, dy, dz), s.Channel, blendMode); + }).ToArray(); } alpha = LoadField(d, "Alpha", (float[])null); diff --git a/mods/ts/rules/gdi-structures.yaml b/mods/ts/rules/gdi-structures.yaml index 7698128de6..f216a403e6 100644 --- a/mods/ts/rules/gdi-structures.yaml +++ b/mods/ts/rules/gdi-structures.yaml @@ -264,9 +264,6 @@ GAWEAP: WithIdleOverlay@TURBINES: RequiresCondition: !build-incomplete Sequence: idle-turbines - WithIdleOverlay@BIB: - RequiresCondition: !build-incomplete - Sequence: bib WithMakeOverlay@MAKE-BRIGHT: Sequence: make-bright Palette: bright diff --git a/mods/ts/rules/nod-structures.yaml b/mods/ts/rules/nod-structures.yaml index bd08ab3a64..95c6b6fa43 100644 --- a/mods/ts/rules/nod-structures.yaml +++ b/mods/ts/rules/nod-structures.yaml @@ -231,9 +231,6 @@ NAWEAP: RequiresCondition: !build-incomplete && !empdisable Sequence: idle-lights-bright Palette: bright - WithIdleOverlay@BIB: - RequiresCondition: !build-incomplete - Sequence: bib Power: Amount: -30 ProvidesPrerequisite@buildingname: diff --git a/mods/ts/sequences/aircraft.yaml b/mods/ts/sequences/aircraft.yaml index 12c73b9de0..85ad9d45bc 100644 --- a/mods/ts/sequences/aircraft.yaml +++ b/mods/ts/sequences/aircraft.yaml @@ -20,12 +20,12 @@ apache: rotor: harpyrotor Start: 32 Length: 31 - Offset: 0, 0, 16 + Offset: 0, 0, 32 ZRamp: 1 Tick: 25 slow-rotor: harpyrotor Length: 31 - Offset: 0, 0, 16 + Offset: 0, 0, 32 ZRamp: 1 Tick: 50 diff --git a/mods/ts/sequences/bridges.yaml b/mods/ts/sequences/bridges.yaml index ecfb189457..caf81dc634 100644 --- a/mods/ts/sequences/bridges.yaml +++ b/mods/ts/sequences/bridges.yaml @@ -4,7 +4,7 @@ UseTilesetExtension: true Start: 1 ZRamp: 1 - Offset: 0, 0, 0.5 + Offset: 0, 0, 1 lobrdg_a: Inherits: ^bridge @@ -68,7 +68,7 @@ bridge1: # ShadowStart: 18 UseTilesetExtension: true ZRamp: 1 - Offset: 0, -13, 3.5 + Offset: 0, -13, 49 bridge2: idle: bridge @@ -77,7 +77,7 @@ bridge2: # ShadowStart: 27 UseTilesetExtension: true ZRamp: 1 - Offset: 0, -25, 3.5 + Offset: 0, -25, 49 railbrdg1: idle: railbrdg @@ -85,7 +85,7 @@ railbrdg1: # ShadowStart: 18 UseTilesetExtension: true ZRamp: 1 - Offset: 0, -13, 3.5 + Offset: 0, -13, 49 railbrdg2: idle: railbrdg @@ -94,4 +94,4 @@ railbrdg2: # ShadowStart: 27 UseTilesetExtension: true ZRamp: 1 - Offset: 0, -25, 3.5 + Offset: 0, -25, 49 diff --git a/mods/ts/sequences/misc.yaml b/mods/ts/sequences/misc.yaml index 7fa15e745e..d1cea476e6 100644 --- a/mods/ts/sequences/misc.yaml +++ b/mods/ts/sequences/misc.yaml @@ -72,19 +72,19 @@ mpspawn: idle: Length: * ZRamp: 1 - Offset: 0, 0, 24 + Offset: 0, 0, 1 waypoint: idle: Length: * ZRamp: 1 - Offset: 0, 0, 24 + Offset: 0, 0, 1 camera: idle: Length: * ZRamp: 1 - Offset: 0, 0, 24 + Offset: 0, 0, 1 clock: idle: gclock2 @@ -144,32 +144,26 @@ explosion: IgnoreWorldTint: False ionbeam: ionbeam Offset: 0, -60, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False ionbeam2: ionbeam Offset: 0, -180, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False ionbeam3: ionbeam Offset: 0, -300, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False ionbeam4: ionbeam Offset: 0, -420, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False ionbeam5: ionbeam Offset: 0, -540, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False ionbeam6: ionbeam Offset: 0, -660, 60 - ZRamp: 1 Tick: 100 IgnoreWorldTint: False pulse_explosion: pulsefx2 @@ -367,7 +361,6 @@ moveflsh: Length: * Tick: 30 ZOffset: 2047 - Offset: 0, 0, 48 ZRamp: 1 AlphaFade: True @@ -385,7 +378,7 @@ resources: UseTilesetExtension: true Length: 12 ShadowStart: 12 - Offset: 0, -12, 1.5 + Offset: 0, -12, 1 ZRamp: 1 IgnoreWorldTint: true tib01: tib01 @@ -411,8 +404,6 @@ resources: veins: veins Length: * ShadowStart: -1 - # TODO: Reduce z offset again after fixing #12229 - Offset: 0, -12, 5.5 IgnoreWorldTint: false veins: @@ -679,22 +670,22 @@ tracks16: tuntop01: Inherits: ^tuntop idle: - Offset: 24, -49, 36 + Offset: 24, -49, 48 tuntop02: Inherits: ^tuntop idle: - Offset: -24, -49, 36 + Offset: -24, -49, 48 tuntop03: Inherits: ^tuntop idle: - Offset: 24, -49, 24 + Offset: 24, -49, 49 tuntop04: Inherits: ^tuntop idle: - Offset: -24, -49, 24 + Offset: -24, -49, 49 dig: idle: diff --git a/mods/ts/sequences/structures.yaml b/mods/ts/sequences/structures.yaml index 73f61ff4c9..c3a643363b 100644 --- a/mods/ts/sequences/structures.yaml +++ b/mods/ts/sequences/structures.yaml @@ -206,15 +206,15 @@ gaweap: DepthSprite: isodepth.shp idle: gtweap_1 ShadowStart: 2 + Offset: -12, -42, 1 ZOffset: -1024 - Offset: -12, -42, 0 ZRamp: 1 -DepthSprite: damaged-idle: gtweap_1 Start: 1 ShadowStart: 3 ZOffset: -1024 - Offset: -12, -42, 0 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: idle-roof: gtweap_2 @@ -270,26 +270,6 @@ gaweap: Offset: -12, -42, 44 DepthSpriteOffset: -12, 0 IgnoreWorldTint: True - bib: gtweapbb - Length: 1 - ZOffset: -1024 - Offset: -12, -42, 0 - ZRamp: 1 - -DepthSprite: - damaged-bib: gtweapbb - Start: 1 - Length: 1 - ZOffset: -1024 - Offset: -12, -42, 0 - ZRamp: 1 - -DepthSprite: - dead-bib: gtweapbb - Start: 2 - Length: 1 - ZOffset: -1024 - Offset: -12, -42, 0 - ZRamp: 1 - -DepthSprite: emp-overlay: emp_fx01 Length: * Offset: 0, 0, 23 @@ -443,7 +423,7 @@ nahand: naweap: Defaults: - Offset: -12, -42, 30 + Offset: -12, -42, 25 DepthSpriteOffset: 24, 0 UseTilesetCode: true DepthSprite: isodepth.shp @@ -506,23 +486,6 @@ naweap: ShadowStart: 22 Offset: -12, -42, 43 DepthSpriteOffset: -12, 0 - bib: ntweapbb - ZOffset: -1024 - Offset: -12, -42, 1 - ZRamp: 1 - -DepthSprite: - damaged-bib: ntweapbb - Start: 1 - ZOffset: -1024 - Offset: -12, -42, 1 - ZRamp: 1 - -DepthSprite: - dead-bib: ntweapbb - Start: 2 - ZOffset: -1024 - Offset: -12, -42, 1 - ZRamp: 1 - -DepthSprite: emp-overlay: emp_fx01 Length: * Offset: 0, 0, 31 @@ -783,7 +746,7 @@ gawall: gagate_a: Defaults: - Offset: -24, -24, 24 + Offset: -24, -24, 25 DepthSpriteOffset: -24, 0 UseTilesetCode: true DepthSprite: isodepth.shp @@ -795,6 +758,7 @@ gagate_a: ShadowStart: 30 Offset: -24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: damaged-idle: Start: 10 @@ -805,6 +769,7 @@ gagate_a: ShadowStart: 40 Offset: -24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: dead: Start: 20 @@ -825,7 +790,7 @@ gagate_a: gagate_b: Defaults: - Offset: 24, -24, 24 + Offset: 24, -24, 25 DepthSpriteOffset: 24, 0 UseTilesetCode: true DepthSprite: isodepth.shp @@ -836,6 +801,7 @@ gagate_b: Start: 9 ShadowStart: 30 Offset: 24, -24, 1 + ZOffset: -1024 ZRamp: 1 -DepthSprite: damaged-idle: @@ -847,6 +813,7 @@ gagate_b: ShadowStart: 40 Offset: 24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: dead: Start: 20 @@ -867,7 +834,7 @@ gagate_b: nagate_a: Defaults: - Offset: -24, -24, 24 + Offset: -24, -24, 25 DepthSpriteOffset: -24, 0 UseTilesetCode: true Tick: 80 @@ -884,6 +851,7 @@ nagate_a: ShadowStart: 21 Offset: -24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: damaged-idle: Start: 7 @@ -894,6 +862,7 @@ nagate_a: ShadowStart: 28 Offset: -24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: dead: Start: 14 @@ -914,7 +883,7 @@ nagate_a: nagate_b: Defaults: - Offset: 24, -24, 24 + Offset: 24, -24, 25 DepthSpriteOffset: 24, 0 UseTilesetCode: true DepthSprite: isodepth.shp @@ -927,6 +896,7 @@ nagate_b: ShadowStart: 21 Offset: 24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: damaged-idle: Start: 7 @@ -937,6 +907,7 @@ nagate_b: ShadowStart: 28 Offset: 24, -24, 1 ZRamp: 1 + ZOffset: -1024 -DepthSprite: dead: Start: 14 @@ -1023,7 +994,7 @@ napost: nafnce: Defaults: - Offset: 0, -12, 13 + Offset: 0, -12, 19 UseTilesetCode: true DepthSprite: isodepth.shp idle: @@ -1043,20 +1014,24 @@ nafnce: enabled-x: Frames: 3,3,1,1,3,3,1,1,2,2,0,0,2,2,0,0 Length: 16 + DepthSpriteOffset: -12, 0 enabled-x-bright: Frames: 3,3,1,1,3,3,1,1,2,2,0,0,2,2,0,0 Length: 16 + DepthSpriteOffset: -12, 0 IgnoreWorldTint: True enabled-y: Frames: 7,5,7,5,6,4,6,4,7,5,7,5,6,4,6,4 Length: 16 + DepthSpriteOffset: 12, 0 enabled-y-bright: Frames: 7,5,7,5,6,4,6,4,7,5,7,5,6,4,6,4 Length: 16 + DepthSpriteOffset: 12, 0 IgnoreWorldTint: True emp-overlay: emp_fx01 Length: * - Offset: 0, 0, 25 + Offset: 0, 0, 13 UseTilesetCode: false ZOffset: 512 BlendMode: Additive @@ -1492,7 +1467,7 @@ gahpad: nahpad: Defaults: - Offset: 0, -24, 0 + Offset: 0, -24, 1 DepthSpriteOffset: -24, 0 UseTilesetCode: true idle: @@ -1605,19 +1580,19 @@ proc.gdi: bib: ntrefnbb Length: 1 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: damaged-bib: ntrefnbb Start: 1 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: dead-bib: ntrefnbb Start: 2 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: emp-overlay: emp_fx01 @@ -1669,19 +1644,19 @@ proc.nod: bib: ntrefnbb Length: 1 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: damaged-bib: ntrefnbb Start: 1 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: dead-bib: ntrefnbb Start: 2 ZOffset: -1024 - Offset: -12, -42, 5 + Offset: -12, -42, 1 ZRamp: 1 -DepthSprite: emp-overlay: emp_fx01 @@ -1739,19 +1714,19 @@ nawast: ZOffset: -1024 ZRamp: 1 -DepthSprite: - Offset: 0, -36, 3 + Offset: 0, -36, 1 damaged-bib: ntwastbb Start: 1 ZOffset: -1024 ZRamp: 1 -DepthSprite: - Offset: 0, -36, 3 + Offset: 0, -36, 1 dead-bib: ntwastbb Start: 2 ZOffset: -1024 ZRamp: 1 -DepthSprite: - Offset: 0, -36, 3 + Offset: 0, -36, 1 emp-overlay: emp_fx01 Length: * Offset: 0, 0, 25 diff --git a/mods/ts/sequences/trees.yaml b/mods/ts/sequences/trees.yaml index 229e9ae826..fd19b4bd94 100644 --- a/mods/ts/sequences/trees.yaml +++ b/mods/ts/sequences/trees.yaml @@ -192,5 +192,5 @@ veinhole: idle: ShadowStart: 1 UseTilesetExtension: true - Offset: 0, -36 + Offset: 0, -36, 1 ZRamp: 1 diff --git a/mods/ts/sequences/vehicles.yaml b/mods/ts/sequences/vehicles.yaml index 3600356b17..5e9249156d 100644 --- a/mods/ts/sequences/vehicles.yaml +++ b/mods/ts/sequences/vehicles.yaml @@ -22,7 +22,7 @@ harv.gdi: harvest: harvestr Length: * ZRamp: 1 - Offset: 0, 0, 3 + Offset: 0, 0, 1 icon: sidebar-gdi|harvicon harv.nod: @@ -30,7 +30,7 @@ harv.nod: harvest: harvestr Length: * ZRamp: 1 - Offset: 0, 0, 3 + Offset: 0, 0, 1 icon: sidebar-nod|harvicon hvr: