From e6f53c639a11490b6525635fafa890e6c67088f6 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Thu, 25 Jul 2013 20:29:13 +0200
Subject: [PATCH] Wards are now correctly colored by damage type

still not done ..
---
 game/engines/default/engine/DamageType.lua    |  11 +++++
 game/modules/tome/data/gfx/particles/ward.lua |   6 +--
 .../data/gfx/particles_images/shieldimg.png   | Bin 0 -> 2722 bytes
 game/modules/tome/dialogs/Birther.lua         |  38 +++++++++++-------
 4 files changed, 38 insertions(+), 17 deletions(-)
 create mode 100644 game/modules/tome/data/gfx/particles_images/shieldimg.png

diff --git a/game/engines/default/engine/DamageType.lua b/game/engines/default/engine/DamageType.lua
index c6d8e0f36b..8244475d15 100644
--- a/game/engines/default/engine/DamageType.lua
+++ b/game/engines/default/engine/DamageType.lua
@@ -51,6 +51,17 @@ function _M:newDamageType(t)
 	t.type = t.type:upper()
 	t.projector = t.projector or self.defaultProjector
 
+	if not t.color and type(t.text_color) == "string" then
+		local ts = t.text_color:toTString()
+		if type(ts[2]) == "table" and ts[2][1] == "color" then
+			if type(ts[2][2]) == "string" then
+				t.color = colors[ts[2][2]]
+			elseif type(ts[2][2]) == "string" then
+				t.color = {r=ts[2][2], g=ts[2][3], b=ts[2][4]}
+			end
+		end
+	end
+
 	table.insert(self.dam_def, t)
 	self[t.type] = #self.dam_def
 end
diff --git a/game/modules/tome/data/gfx/particles/ward.lua b/game/modules/tome/data/gfx/particles/ward.lua
index 570619f30f..f26932e998 100644
--- a/game/modules/tome/data/gfx/particles/ward.lua
+++ b/game/modules/tome/data/gfx/particles/ward.lua
@@ -34,7 +34,7 @@ return { generator = function()
 	local da = math.rad(rng.range(0, 360))
 	return {
 		life = core.particles.ETERNAL,
-		size = rng.range(3,8), sizev = 0, sizea = 0,
+		size = rng.range(9,12), sizev = 0, sizea = 0,
 
 		x = r * math.cos(a) + dr * math.cos(da), xv = 0, xa = 0,
 		y = r * math.sin(a) + dr * math.cos(da), yv = 0, ya = 0,
@@ -44,10 +44,10 @@ return { generator = function()
 		r = color.r/255,   rv = 0, ra = 0,
 		g = color.g/255,   gv = 0, ga = 0,
 		b = color.b/255,   gv = 0, ga = 0,
-		a = rng.range(230, 225)/255,   av = 0, aa = 0,
+		a = rng.range(130, 165)/255,   av = 0, aa = 0,
 	}
 end, },
 function(self)
 	if first then self.ps:emit(10) first = false end
 end,
-10
+10, "particles_images/shieldimg"
diff --git a/game/modules/tome/data/gfx/particles_images/shieldimg.png b/game/modules/tome/data/gfx/particles_images/shieldimg.png
new file mode 100644
index 0000000000000000000000000000000000000000..56049ab03095f20d860ba2eb8d05611c5bf71ee2
GIT binary patch
literal 2722
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

literal 0
HcmV?d00001

diff --git a/game/modules/tome/dialogs/Birther.lua b/game/modules/tome/dialogs/Birther.lua
index 5cca8e2cc5..bc9155dec4 100644
--- a/game/modules/tome/dialogs/Birther.lua
+++ b/game/modules/tome/dialogs/Birther.lua
@@ -247,6 +247,7 @@ function _M:atEnd(v)
 				self:setTile(self.has_custom_tile.f, self.has_custom_tile.w, self.has_custom_tile.h, true)
 				self.actor.has_custom_tile = self.has_custom_tile.f
 			end
+			self:resetAttachementSpots()
 			-- Prevent the game from auto-assigning talents if necessary.
 			if (not config.settings.tome.autoassign_talents_on_birth) and not game.state.birth.always_learn_birth_talents then
 				for _, d in pairs(self.descriptors) do
@@ -1031,6 +1032,28 @@ function _M:fakeEquip(v)
 	end
 end
 
+function _M:resetAttachementSpots()
+	self.actor.attachement_spots = nil
+	if self.has_custom_tile then return end
+
+	local dbr = self.birth_descriptor_def.race[self.descriptors_by_type.race or "Human"]
+	local dr = self.birth_descriptor_def.subrace[self.descriptors_by_type.subrace or "Cornac"]
+	local ds = self.birth_descriptor_def.sex[self.descriptors_by_type.sex or "Female"]
+
+	local moddable_attachement_spots = dr.moddable_attachement_spots or dbr.moddable_attachement_spots
+	if moddable_attachement_spots then
+		local base = moddable_attachement_spots.base
+		local b = moddable_attachement_spots.all
+		if not b then b = self.actor.female and moddable_attachement_spots.female or moddable_attachement_spots.male end
+		local t = {}
+		self.actor.attachement_spots = t
+		for kind, d in pairs(b) do
+			t[kind] = {}
+			for o, p in pairs(d) do t[kind][o] = p / base end
+		end
+	end
+end
+
 function _M:setTile(f, w, h, last)
 	self.actor:removeAllMOs()
 	if not f then
@@ -1045,24 +1068,10 @@ function _M:setTile(f, w, h, last)
 			self.actor.moddable_tile = dr.copy.moddable_tile
 			self.actor.moddable_tile_base = dr.copy.moddable_tile_base
 			self.actor.moddable_tile_ornament = dr.copy.moddable_tile_ornament
-			self.actor.attachement_spots = nil
-			local moddable_attachement_spots = dr.moddable_attachement_spots or dbr.moddable_attachement_spots
-			if moddable_attachement_spots then
-				local base = moddable_attachement_spots.base
-				local b = moddable_attachement_spots.all
-				if not b then b = self.actor.female and moddable_attachement_spots.female or moddable_attachement_spots.male end
-				local t = {}
-				self.actor.attachement_spots = t
-				for kind, d in pairs(b) do
-					t[kind] = {}
-					for o, p in pairs(d) do t[kind][o] = p / base end
-				end
-			end
 		end
 	else
 		self.actor.make_tile = nil
 		self.actor.moddable_tile = nil
-		self.actor.attachement_spots = nil
 		if h > w then
 			self.actor.image = "invis.png"
 			self.actor.add_mos = {{image=f, display_h=2, display_y=-1}}
@@ -1072,6 +1081,7 @@ function _M:setTile(f, w, h, last)
 		end
 		self.has_custom_tile = {f=f,w=w,h=h}
 	end
+	self:resetAttachementSpots()
 
 	self:applyCosmeticActor()
 
-- 
GitLab