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:
Cameron Lennox
2026-04-13 00:30:02 -04:00
committed by GitHub
parent ee2fd148ae
commit d8c1932cb9
145 changed files with 791 additions and 203 deletions
@@ -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.
+1
View File
@@ -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
+79
View File
@@ -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)
+9
View File
@@ -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)
. = ..()
+5 -3
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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)