mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 10:33:30 +01:00
Merge branch 'master' of git://github.com/Baystation12/Baystation12 into TGUpdates
Conflicts: code/modules/mob/mob_defines.dm icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi icons/obj/storage.dmi maps/tgstation.2.0.8.dmm
This commit is contained in:
@@ -21,7 +21,7 @@ mob/living/carbon/verb/give()
|
||||
if(!I)
|
||||
return
|
||||
if(src.r_hand == null)
|
||||
switch(alert(src,"[usr.name] wants to give you \a [I.name]?",,"Yes","No"))
|
||||
switch(alert(src,"[usr] wants to give you \a [I]?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(!check_can_reach(usr,src))
|
||||
usr << "You need to keep in reaching distance."
|
||||
@@ -50,7 +50,7 @@ mob/living/carbon/verb/give()
|
||||
if("No")
|
||||
src.visible_message("[usr.name] tried to hand [I.name] to [src.name] but [src.name] didn't want it.")
|
||||
else if(src.l_hand == null)
|
||||
switch(alert(src,"[src.name] wants to give you \a [I.name]?",,"Yes","No"))
|
||||
switch(alert(src,"[usr] wants to give you \a [I]?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(!check_can_reach(usr,src))
|
||||
usr << "You need to keep in reaching distance."
|
||||
@@ -79,4 +79,4 @@ mob/living/carbon/verb/give()
|
||||
if("No")
|
||||
src.visible_message("[usr.name] tried to hand [I.name] to [src.name] but [src.name] didn't want it.")
|
||||
else
|
||||
usr << "[src.name]\s hands are full."
|
||||
usr << "[src.name]'s hands are full."
|
||||
@@ -349,11 +349,11 @@
|
||||
"severe burn" = "severe burn", "deep burn" = "deep burn", "carbonised area" = "carbonised area")
|
||||
switch(i)
|
||||
if(2) //Healing wounds.
|
||||
if(tallied in list("cut","tiny bruise","small burn"))
|
||||
if(tallied in list("cut","small burn"))
|
||||
continue
|
||||
tallied_rename = list("deep cut" = "clotted cut", "flesh wound" = "small bandaged wound",\
|
||||
"gaping wound" = "bandaged wound", "big gaping wound" = "gauze wrapped wound",\
|
||||
"massive wound" = "massive blood soaked bandage", "small bruise" = "small bruise",\
|
||||
"massive wound" = "massive blood soaked bandage", "tiny bruise" = "tiny bruise", "small bruise" = "small bruise",\
|
||||
"moderate bruise" = "moderate bruise", "large bruise" = "large bruise",\
|
||||
"huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\
|
||||
"moderate burn" = "moderate salved burn", "large burn" = "large salved burn",\
|
||||
@@ -380,7 +380,7 @@
|
||||
"large burn" = "large burn scar", "severe burn" = "severe burn scar",\
|
||||
"deep burn" = "deep burn scar", "carbonised area" = "healing carbonised area")
|
||||
if(5)
|
||||
if(tallied in list("cut","deep cut","tiny bruise", "small bruise", "moderate bruise","small burn", "moderate burn"))
|
||||
if(tallied in list("cut","deep cut","tiny bruise", "moderate bruise", "small bruise","small burn", "moderate burn"))
|
||||
continue
|
||||
tallied_rename = list("flesh wound" = "small scar", "gaping wound" = "straight scar",\
|
||||
"big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\
|
||||
@@ -429,6 +429,7 @@
|
||||
flavor_text_string += flavor_text[text]
|
||||
flavor_text_string += " on [t_his] [named].</span><br>"
|
||||
wound_flavor_text["[named]"] = flavor_text_string
|
||||
world << "[named] + [flavor_text_string]"
|
||||
if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
|
||||
msg += wound_flavor_text["head"]
|
||||
else if(is_bleeding["head"])
|
||||
@@ -436,29 +437,39 @@
|
||||
if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["chest"]
|
||||
else if(is_bleeding["chest"])
|
||||
msg += "<span class='warning'>[src] has blood from under [t_his] clothing!</span>\n"
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["left arm"]
|
||||
else if(is_bleeding["left arm"])
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
|
||||
msg += wound_flavor_text["left hand"]
|
||||
else if(is_bleeding["left hand"])
|
||||
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
|
||||
if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["right arm"]
|
||||
else if(is_bleeding["right arm"])
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
|
||||
msg += wound_flavor_text["right hand"]
|
||||
else if(is_bleeding["right hand"])
|
||||
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
|
||||
if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["groin"]
|
||||
else if(is_bleeding["groin"])
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["left leg"]
|
||||
else if(is_bleeding["left leg"])
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
|
||||
msg += wound_flavor_text["left foot"]
|
||||
else if(is_bleeding["left foot"])
|
||||
msg += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
|
||||
if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
|
||||
msg += wound_flavor_text["right leg"]
|
||||
else if(is_bleeding["right leg"])
|
||||
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
|
||||
if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
|
||||
msg += wound_flavor_text["right foot"]
|
||||
else if(is_bleeding["right foot"])
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
|
||||
var/list/body_standing = list()
|
||||
var/list/body_lying = list()
|
||||
var/organs2 = list()
|
||||
|
||||
var/mutantrace = null
|
||||
|
||||
@@ -115,7 +114,7 @@
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
vessel = new/datum/reagents(560)
|
||||
vessel = new/datum/reagents(600)
|
||||
vessel.my_atom = src
|
||||
vessel.add_reagent("blood",560)
|
||||
spawn(1) fixblood()
|
||||
|
||||
@@ -447,7 +447,7 @@
|
||||
return null
|
||||
|
||||
update_canmove()
|
||||
if(paralysis || stunned || weakened || buckled || (changeling && changeling.changeling_fakedeath)) canmove = 0
|
||||
if(paralysis || resting || stunned || weakened || buckled || (changeling && changeling.changeling_fakedeath)) canmove = 0
|
||||
else canmove = 1
|
||||
|
||||
handle_breath(datum/gas_mixture/breath)
|
||||
@@ -857,7 +857,7 @@
|
||||
leg_tally-- // let it fail even if just foot&leg
|
||||
|
||||
// can't stand
|
||||
if(leg_tally == 0)
|
||||
if(leg_tally == 0 && !paralysis && !(lying || resting))
|
||||
emote("scream")
|
||||
emote("collapse")
|
||||
paralysis = 10
|
||||
@@ -1470,4 +1470,4 @@ snippets
|
||||
plcheck = t_plasma
|
||||
oxcheck = t_oxygen
|
||||
G.turf_add(T, G.total_moles())
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -24,26 +24,37 @@
|
||||
real_name = name
|
||||
var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
|
||||
chest.owner = src
|
||||
organs2 += chest
|
||||
var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
|
||||
groin.owner = src
|
||||
organs2 += groin
|
||||
var/datum/organ/external/head/head = new /datum/organ/external/head( src )
|
||||
head.owner = src
|
||||
organs2 += head
|
||||
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
|
||||
l_arm.owner = src
|
||||
organs2 += l_arm
|
||||
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
|
||||
r_arm.owner = src
|
||||
organs2 += r_arm
|
||||
var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
|
||||
l_hand.owner = src
|
||||
organs2 += l_hand
|
||||
var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
|
||||
r_hand.owner = src
|
||||
organs2 += r_hand
|
||||
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
|
||||
l_leg.owner = src
|
||||
organs2 += l_leg
|
||||
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
|
||||
r_leg.owner = src
|
||||
organs2 += r_leg
|
||||
var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
|
||||
l_foot.owner = src
|
||||
organs2 += l_foot
|
||||
var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
|
||||
r_foot.owner = src
|
||||
organs2 += r_foot
|
||||
|
||||
organs["chest"] = chest
|
||||
organs["groin"] = groin
|
||||
|
||||
@@ -282,7 +282,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
|
||||
|
||||
var/list/organs = list( ) //List of organs.
|
||||
|
||||
var/list/organs2 = list()
|
||||
//Singularity wants you!
|
||||
var/grav_delay = 0
|
||||
var/being_strangled = 0
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
if(Process_Grab()) return
|
||||
|
||||
//Making mob movememnt changes instant.
|
||||
if(mob.paralysis || mob.stunned || mob.weakened || mob.buckled || (mob.changeling && mob.changeling.changeling_fakedeath))
|
||||
if(mob.paralysis || mob.stunned || mob.resting || mob.weakened || mob.buckled || (mob.changeling && mob.changeling.changeling_fakedeath))
|
||||
mob.canmove = 0
|
||||
return
|
||||
else
|
||||
|
||||
@@ -73,6 +73,11 @@
|
||||
owner = H
|
||||
H.organs[name] = src
|
||||
|
||||
Del()
|
||||
for(var/datum/organ/wound/W in wounds)
|
||||
del(W)
|
||||
..()
|
||||
|
||||
proc/take_damage(brute, burn, sharp, used_weapon = null)
|
||||
if((brute <= 0) && (burn <= 0))
|
||||
return 0
|
||||
@@ -99,7 +104,7 @@
|
||||
if(prob(brute) && brute > 20 && !sharp)
|
||||
createwound(rand(4,6),0,brute)
|
||||
else if(!sharp)
|
||||
createwound(max(1,min(6,round(brute/10) + rand(-1,1))),1,brute)
|
||||
createwound(max(1,min(6,round(brute/10) + rand(0,2))),1,brute)
|
||||
if(burn)
|
||||
burn_dam += burn
|
||||
createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn)
|
||||
@@ -152,15 +157,16 @@
|
||||
brute -= W.damage
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding()
|
||||
W.stopbleeding(1)
|
||||
else
|
||||
W.damage -= brute
|
||||
W.initial_dmg -= brute
|
||||
W.stopbleeding()
|
||||
else if(brute)
|
||||
for(var/datum/organ/wound/W in brute_wounds)
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding()
|
||||
W.stopbleeding(1)
|
||||
brute_dam = 0
|
||||
if(burn && burn >= burn_to_heal)
|
||||
for(var/datum/organ/wound/W in burn_wounds)
|
||||
@@ -173,6 +179,7 @@
|
||||
else
|
||||
W.damage -= burn
|
||||
W.initial_dmg -= burn
|
||||
W.stopbleeding()
|
||||
else if(burn)
|
||||
for(var/datum/organ/wound/W in burn_wounds)
|
||||
W.damage = 0
|
||||
@@ -226,8 +233,6 @@
|
||||
return
|
||||
if(brute_dam > min_broken_damage)
|
||||
if(broken == 0)
|
||||
var/dmgmsg = "[damage_msg] in your [display_name]"
|
||||
owner << dmgmsg
|
||||
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy")
|
||||
owner.visible_message("\red You hear a loud cracking sound coming from [owner.name].","\red <b>Something feels like it shattered in your [display_name]!</b>","You hear a sickening crack.")
|
||||
owner.emote("scream")
|
||||
@@ -275,6 +280,8 @@
|
||||
proc/droplimb()
|
||||
if(destroyed)
|
||||
//owner.unlock_medal("Lost something?", 0, "Lose a limb.", "easy")
|
||||
|
||||
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red <b>Your [display_name] goes flying off!</b>","You hear a terrible sound of ripping tendons and flesh.")
|
||||
switch(body_part)
|
||||
if(UPPER_TORSO)
|
||||
owner.gib()
|
||||
@@ -288,6 +295,7 @@
|
||||
H.transfer_identity(owner)
|
||||
H.pixel_x = -10
|
||||
H.pixel_y = 6
|
||||
H.name = "[owner.name]'s head"
|
||||
|
||||
var/lol = pick(cardinal)
|
||||
step(H,lol)
|
||||
@@ -332,29 +340,21 @@
|
||||
destroyed = 1
|
||||
if(HAND_RIGHT)
|
||||
var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner)
|
||||
for(var/mob/M in viewers(owner))
|
||||
M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
|
||||
var/lol2 = pick(cardinal)
|
||||
step(X,lol2)
|
||||
destroyed = 1
|
||||
if(HAND_LEFT)
|
||||
var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner)
|
||||
for(var/mob/M in viewers(owner))
|
||||
M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
|
||||
var/lol2 = pick(cardinal)
|
||||
step(X,lol2)
|
||||
destroyed = 1
|
||||
if(FOOT_RIGHT)
|
||||
var/obj/item/weapon/organ/r_foot/X = new(owner.loc, owner)
|
||||
for(var/mob/M in viewers(owner))
|
||||
M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
|
||||
var/lol2 = pick(cardinal)
|
||||
step(X,lol2)
|
||||
destroyed = 1
|
||||
if(FOOT_LEFT)
|
||||
var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
|
||||
for(var/mob/M in viewers(owner))
|
||||
M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
|
||||
var/lol2 = pick(cardinal)
|
||||
step(X,lol2)
|
||||
destroyed = 1
|
||||
@@ -377,7 +377,10 @@
|
||||
W.wound_size = size
|
||||
W.owner = owner
|
||||
W.parent = src
|
||||
spawn W.start_close() //Let small cuts close themselves.
|
||||
if(type == 1)
|
||||
spawn W.become_scar()
|
||||
else
|
||||
spawn W.start_close() //Let small cuts close themselves.
|
||||
wounds += W
|
||||
|
||||
/datum/organ/wound
|
||||
@@ -389,6 +392,8 @@
|
||||
var/datum/organ/external/parent
|
||||
var/bleeding = 0 //You got wounded, of course it's bleeding. -- Scratch that. Rewrote it.
|
||||
var/healing_state = 0
|
||||
var/is_healing = 0
|
||||
var/slowheal = 3
|
||||
|
||||
proc/start_close()
|
||||
sleep(rand(1800,3000)) //3-5 minutes
|
||||
@@ -400,7 +405,7 @@
|
||||
stopbleeding()
|
||||
return
|
||||
sleep(rand(1800,3000))
|
||||
if(wound_size == 1) //Small cuts heal in 3-10 minutes.
|
||||
if(wound_size == 1) //Small cuts heal in 6-10 minutes.
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
@@ -408,30 +413,34 @@
|
||||
stopbleeding()
|
||||
return
|
||||
if(wound_size < 5 && bleeding) //Give it a chance to stop bleeding on it's own.
|
||||
spawn(1)
|
||||
spawn while(1)
|
||||
sleep(1200)
|
||||
if(prob(50))
|
||||
stopbleeding()
|
||||
return
|
||||
return
|
||||
|
||||
proc/stopbleeding()
|
||||
if(healing_state)
|
||||
proc/stopbleeding(var/bleed = 0)
|
||||
if(is_healing)
|
||||
return 0
|
||||
// owner:bloodloss -= 10 * src.wound_size
|
||||
parent.bleeding = 0
|
||||
parent.bleeding = min(bleed,bleeding)
|
||||
for(var/datum/organ/wound/W in parent)
|
||||
if(W.bleeding && W != src)
|
||||
parent.bleeding = 1
|
||||
bleeding = 0
|
||||
break
|
||||
bleeding = min(bleed,bleeding)
|
||||
is_healing = 1
|
||||
slowheal = 1
|
||||
spawn become_scar() //spawn off the process of becoming a scar.
|
||||
return 1
|
||||
|
||||
proc/become_scar()
|
||||
healing_state = 1 //Patched
|
||||
update_health(0.5) //Heals some.
|
||||
spawn(200*slowheal) //20 seconds
|
||||
update_health(5) //Heals some.
|
||||
|
||||
sleep(rand(1800,3000)) //3-5 minutes
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
|
||||
if(parent.owner.stat == 2)
|
||||
return
|
||||
@@ -441,23 +450,26 @@
|
||||
del(src)
|
||||
|
||||
healing_state = 2 //Noticibly healing.
|
||||
update_health(1) //Heals the rest of the way.
|
||||
update_health(2) //Heals more.
|
||||
|
||||
sleep(rand(1800,3000)) //3-5 minutes
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
return
|
||||
if(prob(60) && wound_size < 3) //Cuts heal up
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 3 //Angry red scar
|
||||
sleep(rand(6000,9000)) //10-15 minutes
|
||||
update_health(1) //Heals the rest of the way.
|
||||
|
||||
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
return
|
||||
if(prob(80) && wound_size < 4) //Minor wounds heal up fully.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 4 //Scar
|
||||
sleep(rand(6000,9000)) //10-15 minutes
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
return
|
||||
if(prob(30) || wound_size < 4 || wound_type == 1) //Small chance for the scar to disappear, any small remaining wounds deleted.
|
||||
@@ -467,11 +479,11 @@
|
||||
return
|
||||
|
||||
proc/update_health(var/percent = 1)
|
||||
damage -= damage/percent //Remove that amount of the damage
|
||||
damage = max(damage - damage/percent,0) //Remove that amount of the damage
|
||||
if(wound_type > 1)
|
||||
parent.burn_dam -= initial_dmg - damage
|
||||
parent.burn_dam = max(parent.burn_dam - (initial_dmg - damage),0)
|
||||
else
|
||||
parent.brute_dam -= initial_dmg - damage
|
||||
parent.brute_dam = max(parent.brute_dam - (initial_dmg - damage),0)
|
||||
initial_dmg = damage //reset it for further updates.
|
||||
parent.owner.updatehealth()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user