/obj/machinery/sleep_console name = "sleeper console" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "console" anchored = 1 //About time someone fixed this. density = 0 /obj/machinery/sleeper name = "sleeper" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "sleeper-open" density = 0 anchored = 1 state_open = 1 var/efficiency var/initial_bin_rating = 1 var/min_health = 25 var/list/injection_chems = list() //list of injectable chems except ephedrine, coz ephedrine is always avalible var/list/possible_chems = list(list("morphine", "salbutamol", "salglu_solution"), list("morphine", "salbutamol", "salglu_solution", "oculine"), list("morphine", "salbutamol", "salglu_solution", "oculine", "charcoal", "mutadone", "mannitol", "pen_acid")) /obj/machinery/sleeper/New() ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/sleeper(null) // Customizable bin rating, used by the labor camp to stop people filling themselves with chemicals and escaping. var/obj/item/weapon/stock_parts/matter_bin/B = new(null) B.rating = initial_bin_rating component_parts += B component_parts += new /obj/item/weapon/stock_parts/manipulator(null) component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() /obj/machinery/sleeper/RefreshParts() var/E var/I for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) E += B.rating for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) I += M.rating injection_chems = possible_chems[I] efficiency = E min_health = -E * 25 /obj/machinery/sleeper/allow_drop() return 0 /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) if(stat || user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !iscarbon(target)) return close_machine(target) /obj/machinery/sleeper/blob_act() if(prob(75)) for(var/atom/movable/A in src) A.loc = loc A.blob_act() qdel(src) /obj/machinery/sleeper/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise if(M.environment_smash) M.do_attack_animation(src) visible_message("[M.name] smashes [src] apart!") qdel(src) return /obj/machinery/sleeper/attackby(obj/item/I, mob/user) if(!state_open && !occupant) if(default_deconstruction_screwdriver(user, "sleeper-o", "sleeper", I)) return if(default_change_direction_wrench(user, I)) return if(exchange_parts(user, I)) return if(default_pry_open(I)) return default_deconstruction_crowbar(I) /obj/machinery/sleeper/ex_act(severity, target) go_out() ..() /obj/machinery/sleeper/emp_act(severity) if(stat & (BROKEN|NOPOWER)) ..(severity) return if(occupant) go_out() ..(severity) /obj/machinery/sleeper/proc/go_out() if(!occupant) return for(var/atom/movable/O in src) O.loc = loc if(occupant.client) occupant.client.eye = occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE occupant = null icon_state = "sleeper-open" /obj/machinery/sleeper/container_resist() open_machine() /obj/machinery/sleeper/relaymove(var/mob/user) ..() open_machine() /obj/machinery/sleeper/attack_hand(mob/user) if(..()) return sleeperUI(user) /obj/machinery/sleeper/proc/sleeperUI(mob/user) var/dat dat += "

Injector

" if(occupant) dat += "Inject epinephrine" else dat += "Inject epinephrine" if(occupant && occupant.health > min_health) for(var/re in injection_chems) var/datum/reagent/C = chemical_reagents_list[re] if(C) dat += "
Inject [C.name]" else for(var/re in injection_chems) var/datum/reagent/C = chemical_reagents_list[re] if(C) dat += "
Inject [C.name]" dat += "

Sleeper Status

" dat += "Scan" dat += "Close" : "open=1'>Open"]" dat += "
" if(!occupant) dat += "Sleeper Unoccupied" else dat += "[occupant.name] => " switch(occupant.stat) //obvious, see what their status is if(0) dat += "Conscious" if(1) dat += "Unconscious" else dat += "DEAD" dat += "
" dat += "
Health:
[occupant.stat > 1 ? "" : "[occupant.health]%"]
" dat += "
\> Brute Damage:
[occupant.getBruteLoss()]%
" dat += "
\> Resp. Damage:
[occupant.getOxyLoss()]%
" dat += "
\> Toxin Content:
[occupant.getToxLoss()]%
" dat += "
\> Burn Severity:
[occupant.getFireLoss()]%
" dat += "
Paralysis Summary:
[round(occupant.paralysis)]% [occupant.paralysis ? "([round(occupant.paralysis / 4)] seconds left)" : ""]
" if(occupant.getCloneLoss()) dat += "
Subject appears to have cellular damage.
" if(occupant.getBrainLoss()) dat += "
Significant brain damage detected.
" if(occupant.reagents.reagent_list.len) for(var/datum/reagent/R in occupant.reagents.reagent_list) dat += text("
[R.name]:
[] units
", round(R.volume, 0.1)) dat += "
" var/datum/browser/popup = new(user, "sleeper", "Sleeper Console", 520, 540) //Set up the popup browser window popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.set_content(dat) popup.open() /obj/machinery/sleeper/Topic(href, href_list) if(..() || usr == occupant) return usr.set_machine(src) if(href_list["refresh"]) updateUsrDialog() return if(href_list["open"]) open_machine() return if(href_list["close"]) close_machine() return if(occupant && occupant.stat != DEAD) if(href_list["inject"] == "epinephrine" || occupant.health > min_health) inject_chem(usr, href_list["inject"]) else usr << "ERROR: Subject is not in stable condition for auto-injection." else usr << "ERROR: Subject cannot metabolise chemicals." updateUsrDialog() add_fingerprint(usr) /obj/machinery/sleeper/attack_ai(mob/user) return attack_hand(user) /obj/machinery/sleeper/attack_paw(mob/user) return attack_hand(user) /obj/machinery/sleeper/open_machine() if(!state_open && !panel_open) ..() /obj/machinery/sleeper/close_machine(mob/target) if(state_open && !panel_open) ..(target) /obj/machinery/sleeper/proc/inject_chem(mob/user, chem) if(!is_operational()) return if(occupant && occupant.reagents) if(chem in injection_chems + "epinephrine") if(occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency) occupant.reagents.add_reagent(chem, 10) var/units = round(occupant.reagents.get_reagent_amount(chem)) user << "Occupant now has [units] unit\s of [chem] in their bloodstream." /obj/machinery/sleeper/update_icon() if(state_open) icon_state = "sleeper-open" else icon_state = "sleeper"