FBP Internal Components (#7445)

* Starts work on FBP components

* Complete

* Map

* Tweakening.

* P r e c i s i o n

* P r e c i s i o n Engineering
This commit is contained in:
Mechoid
2020-08-20 18:39:46 -07:00
committed by GitHub
parent 42e23055a8
commit 85d13382df
25 changed files with 340 additions and 54 deletions
+16
View File
@@ -37,3 +37,19 @@
if(ishuman(owner))
H = owner
color = H.species.blood_color
/obj/item/organ/internal/heart/machine
name = "hydraulic hub"
icon_state = "pump-on"
organ_tag = O_PUMP
dead_icon = "pump-off"
robotic = ORGAN_ROBOT
standard_pulse_level = PULSE_NONE
/obj/item/organ/internal/stomach/machine/handle_organ_proc_special()
..()
if(owner && owner.stat != DEAD)
owner.bodytemperature += round(owner.robobody_count * 0.25, 0.1)
return
@@ -0,0 +1,14 @@
/*
* Controls the ability to do a scan for internal damage / temperature.
*/
/obj/item/organ/internal/robotic/diagnostic
name = "diagnostic processor"
icon_state = "diagnostic"
organ_tag = O_DIAGNOSTIC
organ_verbs = list(
/mob/living/carbon/human/proc/self_diagnostics
)
@@ -0,0 +1,58 @@
/obj/item/organ/internal/robotic/heatsink
name = "heatsink"
icon_state = "heatsink"
organ_tag = O_HEATSINK
/obj/item/organ/internal/robotic/heatsink/handle_organ_proc_special()
if(owner && owner.stat != DEAD)
owner.bodytemperature += round(owner.robobody_count * 0.75, 0.1)
var/thermostat = owner.species.body_temperature
var/turf/T = get_turf(src)
var/datum/gas_mixture/environment = T.return_air()
var/efficiency = max(0,(1 - owner.get_pressure_weakness(environment.return_pressure())) * (1 - damage / max_damage))
var/temp_adj = 0
var/env_temp = get_environment_temperature()
var/thermal_protection = owner.get_heat_protection(env_temp)
if(thermal_protection < 1)
temp_adj = min(owner.bodytemperature - max(thermostat, env_temp), owner.robobody_count * 2)
else
temp_adj = min(owner.bodytemperature - thermostat, owner.robobody_count * 2)
if(temp_adj < 0)
return
owner.bodytemperature -= temp_adj*efficiency
if(owner.bodytemperature > owner.species.heat_level_2) // If you're already overheating to the point of melting, the heatsink starts causing problems.
owner.adjustToxLoss(2 * damage / max_damage)
take_damage(max(0.5,round(damage / max_damage, 0.1)))
return
/obj/item/organ/internal/robotic/heatsink/proc/get_environment_temperature()
if(istype(owner.loc, /obj/mecha))
var/obj/mecha/M = owner.loc
return M.return_temperature()
else if(istype(owner.loc, /obj/machinery/atmospherics/unary/cryo_cell))
return owner.loc:air_contents.temperature
var/turf/T = get_turf(src)
var/datum/gas_mixture/environment = T.return_air()
var/efficiency = 1
if(environment)
efficiency = (1 - owner.get_pressure_weakness(environment.return_pressure())) * (1 - damage / max_damage)
if(istype(T, /turf/space))
return owner.species.heat_level_2 * efficiency
if(!environment)
return owner.species.heat_level_2 * efficiency
return environment.temperature
@@ -0,0 +1,11 @@
/obj/item/organ/internal/robotic
name = "FBP component"
desc = "A complex piece of a much more complex machine."
icon_state = "eyes-prosthetic"
can_reject = FALSE // It's a robotic part. Why would it reject.
decays = FALSE // Ditto. Rust takes a while.
robotic = ORGAN_ROBOT
+17
View File
@@ -48,3 +48,20 @@
/obj/item/organ/internal/stomach/xeno
color = "#555555"
acidtype = "pacid"
/obj/item/organ/internal/stomach/machine
name = "reagent cycler"
icon_state = "cycler"
organ_tag = O_CYCLER
robotic = ORGAN_ROBOT
acidtype = "sacid"
/obj/item/organ/internal/stomach/machine/handle_organ_proc_special()
..()
if(owner && owner.stat != DEAD)
owner.bodytemperature += round(owner.robobody_count * 0.25, 0.1)
return