VR pod and mob TF fixes & adjustments (#17397)

* Makes VR not crash the server

- Makes mouse rays no longer crash the server under certain circumstances
- Makes VR pods no longer crash the server (Method #1)
- Makes VR pods no longer crash the server (Method #2)
- I think there was a third method to crash the server with VR pods. That got fixed too. If it existed.
- Updates TF and makes it no longer cause runtimes & crashes.
- Makes it so you can no longer repeatedly spawn in VR and clog up the server with hundreds of yourself (humanoids are expensive!)
- Adds a greyscale effect for reconverting TF rays
- Added a toggle for VR pods to spawn people with clothing or not
- Ghosts now have a button to enter the VR space if it's spawned in!
- Ghosts can now enter VR if it's spawned in!
- Adds the ability to TF into different creatures while in VR

* turfs

* moving stuff around

also small drippy fix while at it

* shhhh

* Update ar_console.dm
This commit is contained in:
Cameron Lennox
2025-03-21 21:58:25 +01:00
committed by GitHub
parent 86ee9df7f9
commit 95e3bf67c4
24 changed files with 937 additions and 65 deletions
@@ -18,10 +18,10 @@
assisted_langs = list()
male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg')
male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg'
female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg'
// male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
// female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg')
// male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg'
// female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg'
valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJARAN, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_VOX, SPECIES_MONKEY, SPECIES_SKELETON)
@@ -80,7 +80,6 @@
src.vr_link = avatar // Can't reuse vr_holder so that death can automatically eject users from VR
// Move the mind
avatar.Sleeping(1)
src.mind.transfer_to(avatar)
to_chat(avatar, span_infoplain(span_bold("You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting."))) //No more prommie VR thing, so removed tidbit about changing appearance
to_chat(avatar, span_notice(" You black out for a moment, and wake to find yourself in a new body in virtual reality.")) // So this is what VR feels like?
@@ -92,6 +91,11 @@
if(!vr_holder)
return
if(tfed_into_mob_check()) //Make sure we're not TFed and revert if we are before checking for a mind.
var/mob/living/M = loc
if(istype(M)) // Sanity check, though shouldn't be needed since this is already checked by the proc.
M.revert_mob_tf()
if(!mind)
return
@@ -118,4 +122,16 @@
if(istype(vr_holder.loc, /obj/machinery/vr_sleeper))
var/obj/machinery/vr_sleeper/V = vr_holder.loc
V.go_out()
V.go_out(TRUE)
if(died_in_vr)
addtimer(CALLBACK(src, PROC_REF(cleanup_vr)), 3000, TIMER_DELETE_ME) //Delete the body after 5 minutes
/mob/living/carbon/human/proc/cleanup_vr()
var/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear)
for(var/slot in slots)
var/obj/item/I = get_equipped_item(slot = slot)
if(I)
unEquip(I,force = TRUE)
release_vore_contents(include_absorbed = TRUE, silent = TRUE)
qdel(src)
+2
View File
@@ -86,6 +86,8 @@
handle_dripping()
handle_vr_derez()
/mob/living/proc/handle_breathing()
return
+2 -2
View File
@@ -1421,12 +1421,12 @@
drop.drips |= drips
// Update appearance.
drop.basecolor = rgb(H.r_skin,H.g_skin,H.b_skin)
drop.update_icon()
drop.name = "drips of something"
drop.desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
drop.dryname = "dried something"
drop.drydesc = "It's dry and crusty. The janitor isn't doing their job."
drop.basecolor = rgb(H.r_skin,H.g_skin,H.b_skin)
drop.update_icon()
drop.fluorescent = 0
drop.invisibility = 0
//else
@@ -107,3 +107,8 @@
)
var/touch_reaction_flags
var/virtual_reality_mob = FALSE // gross boolean for keeping VR mobs in VR
var/mob/living/tf_form // Shapeshifter shenanigans
var/tf_form_ckey