From 1dcad5fa0ed73764e4e193b2c472112b93861d67 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 21 May 2017 22:28:20 -0500 Subject: [PATCH] Fixes pkborg fields not updating location or draining power --- code/game/objects/items/robot/robot_items.dm | 32 +++++++++++++------ code/modules/fields/fields.dm | 15 +++++++-- code/modules/fields/peaceborg_dampener.dm | 4 +++ code/modules/fields/turf_objects.dm | 1 + icons/effects/fields.dmi | Bin 1939 -> 2140 bytes 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index abf7f5b827..97a343311d 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -522,10 +522,10 @@ var/projectile_damage_tick_ecost_coefficient = 2 //Lasers get half their damage chopped off, drains 50 power/tick. Note that fields are processed 5 times per second. var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile. var/projectile_tick_speed_ecost = 15 - var/current_damage_dampening = 0 var/list/obj/item/projectile/tracked var/image/projectile_effect var/field_radius = 3 + var/active = FALSE /obj/item/borg/projectile_dampen/debug maxenergy = 50000 @@ -538,13 +538,13 @@ tracked = list() icon_state = "shield0" START_PROCESSING(SSfastprocess, src) + host = loc /obj/item/borg/projectile_dampen/Destroy() STOP_PROCESSING(SSfastprocess, src) return ..() /obj/item/borg/projectile_dampen/attack_self(mob/user) - var/active = FALSE if(!istype(dampening_field)) activate_field() active = TRUE @@ -552,17 +552,30 @@ deactivate_field() active = FALSE to_chat(user, "You [active? "activate":"deactivate"] the [src].") + +/obj/item/borg/projectile_dampen/update_icon() + . = ..() icon_state = "[initial(icon_state)][active]" /obj/item/borg/projectile_dampen/proc/activate_field() if(!istype(dampening_field)) dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) + update_icon() /obj/item/borg/projectile_dampen/proc/deactivate_field() QDEL_NULL(dampening_field) visible_message("The [src] shuts off!") for(var/obj/item/projectile/P in tracked) restore_projectile(P) + update_icon() + +/obj/item/borg/projectile_dampen/dropped() + . = ..() + host = loc + +/obj/item/borg/projectile_dampen/equipped() + . = ..() + host = loc /obj/item/borg/projectile_dampen/process() process_recharge() @@ -576,10 +589,11 @@ /obj/item/borg/projectile_dampen/proc/process_usage() var/usage = 0 for(var/I in tracked) - if(!tracked[I]) //No damage + var/obj/item/projectile/P = I + if(!P.stun && P.nodamage) //No damage continue usage += projectile_tick_speed_ecost - usage += (current_damage_dampening * projectile_damage_tick_ecost_coefficient) + usage += (tracked[I] * projectile_damage_tick_ecost_coefficient) energy = Clamp(energy - usage, 0, maxenergy) if(energy <= 0) deactivate_field() @@ -587,8 +601,11 @@ /obj/item/borg/projectile_dampen/proc/process_recharge() if(!istype(host)) - energy = Clamp(energy + energy_recharge, 0, maxenergy) - return + if(iscyborg(host.loc)) + host = host.loc + else + energy = Clamp(energy + energy_recharge, 0, maxenergy) + return if((host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy)) host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient) energy += energy_recharge @@ -598,7 +615,6 @@ return if(track_projectile) tracked[P] = P.damage - current_damage_dampening += P.damage P.damage *= projectile_damage_coefficient P.speed *= projectile_speed_coefficient P.add_overlay(projectile_effect) @@ -608,8 +624,6 @@ P.damage *= (1/projectile_damage_coefficient) P.speed *= (1/projectile_speed_coefficient) P.cut_overlay(projectile_effect) - current_damage_dampening -= P.damage - /********************************************************************** HUD/SIGHT things diff --git a/code/modules/fields/fields.dm b/code/modules/fields/fields.dm index 4b083d7e02..4e18e45e9a 100644 --- a/code/modules/fields/fields.dm +++ b/code/modules/fields/fields.dm @@ -33,6 +33,7 @@ var/process_edge_turfs = FALSE //Don't do this either unless it's absolutely necessary, you can just track what things are inside manually or on the initial setup. var/setup_edge_turfs = FALSE //Setup edge turfs/all field turfs. Set either or both to ON when you need it, it's defaulting to off unless you do to save CPU. var/setup_field_turfs = FALSE + var/use_host_turf = FALSE //For fields from items carried on mobs to check turf instead of loc... var/list/turf/field_turfs = list() var/list/turf/edge_turfs = list() @@ -90,8 +91,19 @@ for(var/turf/T in field_turfs) cleanup_field_turf(T) +/datum/proximity_monitor/advanced/proc/check_movement() + if(!use_host_turf) + if(host.loc != last_host_loc) + last_host_loc = host.loc + return TRUE + else + if(get_turf(host) != last_host_loc) + last_host_loc = get_turf(host) + return TRUE + return FALSE + /datum/proximity_monitor/advanced/proc/recalculate_field(ignore_movement_check = FALSE) //Call every time the field moves (done automatically if you use update_center) or a setup specification is changed. - if(!(ignore_movement_check || ((host.loc != last_host_loc) && (field_shape != FIELD_NO_SHAPE)))) + if(!(ignore_movement_check || check_movement()) && (field_shape != FIELD_NO_SHAPE)) return update_new_turfs() var/list/turf/needs_setup = field_turfs_new.Copy() @@ -173,7 +185,6 @@ /datum/proximity_monitor/advanced/proc/update_new_turfs() if(!istype(host)) return FALSE - last_host_loc = host.loc var/turf/center = get_turf(host) field_turfs_new = list() edge_turfs_new = list() diff --git a/code/modules/fields/peaceborg_dampener.dm b/code/modules/fields/peaceborg_dampener.dm index bcf8a88585..9cfc34f127 100644 --- a/code/modules/fields/peaceborg_dampener.dm +++ b/code/modules/fields/peaceborg_dampener.dm @@ -15,9 +15,11 @@ var/static/image/southwest_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southwest") var/static/image/northeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northeast") var/static/image/southeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast") + var/static/image/generic_edge = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_generic") var/obj/item/borg/projectile_dampen/projector = null var/list/obj/item/projectile/tracked var/list/obj/item/projectile/staging + use_host_turf = TRUE /datum/proximity_monitor/advanced/peaceborg_dampener/New() tracked = list() @@ -71,6 +73,8 @@ return southeast_corner if(SOUTHWEST) return southwest_corner + else + return generic_edge /datum/proximity_monitor/advanced/peaceborg_dampener/proc/capture_projectile(obj/item/projectile/P, track_projectile = TRUE) if(P in tracked) diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm index 683fa67c96..c68f50bbdb 100644 --- a/code/modules/fields/turf_objects.dm +++ b/code/modules/fields/turf_objects.dm @@ -7,6 +7,7 @@ alpha = 0 invisibility = INVISIBILITY_ABSTRACT flags = ABSTRACT|ON_BORDER + mouse_opacity = 0 var/datum/proximity_monitor/advanced/parent = null /obj/effect/abstract/proximity_checker/advanced/Initialize(mapload, _monitor) diff --git a/icons/effects/fields.dmi b/icons/effects/fields.dmi index 5eadb96a1a01822a7a37b9c9b70d2efce0db2d06..f87e1f3975e863cc2ec8bd3e4be1c0e000ef21ad 100644 GIT binary patch literal 2140 zcmb7`YdF&lAIJY@*es0+Ic~_3LOqG(FbfxQNR;z2cMr=k7IR+9DelPW)`2#1O0_#$ znlV<$nMra-4rx+1Yiu=U%Hw|VynU|gdGY&w-h8j`b$x!XemC6R9OPuxWB~w>b8@uv z*d=jyLLkz+dom@(X&0R-=Y8;YmlDF_adCKDYzzPpD(l$Ive%Ew6F-_K=i7Q8a^>Ew z)9=LwV@c+&XIwdm!|CF^qpi1MlDd<&1NOeyn!~$4m&??aTG4c*-yf}v_HvL!48p>t zxxX!TW;N=NvZAziSlZJEg?=M2Mn<>%@ljeGfB=WfYKsHP)G_+ z%SLG$9HE;k;er-3v_cq1;S^{zh*r!5(1W@X++r^wh>f;UkEI47=U)=fP_rZph==-%P0~7?!X-?>c$Lsfhg2*or#lTpaD2d~JgczcOLJv%t5kT!1^> z;9KVZ3vZ<;%)_QhjW8AkrfBnde{IK)LrWb$jrP|vxDWqKTQX|F=Fd=4M?B-}cq-T5 zw%Tk|k)1vx_SfPMoY6BLnlnUaV-5PMY5Zf?@M=V9>A!l8I!w&Y%c^31S<_Y%(n*qec2t#Q8JR^AGkLYhv{cDsEi29qvq2!2#j(W_UQd>(bV@C+>xp>l>h!(#MUcOpi+vm)SBJ3_lk0G?-|`FU zbtp>>^CD{f!1>kOKX!f==@P#kd`X&vql$}qc-$;iKg;qtkP}3YWp9n>BFH}Ldf{0z zZU;t)9Jj}Ue}&^tUG91(%*_0-NDg$(kzyi=rAX(r6M+OhM~-vPJVtp@Ak#jSZ*$R} zHL%<>m5c&gs~jOIXpHZ)TA384U~Du+MrMxweRFQUzDr3_B`EEzv;%WWxomMk!y93D zLI>mk|IoUTah6b?C%x3mEuiQ4|2pRnySRHV7O~IXTKUVevFMc;l9sq*_;v5!Ip;v4 zjUuTJ80EO9?cm{i_>bu>MRw;DHlxBsfgI!erh;zcjv~`$Y*ZfVqT`H=7l^{qJt=ae z!Olb8B+=~_Wa&>^%-2&b_Tm8Cq&AD@*T*HsYLZ8B3g@^}%NCJKi8H z`-8p728i}!Dp`9w%CK|lqf||jR6^AyW_@juj-NQu2HAym3Ld?>bk{w~FBH&K&a5={xSSNSnmum& zk1F*79A0s}^7Ui&AxWD{YWrC8vbf$o@QOz_5u3cVICHU(8CO_W>~rdKeMMOgNFd~< zHc#uH77&HDpAkUQ3X1l-2Qzezonerw64?$+(WqIifjS$YOzu{$KY=&j$MwgM#`L!q zHLcHcmm@Hl26E?IHel9w@M7+GzAjIt^ z%>)HhKhWcWWufPl9Uy9df0zWZ3DPLP*;`Q{y6orp5qAVw2wJW%LMoJ{sSu6;?n)9P z@UAbz`g)k&PNX&uY8fy(C{_BS1bwwyJH6em)A;8|#aOU+!Es~Zl`D{nq-M-UG}Lyp zAFiMss8RETFss+Uu(Df5c7>)_-fn^bHz+!k#uewf=m4V^D=l(Qoj_8^orJY2mu8ND zFL15Cx{wMZX}wJwW|${moQ5Gi zJNbyU%E7m`Rg7XD*L-Wkkq_Pgc$1pL6l{PZKRG4nmyftPQJjG}{Uj_^J1nqR!Qoje zlt72v{VVnul3CXE>{F=jNm3*|djnJWMI=d-Zn*A=(P*lwh-TgnPd> fEzVHK;C3)KtHH(DW+z>D-vz+Q-p!7BI)wBe7sdb1 literal 1939 zcma)-dpy&P9>;$hTiS+6xoc5QJVo@{BdqM=-V=!(L{V~SL@@z{i zJ-L+@dn8X{s$*7@%O)n5jhanMxomU1&g=Yt&L7{;=kLUxZ%IhRaIB9jsm0Dw|m$7|KevEL5ib;$OG zpRwvIxM-N`fRMxQGjzjpZAqwY8xz+~=CeOys%PfPC>;}momEYFhP^X6UU}jky;pOH zFk%P|7m|GWZHCXIyZ&ceU&-meeLR-?ZZJ>Ta^e&C`XvVjVQXZ;nooxMFYj0fl%)_+ z{<2bb@L7G!lG)lJ31gt8$ z_YZ|uV*vnK=HrehQmUoZ0|`QJ1gC+B5ADW<&FuIdq-k9_E*1B8NZ=A@CDd7#GJ5%P zEACxbVTP?E2!Y0%v~MXr=zGZ%#d>wAA7y{O*xQ6FZ#L#4K74r_^MoC4*IY10{yAcQ zb3x?e%E6J~UNXD#KzXnn+|44!uk(jrF!`md_>nhPt1kxq4i@O}`Z|GvyNlNL5i45s z0+vRb!vX5O3P~ZLcv=Khp2y%!6=3U!OlI7!(k7yFIqAFVUt4cryDd6aR_5Kl$R^b)@p=f$ zEN3jPJ~Uf=AQx@MBgRTXwZjU1sg0T~{08jfLG6(V;>hBdaX{>$;q0!41CTkA;(NDk-|#Mr-sxkGn}frSccixsSCffd*HYs3#+Pa(eeXg#DsP!Gb0J0)S=^LeH?O!YV;w8LKq7JIQ zNtsC&UjZYb^|Gm;On^q3gDCldV#PC9wpYIJswYVOJwJ}oALzbug4(6>twpL6_H|7g zL0n=XimBp+HD0`kQS50!m72PKJG}2U0azCO2$9qn`2D?+kz{ha$l|b0jb$Z^8QAv% zZts@}@_zfsf$@3q>OEx_5BEg+^`M8#VCd))TBK2|(PKf+fGJCo5njA*M^O zpVKba{OJ+8SH`y?+urszFOs`Bgp7MtkPm>Q^gm2t5e(i3w>Q;5N$dwhah2(KUtH*0 z4P3nG_FZa&_l1lb+g4<~t8;VTUExi2?^?+NzBkF*kobRcC9RvMd-9Lxn$$ICt@zrZ z#Pg=Zw4*Hl>Fr3taH-R`;(o7dKVp|=4b;*Nj%qUNy3D%olX=(iJ8ME+Bodg!$SlFs zMIpy*{tJCTg}!_y8J6@TMBQ~U6X((Qtn`n~Uf?g(M#U9X17ZV+GwweJ zqO!FfASqLvUM0HGcbc>xK)Q;{kN!*VFxEeZ0|rv{{4*#FOzqIB4OjJRwZ4%a2_lpd@RX?er^lrSIF>QBcku!hDKb z5@tOLntz7?suU+@oeqp?NegOW<{cW9zvsVH^%NVVRVeMRzn|wn&>*vkiL|x+mT8_8 v3j_HFY&a2xWlgC&Yk;;ZqzLf^xabf{dlp-JWvzen%K|