From e8a2e5830bc0c2391341a8cc07ff5b20285601ad Mon Sep 17 00:00:00 2001 From: KoboldCommando Date: Tue, 26 Sep 2023 19:56:32 -0400 Subject: [PATCH] resprites flamethrowers, adds chemthrowers --- code/game/objects/items/flamethrower.dm | 87 ++++++++++++++++-- .../inhands/weapons/flamethrower_lefthand.dmi | Bin 1747 -> 4481 bytes .../weapons/flamethrower_righthand.dmi | Bin 2179 -> 5333 bytes icons/obj/weapons/flamethrower.dmi | Bin 859 -> 1028 bytes 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index ba26b1337837..83e865d69a23 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -23,6 +23,7 @@ var/obj/item/weldingtool/weldtool = null var/obj/item/assembly/igniter/igniter = null var/obj/item/tank/internals/plasma/ptank = null + var/obj/item/reagent_containers/cup/beaker/beaker = null var/warned_admins = FALSE //for the message_admins() when lit //variables for prebuilt flamethrowers var/create_full = FALSE @@ -42,6 +43,8 @@ QDEL_NULL(igniter) if(ptank) QDEL_NULL(ptank) + if(beaker) + qdel(beaker) return ..() /obj/item/flamethrower/process() @@ -69,6 +72,8 @@ . += "+ptank" if(lit) . += "+lit" + if(beaker) + . += "+beaker" /obj/item/flamethrower/afterattack(atom/target, mob/user, flag) . = ..() @@ -83,7 +88,7 @@ if(target_turf) var/turflist = get_line(user, target_turf) log_combat(user, target, "flamethrowered", src) - flame_turf(turflist) + flame_turf(turflist, user) /obj/item/flamethrower/wrench_act(mob/living/user, obj/item/tool) . = TRUE @@ -137,6 +142,20 @@ update_appearance() return + else if(istype(W, /obj/item/reagent_containers/cup/beaker)) + if(beaker) + if(user.transferItemToLoc(W,src)) + beaker.forceMove(get_turf(src)) + beaker = W + to_chat(user, "You swap [beaker] in [src]!") + return + if(!user.transferItemToLoc(W, src)) + return + beaker = W + to_chat(user, "You attach [beaker] to [src]!") + update_icon() + return + else return ..() @@ -150,7 +169,12 @@ toggle_igniter(user) /obj/item/flamethrower/AltClick(mob/user) - if(ptank && isliving(user) && user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + if(beaker && isliving(user) && user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + user.put_in_hands(beaker) + beaker = null + to_chat(user, "You remove [beaker] from [src]!") + update_icon() + else if(ptank && isliving(user) && user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) user.put_in_hands(ptank) ptank = null to_chat(user, span_notice("You remove the plasma tank from [src]!")) @@ -158,8 +182,18 @@ /obj/item/flamethrower/examine(mob/user) . = ..() - if(ptank) - . += span_notice("\The [src] has \a [ptank] attached. Alt-click to remove it.") + if(beaker) + . += "\The [src] has \a [beaker] attached. Alt-click to remove it." + if(ptank) + . += "\The [src] has \a [ptank] attached." + else + . += "A plasma tank could be attached." + else + . += "A beaker could be attached." + if(ptank) + . += span_notice("\The [src] has \a [ptank] attached. Alt-click to remove it.") + else + . += "A plasma tank could be attached." /obj/item/flamethrower/proc/toggle_igniter(mob/user) if(!ptank) @@ -192,8 +226,8 @@ update_appearance() //Called from turf.dm turf/dblclick -/obj/item/flamethrower/proc/flame_turf(turflist) - if(!lit || operating) +/obj/item/flamethrower/proc/flame_turf(turflist, mob/user) + if(operating) return operating = TRUE var/turf/previousturf = get_turf(src) @@ -203,10 +237,15 @@ var/list/turfs_sharing_with_prev = previousturf.get_atmos_adjacent_turfs(alldir=1) if(!(T in turfs_sharing_with_prev)) break - if(igniter) - igniter.ignite_turf(src,T) - else - default_ignite(T) + if(lit) + if(igniter) + igniter.ignite_turf(src,T) + else + default_ignite(T) + if(beaker) + if(beaker.reagents.total_volume) + project_reagents(T, user) + beaker.reagents.remove_all(beaker.reagents.maximum_volume * 0.05) //only reduce reagents once per shot sleep(0.1 SECONDS) previousturf = T operating = FALSE @@ -228,6 +267,34 @@ target.hotspot_expose((tank_mix.temperature*2) + 380,500) //location.hotspot_expose(1000,500,1) +/obj/item/flamethrower/proc/project_reagents(atom/target, mob/user) + var/range = max(min(3, get_dist(src, target)), 1) + + var/obj/effect/decal/chempuff/reagent_puff = new /obj/effect/decal/chempuff(get_turf(src)) + + reagent_puff.create_reagents(beaker.reagents.maximum_volume * 0.05) + var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed + beaker.reagents.copy_to(reagent_puff, beaker.reagents.maximum_volume * 0.05, 1/range) + reagent_puff.color = mix_color_from_reagents(reagent_puff.reagents.reagent_list) + var/wait_step = max(round(2+3/range), 2) + + var/puff_reagent_string = reagent_puff.reagents.get_reagent_log_string() + var/turf/src_turf = get_turf(src) + + log_combat(user, src_turf, "fired a puff of reagents from", src, addition="with a range of \[[range]\], containing [puff_reagent_string].") + user.log_message("fired a puff of reagents from \a [src] with a range of \[[range]\] and containing [puff_reagent_string].", LOG_ATTACK) + + // do_spray includes a series of step_towards and sleeps. As a result, it will handle deletion of the chempuff. + do_spray(target, wait_step, reagent_puff, range, puff_reagent_left, user) + +/obj/item/flamethrower/proc/do_spray(atom/target, wait_step, obj/effect/decal/chempuff/reagent_puff, range, puff_reagent_left, mob/user) + var/datum/move_loop/our_loop = SSmove_manager.move_towards_legacy(reagent_puff, target, wait_step, timeout = range * wait_step, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + reagent_puff.user = user + reagent_puff.sprayer = src + reagent_puff.lifetime = puff_reagent_left + reagent_puff.RegisterSignal(our_loop, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/obj/effect/decal/chempuff, loop_ended)) + reagent_puff.RegisterSignal(our_loop, COMSIG_MOVELOOP_POSTPROCESS, TYPE_PROC_REF(/obj/effect/decal/chempuff, check_move)) + /obj/item/flamethrower/Initialize(mapload) . = ..() if(create_full) diff --git a/icons/mob/inhands/weapons/flamethrower_lefthand.dmi b/icons/mob/inhands/weapons/flamethrower_lefthand.dmi index b952fb8d11059a21b96c599d0b4a3ea306533ccd..4ed4643c10c45511b537ea036ea434888dd5708c 100644 GIT binary patch literal 4481 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 Jv%_BT{{qo$&Ncu5 literal 1747 zcmZ`(dsNc*8)mbORx^LcY;A2s7L}I{m|9*^SW8^E%oMeoimm~fY z)Z9$1X6nz#OB2*nXCPUkr6MMp;qa1(Uy+-F40rZNJ7>T5oX`6{=lSFPJm)#jc?(aS z{Mvfcj!hsC$QpCpFT^st*WbnuEj?uHGT1U0l+ZIIKYYrC;SmzG zuPyhNAY3pb-o=GqYh@=ocuICdDg%K&d=KMyG&H?JDeFquO8i0yh|x92LLCdX$gaUl z5rwZVL%iK>U4FFx!~iaMjOvFLbXg5RZ3}$eHtzrUzyZ=sKjZqT4o#TsB6dRvc*kiI zc_Yz_p;Ye`Pi7iiS$He4ekhsN2RC*4CZOZQa%=({*8H`k;~bwH(A$D`WIvnNJSq>L zQ#lvymgyC7zXLfi$G{`Mt;`aeBqj&P7Xkc6hawn<{0cQYprJpcTp7+_)Vd$Q*q;A& zh+@U5L0qSCU|ELc`vjuRCecEK^lf}w=EX=tZIt9Cxx?0~4_l+z0qnJvM1SaW|2cBU3J;EEk>ubb?V#%8&b_^( zS6T+++nllTkvE>L3PFW5uuK-&VgZ8ndJ}cJw?4R*1)a@avps%QVp7@s=TA?IdZndpR)dG&9$G zR7rO48Y)z@c?Xk;D1A9*U#eEi9Bd!I7+Nj(<$*`{ⓈE3QAgca9+dbEos}@@A?J} zWpeli30M=IGH|oJ*r0|!h&QD&q9QgR7nF}-;wC5lqd|wHwY>}0??)r+dJ>=L z1Ojb5JA=DgB*+co?AA~u<<-(f`0({o2t5K{5j1q^3xe%*2K$0Hvz*ondF3fxyd$Pp zyLGMkEa~@2VO%-$NgI_ap_X^437?4a=x-}={yXVrvF@30UVlvul+mkrm-Rez6^YE- z93~bbI5z6E6>7HSmyA`z4G1(DN$Xdqv8=1^%t-2Lgw;D5rMo4p|C zLq@D`%%vxSuI_=-SD0P_14O?QOP~FxZ%?gAsB?x+9GXzz0-p2;ZH_=uQwHc!B&|ga z^oDB;RmuEG%I%nrhH%wwr@)tYvCJ#c{?ye)vjX3Z*k8DyoDbE)6WOESS#iIv*27+0 zMKyM-fn&GmHU|A9qyyKZUO!3yR@ssQFc|cGG5Gs--1(2t+{wuMnuAcB_uVUFQK1cj zn4-ajZv$Buw!HDV_#@Q_sDU6{y90&-EM7f*sKixkL_`dhkw{|(bvpsC6J)rF*40-T zboS7$6@wnX6tm_AKP>tV7?Fx&Z~9mAv#g)xsd_u11X}%8{AqF&nHu&jw^-XP+>!qg zWo=5HU&$03(a26aG7|ZJMO#iS4*jC}PDqb+;%7D`MUH!VX`@R(7E0lOd_Iv;Lt;^l zo>A9e2JOe$!Rg2xoElLZ^Ve?Zl99O!+BIsCR=;8ldNiKMANZdvyj~YvS{FNbPk7j6 zPiK~%u6BL>6UR?SCOc(r_rxf3mx(j0FUqe?2O(*%4SIWVS3cFaSRzAA8La-z)O8M< zO`7L40pW|*pzM3ckZbyB?3D8=&>qFM2+^h>GCg7~NldBI@`DGJx ze$vv)pCGu>k@;%h#b!ZF&MlNdAG4lL78CKqx~1>^t@F!LBlsZL+1B)0^B09dpY&_| HDmv#+GmBXO diff --git a/icons/mob/inhands/weapons/flamethrower_righthand.dmi b/icons/mob/inhands/weapons/flamethrower_righthand.dmi index d9cca464ac01be24cd1172da29c7e24ba2fa666c..e7df3a3c09bdfa27b7d0b67c51f9988108213a49 100644 GIT binary patch literal 5333 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 E0RILaF#rGn literal 2179 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