Merge pull request #2576 from tigercat2000/IM_GOING_TO_FUCKING_GO_INSANE_GODDAMNIT

Cleaning time, x1.
This commit is contained in:
Fox McCloud
2015-11-17 18:58:34 -05:00
27 changed files with 257 additions and 877 deletions
+78 -76
View File
@@ -4,20 +4,21 @@
voice_name = "unknown"
icon = 'icons/mob/human.dmi'
icon_state = "body_m_s"
//why are these here and not in human_defines.dm
var/list/hud_list[10]
var/datum/species/species //Contains icon generation and language information, set during New().
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
/mob/living/carbon/human/New(var/new_loc, var/new_species = null, var/delay_ready_dna=0)
/mob/living/carbon/human/New(var/new_loc, var/new_species = null, var/delay_ready_dna = 0)
if(!dna)
dna = new /datum/dna(null)
// Species name is handled by set_species()
if(!species)
if(new_species)
set_species(new_species,1)
set_species(new_species, 1)
else
set_species()
@@ -44,7 +45,7 @@
make_blood()
var/mob/M = src
faction |= "\ref[M]"
faction |= "\ref[M]" //what
// Set up DNA.
if(!delay_ready_dna && dna)
@@ -146,30 +147,37 @@
/mob/living/carbon/human/stok/New(var/new_loc)
..(new_loc, "Stok")
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing || buckled))
return
/mob/living/carbon/human/Bump(atom/movable/AM, yes)
if(!(yes) || now_pushing || buckled)
return 0
now_pushing = 1
if (ismob(AM))
if(ismob(AM))
var/mob/tmob = AM
if( istype(tmob, /mob/living/carbon) && prob(10) )
src.spread_disease_to(AM, "Contact")
//BubbleWrap - Should stop you pushing a restrained person out of the way
if(istype(tmob, /mob/living/carbon/human))
if(iscarbon(tmob) && prob(10))
spread_disease_to(tmob, "Contact")
//BubbleWrap - Should stop you pushing a restrained person out of the way
//i still don't get it, is this supposed to be 'bubblewrapping' or was it made by a guy named 'BubbleWrap'
if(ishuman(tmob))
for(var/mob/M in range(tmob, 1))
if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) )
if ( !(world.time % 5) )
src << "\red [tmob] is restrained, you cannot push past"
if(tmob.pinned.len || (M.pulling == tmob && (tmob.restrained() && !M.restrained()) && M.stat == CONSCIOUS))
if(!(world.time % 5)) //tmob is pinned to wall, or is restrained and pulled by a concious unrestrained human
src << "<span class='danger'>[tmob] is restrained, you cannot push past.</span>"
now_pushing = 0
return
if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) )
if ( !(world.time % 5) )
src << "\red [tmob] is restraining [M], you cannot push past"
return 0
//I have to fucking document this somewhere- the above if(tmob.pinned.len || etc) check above had
//locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) at the end of it
//FIRST OF ALL, THAT IS NOT HOW YOU FUCKING USE LOCATE()
//SECOND OF ALL, OH GOD, WHY WOULD YOU EVER WANT GRABBED MOBS TO BE UNABLE TO BE PUSHED PAST GOD
if(tmob.pulling == M && (M.restrained() && !tmob.restrained()) && tmob.stat == CONSCIOUS)
if(!(world.time % 5))
src << "<span class='danger'>[tmob] is restraining [M], you cannot push past.</span>"
now_pushing = 0
return
return 0
//Leaping mobs just land on the tile, no pushing, no anything.
if(status_flags & LEAPING)
@@ -178,35 +186,35 @@
now_pushing = 0
return
if(istype(tmob,/mob/living/silicon/robot/drone)) //I have no idea why the hell this isn't already happening. How do mice do it?
loc = tmob.loc
now_pushing = 0
return
//BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller
if((tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || restrained()) && tmob.canmove && canmove && !tmob.buckled && !tmob.buckled_mob) // mutual brohugs all around!
var/turf/oldloc = loc
loc = tmob.loc
tmob.loc = oldloc
now_pushing = 0
for(var/mob/living/carbon/slime/slime in view(1,tmob))
if(slime.Victim == tmob)
slime.UpdateFeed()
return
//it might be 'bubblewrapping' given that this rhymes with 'hugboxing'
if((tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || restrained()))
if((canmove && tmob.canmove) && (!tmob.buckled && !tmob.buckled_mob))
var/turf/oldloc = loc
loc = tmob.loc
tmob.loc = oldloc
now_pushing = 0
for(var/mob/living/carbon/slime/slime in view(1,tmob))
if(slime.Victim == tmob)
slime.UpdateFeed()
return
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(ishuman(tmob) && (FAT in tmob.mutations))
if(prob(40) && !(FAT in src.mutations))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
src << "<span class='danger'>You fail to push [tmob]'s fat ass out of the way.</span>"
now_pushing = 0
return
if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot))
if(prob(99))
now_pushing = 0
return
if(!(tmob.status_flags & CANPUSH))
now_pushing = 0
return
@@ -216,21 +224,19 @@
now_pushing = 0
spawn(0)
..()
if (!istype(AM, /atom/movable))
if(!istype(AM, /atom/movable))
return
if (!now_pushing)
if(!now_pushing)
now_pushing = 1
if (!AM.anchored)
if(!AM.anchored)
var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window/full))
for(var/obj/structure/window/win in get_step(AM,t))
if(istype(AM, /obj/structure/window/full))
for(var/obj/structure/window/win in get_step(AM, t))
now_pushing = 0
return
step(AM, t)
now_pushing = 0
return
return
/mob/living/carbon/human/Stat()
..()
@@ -246,11 +252,11 @@
if(eta_status)
stat(null, eta_status)
if (client.statpanel == "Status")
if(client.statpanel == "Status")
if(locate(/obj/item/device/assembly/health) in src)
stat(null, "Health: [health]")
if (internal)
if (!internal.air_contents)
if(internal)
if(!internal.air_contents)
qdel(internal)
else
stat("Internal Atmosphere Info", internal.name)
@@ -279,12 +285,13 @@
var/shielded = 0
var/b_loss = null
var/f_loss = null
switch (severity)
if (1.0)
switch(severity)
if(1)
b_loss += 500
if (!prob(getarmor(null, "bomb")))
if(!prob(getarmor(null, "bomb")))
gib()
return
return 0
else
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
throw_at(target, 200, 4)
@@ -301,13 +308,8 @@
limbs_affected -= 1
else valid_limbs -= processing_dismember
//return
// var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
//user.throw_at(target, 200, 4)
if (2.0)
if (!shielded)
if(2)
if(!shielded) //literally nothing could change shielded before this so wth
b_loss += 60
f_loss += 60
@@ -316,7 +318,7 @@
var/obj/item/organ/external/processing_dismember
var/list/valid_limbs = organs.Copy()
if (prob(getarmor(null, "bomb")))
if(prob(getarmor(null, "bomb")))
b_loss = b_loss/1.5
f_loss = f_loss/1.5
@@ -332,15 +334,15 @@
limbs_affected -= 1
else valid_limbs -= processing_dismember
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
ear_damage += 30
ear_deaf += 120
if (prob(70) && !shielded)
if(prob(70) && !shielded)
Paralyse(10)
if(3.0)
if(3)
b_loss += 30
if (prob(getarmor(null, "bomb")))
if(prob(getarmor(null, "bomb")))
b_loss = b_loss/2
else
@@ -357,10 +359,10 @@
limbs_affected -= 1
else valid_limbs -= processing_dismember
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
ear_damage += 15
ear_deaf += 60
if (prob(50) && !shielded)
if(prob(50) && !shielded)
Paralyse(10)
var/update = 0
@@ -368,19 +370,19 @@
for(var/obj/item/organ/external/temp in organs)
switch(temp.limb_name)
if("head")
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
if("chest")
update |= temp.take_damage(b_loss * 0.4, f_loss * 0.4, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.4, f_loss * 0.4, used_weapon = weapon_message)
if("groin")
update |= temp.take_damage(b_loss * 0.1, f_loss * 0.1, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.1, f_loss * 0.1, used_weapon = weapon_message)
if("l_arm")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_arm")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("l_leg")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_leg")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_foot")
update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if("l_foot")
@@ -394,12 +396,12 @@
..()
/mob/living/carbon/human/blob_act()
if(stat == DEAD) return
if(stat == DEAD)
return
show_message("<span class='userdanger'>The blob attacks you!</span>")
var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot")
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee"))
return
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
@@ -1838,9 +1840,9 @@
/mob/living/carbon/human/proc/get_full_print()
if(!dna || !dna.uni_identity)
return
return md5(dna.uni_identity)
return md5(dna.uni_identity)
/mob/living/carbon/human/can_see_reagents()
for(var/obj/item/clothing/C in src) //If they have some clothing equipped that lets them see reagents, they can see reagents
if(C.scan_reagents)
return 1
return 1
@@ -1,51 +1,50 @@
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if(check_shields(0, M.name))
visible_message("\red <B>[M] attempted to touch [src]!</B>")
visible_message("<span class='danger'>[M] attempted to touch [src]!</span>")
return 0
switch(M.a_intent)
if (I_HELP)
visible_message(text("\blue [M] caresses [src] with its scythe like arm."))
if (I_GRAB)
if(I_HELP)
visible_message("<span class='notice'>[M] caresses [src] with its scythe like arm.</span>")
if(I_GRAB)
grabbedby(M)
if(I_HARM)
M.do_attack_animation(src)
if (w_uniform)
if(w_uniform)
w_uniform.add_fingerprint(M)
var/damage = rand(15, 30)
if(!damage)
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1)
visible_message("\red <B>[M] has lunged at [src]!</B>")
visible_message("<span class='danger'>[M] has lunged at [src]!</span>")
return 0
var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
visible_message("\red <B>[M] has slashed at [src]!</B>")
visible_message("<span class='danger'>[M] has slashed at [src]!</span>")
apply_damage(damage, BRUTE, affecting, armor_block)
if (damage >= 25)
visible_message("\red <B>[M] has wounded [src]!</B>")
if(damage >= 25)
visible_message("<span class='danger'>[M] has wounded [src]!</span>")
apply_effect(4, WEAKEN, armor_block)
updatehealth()
if(I_DISARM)
M.do_attack_animation(src)
var/randn = rand(1, 100)
if (randn <= 80)
if(prob(80))
var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
apply_effect(5, WEAKEN, run_armor_check(affecting, "melee"))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
visible_message("<span class='danger'>[M] has tackled down [src]!</span>")
else
if (randn <= 99)
if(prob(99)) //this looks fucking stupid but it was previously 'var/randn = rand(1, 100); if(randn <= 99)'
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
drop_item()
visible_message(text("\red <B>[] disarmed []!</B>", M, src))
visible_message("<span class='danger'>[M] disarmed [src]!</span>")
else
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1)
visible_message(text("\red <B>[] has tried to disarm []!</B>", M, src))
return
visible_message("<span class='danger'>[M] has tried to disarm [src]!</span>")
@@ -4,26 +4,30 @@
health = 100
stat = CONSCIOUS
return
var/total_burn = 0
var/total_brute = 0
var/total_burn = 0
var/total_brute = 0
for(var/obj/item/organ/external/O in organs) //hardcoded to streamline things a bit
total_brute += O.brute_dam
total_brute += O.brute_dam //calculates health based on organ brute and burn
total_burn += O.burn_dam
health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute
//TODO: fix husking
if( (((100 - total_burn) < config.health_threshold_dead) && stat == DEAD))//100 only being used as the magic human max health number, feel free to change it if you add a var for it -- Urist
ChangeToHusk()
if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number
ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS
if(species.can_revive_by_healing)
var/obj/item/organ/brain/B = internal_organs_by_name["brain"]
if(B)
if((health >= (config.health_threshold_dead/100*75)) && stat == DEAD)
if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD)
update_revive()
if (stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix
if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix
update_revive()
return
/mob/living/carbon/human/adjustBrainLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
@@ -36,7 +40,8 @@
brainloss = 0
/mob/living/carbon/human/setBrainLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
@@ -49,7 +54,8 @@
brainloss = 0
/mob/living/carbon/human/getBrainLoss()
if(status_flags & GODMODE) return 0 //godmode
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
@@ -143,34 +149,39 @@
return
var/heal_prob = max(0, 80 - getCloneLoss())
var/mut_prob = min(80, getCloneLoss()+10)
if (amount > 0)
if (prob(mut_prob))
var/list/obj/item/organ/external/candidates = list()
for (var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_ROBOT) continue
var/mut_prob = min(80, getCloneLoss() + 10)
if(amount > 0) //cloneloss is being added
if(prob(mut_prob))
var/list/obj/item/organ/external/candidates = list() //TYPECASTED LISTS ARE NOT A FUCKING THING WHAT THE FUCK
for(var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_ROBOT)
continue
if(!(O.status & ORGAN_MUTATED))
candidates |= O
if (candidates.len)
if(candidates.len)
var/obj/item/organ/external/O = pick(candidates)
O.mutate()
src << "<span class = 'notice'>Something is not right with your [O.name]...</span>"
src << "<span class='notice'>Something is not right with your [O.name]...</span>"
O.add_autopsy_data("Mutation", amount)
return
else
if (prob(heal_prob))
for (var/obj/item/organ/external/O in organs)
if (O.status & ORGAN_MUTATED)
else //cloneloss is being subtracted
if(prob(heal_prob))
for(var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_MUTATED)
O.unmutate()
src << "<span class = 'notice'>Your [O.name] is shaped normally again.</span>"
src << "<span class='notice'>Your [O.name] is shaped normally again.</span>"
return
if (getCloneLoss() < 1)
for (var/obj/item/organ/external/O in organs)
if (O.status & ORGAN_MUTATED)
if(getCloneLoss() < 1) //no cloneloss, fixes organs
for(var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_MUTATED)
O.unmutate()
src << "<span class = 'notice'>Your [O.name] is shaped normally again.</span>"
hud_updateflag |= 1 << HEALTH_HUD
src << "<span class='notice'>Your [O.name] is shaped normally again.</span>"
hud_updateflag |= 1 << HEALTH_HUD //what even is this shit
// Defined here solely to take species flags into account without having to recast at mob/living level.
/mob/living/carbon/human/getOxyLoss()
@@ -186,7 +197,7 @@
/mob/living/carbon/human/setOxyLoss(var/amount)
if(species.flags & NO_BREATHE)
oxyloss = 0
oxyloss = 0 //this literally overrides three procs, excessive much?
else
..()
@@ -203,7 +214,7 @@
/mob/living/carbon/human/setToxLoss(var/amount)
if(species.flags & NO_POISON)
toxloss = 0
toxloss = 0 //this *also* overrides three procs, definately excessive
else
..()
@@ -230,7 +241,8 @@
//It automatically updates health status
/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn)
var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn)
if(!parts.len) return
if(!parts.len)
return
var/obj/item/organ/external/picked = pick(parts)
if(picked.heal_damage(brute,burn))
UpdateDamageIcon()
@@ -242,7 +254,8 @@
//It automatically updates health status
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0)
var/list/obj/item/organ/external/parts = get_damageable_organs()
if(!parts.len) return
if(!parts.len)
return
var/obj/item/organ/external/picked = pick(parts)
if(picked.take_damage(brute,burn,sharp,edge))
UpdateDamageIcon()
@@ -256,7 +269,7 @@
var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn)
var/update = 0
while(parts.len && (brute>0 || burn>0) )
while(parts.len && ( brute > 0 || burn > 0) )
var/obj/item/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
@@ -268,15 +281,19 @@
burn -= (burn_was-picked.burn_dam)
parts -= picked
updatehealth()
hud_updateflag |= 1 << HEALTH_HUD
speech_problem_flag = 1
if(update) UpdateDamageIcon()
if(update)
UpdateDamageIcon()
// damage MANY external organs, in random order
/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null)
if(status_flags & GODMODE) return //godmode
if(status_flags & GODMODE)
return //godmode
var/list/obj/item/organ/external/parts = get_damageable_organs()
var/update = 0
while(parts.len && (brute>0 || burn>0) )
var/obj/item/organ/external/picked = pick(parts)
@@ -289,9 +306,11 @@
burn -= (picked.burn_dam - burn_was)
parts -= picked
updatehealth()
hud_updateflag |= 1 << HEALTH_HUD
if(update) UpdateDamageIcon()
if(update)
UpdateDamageIcon()
////////////////////////////////////////////
@@ -302,7 +321,7 @@ This function restores the subjects blood to max.
/mob/living/carbon/human/proc/restore_blood()
if(!(species.flags & NO_BLOOD))
var/blood_volume = vessel.get_reagent_amount("blood")
vessel.add_reagent("blood",560.0-blood_volume)
vessel.add_reagent("blood", 560.0 - blood_volume)
/*
This function restores all organs.
@@ -314,47 +333,43 @@ This function restores all organs.
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
var/obj/item/organ/external/E = get_organ(zone)
if(istype(E, /obj/item/organ/external))
if (E.heal_damage(brute, burn))
if(E.heal_damage(brute, burn))
UpdateDamageIcon()
hud_updateflag |= 1 << HEALTH_HUD
else
return 0
return
/mob/living/carbon/human/proc/get_organ(var/zone)
if(!zone) zone = "chest"
if (zone in list( "eyes", "mouth" ))
if(!zone)
zone = "chest"
if(zone in list("eyes", "mouth"))
zone = "head"
return organs_by_name[zone]
/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null)
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
//Handle other types of damage
if((damagetype != BRUTE) && (damagetype != BURN))
if(damagetype == HALLOSS)
if ((damage > 25 && prob(20)) || (damage > 50 && prob(60)))
emote("scream")
..(damage, damagetype, def_zone, blocked)
return 1
//Handle BRUTE and BURN damage
handle_suit_punctures(damagetype, damage)
blocked = (100-blocked)/100
if(blocked <= 0) return 0
blocked = (100 - blocked) / 100
if(blocked <= 0)
return 0
var/obj/item/organ/external/organ = null
if(isorgan(def_zone))
organ = def_zone
else
if(!def_zone) def_zone = ran_zone(def_zone)
if(!def_zone)
def_zone = ran_zone(def_zone)
organ = get_organ(check_zone(def_zone))
if(!organ) return 0
if(!organ)
return 0
damage = damage * blocked
@@ -362,28 +377,33 @@ This function restores all organs.
if(BRUTE)
damageoverlaytemp = 20
if(species && species.brute_mod)
damage = damage*species.brute_mod
damage = damage * species.brute_mod
if(organ.take_damage(damage, 0, sharp, edge, used_weapon))
UpdateDamageIcon()
if(LAssailant && ishuman(LAssailant))
if(LAssailant && ishuman(LAssailant)) //superheros still get the comical hit markers
var/mob/living/carbon/human/H = LAssailant
if(H.mind && H.mind in (ticker.mode.superheroes || ticker.mode.supervillains || ticker.mode.greyshirts))
var/list/attack_bubble_recipients = list()
var/mob/living/user
for(var/mob/O in viewers(user, src))
if (O.client && !( O.blinded ))
if (O.client && !(O.blinded))
attack_bubble_recipients.Add(O.client)
spawn(0)
var/image/dmgIcon = image('icons/effects/hit_blips.dmi', src, "dmg[rand(1,2)]",MOB_LAYER+1)
dmgIcon.pixel_x = (!lying) ? rand(-3,3) : rand(-11,12)
dmgIcon.pixel_y = (!lying) ? rand(-11,9) : rand(-10,1)
//world << "x: [dmgIcon.pixel_x] AND y: [dmgIcon.pixel_y]"
flick_overlay(dmgIcon, attack_bubble_recipients, 9)
receive_damage()
if(BURN)
damageoverlaytemp = 20
if(species && species.burn_mod)
damage = damage*species.burn_mod
damage = damage * species.burn_mod
if(organ.take_damage(0, damage, sharp, edge, used_weapon))
UpdateDamageIcon()
@@ -51,7 +51,7 @@
if(status_flags & GOTTAGOREALLYFAST)
tally -= 2
return (tally+config.human_delay)
return (tally + config.human_delay)
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
@@ -89,4 +89,4 @@
if(!has_gravity(loc))
return
var/obj/item/clothing/shoes/S = shoes
S.step_action(src)
S.step_action(src)
+30 -3
View File
@@ -136,6 +136,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
var/y_offset = pixel_y + rand(-1,1)
animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1)
animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1)
if (disabilities & NERVOUS)
speech_problem_flag = 1
if (prob(10))
@@ -143,12 +144,38 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if (getBrainLoss() >= 60 && stat != 2)
speech_problem_flag = 1
if (prob(3))
if(prob(3))
var/list/s1 = list("IM A PONY NEEEEEEIIIIIIIIIGH",
"without oxigen blob don't evoluate?",
"CAPTAINS A COMDOM",
"[pick("", "that damn traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!",
"can u give me [pick("telikesis","halk","eppilapse")]?",
"THe saiyans screwed",
"Bi is THE BEST OF BOTH WORLDS>",
"I WANNA PET TEH monkeyS",
"stop grifing me!!!!",
"SOTP IT#")
var/list/s2 = list("FUS RO DAH",
"fucking 4rries!",
"stat me",
">my face",
"roll it easy!",
"waaaaaagh!!!",
"red wonz go fasta",
"FOR TEH EMPRAH",
"lol2cat",
"dem dwarfs man, dem dwarfs",
"SPESS MAHREENS",
"hwee did eet fhor khayosss",
"lifelike texture ;_;",
"luv can bloooom",
"PACKETS!!!")
switch(pick(1,2,3))
if(1)
say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that damn traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#"))
say(pick(s1))
if(2)
say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!"))
say(pick(s2))
if(3)
emote("drool")
@@ -11,7 +11,7 @@
pass_flags = PASSTABLE
braintype = "Robot"
lawupdate = 0
density = 1
density = 0
req_access = list(access_engine, access_robotics)
local_transmit = 1
@@ -335,4 +335,8 @@
src.verbs |= silicon_subsystems
/mob/living/silicon/robot/drone/remove_robot_verbs()
src.verbs -= silicon_subsystems
src.verbs -= silicon_subsystems
/mob/living/silicon/robot/drone/update_canmove()
. = ..()
density = 0 //this is reset every canmove update otherwise