diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 4958d87f3d..feae05ae91 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -139,10 +139,12 @@ SUBSYSTEM_DEF(transcore) var/datum/nifsoft/nifsoft = N nifsofts += nifsoft.type MR.nif_software = nifsofts + MR.nif_savedata = nif.save_data.Copy() else if(isnull(nif)) //Didn't pass anything, so no NIF MR.nif_path = null MR.nif_durability = null MR.nif_software = null + MR.nif_savedata = null else MR = new(mind, mind.current, add_to_db = TRUE, one_time = one_time) diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index c6a69369fa..fa3bb9762d 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -33,9 +33,10 @@ var/type = H.nif.type var/durability = H.nif.durability var/list/nifsofts = H.nif.nifsofts + var/list/nif_savedata = H.nif.save_data.Copy() ..() - var/obj/item/device/nif/nif = new type(H,durability) + var/obj/item/device/nif/nif = new type(H,durability,nif_savedata) nif.nifsofts = nifsofts else ..() diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 9d2be6bdd2..f85e2ed0a3 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -230,6 +230,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M brainmob.dna = H.dna + brainmob.ooc_notes = H.ooc_notes brainmob.timeofhostdeath = H.timeofdeath SStranscore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it. @@ -461,6 +462,8 @@ if(istype(HP) && HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER)) var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) + else if(H.nif && H.nif.flag_check(NIF_SC_BACKUPS)) + SStranscore.m_backup(H,0) //If dying inside a pred who lacks SC, let ours do a backup if enabled before it's gone for good. else if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index db9bbfa8ea..834b067e9d 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -26,6 +26,7 @@ var/nif_path var/nif_durability var/list/nif_software + var/list/nif_savedata = list() var/one_time = FALSE @@ -42,7 +43,7 @@ cryo_at = 0 //Mental stuff the game doesn't keep mentally - if(istype(M)) + if(istype(M) || istype(M,/mob/living/carbon/brain/caught_soul)) id_gender = M.identifying_gender languages = M.languages.Copy() mind_oocnotes = M.ooc_notes @@ -55,6 +56,7 @@ var/datum/nifsoft/nifsoft = N nifsofts += nifsoft.type nif_software = nifsofts + nif_savedata = M.nif.save_data.Copy() last_update = world.time diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index ca4d9c7a67..8554a1d6ce 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -526,10 +526,10 @@ //Re-supply a NIF if one was backed up with them. if(MR.nif_path) - var/obj/item/device/nif/nif = new MR.nif_path(occupant,MR.nif_durability) + var/obj/item/device/nif/nif = new MR.nif_path(occupant,,MR.nif_savedata) for(var/path in MR.nif_software) new path(nif) - nif.durability = MR.nif_durability //Restore backed up durability as the line above forces reinstall wear for each soft. + nif.durability = MR.nif_durability //Restore backed up durability after restoring the softs. // If it was a custom sleeve (not owned by anyone), update namification sequences if(!occupant.original_player) diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm index 92964b519b..e1d6a0f6c1 100644 --- a/code/modules/vore/eating/contaminate_vr.dm +++ b/code/modules/vore/eating/contaminate_vr.dm @@ -103,8 +103,10 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi') return TRUE /obj/item/weapon/holder/gurgle_contaminate(var/atom/movable/item_storage = null) - digest_act(item_storage) - return TRUE + if(isbelly(loc)) + digest_act(item_storage) + return TRUE + return FALSE /obj/item/organ/gurgle_contaminate(var/atom/movable/item_storage = null) digest_act(item_storage)