From eb799516f6a2fbe37e5d02e910a75c9a218dec34 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 12 Mar 2014 12:26:59 +0100
Subject: [PATCH] New Sun Paladin tree "Radiance"

---
 game/engines/default/engine/utils.lua         |   7 +
 game/modules/tome/class/interface/Combat.lua  |   2 +-
 .../data/gfx/effects/light_burst_speed.png    | Bin 0 -> 3790 bytes
 .../tome/data/gfx/talents/hurricane_throw.png | Bin 0 -> 4521 bytes
 .../tome/data/gfx/talents/illumination.png    | Bin 0 -> 5238 bytes
 .../tome/data/gfx/talents/light_burst.png     | Bin 0 -> 3879 bytes
 .../tome/data/gfx/talents/radiance.png        | Bin 0 -> 2904 bytes
 .../tome/data/gfx/talents/searing_sight.png   | Bin 0 -> 2410 bytes
 .../tome/data/talents/celestial/crusader.lua  |   2 +-
 .../tome/data/talents/celestial/glyphs.lua    |   2 +-
 .../tome/data/talents/celestial/radiance.lua  | 134 +++++++++---------
 .../tome/data/timed_effects/magical.lua       |  59 ++++++++
 12 files changed, 138 insertions(+), 68 deletions(-)
 create mode 100644 game/modules/tome/data/gfx/effects/light_burst_speed.png
 create mode 100644 game/modules/tome/data/gfx/talents/hurricane_throw.png
 create mode 100644 game/modules/tome/data/gfx/talents/illumination.png
 create mode 100644 game/modules/tome/data/gfx/talents/light_burst.png
 create mode 100644 game/modules/tome/data/gfx/talents/radiance.png
 create mode 100644 game/modules/tome/data/gfx/talents/searing_sight.png

diff --git a/game/engines/default/engine/utils.lua b/game/engines/default/engine/utils.lua
index bdbd691c76..4204465f55 100644
--- a/game/engines/default/engine/utils.lua
+++ b/game/engines/default/engine/utils.lua
@@ -34,6 +34,13 @@ function math.round(v, mult, num)
 	return v >= 0 and math.floor((v + mult/2)/mult) * mult/num or math.ceil((v - mult/2)/mult) * mult/num
 end
 
+function math.scale(i, imin, imax, dmin, dmax)
+	local bi = i - imin
+	local bm = imax - imin
+	local dm = dmax - dmin
+	return bi * dm / bm + dmin
+end
+
 function lpeg.anywhere (p)
 	return lpeg.P{ p + 1 * lpeg.V(1) }
 end
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 3785bc27d2..db94931708 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -400,7 +400,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	elseif self:checkEvasion(target) then
 		evaded = true
 		self:logCombat(target, "#Target# evades #Source#.")
-	elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or rng.chance(3))) then
+	elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or target:attr("blind_fighted") or rng.chance(3))) then
 		local pres = util.bound(target:combatArmorHardiness() / 100, 0, 1)
 		if target.knowTalent and target:hasEffect(target.EFF_DUAL_WEAPON_DEFENSE) then
 			local deflect = math.min(dam, target:callTalent(target.T_DUAL_WEAPON_DEFENSE, "doDeflect"))
