mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-12 07:35:31 +01:00
Flammable Items, Abstractness, and hypnosis (#19267)
* Laser Eyes * Update dna.dm * Mecha * Update positive_genes.dm * These * These 2 * yeh * Rest of these * Update turf.dm * Update food.dm * Some moar * mooove * Update vorestation.dme * Update burning.dm * firesuit * flags * HYPNOCOLOR * xd * no filter * dc * Update ore_bag.dm * Update misc.dm * Update misc.dm
This commit is contained in:
@@ -6,6 +6,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
*/
|
||||
/obj/effect
|
||||
light_on = TRUE
|
||||
uses_integrity = FALSE
|
||||
|
||||
/obj/effect/effect
|
||||
name = "effect"
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
A.anchored = TRUE
|
||||
A.state = 2
|
||||
A.update_icon()
|
||||
M.deconstruct(src)
|
||||
M.atom_deconstruct(TRUE, src)
|
||||
qdel(src)
|
||||
else
|
||||
src.attack_hand(user)
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
craftable = TRUE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/*
|
||||
* Wood
|
||||
@@ -102,6 +103,7 @@
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wooden.ogg'
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/stack/tile/wood/alt
|
||||
name = "wood floor tile"
|
||||
@@ -396,6 +398,7 @@
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/stack/tile/carpet/teal
|
||||
desc = "A piece of teal carpet. It is the same size as a normal floor tile!"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
//Called when a computer is deconstructed to produce a circuitboard.
|
||||
//Only used by computers, as other machines store their circuitboard instance.
|
||||
/obj/item/circuitboard/proc/deconstruct(var/obj/machinery/M)
|
||||
/obj/item/circuitboard/atom_deconstruct(disassembled = TRUE, var/obj/machinery/M)
|
||||
if(istype(M, build_path))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -25,6 +25,6 @@
|
||||
if (..(C))
|
||||
C.frequency = frequency
|
||||
|
||||
/obj/item/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C)
|
||||
/obj/item/circuitboard/air_management/atom_deconstruct(disassembled = TRUE, var/obj/machinery/computer/general_air_control/C)
|
||||
if (..(C))
|
||||
frequency = C.frequency
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if (..(C))
|
||||
C.set_network(network.Copy())
|
||||
|
||||
/obj/item/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
|
||||
/obj/item/circuitboard/security/atom_deconstruct(disassembled = TRUE, var/obj/machinery/computer/security/C)
|
||||
if (..(C))
|
||||
network = C.network.Copy()
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/shuttle_tag = null // If set, link constructed console to this shuttle. If null, auto-detect.
|
||||
hidden = TRUE // todo - Make properly constructable in round
|
||||
|
||||
/obj/item/circuitboard/shuttle_console/deconstruct(obj/machinery/computer/shuttle_control/M)
|
||||
/obj/item/circuitboard/shuttle_console/atom_deconstruct(disassembled = TRUE, obj/machinery/computer/shuttle_control/M)
|
||||
shuttle_tag = M.shuttle_tag
|
||||
if(shuttle_tag)
|
||||
name = T_BOARD("[shuttle_tag] control console")
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
if (..(SC))
|
||||
SC.can_order_contraband = contraband_enabled
|
||||
|
||||
/obj/item/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC)
|
||||
/obj/item/circuitboard/supplycomp/atom_deconstruct(disassembled = TRUE, var/obj/machinery/computer/supplycomp/SC)
|
||||
if (..(SC))
|
||||
contraband_enabled = SC.can_order_contraband
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
||||
///Var used for attack_hand chain.
|
||||
var/special_handling = FALSE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/a_gift/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
max_storage_space = ITEMSIZE_SMALL * 21
|
||||
can_hold = list() // any
|
||||
cant_hold = list(/obj/item/disk/nuclear)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/storage/bag/trash/update_icon()
|
||||
if(contents.len == 0)
|
||||
@@ -68,6 +69,7 @@
|
||||
origin_tech = list(TECH_BLUESPACE = 3)
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 10 // Slightly less than BoH
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/bag/trash/holding/update_icon()
|
||||
return
|
||||
@@ -87,6 +89,7 @@
|
||||
max_w_class = ITEMSIZE_SMALL
|
||||
can_hold = list() // any
|
||||
cant_hold = list(/obj/item/disk/nuclear)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Plant bag
|
||||
@@ -100,6 +103,7 @@
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/storage/bag/plants/large
|
||||
name = "large plant bag"
|
||||
@@ -124,6 +128,7 @@
|
||||
storage_slots = 7
|
||||
|
||||
allow_quick_empty = 1 // this function is superceded
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
||||
if(!istype(W,/obj/item/stack/material))
|
||||
@@ -281,6 +286,7 @@
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/coin,/obj/item/spacecash,/obj/item/spacecasinocash)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Chemistry Bag
|
||||
@@ -294,6 +300,7 @@
|
||||
w_class = ITEMSIZE_LARGE
|
||||
slowdown = 1 //you probably shouldn't be running with chemicals
|
||||
can_hold = list(/obj/item/reagent_containers/pill,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/hypospray/autoinjector)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Xeno Bag
|
||||
@@ -307,6 +314,7 @@
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/slime_extract,/obj/item/slimepotion, /obj/item/reagent_containers/food/snacks/monkeycube)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Virology Bag
|
||||
@@ -319,7 +327,8 @@
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/reagent_containers/glass/beaker/vial/)
|
||||
can_hold = list(/obj/item/reagent_containers/glass/beaker/vial)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag
|
||||
@@ -333,6 +342,7 @@
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/reagent_containers/food/snacks,/obj/item/reagent_containers/food/condiment)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag (Service Hound)
|
||||
@@ -348,6 +358,7 @@
|
||||
can_hold = list(/obj/item/reagent_containers/food/snacks,/obj/item/reagent_containers/food/condiment,
|
||||
/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle,/obj/item/coin,/obj/item/spacecash,
|
||||
/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/pill)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
// -----------------------------
|
||||
// Evidence Bag
|
||||
@@ -361,6 +372,7 @@
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/forensics/swab,/obj/item/sample/print,/obj/item/sample/fibers,/obj/item/evidencebag)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// -----------------------------
|
||||
// Santa bag
|
||||
@@ -377,6 +389,7 @@
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 100 // can store a ton of shit!
|
||||
can_hold = list() // any
|
||||
cant_hold = list(/obj/item/disk/nuclear)
|
||||
resistance_flags = FIRE_PROOF //ho ho ho
|
||||
|
||||
/obj/item/storage/bag/santabag/update_icon()
|
||||
if(contents.len < 10)
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
use_sound = 'sound/items/storage/box.ogg'
|
||||
drop_sound = 'sound/items/drop/cardboardbox.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
// BubbleWrap - A box can be folded up to make card
|
||||
/obj/item/storage/box/attack_self(mob/user)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/obj/item/storage/internal
|
||||
preserve_item = 1
|
||||
var/obj/item/master_item
|
||||
item_flags = ABSTRACT
|
||||
|
||||
/obj/item/storage/internal/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
allow_quick_gather = 1
|
||||
collection_mode = 1
|
||||
var/linked
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
|
||||
/obj/item/storage/laundry_basket/attack_hand(mob/living/user as mob)
|
||||
|
||||
@@ -43,19 +43,21 @@
|
||||
var/last_update = 0
|
||||
drop_sound = 'sound/items/drop/backpack.ogg'
|
||||
pickup_sound = 'sound/items/pickup/backpack.ogg'
|
||||
item_flags = FLAMMABLE
|
||||
|
||||
/obj/item/ore_bag/holding
|
||||
name = "mining satchel of holding"
|
||||
desc = "Like a mining satchel, but when you put your hand in, you're pretty sure you can feel time itself."
|
||||
icon_state = "satchel_bspace"
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 15000 // This should never, ever, ever be reached.
|
||||
item_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/ore_bag/sleeper
|
||||
name = "processing chamber"
|
||||
desc = "A mining satchel built into a sleeper. VORE!!!"
|
||||
icon_state = "satchel_bspace"
|
||||
max_storage_space = 500
|
||||
//item_flags = ABSTRACT //Enable once we have abstract PR merged.
|
||||
item_flags = INDESTRUCTIBLE | ABSTRACT
|
||||
|
||||
/obj/item/ore_bag/attackby(obj/item/W, mob/user)
|
||||
if(current_capacity >= max_storage_space)
|
||||
|
||||
@@ -596,6 +596,7 @@ GLOBAL_LIST_EMPTY(tank_gauge_cache)
|
||||
desc = "Used as a stand in to trigger single tank assemblies... but you shouldn't see this."
|
||||
var/obj/item/tank/tank = null
|
||||
var/obj/item/assembly_holder/assembly = null
|
||||
item_flags = ABSTRACT
|
||||
|
||||
|
||||
/obj/item/tankassemblyproxy/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
///Var for attack_self chainn
|
||||
var/special_handling = FALSE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/mail/container_resist(mob/living/M)
|
||||
if(istype(M, /mob/living/voice)) return
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
///Called when the obj is exposed to fire.
|
||||
/obj/fire_act(exposed_temperature, exposed_volume)
|
||||
if(HAS_TRAIT(src, TRAIT_UNDERFLOOR))
|
||||
return
|
||||
var/potential_damage = 0.02 * exposed_temperature
|
||||
if(exposed_temperature && !(resistance_flags & FIRE_PROOF) && (potential_damage > damage_deflection))
|
||||
take_damage(clamp(potential_damage, 0, 20), BURN, FIRE, 0)
|
||||
if(QDELETED(src)) // take_damage() can send our obj to an early grave, let's stop here if that happens
|
||||
return
|
||||
if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF))
|
||||
AddComponent(/datum/component/burning, custom_fire_overlay() || GLOB.fire_overlay, burning_particles)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/// Returns a custom fire overlay, if any
|
||||
/obj/proc/custom_fire_overlay()
|
||||
return custom_fire_overlay
|
||||
|
||||
///called when the obj is destroyed by acid.
|
||||
/obj/proc/acid_melt()
|
||||
deconstruct(FALSE)
|
||||
|
||||
/// Should be called when the atom is destroyed by fire, comparable to acid_melt() proc
|
||||
/obj/proc/burn()
|
||||
deconstruct(FALSE)
|
||||
|
||||
/**
|
||||
* Custom behaviour per atom subtype on how they should deconstruct themselves
|
||||
* Arguments
|
||||
*
|
||||
* * disassembled - TRUE means we cleanly took this atom apart using tools. FALSE means this was destroyed in a violent way
|
||||
*/
|
||||
/obj/proc/atom_deconstruct(disassembled = TRUE)
|
||||
PROTECTED_PROC(TRUE)
|
||||
|
||||
return
|
||||
|
||||
/**
|
||||
* The interminate proc between deconstruct() & atom_deconstruct(). By default this delegates deconstruction to
|
||||
* atom_deconstruct if NO_DEBRIS_AFTER_DECONSTRUCTION is absent but subtypes can override this to handle NO_DEBRIS_AFTER_DECONSTRUCTION in their
|
||||
* own unique way. Override this if for example you want to dump out important content like mobs from the
|
||||
* atom before deconstruction regardless if NO_DEBRIS_AFTER_DECONSTRUCTION is present or not
|
||||
* Arguments
|
||||
*
|
||||
* * disassembled - TRUE means we cleanly took this atom apart using tools. FALSE means this was destroyed in a violent way
|
||||
*/
|
||||
/obj/proc/handle_deconstruct(disassembled = TRUE)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
|
||||
if(!(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION))
|
||||
atom_deconstruct(disassembled)
|
||||
|
||||
/obj/proc/deconstruct(disassembled = TRUE)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
//allow objects to deconstruct themselves
|
||||
handle_deconstruct(disassembled)
|
||||
|
||||
//inform objects we were deconstructed
|
||||
SEND_SIGNAL(src, COMSIG_OBJ_DECONSTRUCT, disassembled)
|
||||
|
||||
for(var/obj/item/item in contents)
|
||||
if(item.item_flags & ABSTRACT)
|
||||
continue
|
||||
item.forceMove(get_turf(src))
|
||||
|
||||
//delete our self
|
||||
qdel(src)
|
||||
|
||||
///what happens when the obj's integrity reaches zero.
|
||||
/obj/atom_destruction(damage_flag)
|
||||
. = ..()
|
||||
if(damage_flag == ACID)
|
||||
acid_melt()
|
||||
else if(damage_flag == FIRE)
|
||||
burn()
|
||||
else
|
||||
deconstruct(FALSE)
|
||||
@@ -18,6 +18,15 @@
|
||||
var/micro_target = FALSE
|
||||
var/explosion_resistance
|
||||
|
||||
/// Cached custom fire overlay
|
||||
var/custom_fire_overlay
|
||||
/// Particles this obj uses when burning, if any
|
||||
var/burning_particles
|
||||
|
||||
var/obj_flags = CAN_BE_HIT
|
||||
|
||||
uses_integrity = TRUE
|
||||
|
||||
/obj/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ LINEN BINS
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
///var used for attack_self chain
|
||||
var/special_handling = FALSE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/bedsheet/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
var/datum/material/material
|
||||
var/set_temperature = T0C + 30 //K
|
||||
var/heating_power = 80000
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/structure/bonfire/Initialize(mapload, material_name)
|
||||
. = ..()
|
||||
@@ -170,7 +171,7 @@
|
||||
START_PROCESSING(SSobj, src)
|
||||
visible_message(span_warning("\The [src] starts burning!"))
|
||||
|
||||
/obj/structure/bonfire/proc/burn()
|
||||
/obj/structure/bonfire/proc/burn_bonfire()
|
||||
var/turf/current_location = get_turf(src)
|
||||
current_location.hotspot_expose(1000, 500)
|
||||
for(var/A in current_location)
|
||||
@@ -225,7 +226,7 @@
|
||||
extinguish()
|
||||
return
|
||||
if(!grill)
|
||||
burn()
|
||||
burn_bonfire()
|
||||
|
||||
if(burning)
|
||||
var/W = get_fuel_amount()
|
||||
@@ -279,6 +280,7 @@
|
||||
var/next_fuel_consumption = 0
|
||||
var/set_temperature = T0C + 20 //K
|
||||
var/heating_power = 40000
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/structure/fireplace/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/stack/material/wood) || istype(W, /obj/item/stack/material/log) )
|
||||
@@ -365,7 +367,7 @@
|
||||
START_PROCESSING(SSobj, src)
|
||||
visible_message(span_warning("\The [src] starts burning!"))
|
||||
|
||||
/obj/structure/fireplace/proc/burn()
|
||||
/obj/structure/fireplace/proc/burn_bonfire()
|
||||
var/turf/current_location = get_turf(src)
|
||||
current_location.hotspot_expose(1000, 500)
|
||||
for(var/A in current_location)
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/catwalk/proc/deconstruct(mob/user)
|
||||
/obj/structure/catwalk/atom_deconstruct(disassembled = TRUE, mob/user)
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
to_chat(user, span_notice("Slicing \the [src] joints ..."))
|
||||
//Lattice would delete itself, but let's save ourselves a new obj
|
||||
@@ -97,7 +97,7 @@
|
||||
if(C.has_tool_quality(TOOL_WELDER))
|
||||
var/obj/item/weldingtool/WT = C.get_welder()
|
||||
if(WT.isOn() && WT.remove_fuel(0, user))
|
||||
deconstruct(user)
|
||||
atom_deconstruct(TRUE, user)
|
||||
return
|
||||
if(C.has_tool_quality(TOOL_CROWBAR) && plated_tile)
|
||||
hatch_open = !hatch_open
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/flapping
|
||||
var/obj_integrity = 100
|
||||
var/original_int = 100
|
||||
var/max_integrity = 100
|
||||
max_integrity = 100
|
||||
var/stored_examine
|
||||
var/identifier = "statue"
|
||||
var/material = "stone"
|
||||
|
||||
@@ -261,6 +261,7 @@
|
||||
applies_material_colour = 1
|
||||
var/sofa_material = MAT_CARPET
|
||||
var/corner_piece = FALSE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/structure/bed/chair/sofa/update_icon()
|
||||
if(applies_material_colour && sofa_material)
|
||||
|
||||
Reference in New Issue
Block a user