diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 1dd7ce26..50014406 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -194,6 +194,7 @@ #define TRAIT_VIRILE "virile" //you have 20% more chance of impreg #define TRAIT_MACROPHILE "macrophile" //likes the big #define TRAIT_MICROPHILE "microphile" //likes the small +#define TRAIT_APATHETIC "apathetic" //doesn't care #define TRAIT_TOUGH "tough" //you have 10% more maxhealth #define TRAIT_AUTO_CATCH_ITEM "auto_catch_item" diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 1b02a0f1..dc21a916 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -16,6 +16,7 @@ desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess." value = 1 category = CATEGORY_MOODS + mob_trait = TRAIT_APATHETIC mood_quirk = TRUE medical_record_text = "Patient was administered the Apathy Evaluation Scale but did not bother to complete it." diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index d2c9f5a1..56237527 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -232,7 +232,7 @@ GENE SCANNER msg += "\tSubject has abnormal brain fuctions.\n" //Astrogen shenanigans - if(M.reagents.has_reagent(/datum/reagent/fermi/astral)) + if(M.reagents?.has_reagent(/datum/reagent/fermi/astral)) if(M.mind) msg += "\tWarning: subject may be possesed.\n" else diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index e69e0a9f..2fa5306c 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -28,15 +28,15 @@ to_chat(target, "You feel as if you are being watched.") return draining = TRUE - essence_drained += rand(15, 20) + essence_drained += rand(30, 40) to_chat(src, "You search for the soul of [target].") if(do_after(src, rand(10, 20), 0, target)) //did they get deleted in that second? if(target.ckey) to_chat(src, "[target.p_their(TRUE)] soul burns with intelligence.") - essence_drained += rand(20, 30) + essence_drained += rand(40, 60) if(target.stat != DEAD) to_chat(src, "[target.p_their(TRUE)] soul blazes with life!") - essence_drained += rand(40, 50) + essence_drained += rand(80, 100) else to_chat(src, "[target.p_their(TRUE)] soul is weak and faltering.") if(do_after(src, rand(15, 20), 0, target)) //did they get deleted NOW? diff --git a/code/modules/antagonists/revenant/revenant_spawn_event.dm b/code/modules/antagonists/revenant/revenant_spawn_event.dm index 2ff8503b..eee89f83 100644 --- a/code/modules/antagonists/revenant/revenant_spawn_event.dm +++ b/code/modules/antagonists/revenant/revenant_spawn_event.dm @@ -1,4 +1,4 @@ -#define REVENANT_SPAWN_THRESHOLD 15 +#define REVENANT_SPAWN_THRESHOLD 12 /datum/round_event_control/revenant name = "Spawn Revenant" // Did you mean 'griefghost'? @@ -20,7 +20,8 @@ if(!ignore_mobcheck) var/deadMobs = 0 for(var/mob/living/carbon/M in GLOB.dead_mob_list) - deadMobs++ + if(is_station_level(M.z)) + deadMobs++ if(deadMobs < REVENANT_SPAWN_THRESHOLD) message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.") return WAITING_FOR_SOMETHING diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 4b91526b..6182befe 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -19,12 +19,6 @@ if(SSticker.mode) SSticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now - //watching someone die is traumatic - for(var/mob/living/carbon/human/H in oview(5, src)) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "death", /datum/mood_event/deathsaw) - if(prob(10)) //10% chance to pump adrenaline into their body - H.jitteriness += 5 - /mob/living/carbon/gib(no_brain, no_organs, no_bodyparts) var/atom/Tsec = drop_location() for(var/mob/M in src) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index f61c8741..a589df81 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -52,6 +52,14 @@ if(is_devil(src)) INVOKE_ASYNC(is_devil(src), /datum/antagonist/devil.proc/beginResurrectionCheck, src) + //watching someone die is traumatic + for(var/mob/living/carbon/human/C in oview(5, src)) + if(C.mind) //We don't need to give this to anything that doesn't have a mind. That's wasted processing. + if(!HAS_TRAIT(C, TRAIT_APATHETIC) || !C.mind.assigned_role == "Medical Doctor") //Shamelessly stolen from the Doctor's Delight + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "death", /datum/mood_event/deathsaw) + if(prob(10)) //10% chance to pump adrenaline into their body + C.jitteriness += 5 + /mob/living/carbon/human/proc/makeSkeleton() ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC) set_species(/datum/species/skeleton) diff --git a/hyperstation/code/datums/mood_events/events.dm b/hyperstation/code/datums/mood_events/events.dm index 6ef7c115..5c58d9ab 100644 --- a/hyperstation/code/datums/mood_events/events.dm +++ b/hyperstation/code/datums/mood_events/events.dm @@ -15,10 +15,10 @@ /datum/mood_event/deathsaw description = "I saw someone die!\n" - mood_change = -8 - timeout = 20 MINUTES //takes a long time to get over + mood_change = -5 + timeout = 20 MINUTES //May be fine tuned in the future. /datum/mood_event/healsbadman description = "I feel like I'm held together by flimsy string, and could fall apart at any moment!\n" mood_change = -4 - timeout = 2 MINUTES \ No newline at end of file + timeout = 2 MINUTES diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm index 1a2ad90a..2f553cde 100644 --- a/hyperstation/code/mobs/mimic.dm +++ b/hyperstation/code/mobs/mimic.dm @@ -7,12 +7,13 @@ icon_dead = "mimic_dead" gender = NEUTER speak_chance = 0 + maxHealth = 38 + health = 38 turns_per_move = 5 - maxHealth = 50 - health = 50 - //move_to_delay = 4 + move_to_delay = 3 speed = 0 - see_in_dark = 3 + see_in_dark = 6 + pass_flags = PASSTABLE butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 2) response_help = "prods" response_disarm = "pushes aside" @@ -21,12 +22,17 @@ melee_damage_upper = 12 attacktext = "slams" attack_sound = 'sound/weapons/punch1.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) ventcrawler = VENTCRAWLER_ALWAYS + blood_volume = 0 faction = list("mimic") gold_core_spawnable = NO_SPAWN vision_range = 2 aggro_vision_range = 9 wander = TRUE + minbodytemp = 250 //VERY weak to cold + maxbodytemp = 1500 + pressure_resistance = 600 var/unstealth = FALSE var/knockdown_people = 1 @@ -36,18 +42,27 @@ unstealth = FALSE Mimictransform() -/mob/living/simple_animal/hostile/hs13mimic/proc/Mimictransform() //The list of default things to transform needs to be bigger, consider this in the future. +/mob/living/simple_animal/hostile/hs13mimic/attack_hand(mob/living/carbon/human/M) + . = ..() + trigger() +/mob/living/simple_animal/hostile/hs13mimic/proc/Mimictransform() //The list of default things to transform needs to be bigger, consider this in the future. var/transformitem = rand(1,100) + medhudupdate() if(unstealth == FALSE) wander = FALSE vision_range = initial(vision_range) switch(transformitem) - if(1 to 20) + if(1 to 10) name = "drinking glass" icon = 'icons/obj/drinks.dmi' icon_state = "glass_empty" desc = "Your standard drinking glass." + if(11 to 20) + name = "insulated gloves" + icon = 'icons/obj/clothing/gloves.dmi' + icon_state = "yellow" + desc = "These gloves will protect the wearer from electric shock." if(21 to 30) name = "Private Security Officer" desc = "A cardboard cutout of a private security officer." @@ -118,8 +133,31 @@ else if(!target && unstealth) trytftorandomobject() +/mob/living/simple_animal/hostile/hs13mimic/death(gibbed) + restore() + . = ..() + +/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_health() + if(!unstealth) + var/image/holder = hud_list[HEALTH_HUD] + holder.icon_state = null + return //we hide medical hud while morphed + ..() + +/mob/living/simple_animal/hostile/hs13mimic/med_hud_set_status() + if(!unstealth) + var/image/holder = hud_list[STATUS_HUD] + holder.icon_state = null + return //we hide medical hud while morphed + ..() + +/mob/living/simple_animal/hostile/hs13mimic/proc/medhudupdate() + med_hud_set_health() + med_hud_set_status() + /mob/living/simple_animal/hostile/hs13mimic/proc/restore() - //back to normal + //back to normal mimic sprite + medhudupdate() name = initial(name) icon = 'hyperstation/icons/mobs/mimic.dmi' icon_state = "mimic" @@ -142,12 +180,13 @@ C.trigger() /mob/living/simple_animal/hostile/hs13mimic/proc/trytftorandomobject() + unstealth = FALSE + medhudupdate() var/list/obj/item/listItems = list() for(var/obj/item/I in oview(9,src.loc)) listItems += I if(LAZYLEN(listItems)) var/obj/item/changedReference = pick(listItems) - unstealth = FALSE wander = FALSE vision_range = initial(vision_range) name = changedReference.name @@ -155,7 +194,6 @@ icon_state = changedReference.icon_state desc = changedReference.desc else - unstealth = FALSE Mimictransform() /datum/round_event_control/mimic_infestation