The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.
") //Bloody hell... + clear_alert("hatch") return //Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch. @@ -108,11 +125,13 @@ to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") verbs -= /mob/living/carbon/human/proc/hatch revive_ready = REVIVING_READY //reset their cooldown they can try again when they're given a kickstart + clear_alert("hatch") //Alive when hatching else chimera_hatch() visible_message("The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.
") //Bloody hell... + clear_alert("hatch") /mob/living/carbon/human/proc/chimera_hatch() verbs -= /mob/living/carbon/human/proc/hatch @@ -139,9 +158,13 @@ //Visual effects var/T = get_turf(src) - new /obj/effect/gibspawner/human/xenochimera(T) + var/blood_color = species.blood_color + var/flesh_color = species.flesh_color + new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color) + + playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50) - revive_ready = world.time + 1 HOUR //set the cooldown + revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often. /mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use revive_ready = REVIVING_READY diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 4d766fb837..f11b4c3115 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -27,8 +27,7 @@ /mob/living/carbon/human/proc/sonar_ping, /mob/living/carbon/human/proc/tie_hair, /mob/living/proc/flying_toggle, - /mob/living/proc/start_wings_hovering, - /mob/living/carbon/human/proc/tie_hair) //Xenochimera get all the special verbs since they can't select traits. + /mob/living/proc/start_wings_hovering) //Xenochimera get all the special verbs since they can't select traits. virus_immune = 1 // They practically ARE one. min_age = 18 @@ -50,7 +49,7 @@ //primitive_form = "Farwa" spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken. - flags = NO_SCAN | NO_INFECT //Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. + flags = NO_SCAN | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. Leaving NO_DEFIB there for the future/in case reversion to old 'chimera no-defib. appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR genders = list(MALE, FEMALE, PLURAL, NEUTER) @@ -74,8 +73,8 @@ reagent_tag = IS_CHIMERA /datum/species/xenochimera/handle_environment_special(var/mob/living/carbon/human/H) - //If they're KO'd/dead, they're probably not thinking a lot about much of anything. - if(!H.stat) + //If they're KO'd/dead, or reviving, they're probably not thinking a lot about much of anything. + if(!H.stat || !(H.revive_ready == REVIVING_NOW || H.revive_ready == REVIVING_DONE)) handle_feralness(H) //While regenerating @@ -83,6 +82,10 @@ H.weakened = 5 H.canmove = 0 H.does_not_breathe = TRUE + var/regen_sounds = H.regen_sounds + if(prob(2)) // 2% chance of playing squelchy noise while reviving, which is run roughly every 2 seconds/tick while regenerating. + playsound(H, pick(regen_sounds), 30) + H.visible_message("[H.name]'s motionless form shudders grotesquely, rippling unnaturally.
") //Cold/pressure effects when not regenerating else @@ -202,6 +205,11 @@ feral++ else feral = max(0,--feral) + + // Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9 + var/turf/T = get_turf(H) + if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1)) + feral = max(0,--feral) //Set our real mob's var to our temp var H.feral = feral @@ -218,7 +226,7 @@ H.shock_stage = max(H.shock_stage-(feral/20), 0) //Handle light/dark areas - var/turf/T = get_turf(H) + // var/turf/T = get_turf(H) // Moved up to before the in-belly/dark combined check, should still safely reach here just fine. if(!T) update_xenochimera_hud(H, danger, feral_state) return //Nullspace @@ -230,8 +238,8 @@ //This is basically the 'lite' version of the below block. var/list/nearby = H.living_mobs(world.view) - //Not in the dark and out in the open. - if(!darkish && isturf(H.loc)) + //Not in the dark, or a belly, and out in the open. + if(!darkish && isturf(H.loc) && !isbelly(H.loc)) // Added specific check for if in belly //Always handle feral if nobody's around and not in the dark. if(!nearby.len) @@ -245,8 +253,8 @@ update_xenochimera_hud(H, danger, feral_state) return - // In the darkness or "hidden". No need for custom scene-protection checks as it's just an occational infomessage. - if(darkish || !isturf(H.loc)) + // In the darkness, or "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage. + if(darkish || !isturf(H.loc) || isbelly(H.loc)) // Specific check for if in belly. !isturf should do this, but JUST in case. // If hurt, tell 'em to heal up if (shock) to_chat(H,"This place seems safe, secure, hidden, a place to lick your wounds and recover...") diff --git a/code/modules/mob/living/carbon/lick_wounds.dm b/code/modules/mob/living/carbon/lick_wounds.dm index 4dd039186e..bd726e4ac6 100644 --- a/code/modules/mob/living/carbon/lick_wounds.dm +++ b/code/modules/mob/living/carbon/lick_wounds.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/proc/lick_wounds(var/mob/living/carbon/M in living_mobs(1)) +/mob/living/carbon/human/proc/lick_wounds(var/mob/living/carbon/M) // Allows the user to lick themselves. Given how rarely this trait is used, I don't see an issue with a slight buff. set name = "Lick Wounds" set category = "Abilities" set desc = "Disinfect and heal small wounds with your saliva." @@ -7,6 +7,10 @@ to_chat(src, "You need more energy to produce antiseptic enzymes. Eat something and try again.") return + if (get_dist(src,M) >= 2) + to_chat(src, "You need to be closer to do that.") + return + if ( ! (istype(src, /mob/living/carbon/human) || \ istype(src, /mob/living/silicon)) ) to_chat(src, "If you even have a tongue, it doesn't work that way.") @@ -49,7 +53,7 @@ if(affecting.brute_dam > 20 || affecting.burn_dam > 20) to_chat(src, "The wounds on [M]'s [affecting.name] are too severe to treat with just licking.") return - + else visible_message("\The [src] starts licking the wounds on [M]'s [affecting.name] clean.", \ "You start licking the wounds on [M]'s [affecting.name] clean." ) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 0d18a844b4..e951477ba7 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -21,6 +21,7 @@ var/vore_egg_type = "egg" // Default egg type. var/feral = 0 // How feral the mob is, if at all. Does nothing for non xenochimera at the moment. var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far. + var/revive_finished = 0 // Only used for xenochimera regen, allows us to find out when the regen will finish. var/metabolism = 0.0015 var/vore_taste = null // What the character tastes like var/vore_smell = null // What the character smells like @@ -38,6 +39,13 @@ var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. var/vis_height = 32 // Sprite height used for resize features. var/show_vore_fx = TRUE // Show belly fullscreens + var/regen_sounds = list( + 'sound/effects/mob_effects/xenochimera/regen_1.ogg', + 'sound/effects/mob_effects/xenochimera/regen_2.ogg', + 'sound/effects/mob_effects/xenochimera/regen_4.ogg', + 'sound/effects/mob_effects/xenochimera/regen_3.ogg', + 'sound/effects/mob_effects/xenochimera/regen_5.ogg' + ) // // Hook for generic creation of stuff on new creatures diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index e2abc031b1..69badf5b83 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/sound/effects/mob_effects/xenochimera/hatch.ogg b/sound/effects/mob_effects/xenochimera/hatch.ogg new file mode 100644 index 0000000000..3ac74fdec1 Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/hatch.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/hatch_notification.ogg b/sound/effects/mob_effects/xenochimera/hatch_notification.ogg new file mode 100644 index 0000000000..f821a898b7 Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/hatch_notification.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/regen_1.ogg b/sound/effects/mob_effects/xenochimera/regen_1.ogg new file mode 100644 index 0000000000..199e7db780 Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/regen_1.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/regen_2.ogg b/sound/effects/mob_effects/xenochimera/regen_2.ogg new file mode 100644 index 0000000000..a15d979797 Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/regen_2.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/regen_3.ogg b/sound/effects/mob_effects/xenochimera/regen_3.ogg new file mode 100644 index 0000000000..5546c2b25f Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/regen_3.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/regen_4.ogg b/sound/effects/mob_effects/xenochimera/regen_4.ogg new file mode 100644 index 0000000000..a5d706e7ce Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/regen_4.ogg differ diff --git a/sound/effects/mob_effects/xenochimera/regen_5.ogg b/sound/effects/mob_effects/xenochimera/regen_5.ogg new file mode 100644 index 0000000000..b85eced5ab Binary files /dev/null and b/sound/effects/mob_effects/xenochimera/regen_5.ogg differ