diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 2b32afb3a0..8516075afb 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -16,6 +16,7 @@ var/datum/transhuman/infocore/TC //Easy debugging access var/organic_capable = 1 var/synthetic_capable = 1 + var/obj/item/weapon/disk/transcore/disk /obj/machinery/computer/transhuman/resleeving/initialize() ..() @@ -72,6 +73,11 @@ P.connected = src P.name = "[initial(P.name)] #[pods.len]" user << "You connect [P] to [src]." + else if(istype(W, /obj/item/weapon/disk/transcore)) + user.unEquip(W) + disk = W + disk.forceMove(src) + user << "You insert \the [W] into \the [src]." else ..() return @@ -179,6 +185,8 @@ data["spodsLen"] = spods.len data["sleeversLen"] = sleevers.len data["temp"] = temp + data["coredumped"] = transcore.core_dumped + data["emergency"] = disk ? 1 : 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) @@ -210,6 +218,16 @@ else if (href_list["refresh"]) updateUsrDialog() + else if (href_list["coredump"]) + if(disk) + transcore.core_dump(disk) + disk.forceMove(get_turf(src)) + disk = null + + else if (href_list["ejectdisk"]) + disk.forceMove(get_turf(src)) + disk = null + else if (href_list["create"]) if(istype(active_br)) //Tried to grow a synth but no synth pods. @@ -328,3 +346,31 @@ nanomanager.update_uis(src) add_fingerprint(usr) + +// In here because only relevant to computer +/obj/item/weapon/cmo_disk_holder + name = "cmo emergency packet" + desc = "A small paper packet with printing on one side. \"Tear open in case of Code Delta or Emergency Evacuation ONLY. Use in any other case is UNLAWFUL.\"" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "cmoemergency" + item_state = "card-id" + +/obj/item/weapon/cmo_disk_holder/attack_self(var/mob/attacker) + playsound(src, 'sound/items/poster_ripped.ogg', 50) + attacker << "You tear open \the [name]." + attacker.unEquip(src) + var/obj/item/weapon/disk/transcore/newdisk = new(get_turf(src)) + attacker.put_in_any_hand_if_possible(newdisk) + qdel(src) + +/obj/item/weapon/disk/transcore + name = "TransCore Dump Disk" + desc = "It has a small label. \n\ + \"1.INSERT DISK INTO RESLEEVING CONSOLE\n\ + 2. BEGIN CORE DUMP PROCEDURE\n\ + 3. ENSURE DISK SAFETY WHEN EJECTED\"" + icon = 'icons/obj/cloning.dmi' + icon_state = "harddisk" + item_state = "card-id" + w_class = ITEMSIZE_SMALL + var/datum/transhuman/mind_record/list/stored = list() diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index a1bf07e64b..bc68b6f051 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -12,6 +12,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore /datum/transhuman/infocore var/overdue_time = 15 MINUTES var/process_time = 1 MINUTE + var/core_dumped = 0 var/datum/transhuman/mind_record/list/backed_up = list() var/datum/transhuman/mind_record/list/has_left = list() @@ -21,6 +22,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore process() /datum/transhuman/infocore/proc/process() + if(core_dumped) return for(var/N in backed_up) var/datum/transhuman/mind_record/curr_MR = backed_up[N] if(!curr_MR) @@ -40,7 +42,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore /datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind) ASSERT(mind) - if(!mind.name) //Name is critical to everything here + if(!mind.name || core_dumped) return 0 var/datum/transhuman/mind_record/MR @@ -56,7 +58,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore /datum/transhuman/infocore/proc/notify(var/name) ASSERT(name) var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) - a.autosay("[name] is past-due for a mind backup. This will be the only notification.", "Backup Monitor", "Medical") + a.autosay("[name] is past-due for a mind backup. This will be the only notification.", "TransCore Oversight", "Medical") qdel(a) /datum/transhuman/infocore/proc/add_backup(var/datum/transhuman/mind_record/MR) @@ -76,6 +78,18 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore body_scans[BR.mydna.name] = BR log_debug("Added [BR.mydna.name] to transcore body DB.") +/datum/transhuman/infocore/proc/core_dump(var/obj/item/weapon/disk/transcore/disk) + ASSERT(disk) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + a.autosay("An emergency core dump has been initiated!", "TransCore Oversight", "Command") + a.autosay("An emergency core dump has been initiated!", "TransCore Oversight", "Medical") + qdel(a) + + disk.stored += backed_up + backed_up.Cut() + core_dumped = 1 + return disk.stored.len + /////// Mind-backup record /////// /datum/transhuman/mind_record //User visible diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 1c141d4c0b..eac55b4e65 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/maps/virgo-1.dmm b/maps/virgo-1.dmm index 928b05992e..57a287c294 100644 --- a/maps/virgo-1.dmm +++ b/maps/virgo-1.dmm @@ -3819,7 +3819,7 @@ "bvw" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvx" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvy" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bvz" = (/obj/structure/closet/secure_closet/CMO,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/item/clothing/glasses/sunglasses/omnihud/cmo,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bvz" = (/obj/structure/closet/secure_closet/CMO,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/item/clothing/glasses/sunglasses/omnihud/cmo,/obj/item/weapon/cmo_disk_holder,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvA" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/machinery/light{dir = 1},/obj/item/weapon/surgical/cautery,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled,/area/medical/morgue) "bvB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) "bvC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) diff --git a/nano/templates/sleever.tmpl b/nano/templates/sleever.tmpl index 97b29819e5..58f99cbacd 100644 --- a/nano/templates/sleever.tmpl +++ b/nano/templates/sleever.tmpl @@ -1,126 +1,138 @@ -{{:data.temp}} +{{if data.coredumped}} +
+ TransCore dump complete. Disk ejected. +
+{{else data.emergency}} +
+ !!WARNING!!
Dump Disk Inserted! This will transfer all minds to the dump disk, and the TransCore will be made unusable until post-shift maintenance! This should only be used in emergencies!

