Merge branch 'master' of github.com:Baystation12/Baystation12 into dev-freeze

Conflicts:
	icons/mob/back.dmi
	icons/mob/mask.dmi
This commit is contained in:
Ccomp5950
2014-01-30 12:14:44 -06:00
20 changed files with 164 additions and 147 deletions

View File

@@ -91,23 +91,6 @@
if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
return //Yeah just stop. return //Yeah just stop.
//Ok, get the air from the turf
var/datum/gas_mixture/env = L.return_air()
//Remove gas from surrounding area
var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles)
if(!removed || !removed.total_moles)
damage += max((power-1600)/10, 0)
power = min(power, 1600)
return 1
if (!removed)
return 1
damage_archived = damage
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
if(damage > warning_point) // while the core is still damaged and it's still worth noting its status if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY) if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
@@ -133,6 +116,22 @@
explode() explode()
//Ok, get the air from the turf
var/datum/gas_mixture/env = L.return_air()
//Remove gas from surrounding area
var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles)
if(!removed || !removed.total_moles)
damage += max((power-1600)/10, 0)
power = min(power, 1600)
return 1
if (!removed)
return 1
damage_archived = damage
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
//Ok, 100% oxygen atmosphere = best reaction //Ok, 100% oxygen atmosphere = best reaction
//Maxes out at 100% oxygen pressure //Maxes out at 100% oxygen pressure
var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
@@ -176,7 +175,7 @@
for(var/mob/living/carbon/human/l in view(src, round(power ** 0.25))) // you have to be seeing the core to get hallucinations for(var/mob/living/carbon/human/l in view(src, round(power ** 0.25))) // you have to be seeing the core to get hallucinations
if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / get_dist(l, src) ) ) ) l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) ) var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )

View File

@@ -140,7 +140,7 @@
if(istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/human))
M:attacked_by(src, user, def_zone) return M:attacked_by(src, user, def_zone)
else else
switch(damtype) switch(damtype)
if("brute") if("brute")

View File

