From ab1ce4554df148a4b758af6f783cdb11461b276c Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 23 May 2014 00:00:51 +1200 Subject: [PATCH] Fix star port and repair depot lights. --- OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj | 1 + OpenRA.Mods.D2k/PaletteFromScaledPalette.cs | 72 +++++++++++++++++++++ mods/d2k/rules/structures.yaml | 2 + mods/d2k/rules/world.yaml | 10 +++ mods/d2k/sequences/structures.yaml | 46 +++++++------ 5 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 OpenRA.Mods.D2k/PaletteFromScaledPalette.cs diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index 7218a94d50..bf5daac64e 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -91,6 +91,7 @@ + diff --git a/OpenRA.Mods.D2k/PaletteFromScaledPalette.cs b/OpenRA.Mods.D2k/PaletteFromScaledPalette.cs new file mode 100644 index 0000000000..f5b68db30b --- /dev/null +++ b/OpenRA.Mods.D2k/PaletteFromScaledPalette.cs @@ -0,0 +1,72 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 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. For more information, + * see COPYING. + */ +#endregion + +using System; +using System.Drawing; +using OpenRA.FileSystem; +using OpenRA.Graphics; +using OpenRA.Primitives; +using OpenRA.Traits; + +namespace OpenRA.Mods.D2k +{ + [Desc("Create a palette by applying a scale and offset to the colors in another palette.")] + class PaletteFromScaledPaletteInfo : ITraitInfo + { + [Desc("Internal palette name")] + public readonly string Name = null; + + [Desc("The name of the palette to base off.")] + public readonly string BasePalette = null; + + [Desc("Allow palette modifiers to change the palette.")] + public readonly bool AllowModifiers = true; + + [Desc("Amount to scale the base palette colors by.")] + public readonly float Scale = 1.0f; + + [Desc("Amount to offset the base palette colors by.")] + public readonly int Offset = 0; + + public object Create(ActorInitializer init) { return new PaletteFromScaledPalette(this); } + } + + class PaletteFromScaledPalette : IPalette + { + readonly PaletteFromScaledPaletteInfo info; + public PaletteFromScaledPalette(PaletteFromScaledPaletteInfo info) { this.info = info; } + + public void InitPalette(WorldRenderer wr) + { + var remap = new ScaledPaletteRemap(info.Scale, info.Offset); + wr.AddPalette(info.Name, new Palette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers); + } + } + + class ScaledPaletteRemap : IPaletteRemap + { + readonly float scale; + readonly int offset; + + public ScaledPaletteRemap(float scale, int offset) + { + this.scale = scale; + this.offset = offset; + } + + public Color GetRemappedColor(Color original, int index) + { + return Color.FromArgb(original.A, + (int)Exts.Clamp((int)(scale * original.R + offset), 0, 255), + (int)Exts.Clamp((int)(scale * original.G + offset), 0, 255), + (int)Exts.Clamp((int)(scale * original.B + offset), 0, 255)); + } + } +} diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index fb7645e4e3..747e801cc7 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -381,6 +381,7 @@ CONCRETEB: Produces: Starport ActorType: frigate WithDeliveryOverlay: + Palette: starportlights ProductionBar: PrimaryBuilding: RequiresPower: @@ -580,6 +581,7 @@ WALL: ProvidesCustomPrerequisite: Prerequisite: Repair WithRepairOverlay: + Palette: repairlights ^HIGHTECH: Inherits: ^Building diff --git a/mods/d2k/rules/world.yaml b/mods/d2k/rules/world.yaml index f6f6141b76..92e6dc2920 100644 --- a/mods/d2k/rules/world.yaml +++ b/mods/d2k/rules/world.yaml @@ -66,6 +66,16 @@ World: G: 0 B: 0 A: 180 + PaletteFromScaledPalette@starportlights: + Name: starportlights + BasePalette: d2k + AllowModifiers: false + Offset: -64 + PaletteFromScaledPalette@repairlights: + Name: repairlights + BasePalette: d2k + AllowModifiers: false + Offset: -128 PaletteFromR8@shroud: Name: shroud Filename: DATA.R8 diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 789c145a4d..804cbe90f9 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -219,21 +219,23 @@ repaira: Start: 2571 Offset: -48,48 ZOffset: -1c511 + damaged-idle: DATA + Start: 2572 + Offset: -48,48 + ZOffset: -1c511 active: DATA Start: 4746 Length: 14 Offset: -48,48 ZOffset: -1c511 + BlendMode: Additive damaged-active: DATA Start: 4746 Length: 14 Tick: 60 Offset: -48,48 ZOffset: -1c511 - damaged-idle: DATA - Start: 2572 - Offset: -48,48 - ZOffset: -1c511 + BlendMode: Additive icon: DATA Start: 4096 Offset: -30,-24 @@ -252,21 +254,23 @@ repairh: Start: 2731 Offset: -48,48 ZOffset: -1c511 + damaged-idle: DATA + Start: 2732 + Offset: -48,48 + ZOffset: -1c511 active: DATA Start: 4746 Length: 14 Offset: -48,48 ZOffset: -1c511 + BlendMode: Additive damaged-active: DATA Start: 4746 Length: 14 Tick: 60 Offset: -48,48 ZOffset: -1c511 - damaged-idle: DATA - Start: 2732 - Offset: -48,48 - ZOffset: -1c511 + BlendMode: Additive icon: DATA Start: 4097 Offset: -30,-24 @@ -285,21 +289,23 @@ repairo: Start: 2891 Offset: -48,48 ZOffset: -1c511 + damaged-idle: DATA + Start: 2892 + Offset: -48,48 + ZOffset: -1c511 active: DATA Start: 4746 Length: 14 Offset: -48,48 ZOffset: -1c511 + BlendMode: Additive damaged-active: DATA Start: 4746 Length: 14 Tick: 60 Offset: -48,48 ZOffset: -1c511 - damaged-idle: DATA - Start: 2892 - Offset: -48,48 - ZOffset: -1c511 + BlendMode: Additive icon: DATA Start: 4098 Offset: -30,-24 @@ -318,14 +324,14 @@ starporta: Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 damaged-active: DATA Start: 4723 Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 make: DATA Start: 4347 @@ -820,14 +826,14 @@ starporth: Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 damaged-active: DATA Start: 4723 Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 make: DATA Start: 4347 @@ -1231,14 +1237,14 @@ starporto: Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 damaged-active: DATA Start: 4723 Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 make: DATA Start: 4347 @@ -1624,14 +1630,14 @@ starportc: # TODO: unused Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 damaged-active: DATA Start: 4723 Length: 23 ZOffset: -1c511 Offset: -48,64 - BlendMode: Alpha + BlendMode: Additive Tick: 200 make: DATA Start: 4347