Makes welding plasma bars/statues/floors use flooder component (#63154)

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
vincentiusvin
2021-12-09 07:14:28 +07:00
committed by GitHub
parent 87264ec63a
commit 3bb8424d78
13 changed files with 93 additions and 236 deletions
+52 -16
View File
@@ -1,26 +1,43 @@
/// Component that floods gas when ignited by fire.
/datum/component/combustible_flooder
// Gas type, molar count, and temperature. All self explanatory.
var/gas_id
var/gas_amount
var/temp_amount
/datum/component/combustible_flooder/Initialize(gas_id, gas_amount, temp_amount)
/datum/component/combustible_flooder/Initialize(initialize_gas_id, initialize_gas_amount, initialize_temp_amount)
src.gas_id = gas_id
src.gas_amount = gas_amount
src.temp_amount = temp_amount
src.gas_id = initialize_gas_id
src.gas_amount = initialize_gas_amount
src.temp_amount = initialize_temp_amount
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/attackby_react)
RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, .proc/flame_react)
RegisterSignal(parent, COMSIG_ATOM_BULLET_ACT, .proc/projectile_react)
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), .proc/welder_react)
if(isturf(parent))
RegisterSignal(parent, COMSIG_TURF_EXPOSE, .proc/hotspots_react)
/datum/component/combustible_flooder/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_PARENT_ATTACKBY)
UnregisterSignal(parent, COMSIG_ATOM_FIRE_ACT)
UnregisterSignal(parent, COMSIG_ATOM_BULLET_ACT)
UnregisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER))
if(isturf(parent))
UnregisterSignal(parent, COMSIG_TURF_EXPOSE)
/// Do the flooding.
/datum/component/combustible_flooder/proc/flood(mob/user, temp_amount)
/// Do the flooding. Trigger temperature is the temperature we will flood at if we dont have a temp set at the start. Trigger referring to whatever triggered it.
/datum/component/combustible_flooder/proc/flood(mob/user, trigger_temperature)
var/delete_parent = TRUE
var/turf/open/flooded_turf = get_turf(parent)
flooded_turf.atmos_spawn_air("[gas_id]=[gas_amount];TEMP=[temp_amount]")
// We do this check early so closed turfs are still be able to flood.
if(isturf(parent)) // Walls and floors.
var/turf/parent_turf = parent
flooded_turf = parent_turf.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
delete_parent = FALSE
flooded_turf.atmos_spawn_air("[gas_id]=[gas_amount];TEMP=[temp_amount || trigger_temperature]")
// Logging-related
var/admin_message = "[parent] ignited in [ADMIN_VERBOSEJMP(flooded_turf)]"
@@ -33,20 +50,24 @@
log_message += " by fire"
message_admins(admin_message)
log_game(log_message)
// For floors
if(isturf(parent))
var/turf/K = parent
K.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
else
qdel(parent)
/// Hotspot related flooding reaction.
if(delete_parent && !QDELETED(parent))
qdel(parent) // For things with the explodable component like plasma mats this isn't necessary, but there's no harm.
qdel(src)
/// fire_act reaction.
/datum/component/combustible_flooder/proc/flame_react(datum/source, exposed_temperature, exposed_volume)
SIGNAL_HANDLER
if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
flood(temp_amount = exposed_temperature)
flood(null, exposed_temperature)
/// Hotspot reaction.
/datum/component/combustible_flooder/proc/hotspots_react(datum/source, air, exposed_temperature)
SIGNAL_HANDLER
if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
flood(null, exposed_temperature)
/// Being attacked by something
/datum/component/combustible_flooder/proc/attackby_react(datum/source, obj/item/thing, mob/user, params)
@@ -54,3 +75,18 @@
if(thing.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
flood(user, thing.get_temperature())
/// Shot by something
/datum/component/combustible_flooder/proc/projectile_react(datum/source, obj/projectile/projectile)
SIGNAL_HANDLER
if(projectile.damage_type == BURN && !projectile.nodamage)
flood(projectile.firer, 2500)
/// Welder check. Here because tool_act is higher priority than attackby.
/datum/component/combustible_flooder/proc/welder_react(datum/source, mob/user, obj/item/tool)
SIGNAL_HANDLER
if(tool.get_temperature() >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
flood(user, tool.get_temperature())
return COMPONENT_BLOCK_TOOL_ATTACK
+11 -4
View File
@@ -22,6 +22,7 @@
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/explodable_attack)
RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/explodable_insert_item)
RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/detonate)
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), .proc/welder_react)
if(ismovable(parent))
RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/explodable_impact)
RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/explodable_bump)
@@ -65,6 +66,13 @@
check_if_detonate(target)
/// Welder check. Here because tool_act is higher priority than attackby.
/datum/component/explodable/proc/welder_react(datum/source, mob/user, obj/item/tool)
SIGNAL_HANDLER
if(check_if_detonate(tool))
return COMPONENT_BLOCK_TOOL_ATTACK
///Called when you attack a specific body part of the thing this is equipped on. Useful for exploding pants.
/datum/component/explodable/proc/explodable_attack_zone(datum/source, damage, damagetype, def_zone)
SIGNAL_HANDLER
@@ -119,10 +127,9 @@
if(!isitem(target))
return
var/obj/item/I = target
if(!I.get_temperature())
return
detonate() //If we're touching a hot item we go boom
if(I.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
detonate() //If we're touching a hot item we go boom
return TRUE
/// Explode and remove the object
/datum/component/explodable/proc/detonate()
+4 -1
View File
@@ -137,11 +137,14 @@ Unless you know what you're doing, only use the first three numbers. They're in
. = ..()
if(ismovable(source))
source.AddElement(/datum/element/firestacker, amount=1)
source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, 0, amount / 1250)
// Ideally exploding plasma objects should delete themselves but we still have the flooder and SSexplosions to rely on deleting it asynchronously so it's not that bad.
source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, 0, amount / 1250, FALSE)
source.AddComponent(/datum/component/combustible_flooder, "plasma", amount*0.05) //Empty temp arg, fully dependent on whatever ignited it.
/datum/material/plasma/on_removed(atom/source, amount, material_flags)
. = ..()
source.RemoveElement(/datum/element/firestacker, amount=1)
qdel(source.GetComponent(/datum/component/combustible_flooder))
qdel(source.GetComponent(/datum/component/explodable))
/datum/material/plasma/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
+4 -32
View File
@@ -230,44 +230,16 @@
desc = "No way this can end badly."
icon = 'icons/obj/doors/airlocks/station/plasma.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_plasma
material_flags = MATERIAL_EFFECTS
material_modifier = 0.25
/obj/machinery/door/airlock/plasma/Initialize(mapload)
custom_materials = custom_materials ? custom_materials : list(/datum/material/plasma = 20000)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
/obj/machinery/door/airlock/plasma/proc/ignite(exposed_temperature)
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
/obj/machinery/door/airlock/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return (exposed_temperature > 300)
/obj/machinery/door/airlock/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
PlasmaBurn()
/obj/machinery/door/airlock/plasma/proc/PlasmaBurn()
atmos_spawn_air("plasma=500;TEMP=1000")
var/obj/structure/door_assembly/DA
DA = new /obj/structure/door_assembly(loc)
if(glass)
DA.glass = TRUE
if(heat_proof)
DA.heat_proof_finished = TRUE
DA.update_appearance()
DA.update_name()
qdel(src)
/obj/machinery/door/airlock/plasma/block_superconductivity() //we don't stop the heat~
return 0
/obj/machinery/door/airlock/plasma/attackby(obj/item/C, mob/user, params)
if(C.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma airlock ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
log_game("Plasma airlock ignited by [key_name(user)] in [AREACOORD(src)]")
ignite(C.get_temperature())
else
return ..()
/obj/machinery/door/airlock/plasma/glass
opacity = FALSE
glass = TRUE
@@ -25,7 +25,7 @@ Mineral Sheets
GLOBAL_LIST_INIT(sandstone_recipes, list ( \
new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), \
new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = FALSE, on_floor = TRUE) \
))
@@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
walltype = /turf/closed/wall/mineral/diamond
GLOBAL_LIST_INIT(diamond_recipes, list ( \
new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1, applies_mats = TRUE), \
new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \
))
@@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
walltype = /turf/closed/wall/mineral/uranium
GLOBAL_LIST_INIT(uranium_recipes, list ( \
new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1, applies_mats = TRUE), \
new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \
))
@@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
return TOXLOSS//dont you kids know that stuff is toxic?
GLOBAL_LIST_INIT(plasma_recipes, list ( \
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1, applies_mats = TRUE), \
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \
))
@@ -175,19 +175,6 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
. = ..()
. += GLOB.plasma_recipes
/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/W as obj, mob/user as mob, params)
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma sheets ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma sheets ignited by [key_name(user)] in [AREACOORD(T)]")
fire_act(W.get_temperature())
else
return ..()
/obj/item/stack/sheet/mineral/plasma/fire_act(exposed_temperature, exposed_volume)
atmos_spawn_air("plasma=[amount*10];TEMP=[exposed_temperature]")
qdel(src)
/obj/item/stack/sheet/mineral/plasma/five
amount = 5
@@ -211,7 +198,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
walltype = /turf/closed/wall/mineral/gold
GLOBAL_LIST_INIT(gold_recipes, list ( \
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1, applies_mats = TRUE), \
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \
new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \
@@ -239,7 +226,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
walltype = /turf/closed/wall/mineral/silver
GLOBAL_LIST_INIT(silver_recipes, list ( \
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1, applies_mats = TRUE), \
new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \
))
@@ -114,7 +114,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2), \
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1), \
null, \
new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 50), \
@@ -35,19 +35,6 @@
mats_per_unit = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT*0.25)
merge_type = /obj/item/stack/tile/mineral/plasma
/obj/item/stack/tile/mineral/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma tiles ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma tiles ignited by [key_name(user)] in [AREACOORD(T)]")
fire_act(W.get_temperature())
else
return ..()
/obj/item/stack/tile/mineral/plasma/fire_act(exposed_temperature, exposed_volume)
atmos_spawn_air("plasma=[amount*2.5];TEMP=[exposed_temperature]")
qdel(src)
/obj/item/stack/tile/mineral/uranium
name = "uranium tile"
singular_name = "uranium floor tile"
+4 -25
View File
@@ -18,6 +18,7 @@
can_be_unanchored = FALSE
can_atmos_pass = ATMOS_PASS_DENSITY
rad_insulation = RAD_MEDIUM_INSULATION
material_flags = MATERIAL_EFFECTS
var/mineral = /obj/item/stack/sheet/iron
var/mineral_amount = 2
var/walltype = /turf/closed/wall
@@ -27,6 +28,9 @@
/obj/structure/falsewall/Initialize(mapload)
. = ..()
var/obj/item/stack/initialized_mineral = new mineral // Okay this kinda sucks.
set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
qdel(initialized_mineral)
air_update_turf(TRUE, TRUE)
/obj/structure/falsewall/attack_hand(mob/user, list/modifiers)
@@ -247,31 +251,6 @@
smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS)
canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
/obj/structure/falsewall/plasma/Initialize(mapload)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
/obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300)
var/turf/T = get_turf(src)
message_admins("Plasma falsewall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]")
burnbabyburn()
else
return ..()
/obj/structure/falsewall/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return exposed_temperature > 300
/obj/structure/falsewall/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
burnbabyburn()
/obj/structure/falsewall/plasma/proc/burnbabyburn(user)
playsound(src, 'sound/items/welder.ogg', 100, TRUE)
atmos_spawn_air("plasma=400;TEMP=1000")
new /obj/structure/girder/displaced(loc)
qdel(src)
/obj/structure/falsewall/bananium
name = "bananium wall"
desc = "A wall with bananium plating. Honk!"
+3 -3
View File
@@ -59,14 +59,14 @@
if(istype(W, /obj/item/stack/rods))
var/obj/item/stack/rods/S = W
if(state == GIRDER_DISPLACED)
if(S.get_amount() < 2)
if(S.get_amount() < 5)
to_chat(user, span_warning("You need at least two rods to create a false wall!"))
return
to_chat(user, span_notice("You start building a reinforced false wall..."))
if(do_after(user, 20, target = src))
if(S.get_amount() < 2)
if(S.get_amount() < 5)
return
S.use(2)
S.use(5)
to_chat(user, span_notice("You create a false wall. Push on it to open or close the passage."))
var/obj/structure/falsewall/iron/FW = new (loc)
transfer_fingerprints_to(FW)
+8 -27
View File
@@ -7,6 +7,7 @@
anchored = TRUE
opacity = TRUE
layer = CLOSED_DOOR_LAYER
material_flags = MATERIAL_EFFECTS
icon = 'icons/obj/doors/mineral_doors.dmi'
icon_state = "metal"
@@ -14,6 +15,8 @@
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 50, ACID = 50)
can_atmos_pass = ATMOS_PASS_DENSITY
rad_insulation = RAD_MEDIUM_INSULATION
material_flags = MATERIAL_EFFECTS
material_modifier = 0.25
var/door_opened = FALSE //if it's open or not.
var/isSwitchingStates = FALSE //don't try to change stats if we're already opening
@@ -23,10 +26,13 @@
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
var/sheetType = /obj/item/stack/sheet/iron //what we're made of
var/sheetAmount = 7 //how much we drop when deconstructed
var/sheetAmount = 10 //how much it takes to construct us.
/obj/structure/mineral_door/Initialize(mapload)
. = ..()
var/obj/item/stack/initialized_mineral = new sheetType // Okay this kinda sucks.
set_custom_materials(initialized_mineral.mats_per_unit, sheetAmount)
qdel(initialized_mineral)
air_update_turf(TRUE, TRUE)
/obj/structure/mineral_door/Destroy()
@@ -205,6 +211,7 @@
/obj/structure/mineral_door/iron
name = "iron door"
max_integrity = 300
sheetAmount = 20
/obj/structure/mineral_door/silver
name = "silver door"
@@ -248,32 +255,6 @@
icon_state = "plasma"
sheetType = /obj/item/stack/sheet/mineral/plasma
/obj/structure/mineral_door/transparent/plasma/Initialize(mapload)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
/obj/structure/mineral_door/transparent/plasma/welder_act(mob/living/user, obj/item/I)
return
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature())
var/turf/T = get_turf(src)
message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]")
TemperatureAct()
else
return ..()
/obj/structure/mineral_door/transparent/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return exposed_temperature > 300
/obj/structure/mineral_door/transparent/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
TemperatureAct()
/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct()
atmos_spawn_air("plasma=500;TEMP=1000")
deconstruct(FALSE)
/obj/structure/mineral_door/transparent/diamond
name = "diamond door"
icon_state = "diamond"
@@ -134,35 +134,6 @@
canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
custom_materials = list(/datum/material/plasma = 4000)
/turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma wall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
log_game("Plasma wall ignited by [key_name(user)] in [AREACOORD(src)]")
ignite(W.get_temperature())
return
..()
/turf/closed/wall/mineral/plasma/proc/PlasmaBurn(temperature)
new girder_type(src)
ScrapeAway()
var/turf/open/T = src
T.atmos_spawn_air("plasma=400;TEMP=[temperature]")
/turf/closed/wall/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature)//Doesn't work because walls have superconduction turned off
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
/turf/closed/wall/mineral/plasma/proc/ignite(exposed_temperature)
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
/turf/closed/wall/mineral/plasma/bullet_act(obj/projectile/Proj)
if(istype(Proj, /obj/projectile/beam))
PlasmaBurn(2500)
else if(istype(Proj, /obj/projectile/ion))
PlasmaBurn(500)
. = ..()
/turf/closed/wall/mineral/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
@@ -38,26 +38,6 @@
icons = list("plasma","plasma_dam")
custom_materials = list(/datum/material/plasma = 500)
/turf/open/floor/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature)
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
/turf/open/floor/mineral/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma flooring was ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
log_game("Plasma flooring was ignited by [key_name(user)] in [AREACOORD(src)]")
ignite(W.get_temperature())
return
..()
/turf/open/floor/mineral/plasma/proc/PlasmaBurn(temperature)
make_plating()
atmos_spawn_air("plasma=20;TEMP=[temperature]")
/turf/open/floor/mineral/plasma/proc/ignite(exposed_temperature)
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
//Plasma floor that can't be removed, for disco inferno
/turf/open/floor/mineral/plasma/disco/crowbar_act(mob/living/user, obj/item/I)
-46
View File
@@ -96,52 +96,6 @@
name = "statue of a xenomorph"
icon_state = "xeno"
/obj/structure/statue/plasma/Initialize(mapload)
. = ..()
AddElement(/datum/element/atmos_sensitive, mapload)
/obj/structure/statue/plasma/bullet_act(obj/projectile/Proj)
var/burn = FALSE
if(!(Proj.nodamage) && Proj.damage_type == BURN && !QDELETED(src))
burn = TRUE
if(burn)
var/turf/T = get_turf(src)
if(Proj.firer)
message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(Proj.firer)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma statue ignited by [key_name(Proj.firer)] in [AREACOORD(T)]")
else
message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma statue ignited by [Proj] in [AREACOORD(T)]. No known firer.")
PlasmaBurn(2500)
. = ..()
/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma statue ignited by [key_name(user)] in [AREACOORD(T)]")
ignite(W.get_temperature())
else
return ..()
/obj/structure/statue/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return exposed_temperature > 300
/obj/structure/statue/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
PlasmaBurn(exposed_temperature)
/obj/structure/statue/plasma/proc/PlasmaBurn(temperature)
if(QDELETED(src))
return
if(custom_materials[/datum/material/plasma])
var/plasma_amount = round(custom_materials[/datum/material/plasma]/MINERAL_MATERIAL_AMOUNT)
atmos_spawn_air("plasma=[plasma_amount*10];TEMP=[temperature]")
deconstruct(FALSE)
/obj/structure/statue/plasma/proc/ignite(exposed_temperature)
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
//////////////////////gold///////////////////////////////////////
/obj/structure/statue/gold