From 77d18eecb97531c8367b60b88f367c38836cf760 Mon Sep 17 00:00:00 2001 From: quotefox Date: Thu, 5 May 2022 00:05:46 +0100 Subject: [PATCH] Light bloom --- code/modules/power/apc.dm | 16 ++++++++++++++++ code/modules/power/lighting.dm | 13 +++++++++++++ hyperstation/code/effects/lighting.dm | 17 +++++++++++++++++ hyperstation/icons/effects/lighting.dmi | Bin 0 -> 1006 bytes hyperstation/icons/effects/lightinglarge.dmi | Bin 0 -> 8222 bytes hyperstation/icons/effects/lightingmed.dmi | Bin 0 -> 2180 bytes tgstation.dme | 1 + 7 files changed, 47 insertions(+) create mode 100644 hyperstation/code/effects/lighting.dm create mode 100644 hyperstation/icons/effects/lighting.dmi create mode 100644 hyperstation/icons/effects/lightinglarge.dmi create mode 100644 hyperstation/icons/effects/lightingmed.dmi diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b291a295c..ac9a37eb2 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -104,6 +104,8 @@ var/icon_update_needed = FALSE var/obj/machinery/computer/apc_control/remote_control = null + var/obj/effect/light/lighteffect //light effect + /obj/machinery/power/apc/unlocked locked = FALSE @@ -185,6 +187,8 @@ addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/Destroy() + if(lighteffect) + lighteffect.Del() GLOB.apcs_list -= src if(malfai && operating) @@ -320,6 +324,13 @@ // And now, separately for cleanness, the lighting changing if(update_state & UPSTATE_ALLGOOD) + if(!lighteffect)//make the light + lighteffect = new/obj/effect/light + lighteffect.loc = src.loc + lighteffect.alpha = 50 + lighteffect.pixel_x = pixel_x + lighteffect.pixel_y = pixel_y + switch(charging) if(APC_NOT_CHARGING) light_color = LIGHT_COLOR_RED @@ -328,6 +339,7 @@ if(APC_FULLY_CHARGED) light_color = LIGHT_COLOR_GREEN set_light(lon_range) + lighteffect.color = light_color else if(update_state & UPSTATE_BLUESCREEN) light_color = LIGHT_COLOR_BLUE set_light(lon_range) @@ -336,6 +348,10 @@ icon_update_needed = FALSE +/obj/machinery/power/apc/Move() + if(lighteffect) + lighteffect.loc = src.loc //move the light overlay + /obj/machinery/power/apc/proc/check_updates() var/last_update_state = update_state var/last_update_overlay = update_overlay diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 39072d5b4..0ddd588e7 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -223,6 +223,9 @@ var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode + var/obj/effect/light/lighteffect //light effect + + /obj/machinery/light/broken status = LIGHT_BROKEN icon_state = "tube-broken" @@ -242,6 +245,8 @@ icon_state = "bulb-broken" /obj/machinery/light/Move() + if(lighteffect) + lighteffect.loc = src.loc if(status != LIGHT_BROKEN) break_light_tube(1) return ..() @@ -285,6 +290,8 @@ /obj/machinery/light/Destroy() var/area/A = get_area(src) + if(lighteffect) + lighteffect.Del() if(A) on = FALSE // A.update_lights() @@ -292,6 +299,8 @@ return ..() /obj/machinery/light/update_icon() + if(lighteffect) + lighteffect.Del() cut_overlays() switch(status) // set icon_states if(LIGHT_OK) @@ -301,6 +310,10 @@ else icon_state = "[base_state]" if(on) + lighteffect = new/obj/effect/light/large + lighteffect.loc = src.loc + lighteffect.alpha = CLAMP(light_power*33, 5, 100) + lighteffect.color = light_color var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE) glowybit.alpha = CLAMP(light_power*250, 30, 200) add_overlay(glowybit) diff --git a/hyperstation/code/effects/lighting.dm b/hyperstation/code/effects/lighting.dm new file mode 100644 index 000000000..90a80ccb5 --- /dev/null +++ b/hyperstation/code/effects/lighting.dm @@ -0,0 +1,17 @@ +/obj/effect/light/ + name = "bloom" + icon = 'hyperstation/icons/effects/lighting.dmi' + icon_state = "light" + plane = ABOVE_LIGHTING_PLANE + blend_mode = BLEND_ADD + mouse_opacity = 0 + +/obj/effect/light/medium + icon = 'hyperstation/icons/effects/lightingmed.dmi' + pixel_x = -16 + pixel_y = -16 + +/obj/effect/light/large + icon = 'hyperstation/icons/effects/lightinglarge.dmi' + pixel_x = -48 + pixel_y = -48 \ No newline at end of file diff --git a/hyperstation/icons/effects/lighting.dmi b/hyperstation/icons/effects/lighting.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3f59b47d2a7fd25268d424f8ff3eec2ba961fc25 GIT binary patch literal 1006 zcmVV=-0C=1w$Gr-GAQT4B+4~e9x<`MjODN%>?;vRDP=QLleuLXN0-N5AgR+L+ zSZaQ5NUXz1?8~7gNGvn46!V!{Pi?+MNN`Rp%Vz+>H3d$P#0h+fM3zl+5 zLI3~*KuJVFR9J<@muYg_Fbsu1uSwi2lP=TV23HTS)7Eut*Q;c!Kl~6uloBVME}Fq; z;{zT+5CD4*4-fp$Yxp}LGwT5^0F{K4QuS8|m{}j_3p3PnKNvp(2Qw>yLrUrRM+nI9 z2p9twl2IVh0}en56u=JHnb{sF&JlT$fSC<}OW+E4C%F=daYmp3w!j8h11n%{X1kP9 z@g@RVMKwHlVTx#HiI{8d!CZLgI zK%JUL0e^J{KakBQ5A=evJnfEyxX}U4V&opIG96udh5=ti0$yAOnK+;yBsbp6^hE41 z)7QZFXZ5KKF)V z27Cv;1^Et4fghQXnZ8XmCgP_0ztH4%FIB@Lcp&zExrfg612Y-_s{4;XpwXT+2&9yb zX13+DW-(*M+`gn;^q76(Lstl!jIJJyQJNc^#Xwnb^Q3UcpR*{ zn$s46lu~781*cf>?X}hWoMu0eFHcuf+Ufe2JmA}MZ)TpHqI(-vEf6TexD{c`rj#0e zV7z+g&W72+h($07*qoM6N<$g0N)H^#A|> literal 0 HcmV?d00001 diff --git a/hyperstation/icons/effects/lightinglarge.dmi b/hyperstation/icons/effects/lightinglarge.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fb1eeebc8b1ef0415c5b5632f38da002cedd9a05 GIT binary patch literal 8222 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 literal 0 HcmV?d00001 diff --git a/hyperstation/icons/effects/lightingmed.dmi b/hyperstation/icons/effects/lightingmed.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0b87ce7dc1aa571a29ecc44ff5d092450812e5ad GIT binary patch literal 2180 zcmV-~2z&R5P)V=-0C=1w$1w_kAQ%SF+5Z$Dx<`Suxr7o9dIv#EhYD2c`VDUH32bJ!9@<%Y zQ*GtBp&+N3*jHlDP*^3goXVN|Nb8{|C~!_JmfE1O5IbtP(y)N>8roU<0i3`X6)GjH zk^le))=5M`RCt`_TkUe&I1Jo4A5PkPC%t;}M!jC!q_$(ilj1tjE>Z8`<)l3flIK`j{HJ2e88{2n1p`48t1`?`6Zg01)G8>~-6BQDCky zW`Q!`MYa?Iux;Dxc5Vk?KMVta^MN=S00y{b{I$q!d)}>y13?BTbJXAWI2umbHqm_o zL1vrnC%2oj&TYNZFpC7LR8vxHup2Gew z2Vn^lmb!o%&z@C-9{_x6axd2i09}DGKpCLpzxzLXe%*{rKx%dgdERaqhFJzIa)I_D z4RUJq1Axy0z=KH74ftGT00Ge6r{C*ybo5c91qG`n$RSMTbTAe>G$d03Gw)_$qZ~4B55& zU+@|X_oujke#Wu~90VN&oDB~cCr0$&G*XB)FjV$ z1|%2It?w%cl=T9+w|mpGeYElCd-8PyV3o>oa}4kRs7fjrJ%g((Ffl*_;R>1dDP!bl zagXDu!PHrU=Y$2RDy#v}KW`NXH?-<$?TzYF+0WmZR4l2EodIt#$61gVpvaR2Ns*+W zD^6oP_*LoazMb2L>+bW6N$h?7I7^@5eD`QH7y%$Py;R+)n4rU4>S@jYHJG_SvO2uN zn5OO?cX*}!8pk{#)gXFbpKq<_0#vxF@+cS;z1?`P3s!P%?@t|(^zynxtVF3ByfGlu z?yrL+CG=dc4(O%v^Z}Df<$HU-c8b3{eQ{2z(wY=`3`li+?~w$Eo=ZLI&(-$3S_kSs}+c3L_Z6@4oJ+`zeGy;rNriCsz0sKcBKr~Uq6Zv0#O)OYhhj*JpsWijus?jqDlgM$duZE#05qwN#%`t40C+u})htNS$iLIjslW zDevzVL=pfx?)I)FL1(*2q42w;Po-nhqx)V5ASv&&Ha=s!pSj*s*jxI&pY!*4@xygW z&nf{xFs>4>2MMxRI3}sS1?dKLwx-gZ|Q&AX<3PeU%D;CGL}0<%Xr| zPtw7`m;h0I4m;XjbkM1*N~%xLDk4`suEr)Ee9|<5GXhmBLk>VfU5(ua@$Q^i+IzoGpKt6vad}OO0bZO;icoyU#*3b8e7V*HQdL;X zU99fvJ2@e$`+n>lFp33U8Lj{z3(_p@TDE2B$-uld08()x(O=)I@>CoX2xS04i1PxI zJfI<@aiHpjCjdVS;dNKkd#Vz>|0x{*wCxk73{VitWi-8Ekdb_c%KsAsegODxKqNO%`p4E|fEuG9q*9aq zUhnAv;1eExudfey#@GeEBfEmrKl=VG0F4EzP_NA8`Gb!CK08DfExF%=ug3ry?}3m2 zl)gU;fV7vU=mz67){7=p0P`g>o(oX9o(t$m(hG#oSm^s~RY?rMs8FgsqrLHjqd$HJ z@J;0JAYY5)ubpcy-vIp6gaCLhumxThPR{*5;nZbvX}y3>lKKj9B{BrulOfLy zG>6y%*ezW(x^$TwmE766L|a|jl2(XS%Ul?&dfx&m1y1As(z4r008r7L?58hB^?j}^ z^I03OEc>(47oZ!PGQPz<&$b8vi=u~N7>F`^O##^8I6r@fapJTz6LdzUPvGCbSemT` z7a#+`nn1NkI!#w4Fg=$@MVPlw>T~}u@UH(1*&1S9Q*;ydmn2ah43!CcObZ=*Sc&V@ zb`}GG(Lciu!Uj^9Ml*rZ?60Z_IRIMF+}ZvC@91@HX9M7I0Y~Mzz@eHj^<=772Cqut z%v7)53&O?zHfR4U0Q!@fsTgvF>70ZXG7p$ZYtLzCGr(Ku5&Z+CPgLqTwrXPJ?fI9| zRolh?I9av85TLn$gLesPFKxdKfYg$qztec&4+HRDX#WBjG2NBJpTh(I0000