+
+ {{:helper.link('DUMP CORE', 'radiation', {'coredump' : data.emergency}, null, 'redButton')}} + {{:helper.link('Eject Disk', 'eject', {'ejectdisk' : data.emergency})}} +{{else}} + {{:data.temp}} - -{{if data.menu == 1}} -

Resleeving Control

-
-
- -
- {{if data.podsLen > 0}} - {{:data.podsLen}} growing vats found. - {{/if}} -
- -
- {{if data.spodsLen > 0}} - {{:data.spodsLen}} SyntFabs found. - {{/if}} -
- -
- {{if data.sleeversLen > 0}} - {{:data.sleeversLen}} resleeving pods found. - {{/if}} -
- - {{if data.podsLen}} - {{for data.pods}} -
{{: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}} -
{{:value.sleever}}, occupant: {{:value.occupant}}
- {{/for}} - {{/if}} - - -

Database Functions

-
- {{:helper.link('View Body Records', 'list', {'menu' : 2})}} -
-
- {{:helper.link('View Mind Records', 'list', {'menu' : 3})}} -
- - -{{else data.menu == 2}} -

Current body records

- {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} -
- {{for data.bodyrecords}} - {{:helper.link(value.name, 'document', {'view_brec' : value.recref})}} - {{/for}} -
- - -{{else data.menu == 3}} -

Current mind records

- {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} -
- {{for data.mindrecords}} - {{:helper.link(value.name, 'document', {'view_mrec' : value.recref})}} - {{/for}} -
- - -{{else data.menu == 4}} -

Selected Body Record

-
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 2})}}
- - {{if data.activeBodyRecord}} + + {{if data.menu == 1}} +

Resleeving Control

-
Name:
-
{{:data.activeBodyRecord.real_name}}
-
-
Species:
-
{{:data.activeBodyRecord.speciesname}}
-
-
-
Bio. Sex:
-
{{:data.activeBodyRecord.gender}}
-
-
-
Mind compat.:
-
{{:data.activeBodyRecord.locked}}
-
-
-
Synthetic:
-
{{:data.activeBodyRecord.synthetic}}
-
- - {{:helper.link('Create', 'play', {'create' : data.activeBodyRecord.real_name}, data.activeBodyRecord.cando ? null : 'linkOff')}} - {{else}} -
ERROR: Record not found.
- {{/if}} - - -{{else data.menu == 5}} -

Selected Mind Record

-
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 3})}}
- - {{if data.activeMindRecord}}
-
Name:
-
{{:data.activeMindRecord.charname}}
+ {{if data.podsLen > 0}} + {{:data.podsLen}} growing vats found. + {{/if}}
-
-
Backup status:
-
{{:data.activeMindRecord.obviously_dead}}
-
- {{:helper.link('Sleeve', 'play', {'sleeve' : data.activeMindRecord.charname}, data.activeMindRecord.cando ? null : 'linkOff')}} - {{else}} -
ERROR: Record not found.
+
+ {{if data.spodsLen > 0}} + {{:data.spodsLen}} SyntFabs found. + {{/if}} +
+ +
+ {{if data.sleeversLen > 0}} + {{:data.sleeversLen}} resleeving pods found. + {{/if}} +
+ + {{if data.podsLen}} + {{for data.pods}} +
{{: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}} +
{{:value.sleever}}, occupant: {{:value.occupant}}
+ {{/for}} + {{/if}} + + +

Database Functions

+
+ {{:helper.link('View Body Records', 'list', {'menu' : 2})}} +
+
+ {{:helper.link('View Mind Records', 'list', {'menu' : 3})}} +
+ + + {{else data.menu == 2}} +

Current body records

+ {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} +
+ {{for data.bodyrecords}} + {{:helper.link(value.name, 'document', {'view_brec' : value.recref})}} + {{/for}} +
+ + + {{else data.menu == 3}} +

Current mind records

+ {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} +
+ {{for data.mindrecords}} + {{:helper.link(value.name, 'document', {'view_mrec' : value.recref})}} + {{/for}} +
+ + + {{else data.menu == 4}} +

Selected Body Record

+
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 2})}}
+ + {{if data.activeBodyRecord}} +
+
Name:
+
{{:data.activeBodyRecord.real_name}}
+
+
+
Species:
+
{{:data.activeBodyRecord.speciesname}}
+
+
+
Bio. Sex:
+
{{:data.activeBodyRecord.gender}}
+
+
+
Mind compat.:
+
{{:data.activeBodyRecord.locked}}
+
+
+
Synthetic:
+
{{:data.activeBodyRecord.synthetic}}
+
+ + {{:helper.link('Create', 'play', {'create' : data.activeBodyRecord.real_name}, data.activeBodyRecord.cando ? null : 'linkOff')}} + + {{else}} +
ERROR: Record not found.
+ {{/if}} + + + {{else data.menu == 5}} +

Selected Mind Record

+
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 3})}}
+ + {{if data.activeMindRecord}} +
+
Name:
+
{{:data.activeMindRecord.charname}}
+
+
+
Backup status:
+
{{:data.activeMindRecord.obviously_dead}}
+
+ {{:helper.link('Sleeve', 'play', {'sleeve' : data.activeMindRecord.charname}, data.activeMindRecord.cando ? null : 'linkOff')}} + + {{else}} +
ERROR: Record not found.
+ {{/if}} {{/if}} {{/if}} \ No newline at end of file