mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 18:11:47 +00:00
Adds fireplaces, eswords are hot, cardboard is flammable (#19118)
Makes needed improvements to proposed fireplaces - Fireplaces now use world.timer - Fireplaces no longer prompt input() for inserting logs, it just takes as many logs as possible - Paper and paper bins can be thrown on the fire, thirty paper is worth one log of burn time. - One log gives 15 seconds of burn time, the fireplace can hold up to 5 minutes of fuel. - Ignitable items now use a /obj level proc to generate their messages, currently using this are cigarettes, candles, fireplaces - The fireplace can be put out with an extinguisher - Cardboard cutouts are now flammable - The fireplace is only "warm and cozy" when lit - Paperbins qdel their stored papers when destroyed (probably did that already, but no harm in making sure) - Also removed some returns hanging around * Added new proc for lighting stuff - Adds ignition_effect(atom/A, mob/user) to obj/item, which is called when you're attempting to light things with that object. By default it does nothing and prevents ignition, but if the object is hot, it returns a message. May do other things for different stuff. - Eswords now ignite flammable gasses in their area. * Fireplace is no longer on fire when not on fire
This commit is contained in:
@@ -567,11 +567,24 @@ obj/item/proc/item_action_slot_check(slot, mob/user)
|
|||||||
else
|
else
|
||||||
. = pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg')
|
. = pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg')
|
||||||
|
|
||||||
/obj/item/proc/open_flame()
|
/obj/item/proc/open_flame(flame_heat=700)
|
||||||
var/turf/location = loc
|
var/turf/location = loc
|
||||||
if(ismob(location))
|
if(ismob(location))
|
||||||
var/mob/M = location
|
var/mob/M = location
|
||||||
if(M.l_hand == src || M.r_hand == src)
|
var/success = FALSE
|
||||||
|
if(src == M.get_item_by_slot(slot_l_hand))
|
||||||
|
success = TRUE
|
||||||
|
else if(src == M.get_item_by_slot(slot_r_hand))
|
||||||
|
success = TRUE
|
||||||
|
else if(src == M.get_item_by_slot(slot_wear_mask))
|
||||||
|
success = TRUE
|
||||||
|
if(success)
|
||||||
location = get_turf(M)
|
location = get_turf(M)
|
||||||
if(isturf(location))
|
if(isturf(location))
|
||||||
location.hotspot_expose(700, 5)
|
location.hotspot_expose(flame_heat, 5)
|
||||||
|
|
||||||
|
/obj/item/proc/ignition_effect(atom/A, mob/user)
|
||||||
|
if(is_hot())
|
||||||
|
. = "<span class='notice'>[user] lights [A] with [src].</span>"
|
||||||
|
else
|
||||||
|
. = ""
|
||||||
|
|||||||
@@ -31,39 +31,20 @@
|
|||||||
|
|
||||||
/obj/item/candle/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/item/candle/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
..()
|
..()
|
||||||
if(istype(W, /obj/item/weapon/weldingtool))
|
var/msg = W.ignition_effect(src, user)
|
||||||
var/obj/item/weapon/weldingtool/WT = W
|
if(msg)
|
||||||
if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool
|
light(msg)
|
||||||
light("<span class='danger'>[user] casually lights the [name] with [W], what a badass.</span>")
|
|
||||||
else if(istype(W, /obj/item/weapon/lighter))
|
|
||||||
var/obj/item/weapon/lighter/L = W
|
|
||||||
if(L.lit)
|
|
||||||
light()
|
|
||||||
else if(istype(W, /obj/item/weapon/match))
|
|
||||||
var/obj/item/weapon/match/M = W
|
|
||||||
if(M.lit)
|
|
||||||
light()
|
|
||||||
else if(istype(W, /obj/item/candle))
|
|
||||||
var/obj/item/candle/C = W
|
|
||||||
if(C.lit)
|
|
||||||
light()
|
|
||||||
else if(istype(W, /obj/item/clothing/mask/cigarette))
|
|
||||||
var/obj/item/clothing/mask/cigarette/M = W
|
|
||||||
if(M.lit)
|
|
||||||
light()
|
|
||||||
|
|
||||||
/obj/item/candle/fire_act()
|
/obj/item/candle/fire_act()
|
||||||
if(!src.lit)
|
if(!src.lit)
|
||||||
light() //honk
|
light() //honk
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/candle/proc/light(show_message)
|
/obj/item/candle/proc/light(show_message)
|
||||||
if(!src.lit)
|
if(!src.lit)
|
||||||
src.lit = TRUE
|
src.lit = TRUE
|
||||||
//src.damtype = "fire"
|
//src.damtype = "fire"
|
||||||
if(show_message)
|
if(show_message)
|
||||||
usr.visible_message(
|
usr.visible_message(show_message)
|
||||||
"<span class='danger'>[usr] lights the [name].</span>")
|
|
||||||
SetLuminosity(CANDLE_LUMINOSITY)
|
SetLuminosity(CANDLE_LUMINOSITY)
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
icon = 'icons/obj/cardboard_cutout.dmi'
|
icon = 'icons/obj/cardboard_cutout.dmi'
|
||||||
icon_state = "cutout_basic"
|
icon_state = "cutout_basic"
|
||||||
w_class = 4
|
w_class = 4
|
||||||
|
burn_state = FLAMMABLE
|
||||||
var/list/possible_appearances = list("Assistant", "Clown", "Mime", "Traitor", "Nuke Op", "Cultist", "Clockwork Cultist", "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Swarmer", \
|
var/list/possible_appearances = list("Assistant", "Clown", "Mime", "Traitor", "Nuke Op", "Cultist", "Clockwork Cultist", "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Swarmer", \
|
||||||
"Ash Walker", "Deathsquad Officer", "Ian") //Possible restyles for the cutout; add an entry in change_appearance() if you add to here
|
"Ash Walker", "Deathsquad Officer", "Ian") //Possible restyles for the cutout; add an entry in change_appearance() if you add to here
|
||||||
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
|
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
|
||||||
|
|||||||
@@ -199,9 +199,7 @@ obj/item/device/flashlight/lamp/bananalamp
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/device/flashlight/flare/process()
|
/obj/item/device/flashlight/flare/process()
|
||||||
var/turf/pos = get_turf(src)
|
open_flame(heat)
|
||||||
if(pos)
|
|
||||||
pos.hotspot_expose(produce_heat, 5)
|
|
||||||
fuel = max(fuel - 1, 0)
|
fuel = max(fuel - 1, 0)
|
||||||
if(!fuel || !on)
|
if(!fuel || !on)
|
||||||
turn_off()
|
turn_off()
|
||||||
@@ -209,6 +207,13 @@ obj/item/device/flashlight/lamp/bananalamp
|
|||||||
icon_state = "[initial(icon_state)]-empty"
|
icon_state = "[initial(icon_state)]-empty"
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
|
/obj/item/device/flashlight/flare/ignition_effect(atom/A, mob/user)
|
||||||
|
if(fuel && on)
|
||||||
|
. = "<span class='notice'>[user] lights [A] with [src] like a real \
|
||||||
|
badass.</span>"
|
||||||
|
else
|
||||||
|
. = ""
|
||||||
|
|
||||||
/obj/item/device/flashlight/flare/proc/turn_off()
|
/obj/item/device/flashlight/flare/proc/turn_off()
|
||||||
on = 0
|
on = 0
|
||||||
force = initial(src.force)
|
force = initial(src.force)
|
||||||
|
|||||||
@@ -27,14 +27,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
heat = 1000
|
heat = 1000
|
||||||
|
|
||||||
/obj/item/weapon/match/process()
|
/obj/item/weapon/match/process()
|
||||||
var/turf/location = get_turf(src)
|
|
||||||
smoketime--
|
smoketime--
|
||||||
if(smoketime < 1)
|
if(smoketime < 1)
|
||||||
matchburnout()
|
matchburnout()
|
||||||
return
|
else
|
||||||
if(location)
|
open_flame(heat)
|
||||||
location.hotspot_expose(700, 5)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/match/fire_act()
|
/obj/item/weapon/match/fire_act()
|
||||||
matchignite()
|
matchignite()
|
||||||
@@ -134,8 +131,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
if(!lit && smoketime > 0 && W.is_hot())
|
if(!lit && smoketime > 0)
|
||||||
var/lighting_text = is_lighter(W,user)
|
var/lighting_text = W.ignition_effect(src, user)
|
||||||
if(lighting_text)
|
if(lighting_text)
|
||||||
light(lighting_text)
|
light(lighting_text)
|
||||||
else
|
else
|
||||||
@@ -154,29 +151,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
else
|
else
|
||||||
user << "<span class='notice'>[src] is full.</span>"
|
user << "<span class='notice'>[src] is full.</span>"
|
||||||
|
|
||||||
/obj/item/clothing/mask/cigarette/proc/is_lighter(obj/item/O, mob/user)
|
|
||||||
var/lighting_text = null
|
|
||||||
if(istype(O, /obj/item/weapon/weldingtool))
|
|
||||||
lighting_text = "<span class='notice'>[user] casually lights the [name] with [O], what a badass.</span>"
|
|
||||||
else if(istype(O, /obj/item/weapon/lighter/greyscale)) // we have to check for this first -- zippo lighters are default
|
|
||||||
lighting_text = "<span class='notice'>After some fiddling, [user] manages to light their [name] with [O].</span>"
|
|
||||||
else if(istype(O, /obj/item/weapon/lighter))
|
|
||||||
lighting_text = "<span class='rose'>With a single flick of their wrist, [user] smoothly lights their [name] with [O]. Damn they're cool.</span>"
|
|
||||||
else if(istype(O, /obj/item/weapon/melee/energy))
|
|
||||||
var/in_mouth = ""
|
|
||||||
if(iscarbon(user))
|
|
||||||
var/mob/living/carbon/C = user
|
|
||||||
if(C.wear_mask == src)
|
|
||||||
in_mouth = ", barely missing their nose"
|
|
||||||
lighting_text = "<span class='warning'>[user] swings their \
|
|
||||||
[O][in_mouth]. They light their [name] in the process.</span>"
|
|
||||||
else if(istype(O, /obj/item/device/assembly/igniter))
|
|
||||||
lighting_text = "<span class='notice'>[user] fiddles with [O], and manages to light their [name].</span>"
|
|
||||||
else if(istype(O, /obj/item/device/flashlight/flare))
|
|
||||||
lighting_text = "<span class='notice'>[user] lights their [name] with [O] like a real badass.</span>"
|
|
||||||
else if(O.is_hot())
|
|
||||||
lighting_text = "<span class='notice'>[user] lights their [name] with [O].</span>"
|
|
||||||
return lighting_text
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
|
/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
|
||||||
if(lit)
|
if(lit)
|
||||||
@@ -407,7 +381,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
open_flame()
|
open_flame()
|
||||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||||
handle_reagents()
|
handle_reagents()
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/O, mob/user, params)
|
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/O, mob/user, params)
|
||||||
@@ -427,7 +400,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
else
|
else
|
||||||
user << "<span class='warning'>It is already packed!</span>"
|
user << "<span class='warning'>It is already packed!</span>"
|
||||||
else
|
else
|
||||||
var/lighting_text = is_lighter(O,user)
|
var/lighting_text = O.ignition_effect(src,user)
|
||||||
if(lighting_text)
|
if(lighting_text)
|
||||||
if(smoketime > 0)
|
if(smoketime > 0)
|
||||||
light(lighting_text)
|
light(lighting_text)
|
||||||
@@ -489,6 +462,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
I.color = color2hex(randomColor(1))
|
I.color = color2hex(randomColor(1))
|
||||||
add_overlay(I)
|
add_overlay(I)
|
||||||
|
|
||||||
|
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
|
||||||
|
. = "<span class='notice'>After some fiddling, [user] manages to \
|
||||||
|
light [A] with [src].</span>"
|
||||||
|
|
||||||
|
/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user)
|
||||||
|
. = "<span class='rose'>With a single flick of their wrist, [user] \
|
||||||
|
smoothly lights [A] with [src]. Damn they're cool.</span>"
|
||||||
|
|
||||||
/obj/item/weapon/lighter/update_icon()
|
/obj/item/weapon/lighter/update_icon()
|
||||||
icon_state = lit ? "[icon_state]_on" : "[initial(icon_state)]"
|
icon_state = lit ? "[icon_state]_on" : "[initial(icon_state)]"
|
||||||
|
|
||||||
@@ -548,18 +529,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/lighter/process()
|
/obj/item/weapon/lighter/process()
|
||||||
var/turf/location = get_turf(src)
|
open_flame()
|
||||||
if(location)
|
|
||||||
location.hotspot_expose(700, 5)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/lighter/pickup(mob/user)
|
/obj/item/weapon/lighter/pickup(mob/user)
|
||||||
..()
|
..()
|
||||||
if(lit)
|
if(lit)
|
||||||
SetLuminosity(0)
|
SetLuminosity(0)
|
||||||
user.AddLuminosity(1)
|
user.AddLuminosity(1)
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/lighter/dropped(mob/user)
|
/obj/item/weapon/lighter/dropped(mob/user)
|
||||||
..()
|
..()
|
||||||
@@ -567,7 +543,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
|||||||
if(user)
|
if(user)
|
||||||
user.AddLuminosity(-1)
|
user.AddLuminosity(-1)
|
||||||
SetLuminosity(1)
|
SetLuminosity(1)
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/lighter/is_hot()
|
/obj/item/weapon/lighter/is_hot()
|
||||||
return lit * heat
|
return lit * heat
|
||||||
|
|||||||
@@ -177,4 +177,3 @@
|
|||||||
theturf.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
theturf.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||||
|
|
||||||
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
||||||
return
|
|
||||||
|
|||||||
@@ -63,6 +63,16 @@
|
|||||||
if(item_color == null)
|
if(item_color == null)
|
||||||
item_color = pick("red", "blue", "green", "purple")
|
item_color = pick("red", "blue", "green", "purple")
|
||||||
|
|
||||||
|
/obj/item/weapon/melee/energy/sword/Destroy()
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/item/weapon/melee/energy/sword/process()
|
||||||
|
if(active)
|
||||||
|
open_flame()
|
||||||
|
else
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||||
if(active)
|
if(active)
|
||||||
return ..()
|
return ..()
|
||||||
@@ -87,6 +97,7 @@
|
|||||||
w_class = w_class_on
|
w_class = w_class_on
|
||||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||||
user << "<span class='notice'>[src] is now active.</span>"
|
user << "<span class='notice'>[src] is now active.</span>"
|
||||||
|
START_PROCESSING(SSobj, src)
|
||||||
else
|
else
|
||||||
force = initial(force)
|
force = initial(force)
|
||||||
throwforce = initial(throwforce)
|
throwforce = initial(throwforce)
|
||||||
@@ -98,11 +109,26 @@
|
|||||||
w_class = initial(w_class)
|
w_class = initial(w_class)
|
||||||
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/is_hot()
|
/obj/item/weapon/melee/energy/is_hot()
|
||||||
return active * heat
|
return active * heat
|
||||||
|
|
||||||
|
/obj/item/weapon/melee/energy/ignition_effect(atom/A, mob/user)
|
||||||
|
if(!active)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
var/in_mouth = ""
|
||||||
|
if(iscarbon(user))
|
||||||
|
var/mob/living/carbon/C = user
|
||||||
|
if(C.wear_mask == src)
|
||||||
|
in_mouth = ", barely missing their nose"
|
||||||
|
. = "<span class='warning'>[user] swings their \
|
||||||
|
[src][in_mouth]. They light [A] in the process.</span>"
|
||||||
|
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||||
|
add_fingerprint(user)
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/sword/cyborg
|
/obj/item/weapon/melee/energy/sword/cyborg
|
||||||
var/hitcost = 50
|
var/hitcost = 50
|
||||||
|
|
||||||
|
|||||||
@@ -342,11 +342,11 @@
|
|||||||
check_fuel()
|
check_fuel()
|
||||||
if(M)
|
if(M)
|
||||||
M.flash_eyes(light_intensity)
|
M.flash_eyes(light_intensity)
|
||||||
return 1
|
return TRUE
|
||||||
else
|
else
|
||||||
if(M)
|
if(M)
|
||||||
M << "<span class='warning'>You need more welding fuel to complete this task!</span>"
|
M << "<span class='warning'>You need more welding fuel to complete this task!</span>"
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
|
|
||||||
//Returns whether or not the welding tool is currently on.
|
//Returns whether or not the welding tool is currently on.
|
||||||
@@ -424,7 +424,13 @@
|
|||||||
user.put_in_hands(F)
|
user.put_in_hands(F)
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>You need one rod to start building a flamethrower!</span>"
|
user << "<span class='warning'>You need one rod to start building a flamethrower!</span>"
|
||||||
return
|
|
||||||
|
/obj/item/weapon/weldingtool/ignition_effect(atom/A, mob/user)
|
||||||
|
if(welding && remove_fuel(1, user))
|
||||||
|
. = "<span class='notice'>[user] casually lights [A] with [src], \
|
||||||
|
what a badass.</span>"
|
||||||
|
else
|
||||||
|
. = ""
|
||||||
|
|
||||||
/obj/item/weapon/weldingtool/largetank
|
/obj/item/weapon/weldingtool/largetank
|
||||||
name = "industrial welding tool"
|
name = "industrial welding tool"
|
||||||
|
|||||||
@@ -211,15 +211,19 @@
|
|||||||
var/hacked = 0
|
var/hacked = 0
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/New()
|
/obj/item/weapon/twohanded/dualsaber/New()
|
||||||
|
..()
|
||||||
item_color = pick("red", "blue", "green", "purple")
|
item_color = pick("red", "blue", "green", "purple")
|
||||||
|
|
||||||
|
/obj/item/weapon/twohanded/dualsaber/Destroy()
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/update_icon()
|
/obj/item/weapon/twohanded/dualsaber/update_icon()
|
||||||
if(wielded)
|
if(wielded)
|
||||||
icon_state = "dualsaber[item_color][wielded]"
|
icon_state = "dualsaber[item_color][wielded]"
|
||||||
else
|
else
|
||||||
icon_state = "dualsaber0"
|
icon_state = "dualsaber0"
|
||||||
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
|
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
|
/obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
|
||||||
if(user.has_dna())
|
if(user.has_dna())
|
||||||
@@ -232,12 +236,14 @@
|
|||||||
impale(user)
|
impale(user)
|
||||||
return
|
return
|
||||||
if((wielded) && prob(50))
|
if((wielded) && prob(50))
|
||||||
spawn(0)
|
addtimer(src, "jedi_spin", 0, TRUE, user)
|
||||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2))
|
|
||||||
user.setDir(i)
|
/obj/item/weapon/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
|
||||||
if(i == 8)
|
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2))
|
||||||
user.emote("flip")
|
user.setDir(i)
|
||||||
sleep(1)
|
if(i == 8)
|
||||||
|
user.emote("flip")
|
||||||
|
sleep(1)
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user)
|
/obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user)
|
||||||
user << "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on \the [src].</span>"
|
user << "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on \the [src].</span>"
|
||||||
@@ -265,17 +271,41 @@
|
|||||||
w_class = w_class_on
|
w_class = w_class_on
|
||||||
..()
|
..()
|
||||||
hitsound = 'sound/weapons/blade1.ogg'
|
hitsound = 'sound/weapons/blade1.ogg'
|
||||||
|
START_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
||||||
sharpness = initial(sharpness)
|
sharpness = initial(sharpness)
|
||||||
w_class = initial(w_class)
|
w_class = initial(w_class)
|
||||||
..()
|
..()
|
||||||
hitsound = "swing_hit"
|
hitsound = "swing_hit"
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
|
/obj/item/weapon/twohanded/dualsaber/process()
|
||||||
|
if(wielded)
|
||||||
|
open_flame()
|
||||||
|
else
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/IsReflect()
|
/obj/item/weapon/twohanded/dualsaber/IsReflect()
|
||||||
if(wielded)
|
if(wielded)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/item/weapon/twohanded/dualsaber/ignition_effect(atom/A, mob/user)
|
||||||
|
// same as /obj/item/weapon/melee/energy, mostly
|
||||||
|
if(!wielded)
|
||||||
|
return ""
|
||||||
|
var/in_mouth = ""
|
||||||
|
if(iscarbon(user))
|
||||||
|
var/mob/living/carbon/C = user
|
||||||
|
if(C.wear_mask == src)
|
||||||
|
in_mouth = ", barely missing their nose"
|
||||||
|
. = "<span class='warning'>[user] swings their \
|
||||||
|
[src][in_mouth]. They light [A] in the process.</span>"
|
||||||
|
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||||
|
add_fingerprint(user)
|
||||||
|
// Light your candles while spinning around the room
|
||||||
|
addtimer(src, "jedi_spin", 0, TRUE, user)
|
||||||
|
|
||||||
/obj/item/weapon/twohanded/dualsaber/green/New()
|
/obj/item/weapon/twohanded/dualsaber/green/New()
|
||||||
item_color = "green"
|
item_color = "green"
|
||||||
|
|
||||||
|
|||||||
@@ -219,5 +219,3 @@
|
|||||||
|
|
||||||
/obj/proc/CanAStarPass()
|
/obj/proc/CanAStarPass()
|
||||||
. = !density
|
. = !density
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
153
code/game/objects/structures/fireplace.dm
Normal file
153
code/game/objects/structures/fireplace.dm
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
#define LOG_BURN_TIMER 150
|
||||||
|
#define PAPER_BURN_TIMER 5
|
||||||
|
#define MAXIMUM_BURN_TIMER 3000
|
||||||
|
|
||||||
|
/obj/structure/fireplace
|
||||||
|
name = "fireplace"
|
||||||
|
desc = "A large stone brick fireplace."
|
||||||
|
icon = 'icons/obj/fireplace.dmi'
|
||||||
|
icon_state = "fireplace"
|
||||||
|
density = FALSE
|
||||||
|
anchored = TRUE
|
||||||
|
pixel_x = -16
|
||||||
|
burn_state = FIRE_PROOF
|
||||||
|
var/lit = FALSE
|
||||||
|
|
||||||
|
var/fuel_added = 0
|
||||||
|
var/flame_expiry_timer
|
||||||
|
|
||||||
|
/obj/structure/fireplace/New()
|
||||||
|
..()
|
||||||
|
START_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
|
/obj/structure/fireplace/Destroy()
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/try_light(obj/item/O, mob/user)
|
||||||
|
if(lit)
|
||||||
|
user << "<span class='warning'>It's already lit!</span>"
|
||||||
|
return FALSE
|
||||||
|
if(!fuel_added)
|
||||||
|
user << "<span class='warning'>[src] needs some fuel to burn!</span>"
|
||||||
|
return FALSE
|
||||||
|
var/msg = O.ignition_effect(src, user)
|
||||||
|
if(msg)
|
||||||
|
visible_message(msg)
|
||||||
|
ignite()
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/obj/structure/fireplace/attackby(obj/item/T, mob/user)
|
||||||
|
if(istype(T,/obj/item/stack/sheet/mineral/wood))
|
||||||
|
var/obj/item/stack/sheet/mineral/wood/wood = T
|
||||||
|
var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining()
|
||||||
|
var/space_for_logs = round(space_remaining / LOG_BURN_TIMER)
|
||||||
|
if(space_for_logs < 1)
|
||||||
|
user << "<span class='warning'>You can't fit any more of [T] in \
|
||||||
|
[src]!</span>"
|
||||||
|
return
|
||||||
|
var/logs_used = min(space_for_logs, wood.amount)
|
||||||
|
wood.use(logs_used)
|
||||||
|
adjust_fuel_timer(LOG_BURN_TIMER * logs_used)
|
||||||
|
user.visible_message("<span class='notice'>[user] tosses some \
|
||||||
|
wood into [src].</span>", "<span class='notice'>You add \
|
||||||
|
some fuel to [src].</span>")
|
||||||
|
else if(istype(T, /obj/item/weapon/paper_bin))
|
||||||
|
var/obj/item/weapon/paper_bin/paper_bin = T
|
||||||
|
user.visible_message("<span class='notice'>[user] throws [T] into \
|
||||||
|
[src].</span>", "<span class='notice'>You add [T] to [src].\
|
||||||
|
</span>")
|
||||||
|
adjust_fuel_timer(PAPER_BURN_TIMER * paper_bin.amount)
|
||||||
|
qdel(paper_bin)
|
||||||
|
else if(istype(T, /obj/item/weapon/paper))
|
||||||
|
user.visible_message("<span class='notice'>[user] throws [T] into \
|
||||||
|
[src].</span>", "<span class='notice'>You throw [T] into [src].\
|
||||||
|
</span>")
|
||||||
|
adjust_fuel_timer(PAPER_BURN_TIMER)
|
||||||
|
qdel(T)
|
||||||
|
else if(try_light(T,user))
|
||||||
|
return
|
||||||
|
else
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/structure/fireplace/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
if(lit)
|
||||||
|
switch(burn_time_remaining())
|
||||||
|
if(0 to 500)
|
||||||
|
add_overlay("fireplace_fire0")
|
||||||
|
if(500 to 1000)
|
||||||
|
add_overlay("fireplace_fire1")
|
||||||
|
if(1000 to 1500)
|
||||||
|
add_overlay("fireplace_fire2")
|
||||||
|
if(1500 to 2000)
|
||||||
|
add_overlay("fireplace_fire3")
|
||||||
|
if(2000 to MAXIMUM_BURN_TIMER)
|
||||||
|
add_overlay("fireplace_fire4")
|
||||||
|
add_overlay("fireplace_glow")
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/adjust_light()
|
||||||
|
if(!lit)
|
||||||
|
SetLuminosity(0)
|
||||||
|
return
|
||||||
|
|
||||||
|
switch(burn_time_remaining())
|
||||||
|
if(0 to 500)
|
||||||
|
SetLuminosity(1)
|
||||||
|
if(500 to 1000)
|
||||||
|
SetLuminosity(2)
|
||||||
|
if(1000 to 1500)
|
||||||
|
SetLuminosity(3)
|
||||||
|
if(1500 to 2000)
|
||||||
|
SetLuminosity(4)
|
||||||
|
if(2000 to MAXIMUM_BURN_TIMER)
|
||||||
|
SetLuminosity(6)
|
||||||
|
|
||||||
|
/obj/structure/fireplace/process()
|
||||||
|
if(!lit)
|
||||||
|
return
|
||||||
|
if(world.time > flame_expiry_timer)
|
||||||
|
put_out()
|
||||||
|
return
|
||||||
|
|
||||||
|
playsound(src, 'sound/effects/comfyfire.ogg',50,0, 0, 1)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
T.hotspot_expose(700, 5)
|
||||||
|
update_icon()
|
||||||
|
adjust_light()
|
||||||
|
|
||||||
|
/obj/structure/fireplace/extinguish()
|
||||||
|
if(lit)
|
||||||
|
var/fuel = burn_time_remaining()
|
||||||
|
flame_expiry_timer = 0
|
||||||
|
put_out()
|
||||||
|
adjust_fuel_timer(fuel)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/adjust_fuel_timer(amount)
|
||||||
|
if(lit)
|
||||||
|
flame_expiry_timer += amount
|
||||||
|
if(burn_time_remaining() < MAXIMUM_BURN_TIMER)
|
||||||
|
flame_expiry_timer = world.time + MAXIMUM_BURN_TIMER
|
||||||
|
else
|
||||||
|
fuel_added = Clamp(fuel_added + amount, 0, MAXIMUM_BURN_TIMER)
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/burn_time_remaining()
|
||||||
|
if(lit)
|
||||||
|
return max(0, flame_expiry_timer - world.time)
|
||||||
|
else
|
||||||
|
return max(0, fuel_added)
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/ignite()
|
||||||
|
lit = TRUE
|
||||||
|
desc = "A large stone brick fireplace, warm and cozy."
|
||||||
|
flame_expiry_timer = world.time + fuel_added
|
||||||
|
fuel_added = 0
|
||||||
|
update_icon()
|
||||||
|
adjust_light()
|
||||||
|
|
||||||
|
/obj/structure/fireplace/proc/put_out()
|
||||||
|
lit = FALSE
|
||||||
|
update_icon()
|
||||||
|
adjust_light()
|
||||||
|
desc = initial(desc)
|
||||||
@@ -15,8 +15,7 @@
|
|||||||
/obj/item/device/assembly/igniter/Destroy()
|
/obj/item/device/assembly/igniter/Destroy()
|
||||||
qdel(sparks)
|
qdel(sparks)
|
||||||
sparks = null
|
sparks = null
|
||||||
return ..()
|
. = ..()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/igniter/activate()
|
/obj/item/device/assembly/igniter/activate()
|
||||||
if(!..())
|
if(!..())
|
||||||
@@ -27,8 +26,12 @@
|
|||||||
sparks.start()
|
sparks.start()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/igniter/attack_self(mob/user)
|
/obj/item/device/assembly/igniter/attack_self(mob/user)
|
||||||
activate()
|
activate()
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
return
|
|
||||||
|
/obj/item/device/assembly/igniter/ignition_effect(atom/A, mob/user)
|
||||||
|
. = "<span class='notice'>[user] fiddles with [src], and manages to \
|
||||||
|
light [A].</span>"
|
||||||
|
activate()
|
||||||
|
add_fingerprint(user)
|
||||||
|
|||||||
@@ -17,58 +17,59 @@
|
|||||||
name = "Lumbermill"
|
name = "Lumbermill"
|
||||||
icon_state = "away3"
|
icon_state = "away3"
|
||||||
|
|
||||||
|
/obj/structure/firepit
|
||||||
|
name = "firepit"
|
||||||
|
|
||||||
|
|
||||||
/*Cabin code*/
|
|
||||||
/obj/structure/fireplace
|
|
||||||
name = "fireplace"
|
|
||||||
desc = "warm and toasty"
|
desc = "warm and toasty"
|
||||||
icon = 'icons/obj/stationobjs.dmi'
|
icon = 'icons/obj/fireplace.dmi'
|
||||||
icon_state = "fireplace-active"
|
icon_state = "firepit-active"
|
||||||
density = 0
|
density = 0
|
||||||
var/active = 1
|
var/active = 1
|
||||||
|
|
||||||
/obj/structure/fireplace/initialize()
|
/obj/structure/firepit/initialize()
|
||||||
..()
|
..()
|
||||||
toggleFireplace()
|
toggleFirepit()
|
||||||
|
|
||||||
/obj/structure/fireplace/attack_hand(mob/living/user)
|
/obj/structure/firepit/attack_hand(mob/living/user)
|
||||||
if(active)
|
if(active)
|
||||||
active = 0
|
active = 0
|
||||||
toggleFireplace()
|
toggleFirepit()
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/fireplace/attackby(obj/item/W,mob/living/user,params)
|
/obj/structure/firepit/attackby(obj/item/W,mob/living/user,params)
|
||||||
if(!active)
|
if(!active)
|
||||||
if(W.is_hot())
|
var/msg = W.ignition_effect(src, user)
|
||||||
active = 1
|
if(msg)
|
||||||
toggleFireplace()
|
active = TRUE
|
||||||
|
visible_message(msg)
|
||||||
|
toggleFirepit()
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
else
|
else
|
||||||
W.fire_act()
|
W.fire_act()
|
||||||
|
|
||||||
/obj/structure/fireplace/proc/toggleFireplace()
|
/obj/structure/firepit/proc/toggleFirepit()
|
||||||
if(active)
|
if(active)
|
||||||
SetLuminosity(8)
|
SetLuminosity(8)
|
||||||
icon_state = "fireplace-active"
|
icon_state = "firepit-active"
|
||||||
else
|
else
|
||||||
SetLuminosity(0)
|
SetLuminosity(0)
|
||||||
icon_state = "fireplace"
|
icon_state = "firepit"
|
||||||
|
|
||||||
/obj/structure/fireplace/extinguish()
|
/obj/structure/firepit/extinguish()
|
||||||
if(active)
|
if(active)
|
||||||
active = 0
|
active = FALSE
|
||||||
toggleFireplace()
|
toggleFirepit()
|
||||||
|
|
||||||
/obj/structure/fireplace/fire_act()
|
/obj/structure/firepit/fire_act()
|
||||||
if(!active)
|
if(!active)
|
||||||
active = 1
|
active = TRUE
|
||||||
toggleFireplace()
|
toggleFirepit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//other Cabin Stuff//
|
||||||
|
|
||||||
/obj/machinery/recycler/lumbermill
|
/obj/machinery/recycler/lumbermill
|
||||||
name = "lumbermill saw"
|
name = "lumbermill saw"
|
||||||
|
|||||||
@@ -11,18 +11,24 @@
|
|||||||
pressure_resistance = 8
|
pressure_resistance = 8
|
||||||
burn_state = FLAMMABLE
|
burn_state = FLAMMABLE
|
||||||
var/amount = 30 //How much paper is in the bin.
|
var/amount = 30 //How much paper is in the bin.
|
||||||
var/list/papers = new/list() //List of papers put in the bin for reference.
|
var/list/papers = list() //List of papers put in the bin for reference.
|
||||||
|
|
||||||
/obj/item/weapon/paper_bin/fire_act()
|
/obj/item/weapon/paper_bin/fire_act()
|
||||||
if(!amount)
|
if(!amount)
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/paper_bin/Destroy()
|
||||||
|
if(papers)
|
||||||
|
for(var/i in papers)
|
||||||
|
qdel(i)
|
||||||
|
papers = null
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/obj/item/weapon/paper_bin/burn()
|
/obj/item/weapon/paper_bin/burn()
|
||||||
amount = 0
|
amount = 0
|
||||||
extinguish()
|
extinguish()
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/paper_bin/MouseDrop(atom/over_object)
|
/obj/item/weapon/paper_bin/MouseDrop(atom/over_object)
|
||||||
var/mob/living/M = usr
|
var/mob/living/M = usr
|
||||||
|
|||||||
@@ -125,7 +125,6 @@
|
|||||||
G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0)
|
G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0)
|
||||||
G.react()
|
G.react()
|
||||||
qdel(hotspot)
|
qdel(hotspot)
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Water reaction to an object
|
* Water reaction to an object
|
||||||
|
|||||||
BIN
icons/obj/fireplace.dmi
Normal file
BIN
icons/obj/fireplace.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
BIN
sound/effects/comfyfire.ogg
Normal file
BIN
sound/effects/comfyfire.ogg
Normal file
Binary file not shown.
@@ -740,6 +740,7 @@
|
|||||||
#include "code\game\objects\structures\extinguisher.dm"
|
#include "code\game\objects\structures\extinguisher.dm"
|
||||||
#include "code\game\objects\structures\false_walls.dm"
|
#include "code\game\objects\structures\false_walls.dm"
|
||||||
#include "code\game\objects\structures\fireaxe.dm"
|
#include "code\game\objects\structures\fireaxe.dm"
|
||||||
|
#include "code\game\objects\structures\fireplace.dm"
|
||||||
#include "code\game\objects\structures\flora.dm"
|
#include "code\game\objects\structures\flora.dm"
|
||||||
#include "code\game\objects\structures\fluff.dm"
|
#include "code\game\objects\structures\fluff.dm"
|
||||||
#include "code\game\objects\structures\ghost_role_spawners.dm"
|
#include "code\game\objects\structures\ghost_role_spawners.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user