@@ -258,6 +258,9 @@ client
body += "<option value='?_src_=vars;regenerateicons=\ref[D]'>Regenerate Icons</option>" body += "<option value='?_src_=vars;regenerateicons=\ref[D]'>Regenerate Icons</option>"
body += "<option value='?_src_=vars;addlanguage=\ref[D]'>Add Language</option>" body += "<option value='?_src_=vars;addlanguage=\ref[D]'>Add Language</option>"
body += "<option value='?_src_=vars;remlanguage=\ref[D]'>Remove Language</option>" body += "<option value='?_src_=vars;remlanguage=\ref[D]'>Remove Language</option>"
body += "<option value='?_src_=vars;addverb=\ref[D]'>Add Verb</option>"
body += "<option value='?_src_=vars;remverb=\ref[D]'>Remove Verb</option>"
if(ishuman(D)) if(ishuman(D))
body += "<option value>---</option>" body += "<option value>---</option>"
body += "<option value='?_src_=vars;setmutantrace=\ref[D]'>Set Mutantrace</option>" body += "<option value='?_src_=vars;setmutantrace=\ref[D]'>Set Mutantrace</option>"
@@ -808,6 +811,55 @@ client
else else
usr << "Mob doesn't know that language." usr << "Mob doesn't know that language."
else if(href_list["addverb"])
if(!check_rights(R_DEBUG)) return
var/mob/living/H = locate(href_list["addverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living"
return
var/list/possibleverbs = list()
possibleverbs += "Cancel" // One for the top...
possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb)
switch(H.type)
if(/mob/living/carbon/human)
possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc)
if(/mob/living/silicon/robot)
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb)
if(/mob/living/silicon/ai)
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
possibleverbs -= H.verbs
possibleverbs += "Cancel" // ...And one for the bottom
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
if(!H)
usr << "Mob doesn't exist anymore"
return
if(!verb || verb == "Cancel")
return
else
H.verbs += verb
else if(href_list["remverb"])
if(!check_rights(R_DEBUG)) return
var/mob/H = locate(href_list["remverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob"
return
var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs
if(!H)
usr << "Mob doesn't exist anymore"
return
if(!verb)
return
else
H.verbs -= verb
else if(href_list["regenerateicons"]) else if(href_list["regenerateicons"])
if(!check_rights(0)) return if(!check_rights(0)) return

View File

@@ -552,6 +552,7 @@ datum/mind
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT>" current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT>"
ticker.mode.update_rev_icons_removed(src) ticker.mode.update_rev_icons_removed(src)
special_role = null special_role = null
current.verbs -= /mob/living/carbon/human/proc/RevConvert
log_admin("[key_name_admin(usr)] has de-rev'ed [current].") log_admin("[key_name_admin(usr)] has de-rev'ed [current].")
if("rev") if("rev")
@@ -572,7 +573,7 @@ datum/mind
if(src in ticker.mode.revolutionaries) if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src ticker.mode.revolutionaries -= src
ticker.mode.update_rev_icons_removed(src) ticker.mode.update_rev_icons_removed(src)
current << "\red <FONT size = 3><B>You have proved your devotion to revoltion! Yea are a head revolutionary now!</B></FONT>" current << "\red <FONT size = 3><B>You have proved your devotion to revoltion! You are a head revolutionary now!</B></FONT>"
else if(!(src in ticker.mode.head_revolutionaries)) else if(!(src in ticker.mode.head_revolutionaries))
current << "\blue You are a member of the revolutionaries' leadership now!" current << "\blue You are a member of the revolutionaries' leadership now!"
else else
@@ -588,6 +589,7 @@ datum/mind
rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
objectives += rev_obj objectives += rev_obj
ticker.mode.greet_revolutionary(src,0) ticker.mode.greet_revolutionary(src,0)
current.verbs += /mob/living/carbon/human/proc/RevConvert
ticker.mode.head_revolutionaries += src ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src) ticker.mode.update_rev_icons_added(src)
special_role = "Head Revolutionary" special_role = "Head Revolutionary"

View File

@@ -156,9 +156,17 @@
return 1 return 1
/mob/living/carbon/human/proc/RevConvert(mob/M as mob in oview(src)) /mob/living/carbon/human/proc/RevConvert()
set name = "Rev-Convert" set name = "Rev-Convert"
set category = "IC" set category = "IC"
var/list/Possible = list()
for (var/mob/living/carbon/human/P in oview(src))
if(!stat && P.client && P.mind && !P.mind.special_role)
Possible += P
if(!Possible.len)
src << "\red There doesn't appear to be anyone available for you to convert here."
return
var/mob/living/carbon/human/M = input("Select a person to convert", "Viva la revolution!", null) as mob in Possible
if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries))) if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries)))
if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries)) if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries))
src << "\red <b>[M] is already be a revolutionary!</b>" src << "\red <b>[M] is already be a revolutionary!</b>"
@@ -251,4 +259,4 @@
rev_obj.target = M.mind rev_obj.target = M.mind
rev_obj.explanation_text = "Assassinate, convert or capture [M.real_name], the [M.mind.assigned_role]." rev_obj.explanation_text = "Assassinate, convert or capture [M.real_name], the [M.mind.assigned_role]."
rev_mind.objectives += rev_obj rev_mind.objectives += rev_obj
rev_mind.current << "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated." rev_mind.current << "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated."

View File

@@ -249,6 +249,12 @@
if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30) if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30)
src.occupant.reagents.add_reagent("inaprovaline", 60) src.occupant.reagents.add_reagent("inaprovaline", 60)
//So clones will remain asleep for long enough to get them into cryo (Bay RP edit)
if (src.occupant.reagents.get_reagent_amount("stoxin") < 10)
src.occupant.reagents.add_reagent("stoxin", 5)
if (src.occupant.reagents.get_reagent_amount("chloralhydrate") < 1)
src.occupant.reagents.add_reagent("chloralhydrate", 1)
//Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!!
src.occupant.adjustOxyLoss(-4) src.occupant.adjustOxyLoss(-4)

