diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 78bdec83225..195b183e25c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -50,11 +50,13 @@ if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ + src.help_up_offer = 0 + /mob/living/carbon/relaymove(var/mob/living/user, direction) if((user in contents) && istype(user)) if(user.last_special <= world.time) user.last_special = world.time + 50 - src.visible_message("You hear something rumbling inside [src]'s stomach...") + src.visible_message(span("danger", "You hear something rumbling inside [src]'s stomach...")) var/obj/item/I = user.get_active_hand() if(I && I.force) var/d = rand(round(I.force / 4), I.force) @@ -67,7 +69,7 @@ H.updatehealth() else src.take_organ_damage(d) - user.visible_message("[user] attacks [src]'s stomach wall with the [I.name]!") + user.visible_message(span("danger", "[user] attacks [src]'s stomach wall with the [I.name]!")) playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) if(prob(src.getBruteLoss() - 50)) @@ -107,9 +109,9 @@ if(H.bg) to_chat(H, span("danger", "You sense some disturbance to your physical body!")) else - visible_message("[M] [action] [src], but they do not respond... Maybe they have S.S.D?") + visible_message(span("notice", "[M] [action] [src], but they do not respond... Maybe they have S.S.D?")) else if(client && willfully_sleeping) - visible_message("[M] [action] [src] waking [t_him] up!") + visible_message(span("notice", "[M] [action] [src] waking [t_him] up!")) sleeping = 0 willfully_sleeping = 0 @@ -138,17 +140,17 @@ playsound(loc, "sparks", 50, 1, -1) if (shock_damage > 15 || tesla_shock) src.visible_message( - "[src] was shocked by the [source]!", \ - "You feel a powerful shock course through your body!", \ - "You hear a heavy electrical crack." \ + span("warning", "[src] was shocked by the [source]!"), \ + span("danger", "You feel a powerful shock course through your body!"), \ + span("warning", "You hear a heavy electrical crack.") \ ) Stun(10)//This should work for now, more is really silly and makes you lay there forever Weaken(10) else src.visible_message( - "[src] was mildly shocked by the [source].", \ - "You feel a mild shock course through your body.", \ - "You hear a light zapping." \ + span("warning", "[src] was mildly shocked by the [source]."), \ + span("warning", "You feel a mild shock course through your body."), \ + span("warning", "You hear a light zapping.") \ ) spark(loc, 5, alldirs) @@ -163,7 +165,7 @@ if(item_in_hand) //this segment checks if the item in your hand is twohanded. if(istype(item_in_hand,/obj/item/material/twohanded) || istype(item_in_hand,/obj/item/gun) || istype(item_in_hand,/obj/item/pickaxe)) if(item_in_hand:wielded == 1) - to_chat(usr, "Your other hand is too busy holding the [item_in_hand.name]") + to_chat(usr, span("warning", "Your other hand is too busy holding the [item_in_hand.name]")) return src.hand = !( src.hand ) if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) @@ -198,7 +200,7 @@ var/mob/living/carbon/human/H = src src.visible_message( \ text("[src] examines [].",src.gender==MALE?"himself":"herself"), \ - "You check yourself for injuries." \ + span("notice", "You check yourself for injuries.") \ ) for(var/obj/item/organ/external/org in H.organs) @@ -243,19 +245,19 @@ else if (on_fire) playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if (M.on_fire) - M.visible_message("[M] tries to pat out [src]'s flames, but to no avail!", - "You try to pat out [src]'s flames, but to no avail! Put yourself out first!") + M.visible_message(span("warning", "[M] tries to pat out [src]'s flames, but to no avail!"), + span("warning", "You try to pat out [src]'s flames, but to no avail! Put yourself out first!")) else - M.visible_message("[M] tries to pat out [src]'s flames!", - "You try to pat out [src]'s flames! Hot!") + M.visible_message(span("warning", "[M] tries to pat out [src]'s flames!"), + span("warning", "You try to pat out [src]'s flames! Hot!")) if(do_mob(M, src, 1.5 SECONDS)) if (M.IgniteMob(prob(10))) - M.visible_message("The fire spreads from [src] to [M]!", - "The fire spreads to you as well!") + M.visible_message(span("danger", "The fire spreads from [src] to [M]!"), + span("danger", "The fire spreads to you as well!")) else if (src.ExtinguishMob(1)) - M.visible_message("[M] successfully pats out [src]'s flames.", - "You successfully pat out [src]'s flames.") + M.visible_message(span("warning", "[M] successfully pats out [src]'s flames."), + span("warning", "You successfully pat out [src]'s flames.")) else var/t_him = "it" if (src.gender == MALE) @@ -275,17 +277,42 @@ if(H.bg) to_chat(H, span("warning", "You sense some disturbance to your physical body, like someone is trying to wake you up.")) else - M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ - "You shake [src], but they do not respond... Maybe they have S.S.D?") - else if(lying || src.sleeping) - src.sleeping = max(0,src.sleeping-5) - if(src.sleeping == 0) - src.resting = 0 - M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ - "You shake [src] trying to wake [t_him] up!") + M.visible_message(span("notice", "[M] shakes [src] trying to wake [t_him] up!"), \ + span("notice", "You shake [src], but they do not respond... Maybe they have S.S.D?")) + else if(lying) + if(src.sleeping) + src.sleeping = max(0,src.sleeping-5) + M.visible_message(span("notice", "[M] shakes [src] trying to wake [t_him] up!"), \ + span("notice", "You shake [src] trying to wake [t_him] up!")) + else + M.help_up_offer = !M.help_up_offer + if(M.help_up_offer) + M.visible_message(span("notice", "[M] holds a hand out to [src]."), \ + span("notice", "You hold a hand out to [src].")) + else + M.visible_message(span("warning", "[M] retracts their hand from [src]'s direction."), \ + span("warning", "You retract your hand from [src]'s direction.")) else var/mob/living/carbon/human/tapper = M - if(istype(tapper)) + if(M.resting) + if(src.help_up_offer) + M.visible_message(span("notice", "[M] grabs onto [src]'s hand and is hoisted up."), \ + span("notice", "You grab onto [src]'s hand and are hoisted up.")) + if(do_after(M, 0.5 SECONDS)) + M.resting = 0 + src.help_up_offer = 0 + else + M.visible_message(span("warning", "[M] grabs onto [src], trying to pull themselves up."), \ + span("warning", "You grab onto [src], trying to pull yourself up.")) + if(M.fire_stacks >= (src.fire_stacks + 3)) + src.adjust_fire_stacks(1) + M.adjust_fire_stacks(-1) + if(M.on_fire) + src.IgniteMob() + if(do_after(M, 4 SECONDS)) + M.resting = 0 + + else if(istype(tapper)) tapper.species.tap(tapper,src) else M.visible_message("[M] taps [src] to get their attention!", \ @@ -370,7 +397,7 @@ set category = "IC" if(usr.sleeping) - to_chat(usr, "You are already sleeping") + to_chat(usr, span("warning", "You are already sleeping")) return if(alert(src,"You sure you want to sleep for a while?","Sleep","Yes","No") == "Yes") willfully_sleeping = 1 @@ -390,7 +417,7 @@ if(buckled) return 0 stop_pulling() - to_chat(src, "You slipped on [slipped_on]!") + to_chat(src, span("warning", "You slipped on [slipped_on]!")) playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) Stun(stun_duration) Weaken(Floor(stun_duration/2)) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index a662743d43d..d33521734ba 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -187,3 +187,23 @@ src.attack_log += "\[[time_stamp()]\] Got knifed by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" msg_admin_attack("[key_name_admin(user)] knifed [key_name_admin(src)] with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])",ckey=key_name(user),ckey_target=key_name(src) ) return 1 + +/mob/living/carbon/Stun(amount) + help_up_offer = 0 + ..() + +/mob/living/carbon/Weaken(amount) + help_up_offer = 0 + ..() + +/mob/living/carbon/Paralyse(amount) + help_up_offer = 0 + ..() + +/mob/living/carbon/Sleeping(amount) + help_up_offer = 0 + ..() + +/mob/living/carbon/Resting(amount) + help_up_offer = 0 + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 16dfddbd6c2..1108c341ac0 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -33,5 +33,9 @@ var/willfully_sleeping = 0 var/consume_nutrition_from_air = FALSE // used by Diona + + var/help_up_offer = 0 //if they have their hand out to offer someone up from the ground. + var/list/organs_by_name = list() // map organ names to organs - var/list/internal_organs_by_name = list() // so internal organs have less ickiness too \ No newline at end of file + var/list/internal_organs_by_name = list() // so internal organs have less ickiness too + diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 69c2367b3a2..32ccb8be91e 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -352,6 +352,11 @@ // Finally, apply damage to target apply_damage(real_damage, hit_dam_type, hit_zone, armour, sharp=is_sharp, edge=is_edge) + + if(M.resting && src.help_up_offer) + M.visible_message(span("warning", "[M] slaps away [src]'s hand!")) + src.help_up_offer = 0 + if(I_DISARM) var/disarm_cost var/usesStamina diff --git a/html/changelogs/help_me_up.yml b/html/changelogs/help_me_up.yml new file mode 100644 index 00000000000..ad40680f596 --- /dev/null +++ b/html/changelogs/help_me_up.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Mwahahahaha + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Shaking people on the floor now has you offer a hand out to them like a true civilised person. The person on the floor must click on that civilised person with help intent to be helped up."