diff --git a/game/modules/tome/data/gfx/effects/light_burst_speed.png b/game/modules/tome/data/gfx/effects/light_burst_speed.png
new file mode 100644
index 0000000000000000000000000000000000000000..691ab7f0de6f207874ad056beaff8c04ff31633d
GIT binary patch
literal 3790
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
Ef_?Wo82|tP

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/gfx/talents/hurricane_throw.png b/game/modules/tome/data/gfx/talents/hurricane_throw.png
new file mode 100644
index 0000000000000000000000000000000000000000..a61f6a5de149cc3180dda2e3605deb77eb5b070e
GIT binary patch
literal 4521
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
Hu0mjfKYFf8

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/gfx/talents/illumination.png b/game/modules/tome/data/gfx/talents/illumination.png
new file mode 100644
index 0000000000000000000000000000000000000000..655ea852a57f2d7e98c4751361c785cfc04589ce
GIT binary patch
literal 5238
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

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/gfx/talents/light_burst.png b/game/modules/tome/data/gfx/talents/light_burst.png
new file mode 100644
index 0000000000000000000000000000000000000000..83f53cfbd4d8e8567e6806ab9e4055eaa4ac7dda
GIT binary patch
literal 3879
zcmV+?57_XDP)<h;3K|Lk000e1NJLTq002M$002M;0ssI2B@5<>00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-vk3=0@JINj|h000igNkl<ZXx{Bwc~DeWy8oTN-9T@w
z-3@k&D6)twVnf(m!lF@zh>CHUOibQ;u}m}*tuh)N$xM<7`W$02&qy>eF;8dIsHG%@
zDHM~;;Krb+c}Rc&&5~!tm9>Fx8@S*5<90U<qKL!z$|_G;)RlYAx##z-zwbK$PsWq+
zWIP%Dhgd9rWZx1E`;HvP1q1|$M54zP0AnmNGEyd!J+1(VC^$G+rBXe{0CYN?zrX+E
z3IKqcn^S0L=ws{yPELr3h<J<vh(rhtl_(U7$JK;HB8(XWA0MCLl?!9+5ov%isJ##v
z7&v?q5ru?=NTt$8XF?nh9v(hidnP9*M@L6@c6L4@02~JpA|l4$D<3n)BofI3Zm8Gm
zSFL*C!i5Wu)QJIvguvb1eZV<NrBbigKge$W{{Gvxt*EInR#a3BGXRd`IF7rg1^{1Q
z8aZ<0fNP_oq9P+B2mORbqxtZ|KLiKUzJ2?MXqW+bd3nXg#@<5%1R@Vt1P2EXI3Xh=
z!^Oqr{`)Hwima@x*)!?eZ*l3;r6Gh-XJ=<8C#OLHSS*&six&q31l&UdB&LDW+33-u
zQ&Z(8lj%O2J2^S6UAy+*7mGW4Xz$*`7K>#F0Aw;*YHI4e%-25J+S=URomQ?~*^m8O
zHNXR)hzQ-?&YGH<I!1>9LyA3UzVgZ|t5)g6Kw%-BI(2GjiLAM~nd7*utgI0uM%-s5
z&-1ml*I#-`Hf`FpyEH%mfhZ`5yu7^nx$nGrQ6i%IXkh;Q`R}|FDPz<P+PCkt(P$iU
zCeF*tQz~8d?0Ik8xN-McTwPtQ<gjkte6?EbC_j-100GcyDK<9N&(BY%)2UP{i9`|?
z7Z(#l-5|5sJm8)wDJk#2|BR=UK)75^$BrEvr1~51w`Q|>%a*OVxhwbYf8+Jncb`3b
zcED-%_4S>YH1#RAbm`I!8#c)0^08yb#>dBNwFDv%lpH?$>{+vUmc;^-iLPB^DistW
zvJe}v?3_4p;?}K;e7y)n01h6kx^d&iAi?lnFK*tv$(a9(&uLO-MqarhsjRHLJCI2v
zl0}OqxjG{_++CxYv}#qx+O@IIrD@%40fqrG33HW_rve%ejP=C`PpjT1L<fx;HOXW$
z-MV$FySrNm`8#*6iVhK~3e?^}X6ENjO-&C806=ABr9O6gR4`5ZRX|6_sFISBo}Qk5
z=KkDsDLx)>bzzfZr2Zq}EJl+FVlfj#K+CGG(wg;!xyODv`46L~k4mQ&fHAcjO^%Uf
zEQ*{k;a4p!=B}=;ty|xECPA=028J*8wjMZeVDNNwpLb@n`P#M4w7FqkPL!D9EtSU>
z7Z=~Tb4PfqR;!mTU7DKeF11=bE3K#1zdQBmrzfW-PEfg81!=s4ci#C+K|w)9MaBI2
z&-nQe80!GOIRQ99>rP>Tm^CjnE$!(^dYeZw-0Z~q^?Mo`8va>2T~JW4dv_ZE8L;{_
z&u!b@*J`x@;^N{C9?bgVT0al5)!YGca>DuZ=PN5Kd7eN7o<Q(Xk&r7A5)z^(l2CNE
zchK*D|6eI7Z?F8_<x5rM#!<v*5<@V30#SZGm6VhWLp{*b)03T@T~Z4WiHR1^p<TQF
zux8Dg0|)*sDT+FQieCiJAP|B_(3&-G$Ye4h69WYBQbJf*7=ZcnXUhbrgzj#-bLY;r
zYu9${*pZvtAmE2}Co&TL`q#r<U0uUd(A3x0Z`pF%L<9mO%!tRP%&~s%sJTV2E<3q?
z{c#I;5I{VL7A-(}db)tf_K(8D$BiF9-kL3lK-AR*A-OJCuwcasA7%q4DD(Oas;Q}Y
zP)hb7lMDt!@c0>FfdCjIVgNCG^y&5N>};`Eyy%4(IcN1fXJVmIYA-KHg&0H(ATyv;
z20S}OD*P9~%{F}g`S-E0u^)e&<|74&fsxJa;VEYt--LpKqWja0Apq#=>Z-55K5PC&
zB}ZTYfdS!9DNQE-l9H0Sb0=#Q_OMCr&X6+evv6EDH46)uDaB;<Yp|=0bop}2pZ}Z@
zs3s7=2w;MK+K7pO2?22PPAVuU7}Sus2h>zhP|(7KVe;PTBx6WSQoAVP)N0X4mAzWE
ziP51^<P1`Z?XL)+ZV8(_d0hC&{__dQ`rvALwR6k_E;0<Qrm;muMUFXMsZ@4#bvb6F
z2LhngYCrj8d5Aah49p>$Nx<|IIBzc|hE+4xlMuidKs=#~v2Frm5P`w=VOI&f-5em>
zR#o3-Z@&4-@#DvX!jr>Bv&eXlOP9=bb#+>;HYq9T)mL9tC=@^b_@g6$!Q04;v1QAa
zO$wnFVE>m`xRAVHGg(Fwo=MPa03b%d&2GAQ5yi!~s;jG;nwof?S1Of$etr`t`p3r7
zXb&c401?1!@rQu{pq!kx`uchRnVBC2A6^lr#imVjFJGRUkif=ja5$gx^743|AA}2u
zL?XvYF)=Yqmbimx|3R!?y@uyE|Mu4oL52yD+dBE@cG|nQ<<Ox+m6etDl;>E)>2$i8
zGiNSY5+3ExMD}GM@YG;oUw-+eSS$_*2#Al5@9H8DqQ@Y53;_D}BG#<=&*tXl{_?#W
zKuAc4UazmIsi~@}G8&EBw|}@~4yu}vo}OJ<Ss54@`1RK-#%pX|YTKs^`08(zm9<k)
zv0N?>2nYxY3espa9LF^`H`mtIR#sLvHZ~HGx3~B5<;!1R?&;z1-P0Aw$*D<78XFxA
zAE!P6{)a1g;e{RL<>dny$bi+*?Afzdub$%U%&Mv=Igxn*8$WBy%*+%fy!`UZ+c!lz
zk<A4eOuz@9v~J$K*=RI+dU|GLWGq}55g7>&0w)*;qjqA3Uyz&IxOeYfgTcUYTt-I5
z2OmuJbs^yt7J?WywXoi>24a8Q(e(D)Z$D@h>gnkzFE1}HZitJUI4c2i5I~;3&f(#y
zDwT$aN=ixs!zP7{vISY-Pdl17Y}nA**_n`#uzmY)U;DLpfH%pA*|`lPI5UiJMPjte
z%z1G}qo%B^thBVWrbd#KHbwykfFr^435*HuWV2F`Oq!E(X28Poo>Az=jT`6B8`2lW
zx=R=c8abjvkUo9Hf*1A4DN|fr;Hv@y189FfGBe*ZnM|{1&)&6b)<i8tcKH$Atz$12
zOrJhN<Pv@E+_|!{GLy-FTB4VDAd4^p-=2q`j%n2N_tVWk|NQgNsDxIlRY|Ffs8MiJ
zA`wAFG%0|l29t;Y@Kr6eapR8m_V%Zre)^-2l14e(e3}TvTZ0wZ2%q(V<b-w0J(e$D
z&KTRhdw1?h*e39Hy3s?(-qo>k<<{CpawQ}tCJvbk#m2@ez}L3Wi~n&V?;`Q!a5w<q
z!Q+cBuKo1WPu||%@4Yv7l#@OA+PDpGJ2Y&oY@El1$J#eXO_?&Kv$Hch`$&_G5egg@
zgnjw6Y15{<y1EM&2%y+lPiJT6ApqbwE-Fe39;Kzo&(DA9rK~M~u^9PY#tTBdnR0S+
z06hQv^OFM6`-->Ep<Zi7pS1vKh*qwg>*C^4R8(}b(E3YZ!twv1b?g4r*49Qu=gw7w
zXxupR_VykE0EI#^dNctjFK_MX>A8LTc4lVg(pBfG+j~vo>{+U*sqysmT)5CzWY>>f
z{B~Ut58@rP(F-p*p7eUX#bU|JD<hkk)!(7bn{(UR+JyF0MMZ^~ppw#nT@tZ9d5Ohh
zB4UgQO$D7!=i@^lG&MD;)oN#FXO82}pFjWZyWG3)>c`3$h%YLt<9R+TEG%@C-L7mu
z$wm_FmgA7`0A8pY-3f__iG_uQ7cX9HrVvjsfYeTG`}SF_t+Se%aPua_Vj_^7C^a<|
zfYE4dZ*TAD=xA+i?e6Zj0+7q)si~>cr^osFl9LlS4oW3Pa0J2|Z;V>DY@I{`u^3`8
z7{L_)Pj`Uo>S_R?p`i-FPI?&;vz?WC6CQH_2!L6aL`HgvM52a<hMR5hR1yF=Xq+qH
z3XHUIasr6GwZ!$!B@5d@KUQJizVd?y54N|rTLBo2#&5p)rmn6oJv}`=T^iyAYd?*c
zuLw}sgeUC903tI(V`HPBD-a-*HNBLS?6;QI)AOvCbdrrbG5Gkv#l@wgqobvTpzM>~
zZ8NQo)Xk{$Dm!xIMs9Ad!C(-28NFPnv$M0fxVX5uc<WZx)TvYF%}Yp{3Lk-;^-^Qr
z#=yW6geHYVBC%Pvqu~2pzTRa*){`-@7$T8~h<bX^yPO=ZZGr2+-%iru!)H#NI@Pby
zG60#oefxG!PR`MzM}vZb($doA%u!Dm2^s4vS_TP0xQ=gaZ3TINv0i!Gs~$(fPt4vj
zaZnK%jj&iOGMP*&?YEpvgv$;1`s>D{M~_xjRSj6&i0@N{m6es1m6h$>=^h^+pOKL~
zeLDGyY+;LsR4^W(rlzI`(VRWrTMs~1lVi3AqTak_FCK{1*1}@3=yW=jinp#LTxIy~
zI~+N3^6c5OcQeoj0$?94EiK269XoO2#F#N-X3Ur|cdp-4f#gcyz#<|d4jnpFQc`lA
z^g6rAGJvOEG22cB2BBqbeP94l4^UWG3Lr2rPy=-Gbm<Dd`s!L<UY^~`AEq}tAj2~l
z3<iT?&mM(dub(p~?b&B3AwlBm>S{0;3Qn`%Oz!Ko)XxFX*Tt<r4Q6Zi+~41S|93ca
z==-9gqSn^dA>3#^^hKCXr;CY+DJ(3!e*Jn<Qqtl7p6NOG-%<4WAOUafY~8qVBV)|X
z&8@w?{Xs<jkVXA~7aSE8747Zq0IpoQ;-*PT2xIJSnK&N0@2kJpAT#shj*bqYjoGhO
z{Fejhb4a2ee)wVZgvp^J!3M}#{bdiJv<<JlcF<rj{F9#^9smGLCexWSrS5+5VF3`^
zgCXntV8eChf3a-Yq5E9j{XYNz(9zNH{r83Sw|#uWRccvptJ(4BzW^Wa>t4HdTUAxn
z@LWs(EB@HS+uJ)iIXNXIa{PFBdO{?E(TLhwoH^5wpPye<RrPS@{^$VM8LnI|m&@gh
pF|*lhG#Vcw$UGTO#*;C~_&*4=3y?%H)i?kE002ovPDHLkV1gvib+rHh

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/gfx/talents/radiance.png b/game/modules/tome/data/gfx/talents/radiance.png
new file mode 100644
index 0000000000000000000000000000000000000000..d36dbf1f7683b263a57e6c6b00ab6360e7c14a16
GIT binary patch
literal 2904
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
CntS;G

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/gfx/talents/searing_sight.png b/game/modules/tome/data/gfx/talents/searing_sight.png
new file mode 100644
index 0000000000000000000000000000000000000000..343cf41f2c41b21cf8dee47e0720d645a286952d
GIT binary patch
literal 2410
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

literal 0
HcmV?d00001

diff --git a/game/modules/tome/data/talents/celestial/crusader.lua b/game/modules/tome/data/talents/celestial/crusader.lua
index 55ddc5b87a..b67d5612fd 100644
--- a/game/modules/tome/data/talents/celestial/crusader.lua
+++ b/game/modules/tome/data/talents/celestial/crusader.lua
@@ -112,7 +112,7 @@ newTalent{
 		return ([[While wielding a two handed weapon, your critical strike chance is increased by %d%%, and your melee criticals instill you with righteous strength, increasing all physical and light damage you deal by %d%%, stacking up to 3 times.
 		In addition, your melee critical strikes leave a lasting lightburn on the target, dealing %0.2f light damage over 5 turns and reducing opponents armour by %d.
 		The damage increase with your Spellpower.]]):
-		format(t.getCrit(self, t), t.getPower(self, t), t.getDamage(self, t), t.getArmor(self, t))
+		format(t.getCrit(self, t), t.getPower(self, t), damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getArmor(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/celestial/glyphs.lua b/game/modules/tome/data/talents/celestial/glyphs.lua
index a02c203c0f..06d1748b3c 100644
--- a/game/modules/tome/data/talents/celestial/glyphs.lua
+++ b/game/modules/tome/data/talents/celestial/glyphs.lua
@@ -165,7 +165,7 @@ newTalent{
 		return ([[You bind light in a glyph on the floor. All targets walking over the glyph will be hit by a blast that knocks them back and does %0.2f physical damage.
 		The glyph is a hidden trap (%d detection and %d disarm power based on your Magic) and lasts for %d turns.
 		The damage will increase with your Spellpower.]]):
-		format(damDesc(self, DamageType.SPELLKNOCKBACK, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration)
+		format(damDesc(self, DamageType.PHYSICAL, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/celestial/radiance.lua b/game/modules/tome/data/talents/celestial/radiance.lua
index caaa3e1b7d..9284ff378a 100644
--- a/game/modules/tome/data/talents/celestial/radiance.lua
+++ b/game/modules/tome/data/talents/celestial/radiance.lua
@@ -17,6 +17,10 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
+function radianceRadius(self)
+	return self:getTalentRadius(self:getTalentFromId(self.T_RADIANCE))
+end
+
 newTalent{
 	name = "Radiance",
 	type = {"celestial/radiance", 1},
@@ -26,7 +30,7 @@ newTalent{
 	radius = function(self, t) return self:combatTalentScale(t, 3, 7) end,
 	getResist = function(self, t) return math.min(100, self:combatTalentScale(t, 20, 90)) end,
 	passives = function(self, t, p)
-		self:talentTemporaryValue(p, "radiance_aura", self:getTalentRadius(t))
+		self:talentTemporaryValue(p, "radiance_aura", radianceRadius(self))
 		self:talentTemporaryValue(p, "blind_immune", t.getResist(self, t) / 100)
 	end,
 	info = function(self, t)
@@ -34,7 +38,7 @@ newTalent{
 		The light protects your eyes, giving %d%% blindness resistance.
 		The light radius overrides your normal light if it is bigger (it does not stack).
 		]]):
-		format(self:getTalentRadius(t), t.getResist(self, t))
+		format(radianceRadius(self), t.getResist(self, t))
 	end,
 }
 
@@ -43,65 +47,62 @@ newTalent{
 	type = {"celestial/radiance", 2},
 	require = divi_req2,
 	points = 5,
-	random_ego = "attack",
-	cooldown = 22,
-	positive = 25,
-	tactical = { DISABLE = 2 },
-	range = 6,
-	reflectable = true,
-	requires_target = true,
-	getReturnDamage = function(self, t) return self:combatLimit(self:getTalentLevel(t)^.5, 100, 15, 1, 40, 2.24) end, -- Limit <100%
-	action = function(self, t)
-		local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-		local _ _, x, y = self:canProject(tg, x, y)
-		game:playSoundNear(self, "talents/spell_generic")
-		local target = game.level.map(x, y, Map.ACTOR)
-		if target then
-			target:setEffect(self.EFF_MARTYRDOM, 10, {src = self, power=t.getReturnDamage(self, t), apply_power=self:combatSpellpower()})
-		else
-			return
-		end
-		return true
+	mode = "passive",
+	getPower = function(self, t) return 15 + self:combatTalentSpellDamage(t, 1, 100) end,
+	getDef = function(self, t) return 5 + self:combatTalentSpellDamage(t, 1, 35) end,
+	callbackOnActBase = function(self, t)
+		local radius = radianceRadius(self)
+		local grids = core.fov.circle_grids(self.x, self.y, radius, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then
+			target:setEffect(target.EFF_ILLUMINATION, 1, {power=t.getPower(self, t), def=t.getDef(self, t)})
+			local ss = self:isTalentActive(self.T_SEARING_SIGHT)
+			if ss then
+				local dist = core.fov.distance(self.x, self.y, target.x, target.y) - 1
+				local coeff = math.scale(radius - dist, 1, radius, 0.1, 1)
+				local realdam = DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, ss.dam * coeff)
+				if ss.daze and rng.percent(ss.daze) and target:canBe("stun") then
+					target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()})
+				end
+
+				if realdam and realdam > 0 and self:hasEffect(self.EFF_LIGHT_BURST) then
+					self:setEffect(self.EFF_LIGHT_BURST_SPEED, 4, {})
+				end
+			end
+		end end end		
 	end,
 	info = function(self, t)
-		local returndamage = t.getReturnDamage(self, t)
-		return ([[Designate a target as a martyr for 10 turns. When the martyr deals damage, it also damages itself for %d%% of the damage dealt.]]):
-		format(returndamage)
+		return ([[The light of your Radiance allows you to see that which would normally be unseen.
+		All actors in your Radiance aura have their invisibility and stealth power reduced by %d.
+		In addition, all actors affected by illumination are easier to see and therefore hit; their defense is reduced by %d and all evasion bonuses from being unseen are negated.
+		The effects increase with your Spellpower.]]):
+		format(t.getPower(self, t), t.getDef(self, t))
 	end,
 }
 
 newTalent{
-	name = "Searing Ray",
+	name = "Searing Sight",
 	type = {"celestial/radiance",3},
 	require = divi_req3,
+	mode = "sustained",
 	points = 5,
-	random_ego = "attack",
-	cooldown = 6,
-	positive = 10,
-	tactical = { ATTACK = 2 },
-	requires_target = true,
-	range = function(self, t) return 2 + math.max(0, self:combatStatScale("str", 0.8, 8)) end,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.9) end,
-	action = function(self, t)
-		local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-		local _ _, x, y = self:canProject(tg, x, y)
-		local target = game.level.map(x, y, Map.ACTOR)
-		if target then
-			self:attackTarget(target, nil, t.getDamage(self, t), true)
-		else
-			return
-		end
-		return true
+	cooldown = 15,
+	range = function(self) return radianceRadius(self) end,
+	tactical = { ATTACKAREA = {LIGHT=1} },
+	sustain_positive = 40,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 1, 90) end,
+	getDaze = function(self, t) return self:combatTalentLimit(t, 35, 5, 20) end,
+	activate = function(self, t)
+		local daze = nil
+		if self:getTalentLevel(t) >= 4 then daze = t.getDaze(self, t) end
+		return {dam=t.getDamage(self, t), daze=daze}
+	end,
+	deactivate = function(self, t, p)
 	end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t)
-		return ([[In a pure display of power, you project a melee attack, doing %d%% damage.
-		The range will increase with your Strength.]]):
-		format(100 * damage)
+		return ([[Your Radiance is so powerful it burns all foes caught in it, doing up to %0.2f light damage (reduced with distance) to all foes caught inside.
+		At level 4 the light is so bright it has %d%% chances to daze them for 3 turns.
+		The damage increase with your Spellpower.]]):
+		format(damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getDaze(self, t))
 	end,
 }
 
@@ -109,27 +110,30 @@ newTalent{
 	name = "Light Burst",
 	type = {"celestial/radiance", 4},
 	require = divi_req4,
-	random_ego = "attack",
 	points = 5,
-	cooldown = 10,
-	positive = 10,
-	tactical = { ATTACK = {LIGHT = 2} },
-	range = 1,
+	cooldown = 25,
+	positive = 15,
+	tactical = { DISABLE = {blind=1} },
+	range = function(self) return radianceRadius(self) end,
 	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.6) end,
+	getDur = function(self, t) return self:combatTalentLimit(t, 9, 2, 6) end,
+	getMax = function(self, t) return math.floor(self:combatTalentScale(t, 2, 8)) end,
 	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t)}
-		local x, y, target = self:getTarget(tg)
-		if not x or not y or not target then return nil end
-		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
-		self:attackTarget(target, DamageType.LIGHT, t.getDamage(self, t), true)
-		self:attackTarget(target, DamageType.LIGHT, t.getDamage(self, t), true)
+		local radius = radianceRadius(self)
+		local grids = core.fov.circle_grids(self.x, self.y, radius, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then
+			if target:canBe("blind") then
+				target:setEffect(target.EFF_BLINDED, 4, {apply_power=self:combatSpellpower()})
+			end
+		end end end
+
+		self:setEffect(self.EFF_LIGHT_BURST, t.getDur(self, t), {max=t.getMax(self, t)})
 		return true
 	end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t)
-		return ([[Concentrate the power of the Sun into two blows; each blow does %d%% of your weapon damage as light damage.]]):
-		format(100 * damage)
+		return ([[Concentrate your Radiance in a blinding flash of light. All foes caught inside will be blinded for 3 turns.
+		In addition for %d turns each time your Searing Sight damages a foe you gain a movement bonus of 10%%, stacking up to %d times.]]):
+		format(t.getDur(self, t), t.getMax(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua
index 2ee4c973d6..8241a06772 100644
--- a/game/modules/tome/data/timed_effects/magical.lua
+++ b/game/modules/tome/data/timed_effects/magical.lua
@@ -2580,3 +2580,62 @@ newEffect{
 		DamageType:get(DamageType.LIGHT).projector(eff.src, self.x, self.y, DamageType.LIGHT, eff.dam)
 	end,
 }
+
+newEffect{
+	name = "ILLUMINATION",
+	desc = "Illumination ", image = "talents/illumination.png",
+	long_desc = function(self, eff) return ("The target glows in the light, reducing its stealth and invisibility power by %d, defense by %d and looses all evasion bonus from being unseen."):format(eff.power, eff.def) end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "detrimental",
+	parameters = { power=20, def=20 },
+	on_gain = function(self, err) return nil, "+Illumination" end,
+	on_lose = function(self, err) return nil, "-Illumination" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "inc_stealth", -eff.power)
+		if self:attr("invisible") then self:effectTemporaryValue(eff, "invisible", -eff.power) end
+		self:effectTemporaryValue(eff, "combat_def", -eff.def)
+		self:effectTemporaryValue(eff, "blind_fighted", 1)
+	end,
+}
+
+newEffect{
+	name = "LIGHT_BURST",
+	desc = "Light Burst ", image = "talents/light_burst.png",
+	long_desc = function(self, eff) return ("The is invigorated when dealing damage with Searing Sight."):format() end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "beneficial",
+	parameters = { max=1 },
+	on_gain = function(self, err) return nil, "+Light Burst" end,
+	on_lose = function(self, err) return nil, "-Light Burst" end,
+}
+
+newEffect{
+	name = "LIGHT_BURST_SPEED",
+	desc = "Light Burst Speed ", image = "effects/light_burst_speed.png",
+	long_desc = function(self, eff) return ("The is invigorated from Searing Sight, increasing movement speed by %d%%."):format(eff.charges * 10) end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "beneficial",
+	parameters = {},
+	charges = function(self, eff) return eff.charges end,
+	on_gain = function(self, err) return nil, "+Light Burst Speed" end,
+	on_lose = function(self, err) return nil, "-Light Burst Speed" end,
+	on_merge = function(self, old_eff, new_eff)
+		local p = self:hasEffect(self.EFF_LIGHT_BURST)
+		if not p then p = {max=1} end
+
+		new_eff.charges = math.min(old_eff.charges + 1, p.max)
+		self:removeTemporaryValue("movement_speed", old_eff.tmpid)
+		new_eff.tmpid = self:addTemporaryValue("movement_speed", new_eff.charges * 0.1)
+		return new_eff
+	end,
+	activate = function(self, eff)
+		eff.charges = 1
+		eff.tmpid = self:addTemporaryValue("movement_speed", eff.charges * 0.1)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("movement_speed", eff.tmpid)
+	end,
+}
-- 
GitLab