View File

@@ -211,7 +211,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
//Update any existing objectives involving this mob. //Update any existing objectives involving this mob.
for(var/datum/objective/O in all_objectives) for(var/datum/objective/O in all_objectives)
if(O.target && istype(O.target,/datum/mind)) if(istype(O,/datum/objective/mutiny)) //We don't want revs to get objectives that aren't for heads of staff. Letting them win or lose based on cryo is silly so we remove the objective.
del(O) //TODO: Update rev objectives on login by head (may happen already?) ~ Z
else if(O.target && istype(O.target,/datum/mind))
if(O.target == occupant.mind) if(O.target == occupant.mind)
if(O.owner && O.owner.current) if(O.owner && O.owner.current)
O.owner.current << "\red You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..." O.owner.current << "\red You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..."
@@ -331,9 +333,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
return return
if(orient_right) if(orient_right)
icon_state = "body_scanner0-r" icon_state = "body_scanner_0-r"
else else
icon_state = "body_scanner0" icon_state = "body_scanner_0"
src.go_out() src.go_out()
add_fingerprint(usr) add_fingerprint(usr)
@@ -409,4 +411,4 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
//Attacks/effects. //Attacks/effects.
/obj/machinery/cryopod/blob_act() /obj/machinery/cryopod/blob_act()
return //Sorta gamey, but we don't really want these to be destroyed. return //Sorta gamey, but we don't really want these to be destroyed.

View File

@@ -384,7 +384,7 @@
user.visible_message("[user] turned the shield generator off.", \ user.visible_message("[user] turned the shield generator off.", \
"You turn off the shield generator.", \ "You turn off the shield generator.", \
"You hear heavy droning fade out.") "You hear heavy droning fade out.")
src.cleanup() for(var/dir in list(1,2,4,8)) src.cleanup(dir)
else else
src.active = 1 src.active = 1
icon_state = "Shield_Gen +a" icon_state = "Shield_Gen +a"
@@ -424,14 +424,7 @@
"You hear heavy droning fade out") "You hear heavy droning fade out")
icon_state = "Shield_Gen" icon_state = "Shield_Gen"
src.active = 0 src.active = 0
spawn(1) for(var/dir in list(1,2,4,8)) src.cleanup(dir)
src.cleanup(1)
spawn(1)
src.cleanup(2)
spawn(1)
src.cleanup(4)
spawn(1)
src.cleanup(8)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0) /obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
var/turf/T = src.loc var/turf/T = src.loc

View File

@@ -70,7 +70,7 @@
flick("e_flash", M.flash) flick("e_flash", M.flash)
if(ishuman(M) && ishuman(user) && M.stat!=DEAD) if(ishuman(M) && ishuman(user) && M.stat!=DEAD)
if(user.mind && user.mind in ticker.mode.head_revolutionaries) if(user.mind && user.mind in ticker.mode.head_revolutionaries && ticker.mode.name == "revolution")
var/revsafe = 0 var/revsafe = 0
for(var/obj/item/weapon/implant/loyalty/L in M) for(var/obj/item/weapon/implant/loyalty/L in M)
if(L && L.implanted) if(L && L.implanted)
@@ -86,7 +86,6 @@
user << "<span class='warning'>Something seems to be blocking the flash!</span>" user << "<span class='warning'>Something seems to be blocking the flash!</span>"
else else
user << "<span class='warning'>This mind seems resistant to the flash!</span>" user << "<span class='warning'>This mind seems resistant to the flash!</span>"
user << "<span class='warning'>This mind is so vacant that it is not susceptible to influence!</span>"
else else
flashfail = 1 flashfail = 1

View File

