diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 2ed917c254a..8edf6e71d0e 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -1,6 +1,6 @@
/obj/item/flamethrower
name = "flamethrower"
- desc = "You are a firestarter!"
+ desc = "A flamethrower created by modifying a welding tool to fit an external gas tank."
icon = 'icons/obj/flamethrower.dmi'
icon_state = "flamethrowerbase"
item_state = "flamethrower_0"
@@ -10,12 +10,12 @@
throwforce = 10.0
throw_speed = 1
throw_range = 5
- w_class = ITEMSIZE_NORMAL
+ w_class = ITEMSIZE_LARGE
origin_tech = list(TECH_COMBAT = 1, TECH_PHORON = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500)
- var/secured = 0
+ var/secured = FALSE // Whether we have an igniter secured (screwdrivered) to us or not
var/throw_amount = 100
- var/lit = FALSE //on or off
+ var/lit = FALSE //on or off
var/operating = FALSE //cooldown
var/turf/previousturf = null
var/obj/item/weldingtool/weldtool = null
@@ -24,10 +24,15 @@
/obj/item/flamethrower/examine(mob/user)
..()
- if(ptank)
- to_chat(user, SPAN_NOTICE("Release pressure is set to [throw_amount] kPa. The tank has about [round(ptank.air_contents.return_pressure(), 10)] kPa left in it."))
- else
- to_chat(user, SPAN_WARNING("There's no phoron tank [igniter ? "" : "or igniter"] installed!"))
+ if(Adjacent(user))
+ if(ptank)
+ to_chat(user, SPAN_NOTICE("Release pressure is set to [throw_amount] kPa. The tank has about [round(ptank.air_contents.return_pressure(), 10)] kPa left in it."))
+ else
+ to_chat(user, SPAN_WARNING("It has no gas tank installed."))
+ if(igniter)
+ to_chat(user, SPAN_NOTICE("It has \an [igniter] installed."))
+ else
+ to_chat(user, SPAN_WARNING("It has no igniter installed."))
/obj/item/flamethrower/Destroy()
if(weldtool)
@@ -51,8 +56,6 @@
location = M.loc
if(isturf(location)) //start a fire if possible
location.hotspot_expose(700, 2)
- return
-
/obj/item/flamethrower/update_icon()
cut_overlays()
@@ -65,7 +68,9 @@
item_state = "flamethrower_1"
else
item_state = "flamethrower_0"
- return
+
+/obj/item/flamethrower/isFlameSource()
+ return lit
/obj/item/flamethrower/afterattack(atom/target, mob/user, proximity)
if(proximity)
@@ -82,8 +87,10 @@
var/turflist = getline(user, target_turf)
flame_turf(turflist)
-/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob)
- if(user.stat || user.restrained() || user.lying) return
+/obj/item/flamethrower/attackby(obj/item/W, mob/user)
+ if(use_check_and_message(user))
+ return
+
if(W.iswrench() && !secured)//Taking this apart
var/turf/T = get_turf(src)
if(weldtool)
@@ -99,39 +106,47 @@
qdel(src)
return
- if(W.isscrewdriver() && igniter && !lit)
+ else if(W.isscrewdriver() && igniter && !lit)
secured = !secured
- to_chat(user, "[igniter] is now [secured ? "secured" : "unsecured"]!")
+ to_chat(user, SPAN_NOTICE("[igniter] is now [secured ? "secured" : "unsecured"]!"))
update_icon()
return
- if(isigniter(W))
+ else if(isigniter(W))
var/obj/item/device/assembly/igniter/I = W
- if(I.secured) return
- if(igniter) return
- user.drop_from_inventory(I,src)
+ if(I.secured)
+ to_chat(user, SPAN_WARNING("\The [I] is not ready to attach yet! Use a screwdriver on it first."))
+ return
+ if(igniter)
+ to_chat(user, SPAN_WARNING("\The [src] already has an igniter installed."))
+ return
+ user.drop_from_inventory(I, src)
igniter = I
update_icon()
return
- if(istype(W,/obj/item/tank/phoron))
+ else if(istype(W, /obj/item/tank/phoron))
if(ptank)
- to_chat(user, "There appears to already be a phoron tank loaded in [src]!")
+ to_chat(user, SPAN_WARNING("There appears to already be a tank loaded in \the [src]!"))
return
- user.drop_from_inventory(W,src)
+ user.drop_from_inventory(W, src)
ptank = W
update_icon()
return
- if(istype(W, /obj/item/device/analyzer))
+ else if(istype(W, /obj/item/device/analyzer))
var/obj/item/device/analyzer/A = W
A.analyze_gases(src, user)
return
+
+ else if(W.isFlameSource()) // you can light it with external input, even without an igniter
+ attempt_lighting(user, TRUE)
+ update_icon()
+ return
..()
- return
-/obj/item/flamethrower/attack_self(mob/user as mob)
+/obj/item/flamethrower/attack_self(mob/user)
if(use_check_and_message(user))
return
if(!ptank)
@@ -154,23 +169,42 @@
ptank = null
lit = FALSE
if("Light")
- if(!ptank || !secured)
- return
- if(ptank.air_contents.get_by_flag(XGM_GAS_FUEL) < 1)
- to_chat(user, SPAN_WARNING("\The [src] doesn't have any flammable fuel to light!"))
- return
- lit = !lit
- to_chat(user, SPAN_NOTICE("You [lit ? "light" : "extinguish"] \the [src]."))
- if(lit)
- START_PROCESSING(SSprocessing, src)
+ attempt_lighting(user)
if("Lower Pressure")
change_pressure(-50, user)
if("Raise Pressure")
change_pressure(50, user)
- else return
+ else
+ return
update_icon()
+/obj/item/flamethrower/proc/attempt_lighting(var/mob/user, var/external)
+ if(!external) // if it's external input, we can't unlight it, but we don't need to check for an igniter either
+ if(lit) // you can extinguish the flamethrower without an igniter
+ lit = FALSE
+ to_chat(user, SPAN_NOTICE("You extinguish \the [src]."))
+ return
+ if(!secured) // can't light via the flamethrower unless we have an igniter secured
+ if(igniter)
+ to_chat(user, SPAN_WARNING("\The [igniter] isn't secured, you need to use a screwdriver on it first."))
+ else
+ to_chat(user, SPAN_WARNING("\The [src] doesn't have a secured igniter installed."))
+ return
+ if(lit)
+ to_chat(user, SPAN_WARNING("\The [src] is already lit."))
+ return
+ if(!ptank)
+ to_chat(user, SPAN_WARNING("\The [src] doesn't have a tank installed."))
+ return
+ if(ptank.air_contents.get_by_flag(XGM_GAS_FUEL) < 1)
+ to_chat(user, SPAN_WARNING("\The [src] doesn't have any flammable fuel to light!"))
+ return
+ lit = TRUE
+ to_chat(user, SPAN_NOTICE("You light \the [src]."))
+ if(lit)
+ START_PROCESSING(SSprocessing, src)
+
/obj/item/flamethrower/proc/change_pressure(var/pressure, var/mob/user)
if(!pressure)
return
diff --git a/html/changelogs/geeves-flamethrower_tweaks.yml b/html/changelogs/geeves-flamethrower_tweaks.yml
new file mode 100644
index 00000000000..afa2c38c1c8
--- /dev/null
+++ b/html/changelogs/geeves-flamethrower_tweaks.yml
@@ -0,0 +1,9 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - tweak: "Increased the size of flamethrowers, they no longer fit in your backpack."
+ - rscadd: "Made lit flamethrowers work as flame sources, which means they can now light cigarettes."
+ - rscadd: "Added more useful failure messages to make the operation of a flamethrower a bit easier."
+ - rscadd: "You can now light a flamethrower without an igniter, by lighting it with an external flame source."
\ No newline at end of file