mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
127 lines
3.9 KiB
Plaintext
127 lines
3.9 KiB
Plaintext
/obj/item/weapon/extinguisher
|
|
name = "fire extinguisher"
|
|
desc = "A traditional red fire extinguisher."
|
|
icon = 'icons/obj/items_vr.dmi' //VOREStation Edit
|
|
icon_state = "fire_extinguisher0"
|
|
item_state = "fire_extinguisher"
|
|
hitsound = 'sound/weapons/smash.ogg'
|
|
throwforce = 10
|
|
w_class = ITEMSIZE_NORMAL
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
force = 10
|
|
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
|
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
|
drop_sound = 'sound/items/drop/gascan.ogg'
|
|
pickup_sound = 'sound/items/pickup/gascan.ogg'
|
|
|
|
var/spray_particles = 3
|
|
var/spray_amount = 10 //units of liquid per particle
|
|
var/max_water = 300
|
|
var/last_use = 1.0
|
|
var/safety = 1
|
|
var/sprite_name = "fire_extinguisher"
|
|
|
|
/obj/item/weapon/extinguisher/mini
|
|
name = "fire extinguisher"
|
|
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
|
icon_state = "miniFE0"
|
|
item_state = "miniFE"
|
|
hitsound = null //it is much lighter, after all.
|
|
throwforce = 2
|
|
w_class = ITEMSIZE_SMALL
|
|
force = 3.0
|
|
max_water = 150
|
|
spray_particles = 3
|
|
sprite_name = "miniFE"
|
|
|
|
/obj/item/weapon/extinguisher/Initialize()
|
|
create_reagents(max_water)
|
|
reagents.add_reagent("firefoam", max_water) //VOREStation Edit
|
|
. = ..()
|
|
|
|
/obj/item/weapon/extinguisher/examine(mob/user)
|
|
. = ..()
|
|
if(get_dist(user, src) == 0)
|
|
. += "[src] has [src.reagents.total_volume] units of foam left!" //VOREStation Edit - Foam not water
|
|
|
|
/obj/item/weapon/extinguisher/attack_self(mob/user as mob)
|
|
safety = !safety
|
|
icon_state = "[sprite_name][!safety]"
|
|
desc = "The safety is [safety ? "on" : "off"]."
|
|
to_chat(user, "The safety is [safety ? "on" : "off"].")
|
|
|
|
/obj/item/weapon/extinguisher/proc/propel_object(var/obj/O, mob/user, movementdirection)
|
|
if(O.anchored) return
|
|
|
|
var/obj/structure/bed/chair/C
|
|
if(istype(O, /obj/structure/bed/chair))
|
|
C = O
|
|
|
|
var/list/move_speed = list(1, 1, 1, 2, 2, 3)
|
|
for(var/i in 1 to 6)
|
|
if(C) C.propelled = (6-i)
|
|
O.Move(get_step(user,movementdirection), movementdirection)
|
|
sleep(move_speed[i])
|
|
|
|
//additional movement
|
|
for(var/i in 1 to 3)
|
|
O.Move(get_step(user,movementdirection), movementdirection)
|
|
sleep(3)
|
|
|
|
/obj/item/weapon/extinguisher/afterattack(var/atom/target, var/mob/user, var/flag)
|
|
//TODO; Add support for reagents in water.
|
|
|
|
if( istype(target, /obj/structure/reagent_dispensers) && flag) //VOREStation Edit
|
|
var/obj/o = target
|
|
var/amount = o.reagents.trans_to_obj(src, 50)
|
|
to_chat(user, "<span class='notice'>You fill [src] with [amount] units of the contents of [target].</span>")
|
|
playsound(src, 'sound/effects/refill.ogg', 50, 1, -6)
|
|
return
|
|
|
|
if (!safety)
|
|
if (src.reagents.total_volume < 1)
|
|
to_chat(usr, "<span class='notice'>\The [src] is empty.</span>")
|
|
return
|
|
|
|
if (world.time < src.last_use + 20)
|
|
return
|
|
|
|
src.last_use = world.time
|
|
|
|
playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3)
|
|
|
|
var/direction = get_dir(src,target)
|
|
|
|
if(user.buckled && isobj(user.buckled))
|
|
spawn(0)
|
|
propel_object(user.buckled, user, turn(direction,180))
|
|
|
|
var/turf/T = get_turf(target)
|
|
var/turf/T1 = get_step(T,turn(direction, 90))
|
|
var/turf/T2 = get_step(T,turn(direction, -90))
|
|
|
|
var/list/the_targets = list(T,T1,T2)
|
|
|
|
for(var/a = 1 to spray_particles)
|
|
spawn(0)
|
|
if(!src || !reagents.total_volume) return
|
|
|
|
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src))
|
|
var/turf/my_target
|
|
if(a <= the_targets.len)
|
|
my_target = the_targets[a]
|
|
else
|
|
my_target = pick(the_targets)
|
|
W.create_reagents(spray_amount)
|
|
reagents.trans_to_obj(W, spray_amount)
|
|
W.set_color()
|
|
W.set_up(my_target)
|
|
|
|
if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0))
|
|
user.inertia_dir = get_dir(target, user)
|
|
step(user, user.inertia_dir)
|
|
else
|
|
return ..()
|
|
return
|