@@ -153,7 +153,7 @@
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
add_fingerprint(user) add_fingerprint(user)
if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
overlays.Cut()//this might delete other item overlays as well but eeeeeeeh overlays.Cut()//this might delete other item overlays as well but eeeeeeeh
var/icon/I = new /icon(src.icon, src.icon_state) var/icon/I = new /icon(src.icon, src.icon_state)
@@ -176,12 +176,10 @@
else else
user.take_organ_damage(2*force) user.take_organ_damage(2*force)
return return
if(..())
if(!..()) return playsound(src.loc, "swing_hit", 50, 1, -1)
playsound(src.loc, "swing_hit", 50, 1, -1) target.Weaken(4)
//target.Stun(4) //naaah return
target.Weaken(4)
return
else else
return ..() return ..()
@@ -216,8 +214,6 @@
/* /*
* Energy Axe * Energy Axe
*/ */
/obj/item/weapon/melee/energy/axe/attack(target as mob, mob/user as mob)
..()
/obj/item/weapon/melee/energy/axe/attack_self(mob/user as mob) /obj/item/weapon/melee/energy/axe/attack_self(mob/user as mob)
src.active = !( src.active ) src.active = !( src.active )

View File

@@ -372,18 +372,21 @@
usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely." usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely."
user.eye_blurry += rand(12,20) user.eye_blurry += rand(12,20)
E.damage += rand(12, 16) E.damage += rand(12, 16)
if(E.damage > 10 && safety < 2) if(safety<2)
user << "\red Your eyes are really starting to hurt. This can't be good for you!"
if (E.damage >= E.min_broken_damage) if(E.damage > 10)
user << "\red You go blind!" user << "\red Your eyes are really starting to hurt. This can't be good for you!"
user.sdisabilities |= BLIND
else if (E.damage >= E.min_bruised_damage) if (E.damage >= E.min_broken_damage)
user << "\red You go blind!" user << "\red You go blind!"
user.eye_blind = 5 user.sdisabilities |= BLIND
user.eye_blurry = 5 else if (E.damage >= E.min_bruised_damage)
user.disabilities |= NEARSIGHTED user << "\red You go blind!"
spawn(100) user.eye_blind = 5
user.disabilities &= ~NEARSIGHTED user.eye_blurry = 5
user.disabilities |= NEARSIGHTED
spawn(100)
user.disabilities &= ~NEARSIGHTED
return return

View File

@@ -55,7 +55,7 @@
//get message text, limit it's length.and clean/escape html //get message text, limit it's length.and clean/escape html
if(!msg) if(!msg)
msg = input(src,"Message:", "Private message to [C.key]") as text|null msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null
if(!msg) return if(!msg) return
if(!C) if(!C)
@@ -80,10 +80,10 @@
//mod PMs are maroon //mod PMs are maroon
//PMs sent from admins and mods display their rank //PMs sent from admins and mods display their rank
if(holder) if(holder)
if( holder.rights & R_MOD ) if( holder.rights & R_ADMIN )
recieve_color = "maroon"
else
recieve_color = "red" recieve_color = "red"
else
recieve_color = "maroon"
send_pm_type = holder.rank + " " send_pm_type = holder.rank + " "
recieve_pm_type = holder.rank recieve_pm_type = holder.rank

View File

@@ -129,7 +129,7 @@
/obj/item/clothing/shoes/swimmingfins /obj/item/clothing/shoes/swimmingfins
desc = "Help you swim good." desc = "Help you swim good."
name = "swimming fins" name = "swimming fins"
icon_state = "flippers" icon_state = "flipperfeet"
flags = NOSLIP flags = NOSLIP
slowdown = SHOES_SLOWDOWN+1 slowdown = SHOES_SLOWDOWN+1
species_restricted = null species_restricted = null

View File

