mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 11:38:12 +01:00
FBP Internal Components
This commit is contained in:
@@ -36,8 +36,13 @@ var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
for(var/datum/reagent/blood/B in vessel.reagent_list)
|
||||
if(B.id == "blood")
|
||||
B.data = list( "donor"=src,"viruses"=null,"species"=species.name,"blood_DNA"=dna.unique_enzymes,"blood_colour"= species.get_blood_colour(src),"blood_type"=dna.b_type, \
|
||||
"resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = list())
|
||||
"resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = list(), "blood_name" = species.get_blood_name(src))
|
||||
|
||||
if(isSynthetic())
|
||||
B.data["species"] = "synthetic"
|
||||
|
||||
B.color = B.data["blood_colour"]
|
||||
B.name = B.data["blood_name"]
|
||||
|
||||
// Takes care blood loss and regeneration
|
||||
/mob/living/carbon/human/handle_blood()
|
||||
@@ -369,6 +374,9 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
|
||||
B.synthblood = synth
|
||||
B.update_icon()
|
||||
|
||||
if(source.data["blood_name"])
|
||||
B.name = source.data["blood_name"]
|
||||
|
||||
// Update blood information.
|
||||
if(source.data["blood_DNA"])
|
||||
B.blood_DNA = list()
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -51,7 +51,12 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
var/skin_tone // If set, applies skin tone rather than part color Overrides color.
|
||||
var/skin_color // If set, applies skin color rather than part color.
|
||||
var/blood_color = "#030303"
|
||||
<<<<<<< HEAD
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_XENOCHIMERA) //VOREStation Edit
|
||||
=======
|
||||
var/blood_name = "oil"
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA)
|
||||
>>>>>>> 85d1338... FBP Internal Components (#7445)
|
||||
var/list/species_alternates = list(SPECIES_TAJ = "Unbranded - Tajaran", SPECIES_UNATHI = "Unbranded - Unathi") //"Species Name" = "Robolimb Company" , List, when initialized, will become "Species Name" = RobolimbDatum, used for alternate species sprites.
|
||||
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
|
||||
var/parts = BP_ALL //Defines what parts said brand can replace on a body.
|
||||
@@ -171,6 +176,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
desc = "This limb looks to be more like a strange.. puppet, than a prosthetic."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi'
|
||||
blood_color = "#63b521"
|
||||
blood_name = "synthetic ichor"
|
||||
speech_bubble_appearance = "machine"
|
||||
unavailable_to_build = 1
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
@@ -307,6 +313,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
skin_tone = 1
|
||||
species_alternates = list(SPECIES_SKRELL = "Vey-Med - Skrell")
|
||||
blood_color = "#CCCCCC"
|
||||
blood_name = "coolant"
|
||||
speech_bubble_appearance = "normal"
|
||||
//robo_brute_mod = 1.1 //VOREStation Edit
|
||||
//robo_burn_mod = 1.1 //VOREStation Edit
|
||||
@@ -320,6 +327,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
skin_color = TRUE
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_DIONA, SPECIES_ZADDAT)
|
||||
blood_color = "#4451cf"
|
||||
blood_name = "coolant"
|
||||
speech_bubble_appearance = "normal"
|
||||
robo_brute_mod = 1.05
|
||||
robo_burn_mod = 1.05
|
||||
|
||||
@@ -22,6 +22,13 @@
|
||||
..()
|
||||
owner.adjust_nutrition(-rand(10 / severity, 50 / severity))
|
||||
|
||||
/obj/item/organ/internal/cell/machine/handle_organ_proc_special()
|
||||
..()
|
||||
if(owner && owner.stat != DEAD)
|
||||
owner.bodytemperature += round(owner.robobody_count * 0.5, 0.1)
|
||||
|
||||
return
|
||||
|
||||
// Used for an MMI or posibrain being installed into a human.
|
||||
/obj/item/organ/internal/mmi_holder
|
||||
name = "brain interface"
|
||||
@@ -51,6 +58,11 @@
|
||||
/obj/item/organ/internal/mmi_holder/proc/tick_defib_timer()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/proc/get_control_efficiency()
|
||||
. = max(0, 1 - round(damage / max_damage, 0.1))
|
||||
|
||||
return .
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/proc/update_from_mmi()
|
||||
|
||||
if(!stored_mmi.brainmob)
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
// Give them fancy new organs.
|
||||
owner.internal_organs_by_name[O_CELL] = new /obj/item/organ/internal/cell(owner,1)
|
||||
owner.internal_organs_by_name[O_VOICE] = new /obj/item/organ/internal/voicebox/robot(owner, 1)
|
||||
owner.internal_organs_by_name[O_PUMP] = new /obj/item/organ/internal/heart/machine(owner,1)
|
||||
owner.internal_organs_by_name[O_CYCLER] = new /obj/item/organ/internal/stomach/machine(owner,1)
|
||||
owner.internal_organs_by_name[O_HEATSINK] = new /obj/item/organ/internal/robotic/heatsink(owner,1)
|
||||
owner.internal_organs_by_name[O_DIAGNOSTIC] = new /obj/item/organ/internal/robotic/diagnostic(owner,1)
|
||||
|
||||
/obj/item/organ/external/chest/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
|
||||
Reference in New Issue
Block a user