From d3e70ca0d53d53fc95ae79da67843c10c9b5048d Mon Sep 17 00:00:00 2001 From: Geeves Date: Fri, 28 Aug 2020 11:39:18 +0200 Subject: [PATCH] Psipower Tweakery (#9023) --- code/modules/psionics/equipment/psipower.dm | 9 +++- .../psionics/equipment/psipower_tinker.dm | 48 ++++++++++-------- .../modules/psionics/equipment/psipower_tk.dm | 4 +- html/changelogs/geeves-psipower_tweakery.yml | 8 +++ icons/obj/psychic_powers.dmi | Bin 1332 -> 2391 bytes 5 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 html/changelogs/geeves-psipower_tweakery.yml diff --git a/code/modules/psionics/equipment/psipower.dm b/code/modules/psionics/equipment/psipower.dm index d99d3e59f25..47d537d9cc8 100644 --- a/code/modules/psionics/equipment/psipower.dm +++ b/code/modules/psionics/equipment/psipower.dm @@ -2,8 +2,10 @@ name = "psychic power" icon = 'icons/obj/psychic_powers.dmi' flags = 0 - simulated = 1 - anchored = 1 + anchored = TRUE + throwforce = 0 //Just to be on the safe side + throw_range = 0 + throw_speed = 0 var/maintain_cost = 3 var/mob/living/owner @@ -31,6 +33,9 @@ /obj/item/psychic_power/dropped() ..() + QDEL_IN(src, 1) + +/obj/item/psychic_power/on_give() qdel(src) /obj/item/psychic_power/process() diff --git a/code/modules/psionics/equipment/psipower_tinker.dm b/code/modules/psionics/equipment/psipower_tinker.dm index 4b62cf5c54a..adf3bf0b1ef 100644 --- a/code/modules/psionics/equipment/psipower_tinker.dm +++ b/code/modules/psionics/equipment/psipower_tinker.dm @@ -1,39 +1,45 @@ /obj/item/psychic_power/tinker name = "psychokinetic crowbar" - icon_state = "tinker" - force = 1 - var/emulating = "Crowbar" + icon_state = "crowbar" + force = 5 + var/emulating = "crowbar" + var/list/tools = list("crowbar", "wrench", "screwdriver", "cutters") + +/obj/item/psychic_power/tinker/Initialize(mapload, ...) + . = ..() + var/list/new_tools = list() + for(var/tool_name in tools) + var/image/radial_image = image('icons/obj/psychic_powers.dmi', tool_name) + new_tools[capitalize_first_letters(tool_name)] = radial_image + tools = new_tools /obj/item/psychic_power/tinker/iscrowbar() - return emulating == "Crowbar" + return emulating == "crowbar" /obj/item/psychic_power/tinker/iswrench() - return emulating == "Wrench" + return emulating == "wrench" /obj/item/psychic_power/tinker/isscrewdriver() - return emulating == "Screwdriver" + return emulating == "screwdriver" /obj/item/psychic_power/tinker/iswirecutter() - return emulating == "Wirecutters" - -/obj/item/psychic_power/tinker/attack_self() + return emulating == "cutters" +/obj/item/psychic_power/tinker/attack_self(mob/user) if(!owner || loc != owner) return - var/choice = input("Select a tool to emulate.","Power") as null|anything in list("Crowbar","Wrench","Screwdriver","Wirecutters","Dismiss") + var/choice = show_radial_menu(user, user, tools, radius = 42, tooltips = TRUE) if(!choice) - return - - if(!owner || loc != owner) - return - - if(choice == "Dismiss") - sound_to(owner, 'sound/effects/psi/power_fail.ogg') + playsound(get_turf(src), 'sound/effects/psi/power_fail.ogg', 40, TRUE) owner.drop_from_inventory(src) return - emulating = choice - name = "psychokinetic [lowertext(emulating)]" - to_chat(owner, "You begin emulating \a [lowertext(emulating)].") - sound_to(owner, 'sound/effects/psi/power_fabrication.ogg') + if(!owner || loc != owner) + return + + emulating = lowertext(choice) + name = "psychokinetic [emulating]" + icon_state = emulating + to_chat(owner, SPAN_NOTICE("You begin emulating \a [emulating].")) + playsound(get_turf(src), 'sound/effects/psi/power_fabrication.ogg', 40, TRUE) \ No newline at end of file diff --git a/code/modules/psionics/equipment/psipower_tk.dm b/code/modules/psionics/equipment/psipower_tk.dm index 34de21f0634..b321a78b8e7 100644 --- a/code/modules/psionics/equipment/psipower_tk.dm +++ b/code/modules/psionics/equipment/psipower_tk.dm @@ -15,7 +15,6 @@ . = ..() /obj/item/psychic_power/telekinesis/proc/set_focus(var/atom/movable/_focus) - if(!_focus.simulated || !istype(_focus.loc, /turf)) return FALSE @@ -51,7 +50,6 @@ return focus.do_simple_ranged_interaction(user) /obj/item/psychic_power/telekinesis/afterattack(var/atom/target, var/mob/living/user, var/proximity) - if(!target || !user || (isobj(target) && !isturf(target.loc)) || !user.psi || !user.psi.can_use() || !user.psi.spend_power(5)) return @@ -93,4 +91,4 @@ O.icon_state = "nothing" flick("empdisable",O) sleep(5) - qdel(O) + qdel(O) \ No newline at end of file diff --git a/html/changelogs/geeves-psipower_tweakery.yml b/html/changelogs/geeves-psipower_tweakery.yml new file mode 100644 index 00000000000..f6a608d5dcc --- /dev/null +++ b/html/changelogs/geeves-psipower_tweakery.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - tweak: "Psychokinetic tools have been given new sprites. Changing what it's emulating has now been given a radial menu." + - bugfix: "Psychokinetic tools, psi-blades, and telekinetic grabs now properly delete when dropped or thrown." + - tweak: "Psi-tools now do slightly more damage, 5, up from 1." diff --git a/icons/obj/psychic_powers.dmi b/icons/obj/psychic_powers.dmi index f238fb3a93af63e04a048e31930e935ac96d02d9..d98e588151d771482a1d0af20e3146f801c2dc84 100644 GIT binary patch literal 2391 zcmV-d38?moP)V=-0C=2@&dmzKFc1XbbMh2Rdl&z%xk!uj(7uAC&DsQOBD-tz`W_12B;ID= zgP9sG?X?@A={vn5aYzvioOgSza&Y3o!0D)!$1r=@3X2s41C`){j}VaqS6aD13mhI8ff}X ze*mZ5Xtrh5sG|S?2y972K~#90?Va6g+vXm}ziQm1wQFZBCk=U9dPWxwtprY;;RFiy za-eGmz1&qOFo>CEDcHF5oN+Q7!F z*iC|6?ZTEKyRs!Kk|jIO2aK#oFOTy5KEL1dVnL{-r6mxI!RPgkFR^T--Z{s#-rVc; zexmhS!U38MU|IG@Js+eM@p-*J*Eu#0;Cgvm6Wt=KPeWAd@`Bjg{`J1*BQ0BS8ueY zBU>XUCzDCOudff2lasQ?!{IQW$z(7%I7n%En4^d)1B%5WpUGq}H8lkQNTpI(Utb3R z&@_$p^>s*(A7vw|($5NjNA>0ciUuT;NnRo>0AOHX0Et8b6B85I+1U~IL!l4=h(?4$ zA-VrdA(4Y2$_wd0eyXa04l|&Y5Flu)50m204&oqjfW2(UOj&NIKts@%{0}{ zG}`(Bg-$q`O!AYHlX(98IcS2*L$>ob@eYEG&d0YdH% zhr`(4-F9sZ{HSLy)f+L z%AaLaiLW;@;;+=d!mzplox}$eA^@n20sx4`Vz_+yvTTc%imzwuuOYse_W}I6#IkY& zgF{m%>Hr-gPjx3O2+A-F78e&~CstDN^}=G}3v~lJr9DLh1_uYJP$tGr2^{QL350InQ+Kv&z%XENkBR-(ffM!!Q@oF3K zffji!rTj<#3IoNjf#E5yB_g1iG&|+BL{|Lkut( zVt~mI15Ab(U^0#VCfrnR{mzTay|d>j(|&+A5=$EZ09`$Op01vL+={J53i;BId~Vd$ zHfC5l1K~>7b`DV5+U!n00CYG`iRHyy?O|_+;}nXy z9qewW;W#%UmfP&ks`H%q`t{EhukMKRfWJ}+yz_xaQS{E5nbS=`&xIOma5z&OR-fNx!yAU~y356U7$52T` z)e+zr@fY&kd?^L}Uvf9;cL1;7uCF2m-Az!zdTGagVI23IsT<$g$9VwwCLf`M?{9wj z35DG}@ZPBGA9l}~qV8}5ye<9vypEAzNIEjD575dTZh*%hQM}pP#j&mvz>a{4 z`3QA~8{qFbQ>a9I*>9`!dh`Kuw5ka$ISQ&pE1J-9 z^8h8JCKU4=W^5bOOyPb0@7S6pO=zi^uv!EYW^5Z&d7lShNdqjo7kPMm)P@8rDG6$%KrWDkO_=Ng2Yyc5oUm7xih_64Y4Itth zgDL}v_{O1V01@9<>KZ`AH=ddX5b>LXtN}#)<{{36rOU)b{N_=y6d^2{8MKfucDNl8TsE7a}c=I8zrI-vcz+{L4CPNG`8DfCR`~xDJn_tFP-xvS@002ov JPDHLkV1j>)Yk~j( literal 1332 zcmV-41V=-0C=2@$~_LkFbqK9IX;Ee?ufrN3rdADv{yhuF^$!bpxA=zGjw1=u)QaJ zJ)VZMpU{mSp45bEL5s)D7R-yICbW3igGt15(se|G5?bt(GA&$4SUNC~o1n!Vm|F{X zTKi+UEYyCohwwFrNEb=9>Hj>}GJn%O4wFMSdUyl4K14YDxP%k{00dx3L_t(|oaLIq zYTHT_hQC~{mw5maZ!ZJxu4EBILBWgMrmtWEUUzfpIuB8@$vP193~n7T78ul3cMX^< z0!Bs;kX^vI3u}BQsw~fpMvCnGAZ%-7jlX}+nHkOaU_2i4mi3qI7d_AW*X0kXLZ_a0 zm_B##Rw5vQe+T>;2f>p(?<@l991#lqKfpUR608l_6{X-$lGnAY49IHjAPBzO+^bAw zz;}|Obre|j0gJ_ADc{F&OtaY}j$>M_)B`5#PjpB3V)t) z`6M|2{u4qBX0sW-@0StC%_LZ;K4ivWIvGA z${#2x{I|e&SQ%g?tq4e3^D6n62YL=%xqL9vfVT>Lsf`A-TCD@wi?`ctE-x>?B}H-w zR4bG32SE^g9}b7hcDqfl*DEv|EE^sS`hdg)IRwgKPmTl=U=jquCkbCv8t~!fZ|h6@ zS-|&w0PgSaIXgScY*7`yNb76DTX%e_v^zlw)NZ#K4u_c&8x`JGCh+4RuG1G|Hb*z9 zb`juGr=EAR?V7zdKu0@mz^Ui`%qcqoF1AI%P8%=|g7-!5QHlXNxmT9*q9RK>9RaE& z_&5mO%kXD4o6JoE=LYEJo@?2r!`?)It@h4B4E=bCo%sT3-g^AP*v+^jrB_1>Q2$M?mY_|@S35o)P1Ye z-$66{p`Zb;Jm**8ulXPPvq=M3EsHBVI8v3i{s#C9oBE9nP~b0;Q|pl1HFz*IAO$b~ zCK^Kd@Tt0;z=J^_kOA*xf8L^Qa0CyU5wHRN#kQ6053s14q~5~tpb-H&@MW#vZ;3i5 z9d51xHH3E_b*A%x+Q7T2JJ$eZo9Z^He6Qd^BLY$;>=is{ra;vjmWoPGx!P@xW{ml7 q;|~&2Ri+%&&;Y15