@@ -13,6 +13,7 @@
heat_protection = HEAD heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox")
attack_self(mob/user) attack_self(mob/user)
if(!isturf(user.loc)) if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities. user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
@@ -24,6 +25,10 @@
if(on) user.SetLuminosity(user.luminosity + brightness_on) if(on) user.SetLuminosity(user.luminosity + brightness_on)
else user.SetLuminosity(user.luminosity - brightness_on) else user.SetLuminosity(user.luminosity - brightness_on)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_head()
pickup(mob/user) pickup(mob/user)
if(on) if(on)
user.SetLuminosity(user.luminosity + brightness_on) user.SetLuminosity(user.luminosity + brightness_on)

View File

@@ -1114,82 +1114,6 @@
del(feet_blood_DNA) del(feet_blood_DNA)
return 1 return 1
mob/living/carbon/human/yank_out_object()
set category = "Object"
set name = "Yank out object"
set desc = "Remove an embedded item at the cost of bleeding and pain."
set src in view(1)
if(!isliving(usr) || usr.next_move > world.time)
return
usr.next_move = world.time + 20
if(usr.stat == 1)
usr << "You are unconcious and cannot do that!"
return
if(usr.restrained())
usr << "You are restrained and cannot do that!"
return
var/list/valid_objects = list()
var/datum/organ/external/affected = null
var/mob/living/carbon/human/S = src
var/mob/living/carbon/human/U = usr
var/self = null
if(S == U)
self = 1 // Removing object from yourself.
valid_objects = get_visible_implants(1)
if(!valid_objects.len)
if(self)
src << "You have nothing stuck in your wounds that is large enough to remove without surgery."
else
U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery."
return
var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant.
for(var/obj/item/weapon/O in organ.implants)
if(O == selection)
affected = organ
if(self)
src << "<span class='warning'>You attempt to get a good grip on the [selection] in your [affected.display_name] with bloody fingers.</span>"
else
U << "<span class='warning'>You attempt to get a good grip on the [selection] in [S]'s [affected.display_name] with bloody fingers.</span>"
if(istype(U,/mob/living/carbon/human/)) U.bloody_hands(S)
if(!do_after(U, 80))
return
if(!selection || !affected || !S || !U)
return
if(self)
visible_message("<span class='warning'><b>[src] rips [selection] out of their [affected.display_name] in a welter of blood.</b></span>","<span class='warning'><b>You rip [selection] out of your [affected] in a welter of blood.</b></span>")
else
visible_message("<span class='warning'><b>[usr] rips [selection] out of [src]'s [affected.display_name] in a welter of blood.</b></span>","<span class='warning'><b>[usr] rips [selection] out of your [affected] in a welter of blood.</b></span>")
selection.loc = get_turf(src)
affected.implants -= selection
shock_stage+=10
for(var/obj/item/weapon/O in pinned)
if(O == selection)
pinned -= O
if(!pinned.len)
anchored = 0
if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
var/datum/wound/internal_bleeding/I = new (15)
affected.wounds += I
custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
return 1
/mob/living/carbon/human/proc/get_visible_implants(var/class = 0) /mob/living/carbon/human/proc/get_visible_implants(var/class = 0)
var/list/visible_implants = list() var/list/visible_implants = list()

View File

@@ -245,6 +245,7 @@ This function restores all organs.
if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) ) if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) )
organ.implants += W organ.implants += W
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>") visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
src.verbs += /mob/proc/yank_out_object
W.add_blood(src) W.add_blood(src)
if(ismob(W.loc)) if(ismob(W.loc))
var/mob/living/H = W.loc var/mob/living/H = W.loc

View File

