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
+1 -1
View File
@@ -151,7 +151,7 @@
icon_state = "mecha_honker"
energy_drain = 200
equip_cooldown = 150
range = MELEE|RANGED
range = MECH_MELEE|RANGED
can_attach(obj/mecha/combat/honker/M as obj)
if(!istype(M))
+2 -2
View File
@@ -44,8 +44,8 @@
if("Power")
to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost..."))
to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."))
if (!(LASER in user.mutations))
user.mutations.Add(LASER)
if (!(LASER_EYES in user.mutations))
user.mutations.Add(LASER_EYES)
to_chat(user, span_notice("You feel pressure building behind your eyes."))
if (!(COLD_RESISTANCE in user.mutations))
user.mutations.Add(COLD_RESISTANCE)
+2 -2
View File
@@ -157,7 +157,7 @@ Pipelines + Other Objects -> Pipe network
return TRUE
// Deconstruct into a pipe item.
/obj/machinery/atmospherics/proc/deconstruct()
/obj/machinery/atmospherics/atom_deconstruct()
if(QDELETED(src))
return
if(construction_type)
@@ -258,7 +258,7 @@ Pipelines + Other Objects -> Pipe network
var/datum/gas_mixture/int_air = return_air()
var/datum/gas_mixture/env_air = our_turf.return_air()
var/internal_pressure = int_air.return_pressure()-env_air.return_pressure()
deconstruct()
atom_deconstruct()
// Release pressure
playsound(our_turf, 'sound/effects/bang.ogg', 70, 0, 0)
playsound(our_turf, 'sound/effects/clang2.ogg', 70, 0, 0)
@@ -292,7 +292,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear ratchet.")
deconstruct()
atom_deconstruct()
#undef REGULATE_NONE
#undef REGULATE_INPUT
@@ -253,7 +253,7 @@ Thus, the two variables affect pump operation are set in New():
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/binary/pump/click_alt(mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
@@ -292,7 +292,7 @@ Thus, the two variables affect pump operation are set in New():
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/binary/volume_pump/proc/multitool_act(var/obj/item/W as obj, var/mob/user as mob)
if(!overclocked)
@@ -95,7 +95,7 @@
span_infoplain(span_bold("\The [user]") + "unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/omni/attack_hand(user as mob)
if(..())
@@ -165,4 +165,4 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
@@ -65,7 +65,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
// Housekeeping and pipe network stuff below
/obj/machinery/atmospherics/trinary/get_neighbor_nodes_for_init()
+1 -1
View File
@@ -340,7 +340,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/tvalve/mirrored
icon_state = "map_tvalvem0"
@@ -88,4 +88,4 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
@@ -198,7 +198,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/unary/outlet_injector/click_ctrl(mob/user)
if (volume_rate == ATMOS_DEFAULT_VOLUME_PUMP + 500 || use_power == USE_POWER_OFF)
@@ -442,7 +442,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/unary/vent_pump/proc/multitool_act(obj/item/W, mob/user)
var/list/options = list(
@@ -315,7 +315,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
. = ..()
+1 -1
View File
@@ -304,7 +304,7 @@
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
span_notice("You have unfastened \the [src]."), \
"You hear a ratchet.")
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/valve/examine(mob/user)
. = ..()
+1 -1
View File
@@ -161,7 +161,7 @@
span_hear("You hear a ratchet."))
if(unsafe_wrenching)
unsafe_pressure_release(user, internal_pressure)
deconstruct()
atom_deconstruct()
/obj/machinery/atmospherics/pipe/proc/change_color(var/new_color)
//only pass valid pipe colors please ~otherwise your pipe will turn invisible
+20
View File
@@ -1,6 +1,26 @@
/// 33554431 (2^24 - 1) is the maximum value our bitflags can reach.
#define MAX_BITFLAG_DIGITS 8
//Fire and Acid stuff, for resistance_flags
#define LAVA_PROOF (1<<0)
/// 100% immune to fire damage (but not necessarily to lava or heat)
#define FIRE_PROOF (1<<1)
/// atom is flammable and can have the burning component
#define FLAMMABLE (1<<2)
/// currently burning
#define ON_FIRE (1<<3)
/// acid can't even appear on it, let alone melt it.
#define UNACIDABLE (1<<4)
/// acid stuck on it doesn't melt it.
#define ACID_PROOF (1<<5)
/// doesn't take damage
#define INDESTRUCTIBLE (1<<6)
/// can't be frozen
#define FREEZE_PROOF (1<<7)
/// can't be shuttle crushed.
#define SHUTTLE_CRUSH_PROOF (1<<8)
/// can't be destroyed by bombs
#define BOMB_PROOF (1<<9)
///Object will protect itself.
#define EMP_PROTECT_SELF (1<<0)
///Object will protect its contents from being EMPed.
+3
View File
@@ -100,3 +100,6 @@
#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
#define TANK_DEFAULT_RELEASE_PRESSURE ONE_ATMOSPHERE
#define MAX_ATMOS_TEMPERATURE 1e30 //Without having a max temp, you can get .inf temps
///Minimum temperature for items on fire
#define BURNING_ITEM_MINIMUM_TEMPERATURE (150+T0C)
+28
View File
@@ -0,0 +1,28 @@
//We will round to this value in damage calculations.
#define DAMAGE_PRECISION 0.1
//Damage flag defines //
/// Involves corrosive substances.
#define ACID "acid"
/// Involved in checking whether a disease can infect or spread. Also involved in xeno neurotoxin.
#define BIO "bio"
/// Involves a shockwave, usually from an explosion.
#define BOMB "bomb"
/// Involves a solid projectile.
#define BULLET "bullet"
/// Involves being eaten
#define CONSUME "consume"
/// Involves an EMP or energy-based projectile.
#define ENERGY "energy"
/// Involves fire or temperature extremes.
#define FIRE "fire"
/// Involves a laser.
#define LASER "laser"
/// Involves a melee attack or a thrown object.
#define MELEE "melee"
/// Involved in checking the likelihood of applying a wound to a mob.
#define WOUND "wound"
/// Calculates the new armour value after armour penetration. Can return negative values, and those must be caught.
#define PENETRATE_ARMOUR(armour, penetration) (penetration >= 100 ? 0 : 100 * (armour - penetration) / (100 - penetration))
+1 -1
View File
@@ -11,7 +11,7 @@
#define FAT 6
#define HUSK 7
#define NOCLONE 8
#define LASER 9 // Harm intent - click anywhere to shoot lasers from eyes.
#define LASER_EYES 9 // Harm intent - click anywhere to shoot lasers from eyes.
#define HEAL 10 // Healing people with hands.
#define FLASHPROOF 11 // Flashproof eyes.
+7
View File
@@ -50,6 +50,13 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define INFINITE_AIR (1<<6) // Provides an infinite air supply.
#define NOSTRIP (1<<7) // Items that should never get stripped
#define DROPDEL (1<<8) // Items that delete upon being dropped
/**
* for all things that are technically items but don't want to be treated as such, given on a case-by-case basis
* examples of use are hand items, omni-toolsets, non-limb limbs (hand eater, mounted chainsaw, many null rods), borg modules, bodyparts, organs, etc.
* This is used for general exclusion, such as preventing insertions into other items
* Basically, these aren't "real" items. <= wow thanks for the fucking insight sherlock
*/
#define ABSTRACT (1<<9)
// Flags for pass_flags. - Used in /atom/var/pass_flags
#define PASSTABLE (1<<0)
+1 -1
View File
@@ -8,7 +8,7 @@
#define MECHA_PROC_DAMAGE 2
#define MECHA_PROC_INT_TEMP 4
#define MELEE 1
#define MECH_MELEE 1
#define RANGED 2
#define MECH_FACTION_NT "nano"
+32
View File
@@ -1,3 +1,35 @@
// Flags for the obj_flags var on /obj
/// Object has been affected by a cryptographic sequencer (EMAG) disabling it or causing other malicious effects
#define EMAGGED (1<<0)
/// Can this be bludgeoned by items
#define CAN_BE_HIT (1<<1)
/// Admin possession yes/no
#define DANGEROUS_POSSESSION (1<<2)
/// Can you customize the description/name of the thing
#define UNIQUE_RENAME (1<<3)
/// If it can be renamed, is its description excluded
#define RENAME_NO_DESC (1<<4)
/// Should this object block z falling from loc
#define BLOCK_Z_OUT_DOWN (1<<5)
/// Should this object block z uprise from loc
#define BLOCK_Z_OUT_UP (1<<6)
/// Should this object block z falling from above
#define BLOCK_Z_IN_DOWN (1<<7)
/// Should this object block z uprise from below
#define BLOCK_Z_IN_UP (1<<8)
/// Does this object prevent things from being built on it
#define BLOCKS_CONSTRUCTION (1<<9)
/// Does this object prevent same-direction things from being built on it
#define BLOCKS_CONSTRUCTION_DIR (1<<10)
/// Can we ignore density when building on this object (for example, directional windows and grilles)
#define IGNORE_DENSITY (1<<11)
/// Can this object conduct electricity
#define CONDUCTS_ELECTRICITY (1<<12)
/// Atoms don't spawn anything when deconstructed (they just vanish)
#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<13)
/// Flag which tells an object to hang onto an support atom on late initialize. Usefull only during mapload and supported by some atoms only
#define MOUNT_ON_LATE_INITIALIZE (1<<14)
/// Flags for specifically what kind of items to get in get_equipped_items
#define INCLUDE_POCKETS (1<<0)
#define INCLUDE_ACCESSORIES (1<<1)
+2
View File
@@ -163,6 +163,8 @@
#define span_lightpurple(str) ("<span class='lightpurple'>" + str + "</span>")
#define span_darkpink(str) ("<span class='darkpink'>" + str + "</span>")
#define span_rose(str) ("<span class='rose'>" + str + "</span>")
#define span_hypnophrase(str) ("<span class='hypnophrase'>" + str + "</span>")
/* System and Debug */
// System filter
+1
View File
@@ -131,6 +131,7 @@
#define FIRE_PRIORITY_CHARSETUP 25
#define FIRE_PRIORITY_AIRFLOW 30
#define FIRE_PRIORITY_AIR 35
#define FIRE_PRIORITY_BURNING 40
#define FIRE_PRIORITY_OBJ 40
#define FIRE_PRIORITY_PROCESS 45
#define FIRE_PRIORITY_THROWING 45
+5
View File
@@ -57,6 +57,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_ELECTROVORE_OBLIGATE "electrovore_obligate"
// adds wet stacks when licking someone
#define TRAIT_SLOBBER "slobber"
/// Trait from being under the floor in some manner
#define TRAIT_UNDERFLOOR "underfloor"
#define TRAIT_RESISTHEAT "resist_heat"
/// For when you want to be able to touch hot things, but still want fire to be an issue.
#define TRAIT_RESISTHEATHANDS "resist_heat_handsonly"
// Owner will be considered a tiny mob for some interactions, such as airlocks not opening unless they have a client, or being vacuumed up by the vacpack
#define TRAIT_AMBIENT_PEST_MOB "ambient_pest_mob"
///Trait given by /datum/component/germ_sensitive
+1 -1
View File
@@ -246,7 +246,7 @@
*/
/mob/proc/RangedAttack(var/atom/A, var/params)
if(!mutations.len) return
if((LASER in mutations) && a_intent == I_HURT)
if((LASER_EYES in mutations) && a_intent == I_HURT)
LaserEyes(A) // moved into a proc below
else if(has_telegrip())
if(get_dist(src, A) > TK_MAXRANGE)
+1 -4
View File
@@ -2,9 +2,6 @@
/atom/proc/attack_generic(mob/user as mob)
return 0
/atom/proc/take_damage(var/damage)
return 0
/*
Humans:
Adds an exception for gloves, to allow special glove types like the ninja ones.
@@ -47,7 +44,7 @@
if(!gloves && !mutations.len && !spitting)
return
var/obj/item/clothing/gloves/G = gloves
if((LASER in mutations) && a_intent == I_HURT)
if((LASER_EYES in mutations) && a_intent == I_HURT)
LaserEyes(A) // moved into a proc below
else if(istype(G) && G.Touch(A,0)) // for magic gloves
@@ -0,0 +1,6 @@
/// The subsystem used to tick [/datum/component/burning] instances.
PROCESSING_SUBSYSTEM_DEF(burning)
name = "Burning"
priority = FIRE_PRIORITY_BURNING
flags = SS_NO_INIT|SS_BACKGROUND
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+115
View File
@@ -0,0 +1,115 @@
GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/effects/fire.dmi', "fire", appearance_flags = RESET_COLOR|KEEP_APART))
/**
* Component representing an atom being on fire.
* Should not be used on mobs, they use the fire stacks status effects.
* Can only be used on atoms that use the integrity system.
*/
/datum/component/burning
/// Fire overlay appearance we apply
var/fire_overlay
/// Particle holder for fire particles, if any. Still utilized over shared holders because they're movable-only
var/obj/effect/abstract/particle_holder/particle_effect
/// Particle type we're using for cleaning up our shared holder
var/particle_type
/datum/component/burning/Initialize(fire_overlay = GLOB.fire_overlay, fire_particles = /particles/smoke/burning)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
var/atom/atom_parent = parent
if(!atom_parent.uses_integrity)
stack_trace("Tried to add /datum/component/burning to an atom ([atom_parent.type]) that does not use atom_integrity!")
return COMPONENT_INCOMPATIBLE
// only flammable atoms should have this component, but it's not really an error if we try to apply this to a non flammable one
if(!(atom_parent.resistance_flags & FLAMMABLE) || (atom_parent.resistance_flags & FIRE_PROOF))
qdel(src)
return
src.fire_overlay = fire_overlay
if (fire_particles)
if(ismovable(parent))
var/atom/movable/movable_parent = parent
// burning particles look pretty bad when they stack on mobs, so that behavior is not wanted for items
movable_parent.add_shared_particles(fire_particles, "[fire_particles]_[isitem(parent)]", isitem(parent) ? NONE : PARTICLE_ATTACH_MOB)
particle_type = fire_particles
else
particle_effect = new(atom_parent, fire_particles)
START_PROCESSING(SSburning, src)
/datum/component/burning/Destroy(force)
STOP_PROCESSING(SSburning, src)
fire_overlay = null
if(particle_effect)
QDEL_NULL(particle_effect)
if (ismovable(parent) && particle_type)
var/atom/movable/movable_parent = parent
movable_parent.remove_shared_particles("[particle_type]_[isitem(parent)]")
return ..()
/datum/component/burning/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand))
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays))
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
RegisterSignal(parent, COMSIG_ATOM_EXTINGUISH, PROC_REF(on_extinguish))
var/atom/atom_parent = parent
atom_parent.resistance_flags |= ON_FIRE
atom_parent.update_icon()
/datum/component/burning/UnregisterFromParent()
UnregisterSignal(parent, list(
COMSIG_ATOM_ATTACK_HAND,
COMSIG_ATOM_UPDATE_OVERLAYS,
COMSIG_ATOM_EXAMINE,
COMSIG_ATOM_EXTINGUISH,
))
var/atom/atom_parent = parent
if(!QDELETED(atom_parent))
atom_parent.resistance_flags &= ~ON_FIRE
atom_parent.update_icon()
/datum/component/burning/process(seconds_per_tick)
var/atom/atom_parent = parent
// Check if the parent somehow became fireproof, remove component if so
if(atom_parent.resistance_flags & FIRE_PROOF)
atom_parent.extinguish()
return
atom_parent.take_damage(10 * seconds_per_tick, BURN, FIRE, FALSE)
/// Alerts any examiners that the parent is on fire (even though it should be rather obvious)
/datum/component/burning/proc/on_examine(atom/source, mob/user, list/examine_list)
SIGNAL_HANDLER
examine_list += span_danger("[source.p_Theyre()] burning!")
/// Handles searing the hand of anyone who tries to touch parent without protection.
/datum/component/burning/proc/on_attack_hand(atom/source, mob/living/carbon/user)
SIGNAL_HANDLER
if(!iscarbon(user) || user.can_touch_burning(source))
to_chat(user, span_notice("You put out the fire on [source]."))
source.extinguish()
return COMPONENT_CANCEL_ATTACK_CHAIN
user.apply_damage(5, BURN, user.get_active_hand())
to_chat(user, span_userdanger("You burn your hand on [source]!"))
user.emote("scream")
playsound(source, 'sound/items/weapons/sear.ogg', 50, TRUE)
return COMPONENT_CANCEL_ATTACK_CHAIN
/// Maintains the burning overlay on the parent atom
/datum/component/burning/proc/on_update_overlays(atom/source, list/overlays)
SIGNAL_HANDLER
//most likely means the component is being removed
if(!(source.resistance_flags & ON_FIRE))
return
if(fire_overlay)
overlays += fire_overlay
/// Deletes the component when the atom gets extinguished
/datum/component/burning/proc/on_extinguish(atom/source, list/overlays)
SIGNAL_HANDLER
qdel(src)
+3
View File
@@ -73,6 +73,7 @@
w_class = ITEMSIZE_SMALL
throw_speed = 4
throw_range = 5
resistance_flags = FLAMMABLE
/obj/item/disk
name = "disk"
@@ -86,6 +87,7 @@
icon_state = "nucleardisk"
item_state = "card-id"
w_class = ITEMSIZE_SMALL
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF
/*
/obj/item/game_kit
@@ -109,6 +111,7 @@
var/obj/item/gift = null
item_state = "gift"
w_class = ITEMSIZE_LARGE
resistance_flags = FLAMMABLE
/*/obj/item/syndicate_uplink
name = "station bounced radio"
+109
View File
@@ -0,0 +1,109 @@
/atom
///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error
var/uses_integrity = FALSE
VAR_PRIVATE/atom_integrity //defaults to max_integrity
var/max_integrity = 500
var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50%
///Damage under this value will be completely ignored
var/damage_deflection = 0
var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF
/// The essential proc to call when an atom must receive damage of any kind.
/atom/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
if(!uses_integrity)
CRASH("[src] had /atom/proc/take_damage() called on it without it being a type that has uses_integrity = TRUE!")
if(QDELETED(src))
CRASH("[src] taking damage after deletion")
if(atom_integrity <= 0)
CRASH("[src] taking damage while having <= 0 integrity")
if(sound_effect)
play_attack_sound(damage_amount, damage_type, damage_flag)
if(resistance_flags & INDESTRUCTIBLE)
return
damage_amount = run_atom_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration)
if(damage_amount < DAMAGE_PRECISION)
return
if(SEND_SIGNAL(src, COMSIG_ATOM_TAKE_DAMAGE, damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) & COMPONENT_NO_TAKE_DAMAGE)
return
. = damage_amount
var/previous_atom_integrity = atom_integrity
update_integrity(atom_integrity - damage_amount)
var/integrity_failure_amount = integrity_failure * max_integrity
//BREAKING FIRST
if(integrity_failure && previous_atom_integrity > integrity_failure_amount && atom_integrity <= integrity_failure_amount)
atom_break(damage_flag)
//DESTROYING SECOND
if(atom_integrity <= 0 && previous_atom_integrity > 0)
atom_destruction(damage_flag)
///the sound played when the atom is damaged.
/atom/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, 'sound/items/weapons/smash.ogg', 50, TRUE)
else
playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE)
/// Handles the integrity of an atom changing. This must be called instead of changing integrity directly.
/atom/proc/update_integrity(new_value)
SHOULD_NOT_OVERRIDE(TRUE)
if(!uses_integrity)
CRASH("/atom/proc/update_integrity() was called on [src] when it doesn't use integrity!")
var/old_value = atom_integrity
new_value = max(0, new_value)
if(atom_integrity == new_value)
return
atom_integrity = new_value
on_update_integrity(old_value, new_value)
return new_value
/// Handle updates to your atom's integrity
/atom/proc/on_update_integrity(old_value, new_value)
SHOULD_NOT_SLEEP(TRUE)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_INTEGRITY_CHANGED, old_value, new_value)
/// Called after the atom takes damage and integrity is below integrity_failure level
/atom/proc/atom_break(damage_flag)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_BREAK, damage_flag)
/// Called when integrity is repaired above the breaking point having been broken before
/atom/proc/atom_fix()
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_FIX)
///what happens when the atom's integrity reaches zero.
/atom/proc/atom_destruction(damage_flag)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_DESTRUCTION, damage_flag)
///returns the damage value of the attack after processing the atom's various armor protections
///Damage_flag can be any of the following: "melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0
///MELEE, BULLET, LASER, ENERGY, BOMB, BIO, and "rad"
/atom/proc/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0)
if(!uses_integrity)
CRASH("/atom/proc/run_atom_armor was called on [src] without being implemented as a type that uses integrity!")
if(damage_flag == MELEE && damage_amount < damage_deflection)
return 0
if(damage_type != BRUTE && damage_type != BURN)
return 0
var/armor_protection = 0
if(isitem(src)) //Only items have armor until we get armor datums.
var/obj/item/item_to_check = src
if(damage_flag)
armor_protection = item_to_check.armor[damage_flag]
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
armor_protection = clamp(PENETRATE_ARMOUR(armor_protection, armour_penetration), min(armor_protection, 0), 100)
return round(damage_amount * (100 - armor_protection) * 0.01, DAMAGE_PRECISION)
@@ -130,6 +130,9 @@
if(color)
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
if(uses_integrity)
atom_integrity = max_integrity
/*
if (light_system == COMPLEX_LIGHT && light_power && light_range)
update_light()
+3
View File
@@ -109,6 +109,9 @@
new /obj/structure/simple_door/wood(loc)
..()
/obj/structure/simple_door/wood
resistance_flags = FLAMMABLE
/obj/structure/simple_door/wood/cultify()
return
+1
View File
@@ -16,6 +16,7 @@
var/static/list/cutout_types
var/static/list/painters = list(/obj/item/reagent_containers/glass/paint, /obj/item/floor_painter)//, /obj/item/closet_painter)
resistance_flags = FLAMMABLE
/obj/structure/barricade/cutout/Initialize(mapload)
. = ..()
+1 -1
View File
@@ -473,7 +473,7 @@ Class Procs:
A.update_desc()
A.update_icon()
M.loc = null
M.deconstruct(src)
M.atom_deconstruct(TRUE, src)
qdel(src)
return 1
+1 -1
View File
@@ -35,7 +35,7 @@
if("Power")
to_chat(user, span_boldwarning("Your wish is granted, but at a terrible cost..."))
to_chat(user, span_warning("The Wish Granter punishes you for your selfishness, claiming your soul."))
if (!(LASER in user.mutations))
if (!(LASER_EYES in user.mutations))
user.mutations.Add(LASER)
to_chat(user, span_notice("You feel pressure building behind your eyes."))
if (!(COLD_RESISTANCE in user.mutations))
+1 -1
View File
@@ -17,7 +17,7 @@
var/integrity
var/integrity_danger_mod = 0.5 // Multiplier for comparison to max_integrity before problems start.
var/max_integrity = 100
max_integrity = 100
var/step_delay = 0
+2 -2
View File
@@ -12,7 +12,7 @@
var/equip_ready = TRUE
var/energy_drain = 0
var/obj/mecha/chassis = null
var/range = MELEE //bitflags
var/range = MECH_MELEE //bitflags
/// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this.
var/mech_flags = NONE
var/salvageable = TRUE
@@ -117,7 +117,7 @@
return range&RANGED
/obj/item/mecha_parts/mecha_equipment/proc/is_melee()
return range&MELEE
return range&MECH_MELEE
/obj/item/mecha_parts/mecha_equipment/proc/enable_special_checks(atom/target)
if(ispath(required_type))
+1 -1
View File
@@ -5,7 +5,7 @@
origin_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3)
equip_cooldown = 10
energy_drain = 100
range = MELEE|RANGED
range = MECH_MELEE|RANGED
var/atom/movable/locked
var/mode = 1 //1 - gravsling 2 - gravpush
@@ -5,7 +5,7 @@
icon_state = "mecha_exting"
equip_cooldown = 5
energy_drain = 0
range = MELEE|RANGED
range = MECH_MELEE|RANGED
required_type = list(/obj/mecha/working)
var/spray_particles = 5
var/spray_amount = 5 //units of liquid per particle. 5 is enough to wet the floor - it's a big fire extinguisher, so should be fine
+1 -1
View File
@@ -5,7 +5,7 @@
origin_tech = list(TECH_PHORON = 2, TECH_POWER = 2, TECH_ENGINEERING = 1)
equip_cooldown = 10
energy_drain = 0
range = MELEE
range = MECH_MELEE
var/coeff = 100
var/obj/item/stack/material/fuel
var/fuel_type = /obj/item/stack/material/phoron
@@ -5,7 +5,7 @@
origin_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3)
equip_cooldown = 3
energy_drain = 30
range = MELEE
range = MECH_MELEE
equip_type = EQUIP_UTILITY
ready_sound = 'sound/effects/spray.ogg'
required_type = list(/obj/mecha/working/ripley)
@@ -5,7 +5,7 @@
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_POWER = 2)
equip_cooldown = 5
energy_drain = 30
range = MELEE|RANGED
range = MECH_MELEE|RANGED
equip_type = EQUIP_SPECIAL
ready_sound = 'sound/items/goggles_charge.ogg'
required_type = list(/obj/mecha/working/ripley)
+1 -1
View File
@@ -4,7 +4,7 @@
icon_state = "mecha_passenger"
origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 1)
energy_drain = 10
range = MELEE
range = MECH_MELEE
equip_cooldown = 20
var/mob/living/carbon/occupant = null
var/door_locked = 1
+1 -1
View File
@@ -5,7 +5,7 @@
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_POWER = 2)
equip_cooldown = 3
energy_drain = 15
range = MELEE
range = MECH_MELEE
equip_type = EQUIP_UTILITY
ready_sound = 'sound/items/Ratchet.ogg'
required_type = list(/obj/mecha/working/ripley)
+1 -1
View File
@@ -6,7 +6,7 @@
origin_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4)
equip_cooldown = 10
energy_drain = 250
range = MELEE|RANGED
range = MECH_MELEE|RANGED
equip_type = EQUIP_SPECIAL
var/obj/item/rcd/electric/mounted/mecha/my_rcd = null
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "sleeper_0"
origin_tech = list(TECH_DATA = 2, TECH_BIO = 3)
energy_drain = 20
range = MELEE
range = MECH_MELEE
equip_cooldown = 30
mech_flags = EXOSUIT_MODULE_MEDICAL
var/mob/living/carbon/human/occupant = null
@@ -13,7 +13,7 @@
energy_drain = 10
var/mode = 0 //0 - fire syringe, 1 - analyze reagents.
var/datum/global_iterator/mech_synth/synth
range = MELEE|RANGED
range = MECH_MELEE|RANGED
equip_cooldown = 10
origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_MAGNET = 4, TECH_DATA = 3)
required_type = list(/obj/mecha/medical)
@@ -280,7 +280,7 @@
desc = "A small shoulder-mounted dronebay containing a rapid response drone capable of moderately stabilizing a patient near the exosuit."
icon_state = "mecha_dronebay"
origin_tech = list(TECH_PHORON = 3, TECH_MAGNET = 6, TECH_BIO = 5, TECH_DATA = 4)
range = MELEE|RANGED
range = MECH_MELEE|RANGED
equip_cooldown = 3 SECONDS
required_type = list(/obj/mecha/medical)
@@ -496,7 +496,7 @@
origin_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 5, TECH_BIO = 5)
equip_cooldown = 5 SECONDS
energy_drain = 100
range = MELEE
range = MECH_MELEE
equip_type = EQUIP_UTILITY
ready_sound = 'sound/weapons/flash.ogg'
required_type = list(/obj/mecha/medical)
@@ -5,7 +5,7 @@
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 4, TECH_PHORON = 2)
equip_cooldown = 3
energy_drain = 15
range = MELEE
range = MECH_MELEE
equip_type = EQUIP_UTILITY
ready_sound = 'sound/items/Ratchet.ogg'
required_type = list(/obj/mecha/working/ripley)
@@ -27,8 +27,8 @@
..()
if(enable_special)
range = MELEE|RANGED
range = MECH_MELEE|RANGED
my_tool.reach = 7
else
range = MELEE
range = MECH_MELEE
my_tool.reach = 1
@@ -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)
+3
View File
@@ -111,6 +111,9 @@
if(Be)
Be.multiz_turf_new(src, UP)
if(uses_integrity)
atom_integrity = max_integrity
/turf/Destroy()
if (!changing_turf)
stack_trace("Improper turf qdel. Do not qdel turfs directly.")
+1 -1
View File
@@ -11,7 +11,7 @@ GLOBAL_LIST_EMPTY(all_blobs)
layer = MOB_LAYER + 0.1
var/integrity = 0
var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
var/max_integrity = 30
max_integrity = 30
var/health_regen = 2 //how much health this blob regens when pulsed
var/pulse_timestamp = 0 //we got pulsed when?
var/heal_timestamp = 0 //we got healed when?
+1
View File
@@ -3,6 +3,7 @@
siemens_coefficient = 0.9
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
resistance_flags = FLAMMABLE
var/list/species_restricted = null //Only these species can wear this kit.
var/list/accessories
+2
View File
@@ -3,6 +3,7 @@
name = DEVELOPER_WARNING_NAME
desc = "An earring of some kind."
icon = 'icons/inventory/ears/item.dmi'
resistance_flags = FIRE_PROOF
/obj/item/clothing/ears/earring/stud
name = "pearl stud earrings"
@@ -17,6 +18,7 @@
/obj/item/clothing/ears/earring/stud/wood
name = "wood stud earrings"
color = "#824b28"
resistance_flags = FLAMMABLE
/obj/item/clothing/ears/earring/stud/iron
name = "iron stud earrings"
+2
View File
@@ -9,6 +9,7 @@
item_state_slots = list(slot_r_hand_str = "earmuffs", slot_l_hand_str = "earmuffs")
slot_flags = SLOT_EARS | SLOT_TWOEARS
ear_protection = 2
resistance_flags = FIRE_PROOF
/obj/item/clothing/ears/earmuffs/headphones
name = "headphones"
@@ -48,6 +49,7 @@
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
species_restricted = list(SPECIES_SKRELL)
resistance_flags = FIRE_PROOF
/obj/item/clothing/ears/skrell/chain
name = "Gold headtail chains"
+1
View File
@@ -29,6 +29,7 @@ BLIND // can't see anything
var/list/away_planes //Holder for disabled planes
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
resistance_flags = FIRE_PROOF
sprite_sheets = list(
SPECIES_TESHARI = 'icons/inventory/eyes/mob_teshari.dmi',
@@ -7,6 +7,7 @@
w_class = ITEMSIZE_NORMAL
drop_sound = 'sound/items/drop/metalshield.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
+1
View File
@@ -31,6 +31,7 @@
permeability_coefficient = 0.05
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/orange
name = "orange gloves"
@@ -12,6 +12,7 @@
glove_level = 3
overgloves = 1
punch_force = 5
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/gauntlets/mob_can_equip(mob/user, slot, disable_warning = FALSE)
var/mob/living/carbon/human/H = user
@@ -20,6 +20,7 @@
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/swat
desc = "These tactical gloves are somewhat fire and impact-resistant."
@@ -30,6 +31,7 @@
permeability_coefficient = 0.05
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
desc = "These tactical gloves are somewhat fire and impact resistant."
@@ -40,6 +42,7 @@
permeability_coefficient = 0.05
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/sterile
name = "sterile gloves"
@@ -112,6 +115,7 @@
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/ranger
var/glovecolor = "white"
@@ -69,6 +69,7 @@
desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!"
icon_state = "welding"
body_parts_covered = HEAD|FACE|EYES
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/collectable/slime
name = "collectable slime hat"
+1
View File
@@ -24,6 +24,7 @@
ear_protection = 1
drop_sound = 'sound/items/drop/helm.ogg'
pickup_sound = 'sound/items/pickup/helm.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/hardhat/orange
icon_state = "hardhat0_orange"
+1
View File
@@ -14,6 +14,7 @@
ear_protection = 1
drop_sound = 'sound/items/drop/helm.ogg'
pickup_sound = 'sound/items/pickup/helm.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/helmet/solgov
name = "\improper Solar Confederate Government helmet"
@@ -32,6 +32,7 @@
drop_sound = 'sound/items/drop/helm.ogg'
pickup_sound = 'sound/items/pickup/helm.ogg'
special_handling = TRUE
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/welding/attack_self(mob/user)
. = ..(user)
@@ -20,6 +20,7 @@
var/list/images
var/list/raw_images
var/last_status
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/pilot/Initialize(mapload)
. = ..()
@@ -10,6 +10,7 @@
w_class = ITEMSIZE_NORMAL
actions_types = list(/datum/action/item_action/toggle_visor)
special_handling = TRUE
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/pilot_vr/attack_self(mob/user)
. = ..(user)
+1
View File
@@ -13,6 +13,7 @@
pickup_sound = 'sound/items/pickup/component.ogg'
drop_sound = 'sound/items/drop/component.ogg'
special_handling = TRUE
resistance_flags = FIRE_PROOF
/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user)
+1
View File
@@ -14,6 +14,7 @@
var/list/filtered_gases = list(GAS_PHORON, GAS_N2O)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
pickup_sound = 'sound/items/pickup/rubber.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/gas_filtered = new
+1
View File
@@ -11,6 +11,7 @@
icon_state = "monitor"
var/monitor_state_index = "blank"
resistance_flags = FIRE_PROOF
/obj/item/clothing/mask/monitor/set_dir()
@@ -11,6 +11,7 @@
var/lstat
var/visor_state = "Neutral" //Separating this from lstat so that it could potentially be used for an override system or something
var/mob/living/carbon/maskmaster
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE | BOMB_PROOF |FREEZE_PROOF
/obj/item/clothing/mask/synthfacemask/equipped()
..()
+1
View File
@@ -132,6 +132,7 @@
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
snow_speed = -1
step_volume_mod = 0.8
resistance_flags = FIRE_PROOF
/obj/item/clothing/shoes/boots/winter/security
name = "security winter boots"
@@ -9,6 +9,7 @@
can_hold_knife = TRUE
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
+1
View File
@@ -23,6 +23,7 @@
step_volume_mod = 1.3
drop_sound = 'sound/items/drop/metalboots.ogg'
pickup_sound = 'sound/items/pickup/toolbox.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/shoes/magboots/proc/set_slowdown()
slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
@@ -11,6 +11,7 @@
step_volume_mod = 0.5
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/clothing/shoes/mime
name = "mime shoes"
@@ -28,6 +29,7 @@
species_restricted = null
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
resistance_flags = ACID_PROOF
/obj/item/clothing/shoes/dress
name = "dress shoes"
@@ -17,6 +17,7 @@
var/recharging_rate = 60 //default 6 seconds between each dash
var/recharging_time = 0 //time until next dash
// var/jumping = FALSE //are we mid-jump? We have no throw_at callback, so we have to check user.throwing.
resistance_flags = FIRE_PROOF
/obj/item/clothing/shoes/bhop/ui_action_click(mob/unused_user, actiontype)
var/mob/living/user = loc
@@ -18,6 +18,7 @@
var/brute_damage = 0 // Specifically brute damage.
var/burn_damage = 0 // Specifically burn damage.
var/base_name // Used to keep the original name safe while we apply modifiers.
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/clothing/suit/space/Initialize(mapload)
. = ..()
@@ -104,6 +104,7 @@
var/protean = 0
var/obj/item/storage/backpack/rig_storage
permeability_coefficient = 0 //Protect the squishies, after all this shit should be waterproof.
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/rig/Initialize(mapload)
. = ..()

Some files were not shown because too many files have changed in this diff Show More