diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index a06b306e41..a8beeee075 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -7,6 +7,7 @@ circuit = /obj/item/weapon/circuitboard/cloning req_access = list(access_heads) //Only used for record deletion right now. var/list/pods = list() //Linked grower pods. + var/list/spods = list() var/list/sleevers = list() //Linked resleeving booths. var/temp = "" var/menu = 1 //Which menu screen to display @@ -14,7 +15,7 @@ var/datum/transhuman/mind_record/active_mr = null var/datum/transhuman/infocore/TC //Easy debugging access var/organic_capable = 1 - var/synthetic_capable = 0 + var/synthetic_capable = 1 /obj/machinery/computer/transhuman/resleeving/initialize() ..() @@ -34,6 +35,10 @@ P.connected = null P.name = initial(P.name) pods.Cut() + for(var/obj/machinery/transhuman/synthprinter/P in spods) + P.connected = null + P.name = initial(P.name) + spods.Cut() for(var/obj/machinery/transhuman/resleever/P in sleevers) P.connected = null P.name = initial(P.name) @@ -47,6 +52,11 @@ pods += P P.connected = src P.name = "[initial(P.name)] #[num++]" + for(var/obj/machinery/transhuman/synthprinter/P in A.get_contents()) + if(!P.connected) + spods += P + P.connected = src + P.name = "[initial(P.name)] #[num++]" for(var/obj/machinery/transhuman/resleever/P in A.get_contents()) if(!P.connected) sleevers += P @@ -99,6 +109,10 @@ for(var/obj/machinery/clonepod/transhuman/pod in pods) pods_list_ui[++pods_list_ui.len] = list("pod" = pod, "biomass" = pod.biomass) + var/spods_list_ui[0] + for(var/obj/machinery/transhuman/synthprinter/spod in spods) + spods_list_ui[++spods_list_ui.len] = list("spod" = spod, "steel" = spod.steel, "glass" = spod.glass) + var/sleevers_list_ui[0] for(var/obj/machinery/transhuman/resleever/resleever in sleevers) sleevers_list_ui[++sleevers_list_ui.len] = list("sleever" = resleever, "occupant" = resleever.occupant ? resleever.occupant.real_name : "None") @@ -108,6 +122,11 @@ else data["pods"] = null + if(spods) + data["spods"] = spods_list_ui + else + data["spods"] = null + if(sleevers) data["sleevers"] = sleevers_list_ui else @@ -126,14 +145,12 @@ if(active_br) var/can_grow_active = 1 - if(!synthetic_capable && active_br.synthetic) //Disqualified due to being synthetic in an organic pod. + if(!synthetic_capable && active_br.synthetic) //Disqualified due to being synthetic in an organic only. can_grow_active = 0 else if(!organic_capable && !active_br.synthetic) //Disqualified for the opposite. can_grow_active = 0 else if(!synthetic_capable && !organic_capable) //What have you done?? can_grow_active = 0 - else if(!pods.len) - can_grow_active = 0 data["activeBodyRecord"] = list("real_name" = active_br.mydna.name, \ "speciesname" = active_br.speciesname, \ @@ -156,6 +173,7 @@ data["menu"] = menu data["podsLen"] = pods.len + data["spodsLen"] = spods.len data["sleeversLen"] = sleevers.len data["temp"] = temp @@ -189,27 +207,73 @@ else if (href_list["refresh"]) updateUsrDialog() - else if (href_list["grow"]) + else if (href_list["create"]) if(istype(active_br)) - if(!pods.len) + //Tried to grow a synth but no synth pods. + if(active_br.synthetic && !spods.len) + temp = "Error: No SynthFabs detected." + //Tried to grow an organic but no growpods. + else if(!active_br.synthetic && !pods.len) temp = "Error: No growpods detected." + //We have the machines. We can rebuild them. Probably. else - var/obj/machinery/clonepod/transhuman/pod = pods[1] - if (pods.len > 1) - pod = input(usr,"Select a growing pod to use", "Pod selection") as anything in pods - if(pod.occupant) - temp = "Error: Growpod is currently occupied." - else if(pod.biomass < CLONE_BIOMASS) - temp = "Error: Not enough biomass." - else if(pod.mess) - temp = "Error: Growpod malfunction." - else if(!config.revival_cloning) - temp = "Error: Unable to initiate growing cycle." - else if(pod.growclone(active_br.mydna)) - temp = "Initiating growing cycle..." - menu = 1 + //We're cloning a synth. + if(active_br.synthetic) + var/obj/machinery/transhuman/synthprinter/spod = spods[1] + if (spods.len > 1) + spod = input(usr,"Select a SynthFab to use", "Printer selection") as anything in spods + + //Already doing someone. + if(spod.busy) + temp = "Error: SynthFab is currently busy." + + //Not enough steel or glass + else if(spod.steel < spod.body_cost) + temp = "Error: Not enough steel in SynthFab." + else if(spod.glass < spod.body_cost) + temp = "Error: Not enough glass in SynthFab." + + //Gross pod (broke mid-cloning or something). + else if(spod.broken) + temp = "Error: SynthFab malfunction." + + //Do the cloning! + else if(spod.print(active_br)) + temp = "Initiating printing cycle..." + menu = 1 + else + temp = "Initiating printing cycle...
Error: Post-initialisation failed. Printing cycle aborted." + + //We're cloning an organic. else - temp = "Initiating growing cycle...
Error: Post-initialisation failed. Growing cycle aborted." + var/obj/machinery/clonepod/transhuman/pod = pods[1] + if (pods.len > 1) + pod = input(usr,"Select a growing pod to use", "Pod selection") as anything in pods + + //Already doing someone. + if(pod.occupant) + temp = "Error: Growpod is currently occupied." + + //Not enough materials. + else if(pod.biomass < CLONE_BIOMASS) + temp = "Error: Not enough biomass." + + //Gross pod (broke mid-cloning or something). + else if(pod.mess) + temp = "Error: Growpod malfunction." + + //Disabled in config. + else if(!config.revival_cloning) + temp = "Error: Unable to initiate growing cycle." + + //Do the cloning! + else if(pod.growclone(active_br)) + temp = "Initiating growing cycle..." + menu = 1 + else + temp = "Initiating growing cycle...
Error: Post-initialisation failed. Growing cycle aborted." + + //The body record is broken somehow. else temp = "Error: Data corruption." @@ -228,7 +292,7 @@ //Body to sleeve into, but mind is in another living body. else if(active_mr.mind.current && active_mr.mind.current.stat != DEAD) //Mind is in a body already that's alive - var/answer = alert(active_mr.mind.current,"Someone is attempting to restore a CURRENT backup of your mind into another body. Do you want to move to that body? You should suffer no memory loss.","Resleeving","Yes","No") + var/answer = alert(active_mr.mind.current,"Someone is attempting to restore a backup of your mind into another body. Do you want to move to that body? You MAY suffer memory loss! (Same rules as CMD apply)","Resleeving","Yes","No") //They declined to be moved. if(answer == "No") diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index c8d6d31519..0df9bb6c42 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -118,6 +118,8 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/synthetic var/speciesname var/bodygender + var/list/limb_data = list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO) + var/list/organ_data = list(O_HEART, O_EYES, O_LUNGS, O_BRAIN) /datum/transhuman/body_record/New(var/mob/living/carbon/human/M,var/add_to_db = 1) ASSERT(M) @@ -143,5 +145,32 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore ckey = M.ckey mind_ref = M.mind + //External organ status. 0:gone, 1:normal, "string":manufacturer + for(var/limb in limb_data) + var/obj/item/organ/external/O = M.organs_by_name[limb] + + //Missing limb. + if(!O) + limb_data[limb] = 0 + + //Has model set, is pros. + else if(O.model) + limb_data[limb] = O.model + + //Nothing special, present and normal. + else + limb_data[limb] = 1 + + //Internal organ status + for(var/org in organ_data) + var/obj/item/organ/I = M.internal_organs_by_name[org] + + //Who knows? Missing lungs maybe on synths, etc. + if(!I) + continue + + //Just set the data to this. 0:normal, 1:assisted, 2:robotic, 3:crazy + organ_data[org] = I.robotic + if(add_to_db) transcore.add_body(src) \ No newline at end of file diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index f190eabf29..dd54c8fc90 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -7,7 +7,8 @@ /obj/machinery/clonepod/transhuman name = "grower pod" -/obj/machinery/clonepod/transhuman/growclone(var/datum/dna2/record/R) +/obj/machinery/clonepod/transhuman/growclone(var/datum/transhuman/body_record/current_project) + var/datum/dna2/record/R = current_project.mydna if(mess || attempting) return 0 @@ -19,6 +20,45 @@ eject_wait = 0 var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) + + //Fix the external organs + for(var/part in current_project.limb_data) + + var/status = current_project.limb_data[part] + if(status == null) continue //Species doesn't have limb? Child of amputated limb? + + var/obj/item/organ/external/O = H.organs_by_name[part] + if(!O) continue //Not an organ. Perhaps another amputation removed it already. + + if(status == 1) //Normal limbs + continue + else if(status == 0) //Missing limbs + O.remove_rejuv() + else if(status) //Anything else is a manufacturer + O.remove_rejuv() //Don't robotize them, leave them removed so robotics can attach a part. + + //Look, this machine can do this because [reasons] okay?! + for(var/part in current_project.organ_data) + + var/status = current_project.organ_data[part] + if(status == null) continue //Species doesn't have organ? Child of missing part? + + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(!I) continue//Not an organ. Perhaps external conversion changed it already? + + if(part == BP_EYES && status > 0) //But not eyes. The only non-essential internal organ. + qdel(I) + continue + + if(status == 0) //Normal organ + continue + else if(status == 1) //Assisted organ + I.mechassist() + else if(status == 2) //Mechanical organ + I.robotize() + else if(status == 3) //Digital organ + I.digitize() + occupant = H if(!R.dna.real_name) @@ -64,7 +104,6 @@ return else if(occupant.health < heal_level && occupant.getCloneLoss() > 0) - occupant.Paralyse(4) //Slowly get that clone healed and finished. occupant.adjustCloneLoss(-2 * heal_rate) @@ -75,7 +114,7 @@ //So clones don't die of oxyloss in a running pod. if(occupant.reagents.get_reagent_amount("inaprovaline") < 30) occupant.reagents.add_reagent("inaprovaline", 60) - occupant.Sleeping(30) + //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! occupant.adjustOxyLoss(-4) @@ -98,7 +137,124 @@ return +//Synthetic version +/obj/machinery/transhuman/synthprinter + name = "SynthFab 3000" + desc = "A rapid fabricator for synthetic bodies." + icon = 'icons/obj/machines/synthpod.dmi' + icon_state = "pod_0" + density = 1 + anchored = 1 + var/steel = 30000 //Starting steel + var/glass = 30000 //Starting glass + var/connected //What console it's done up with + var/busy = 0 //Busy cloning + var/body_cost = 15000 //Cost of a cloned body (metal and glass ea.) + var/datum/transhuman/body_record/current_project + var/broken = 0 + +/obj/machinery/transhuman/synthprinter/process() + if(stat & NOPOWER) + if(busy) + busy = 0 + current_project = null + update_icon() + return + + if(busy > 0 && busy <= 95) + busy += 5 + + if(busy >= 100) + make_body() + + return + +/obj/machinery/transhuman/synthprinter/proc/print(var/datum/transhuman/body_record/BR) + if(!istype(BR) || busy) + return 0 + + if(steel < body_cost || glass < body_cost) + return 0 + + current_project = BR + busy = 5 + update_icon() + + return 1 + +/obj/machinery/transhuman/synthprinter/proc/make_body() + if(!current_project) + busy = 0 + update_icon() + return + + //Blep us a new blank body to robotize (based on their original species choice). + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, current_project.mydna.dna.species) + H.name = current_project.mydna.dna.real_name + H.real_name = H.name + + //First the external organs + for(var/part in current_project.limb_data) + + var/status = current_project.limb_data[part] + if(status == null) continue //Species doesn't have limb? Child of amputated limb? + + var/obj/item/organ/external/O = H.organs_by_name[part] + if(!O) continue //Not an organ. Perhaps another amputation removed it already. + + if(status == 1) //Normal limbs + continue + else if(status == 0) //Missing limbs + O.remove_rejuv() + else if(status) //Anything else is a manufacturer + O.robotize(status) + + //Then the internal organs + for(var/part in current_project.organ_data) + + var/status = current_project.organ_data[part] + if(status == null) continue //Species doesn't have organ? Child of missing part? + + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(!I) continue//Not an organ. Perhaps external conversion changed it already? + + if(status == 0) //Normal organ + continue + else if(status == 1) //Assisted organ + I.mechassist() + else if(status == 2) //Mechanical organ + I.robotize() + else if(status == 3) //Digital organ + I.digitize() + + H.adjustBruteLoss(20) + H.adjustFireLoss(20) + + //Cha-ching. + steel -= body_cost + glass -= body_cost + + //Plonk them here. + H.loc = get_turf(src) + + //Reset stuff. + busy = 0 + update_icon() + +/obj/machinery/transhuman/synthprinter/attack_hand(mob/user as mob) + if((busy == 0) || (stat & NOPOWER)) + return + user << "Current print cycle is [busy]% complete." + return + +/obj/machinery/transhuman/synthprinter/update_icon() + ..() + icon_state = "pod_0" + if(busy && !(stat & NOPOWER)) + icon_state = "pod_1" + else if(broken) + icon_state = "pod_g" /////// Resleever Pod /////// /obj/machinery/transhuman/resleever diff --git a/icons/obj/machines/synthpod.dmi b/icons/obj/machines/synthpod.dmi new file mode 100644 index 0000000000..2684ddcbe5 Binary files /dev/null and b/icons/obj/machines/synthpod.dmi differ diff --git a/maps/virgo-1.dmm b/maps/virgo-1.dmm index b236080596..1ab2ad111a 100644 --- a/maps/virgo-1.dmm +++ b/maps/virgo-1.dmm @@ -4801,7 +4801,7 @@ "bOq" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOr" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/fireaxecabinet{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) -"bOt" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bOt" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - Resleeving"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOu" = (/turf/simulated/floor/carpet/blue,/area/medical/psych) "bOv" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOw" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/resleeving) @@ -4943,7 +4943,7 @@ "bRc" = (/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/scalpel{pixel_y = 12},/obj/item/weapon/surgical/hemostat,/obj/item/weapon/surgical/retractor,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRd" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRe" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bRf" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/weapon/weldingtool/hugetank,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bRf" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRi" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving) @@ -4989,7 +4989,7 @@ "bRW" = (/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bRX" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bRY" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/closet{name = "spare clothes"},/obj/item/clothing/under/color/black,/obj/item/clothing/under/color/black,/obj/item/clothing/under/color/grey,/obj/item/clothing/under/color/grey,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/blue,/obj/item/clothing/under/color/green,/obj/item/clothing/under/color/lightpurple,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) -"bRZ" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Resleeving"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/transhuman/resleever,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bRZ" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/transhuman/resleever,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bSa" = (/obj/effect/floor_decal/corner/pink{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bSb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/pink{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bSc" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr2_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr2_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr2_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr2_window_tint"},/turf/simulated/floor,/area/medical/patient_b) @@ -5029,8 +5029,8 @@ "bSK" = (/obj/structure/table/standard,/obj/machinery/light,/obj/structure/closet/secure_closet/medical_wall{name = "anesthetic closet"; pixel_x = -32; req_access = list(29)},/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/weapon/storage/box/gloves,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bSL" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bSM" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bSN" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/hemostat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bSO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light,/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bSN" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/transhuman/resleeving,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bSO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light,/obj/machinery/transhuman/resleever,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bSP" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/assembly/robotics) "bSQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_four) "bSR" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room) @@ -5374,6 +5374,7 @@ "bZr" = (/obj/random/obstruction,/turf/simulated/floor,/area/maintenance/medbay_aft) "bZs" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr5_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr5_window_tint"},/turf/simulated/floor,/area/medical/patient_c) "bZt" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room E"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_c) +"bZu" = (/obj/machinery/transhuman/synthprinter,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bZw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bZx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bZy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room D"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_d) @@ -10119,7 +10120,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeaafaafaafbMXbMYbMZbNabNbbNcbMXbNdaaiaaiaafaafbrmbNebGqbNfbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbNgbNhbNibNjbNkbNlbxKbNmbNnbNobNpbNqbNrbNsbGubGvbGwbNtbNubJFbNvbFebNwbNxbNybNzbNzbNAbNBbNybNCbNDbFeaaiaaibIlbbiaZhbbibNEbFibDxbNFbIpbNGbNHbIpbLJbNIbDxbNJbNKbNLbLObNMbNNbNObNPbLObNQbLObLOaafaVeaVObClbNRbNSbNTbNTbNUbNTbNTbNVbDMbNWbClbNXbNYbNZbOabObbOcbNXbNYbNZbCobNXbNZaOKaVkbiVbFJaOKaOKaaibKpbOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbOsbEubMwbKzbMAbMxbOtbMBbOwbOvbQwbOAbOBbOCbODbOEbOFbOGbOHbOIbOEbOJbOKbOLbOMbKVbONbOObOPbKZbLabOQbORbMVbOSbOTbOUbMVbOVbJlaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayacvacvaazaayaaeaaeaaeaayaaeaaeaaeaaeaaaaaaaaaaaeaaeaaeaazaaeaaaaafaafaafbLlbOWbOXbOYbOYbOZbLlaaiaaiaaiaafaafbrmbPabPbbPcbPcbPcbPdbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbwhbIbbPsbPtbPubPvbPwbFebPxbNBbNBbNBbNBbNBbNBbNBbNCbPybFeaaiaaibIlbbiaZhbPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbDxbPKbNKbPLbLObPMbPNbPObPObPPbPQbPRbLOaafaVeaVObClbPSbPTbDMbPUbPVbDMbDMbDMbDMbPWbClbPXbPYbPZbQabQbbQcbQbbQcbQdbQebQfbQfbQgbQhbbyaPQbQiaOKaaibKpbQjbQkbQlbMibQmbQnbQobQpbQqbQrbQsbQtbQubQvbEubRibQybKzbRRbEubEubEubEubEubQzbQAbQBbQBbQBbQBbQBbQCbQDbQCbQCbQCbQCbQCbQEbQFbQGbQHbQIbQIbQIbJlbJlbZGbQKbQLbZGbJlbJlaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbMXbQMbOXbOYbOYbQNbMXbNdaaiaaiaafaafbrmbQObGqbQPbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbQQbQQbQRbQSbQQbQTbQUbQVbQWbQXbQYbQZbRabRbbQXbQXbQXbQXbQXbFebRcbRdbRebNBbNBbRfbRgbRhbNCbRSbFeaaiaaibIlbbiaZhbRjaXOaXObDxbDxbDxbDxbDxbRkbDxbDxbDxbRlbRmbRnbLObRobRpbRqbRrbLObRsbRtbLOaafaVeaVObClbDPbRubClbClbRvbRwbRwbRwbRwbClbClbRxbPZbPYbRybRzbPZbPYbPZbRAbRBaPQaPQaPQaPQbRCbRDbREaOKaaibKpbRFbRGbRHbRGbRIbQnbRJbRKcRbbRMbRNbRObRPbRQbEubRUbRTbRZbRYbEubKDbKEbTGbVBbSabSbbScbSdbSebSfbQBbSgbShbSibSjbSkbSlbQCbSmbSnbQGbSobSpbSqbQGaafaafbZGbSrbSsbZGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbLjbLkbLlbStbLlbLkbLjbJraaiaaiaafaafbrmbrmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbSubSvbSwbSxbQQbSybSzbSzbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbFebSKbSLbSMbNBbNBbSNbSLbSObNCbSPbFeaaiaaibIlbbiaZhaVGbSQaaibSRbSSbSTbSUbSVbSWbSXbSYbSRbSZbTabTbbLObLObTcbLObLObLObLObLObLOaafaVeaVOaVebTdbTebTfbTgbThbThbThbThbThbTibTjbPZbPYbTkbTlbTmbTnbPZbPYbTobTpaPQaPQbTqbTrbaBaPQbTsaOKaaibKpbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbQubTEbTFbEubEubEubEubEubEubXSbMybMzbXTbTKbTLbTMbTNbTObTPbQBbTQbTRbTSbTTbTTbTUbQCbTVbTWbQGbTXbTYbTZbQGaafaafbZGbUabUbbZGaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbLjbLkbLlbStbLlbLkbLjbJraaiaaiaafaafbrmbrmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbSubSvbSwbSxbQQbSybSzbSzbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbFebSKbSLbSMbNBbNBbSNbZubSObNCbSPbFeaaiaaibIlbbiaZhaVGbSQaaibSRbSSbSTbSUbSVbSWbSXbSYbSRbSZbTabTbbLObLObTcbLObLObLObLObLObLOaafaVeaVOaVebTdbTebTfbTgbThbThbThbThbThbTibTjbPZbPYbTkbTlbTmbTnbPZbPYbTobTpaPQaPQbTqbTrbaBaPQbTsaOKaaibKpbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbQubTEbTFbEubEubEubEubEubEubXSbMybMzbXTbTKbTLbTMbTNbTObTPbQBbTQbTRbTSbTTbTTbTUbQCbTVbTWbQGbTXbTYbTZbQGaafaafbZGbUabUbbZGaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbJsbUcbUdbUebUfbUgbJtbJraaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUvbUwbUxbUybUzbUAbUzbUBbUBbUzbUCbUzbUDbUzbUyaaiaaibIlbUEaZhaVGaWEaaibUFbUGbUHbUIbUGbSWbSWbUJbUKbULbUMbTbblubUObUPbUQbuwbUSbUTbQJbLOaafaVebUVbUWbUXbUYbUZbVabVbbVcbVdbVcbVbbVcbUZbPYbPZbVebVfbTlbVgbPYbPZbVhbVibOdbOeaOKbFJbiVbFJaOKaOKaaibKpbVjbVkbKpbVjbVkbKpbKpbKpbIUbVlbVmbVnbIUbIUbIUaafaafaafaafbJdbOxbOybOzbVBbVrbVsbScbVtbVubVvbQBcYzbVxbVybVzbVAbXUbQCbVCbVDbVEbVFbVGbQGbQGaafaafbZGbVHbVIbZGbZGaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibVJbVKbVLbVMbVJaaiaaiaaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbVNbVObVPbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebUybWfbWgbWhbWibWibWfbWgbWfbWjbWkbUyaaiaaibIlbWlbeHbWmaWEaaibWnbWobWpbWqbWrbWsbWtbWubSRbWvbWwbWMbWybWybWzbWAbWBbWCbWCbUNbLOaafaVebWEaVebWFbPZbPYbUZbWGbUZbWGbUZbWGbUZbWHbPZbPYbTkbWIbTmbTnbPZbPYbWJbViaaiaaiaOKbWKbbybWLaOKaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaibIUbXAbWNbIUbIUaafaafaafaafaafaafbJdbJdbJdbJdbJdbWObWPbQBbQBbQBbQBbQBbQCbQCbQCbQCbQCbQCbQCbWQbWRbQGbQGbQGbQGaafaafaafbZGbWSbWTbWUbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibWVbWWbWXbWYbWVaaiaaiaaiaafaafaafaafbrmbWZbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbXabXbbXcbXdbXebXfbWdbXgbXhbXibXjbXkbXhbXgbWdbWdbWdbXlbUybXmbXnbXmbXobWibXmbXnbXmbWjbWkbUyaaiaaibXpbbibBRbXqaWEaaibXrbXsbXtbXubXvbSWbXwbXxbXybWvbXzbYQbXBbXCbXDbXEbXFbXGbXHbXIbLOaafaVebWEaVeaVebPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbXJbPZbPYbXKbRxbXLbPYbPZbRxbXMbXNaaibHnaPQbbyaPQbHnaaibXObXObXObXObXObXObXObXObXOaaibXPbXQbXRbXPaawaawaawaawaawbXVaafbRVbRWbRXbXWbZsbSabSbbXXbXYbXZbYabYbaafaafaafaafaafaafbYcbYdbYebYfbYgbYcaafaafaafaafbZGbYhbYibYjbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/sleever.tmpl b/nano/templates/sleever.tmpl index df60daea8a..e0fd519c34 100644 --- a/nano/templates/sleever.tmpl +++ b/nano/templates/sleever.tmpl @@ -5,18 +5,22 @@

Resleeving Control

+
{{if data.podsLen > 0}} {{:data.podsLen}} growing vats found. - {{else}} - No growing vats found. {{/if}}
+ +
+ {{if data.spodsLen > 0}} + {{:data.podsLen}} growing vats found. + {{/if}} +
+
{{if data.sleeversLen > 0}} {{:data.sleeversLen}} resleeving pods found. - {{else}} - No resleeving pods found. {{/if}}
@@ -25,6 +29,12 @@
{{:value.pod}}, biomass: {{:value.biomass}}
{{/for}} {{/if}} + + {{if data.spodsLen}} + {{for data.spods}} +
{{:value.spod}}, S/G: {{:value.steel}}/{{:value.glass}}
+ {{/for}} + {{/if}} {{if data.sleeversLen}} {{for data.sleevers}} @@ -84,7 +94,7 @@
{{:data.activeBodyRecord.synthetic}}
- {{:helper.link('Grow', 'play', {'grow' : data.activeBodyRecord.real_name}, data.activeBodyRecord.cando ? null : 'linkOff')}} + {{:helper.link('Create', 'play', {'create' : data.activeBodyRecord.real_name}, data.activeBodyRecord.cando ? null : 'linkOff')}} {{else}}
ERROR: Record not found.