@@ -99,6 +99,7 @@ emp_act
(SP.loc) = organ (SP.loc) = organ
organ.implants += SP organ.implants += SP
visible_message("<span class='danger'>The projectile sticks in the wound!</span>") visible_message("<span class='danger'>The projectile sticks in the wound!</span>")
src.verbs += /mob/proc/yank_out_object
SP.add_blood(src) SP.add_blood(src)
return (..(P , def_zone)) return (..(P , def_zone))
@@ -195,14 +196,14 @@ emp_act
target_zone = user.zone_sel.selecting target_zone = user.zone_sel.selecting
if(!target_zone) if(!target_zone)
visible_message("\red <B>[user] misses [src] with \the [I]!") visible_message("\red <B>[user] misses [src] with \the [I]!")
return return 0
var/datum/organ/external/affecting = get_organ(target_zone) var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting) if (!affecting)
return return 0
if(affecting.status & ORGAN_DESTROYED) if(affecting.status & ORGAN_DESTROYED)
user << "What [affecting.display_name]?" user << "What [affecting.display_name]?"
return return 0
var/hit_area = affecting.display_name var/hit_area = affecting.display_name
if((user != src) && check_shields(I.force, "the [I.name]")) if((user != src) && check_shields(I.force, "the [I.name]"))
@@ -219,7 +220,7 @@ emp_act
var/obj/item/weapon/card/emag/emag = I var/obj/item/weapon/card/emag/emag = I
emag.uses-- emag.uses--
affecting.sabotaged = 1 affecting.sabotaged = 1
return return 1
if(I.attack_verb.len) if(I.attack_verb.len)
visible_message("\red <B>[src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!</B>") visible_message("\red <B>[src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!</B>")
@@ -274,6 +275,7 @@ emp_act
if(bloody) if(bloody)
bloody_body(src) bloody_body(src)
return 1
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
if (gloves) if (gloves)

View File

@@ -895,7 +895,7 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/flash_weak_pain() /mob/proc/flash_weak_pain()
flick("weak_pain",pain) flick("weak_pain",pain)
mob/verb/yank_out_object() mob/proc/yank_out_object()
set category = "Object" set category = "Object"
set name = "Yank out object" set name = "Yank out object"
set desc = "Remove an embedded item at the cost of bleeding and pain." set desc = "Remove an embedded item at the cost of bleeding and pain."
@@ -921,9 +921,13 @@ mob/verb/yank_out_object()
if(S == U) if(S == U)
self = 1 // Removing object from yourself. self = 1 // Removing object from yourself.
for(var/obj/item/weapon/W in embedded) if(istype(src,/mob/living/carbon/human))
if(W.w_class >= 2) var/mob/living/carbon/human/H = src
valid_objects += W valid_objects = H.get_visible_implants(1)
else
for(var/obj/item/weapon/W in embedded)
if(W.w_class >= 2)
valid_objects += W
if(!valid_objects.len) if(!valid_objects.len)
if(self) if(self)
@@ -948,6 +952,27 @@ mob/verb/yank_out_object()
visible_message("<span class='warning'><b>[src] rips [selection] out of their body.</b></span>","<span class='warning'><b>You rip [selection] out of your body.</b></span>") visible_message("<span class='warning'><b>[src] rips [selection] out of their body.</b></span>","<span class='warning'><b>You rip [selection] out of your body.</b></span>")
else else
visible_message("<span class='warning'><b>[usr] rips [selection] out of [src]'s body.</b></span>","<span class='warning'><b>[usr] rips [selection] out of your body.</b></span>") visible_message("<span class='warning'><b>[usr] rips [selection] out of [src]'s body.</b></span>","<span class='warning'><b>[usr] rips [selection] out of your body.</b></span>")
src.verbs -= /mob/proc/yank_out_object
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/H = src
var/datum/organ/external/affected
for(var/datum/organ/external/organ in H.organs) //Grab the organ holding the implant.
for(var/obj/item/weapon/O in organ.implants)
if(O == selection)
affected = organ
affected.implants -= selection
H.shock_stage+=10
H.bloody_hands(S)
if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
var/datum/wound/internal_bleeding/I = new (15)
affected.wounds += I
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
return 1
selection.loc = get_turf(src) selection.loc = get_turf(src)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB