Merge pull request #710 from ZomgPonies/limb

Port of the BS12 limb overhaul
This commit is contained in:
Fox-McCloud
2015-04-05 19:06:39 -04:00
149 changed files with 3451 additions and 2530 deletions
+3 -1
View File
@@ -146,6 +146,7 @@
H.r_eyes = dna.GetUIValueRange(DNA_UI_EYES_R, 255)
H.g_eyes = dna.GetUIValueRange(DNA_UI_EYES_G, 255)
H.b_eyes = dna.GetUIValueRange(DNA_UI_EYES_B, 255)
H.update_eyes()
H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative.
@@ -164,7 +165,8 @@
if((0 < beard) && (beard <= facial_hair_styles_list.len))
H.f_style = facial_hair_styles_list[beard]
H.update_body(0)
H.force_update_limbs()
H.update_eyes()
H.update_hair()
return 1
+2
View File
@@ -235,6 +235,8 @@
H.r_eyes = hex2num(getblock(structure,8,3))
H.g_eyes = hex2num(getblock(structure,9,3))
H.b_eyes = hex2num(getblock(structure,10,3))
if(H.internal_organs_by_name["eyes"])
H.update_eyes()
if (isblockon(getblock(structure, 11,3),11 , 1))
H.gender = FEMALE
+8 -8
View File
@@ -256,11 +256,11 @@
if(ishuman(user))
var/mob/living/carbon/human/H=user
for(var/name in H.organs_by_name)
var/datum/organ/external/affecting = null
var/obj/item/organ/external/affecting = null
if(!H.organs[name])
continue
affecting = H.organs[name]
if(!istype(affecting, /datum/organ/external))
if(!istype(affecting, /obj/item/organ/external))
continue
affecting.heal_damage(4, 0)
H.UpdateDamageIcon()
@@ -282,22 +282,22 @@
if(the_item.gender==FEMALE)
t_his="her"
var/mob/living/carbon/human/H = the_item
var/datum/organ/external/limb = H.get_organ(usr.zone_sel.selecting)
var/obj/item/organ/external/limb = H.get_organ(usr.zone_sel.selecting)
if(!istype(limb))
usr << "\red You can't eat this part of them!"
revert_cast()
return 0
if(istype(limb,/datum/organ/external/head))
if(istype(limb,/obj/item/organ/external/head))
// Bullshit, but prevents being unable to clone someone.
usr << "\red You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!"
revert_cast()
return 0
if(istype(limb,/datum/organ/external/chest))
if(istype(limb,/obj/item/organ/external/chest))
// Bullshit, but prevents being able to instagib someone.
usr << "\red You try to put their [limb] in your mouth, but it's too big to fit!"
revert_cast()
return 0
usr.visible_message("\red <b>[usr] begins stuffing [the_item]'s [limb.display_name] into [m_his] gaping maw!</b>")
usr.visible_message("\red <b>[usr] begins stuffing [the_item]'s [limb.name] into [m_his] gaping maw!</b>")
var/oldloc = H.loc
if(!do_mob(usr,H,EAT_MOB_DELAY))
usr << "\red You were interrupted before you could eat [the_item]!"
@@ -309,9 +309,9 @@
return
usr.visible_message("\red [usr] [pick("chomps","bites")] off [the_item]'s [limb]!")
playsound(usr.loc, 'sound/items/eatfood.ogg', 50, 0)
var/obj/limb_obj=limb.droplimb(1,1)
var/obj/limb_obj=limb.droplimb(0,DROPLIMB_BLUNT)
if(limb_obj)
var/datum/organ/external/chest=usr:get_organ("chest")
var/obj/item/organ/external/chest=usr:get_organ("chest")
chest.implants += limb_obj
limb_obj.loc=usr
doHeal(usr)
@@ -97,7 +97,7 @@
if(ishuman(player.current))
var/mob/living/carbon/human/H = player.current
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
for(var/datum/organ/external/organs in H.organs)
for(var/obj/item/organ/external/organs in H.organs)
if(I in organs.implants)
possible_traitors -= player
@@ -174,7 +174,7 @@
traitorcount += 1
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
//var/r = rand(5)
//var/target_traitors = 1
var/max_traitors = 2
@@ -189,7 +189,7 @@
if (traitorcount < max_traitors)
for(var/job in restricted_jobs)
if(character.mind.assigned_role == job || !ishuman(character))
return
return
//message_admins("Number of Traitors is below maximum. Rolling for New Arrival Traitor.")
//message_admins("The probability of a new traitor is [traitor_prob]%")
if(prob(traitor_prob))
@@ -35,13 +35,12 @@
spawn(1)
H.fixblood()
for(var/organ_name in H.organs_by_name)
var/datum/organ/external/O = H.organs_by_name[organ_name]
var/obj/item/organ/external/O = H.organs_by_name[organ_name]
for(var/obj/item/weapon/shard/shrapnel/s in O.implants)
if(istype(s))
O.implants -= s
H.contents -= s
del(s)
O.amputated = 0
O.brute_dam = 0
O.burn_dam = 0
O.damage_state = "00"
@@ -55,8 +54,7 @@
O.trace_chemicals = list()
O.wounds = list()
O.wound_update_accuracy = 1
for(var/n in H.internal_organs_by_name)
var/datum/organ/internal/IO = H.internal_organs_by_name[n]
for(var/obj/item/organ/IO in H.internal_organs)
IO.damage = 0
IO.trace_chemicals = list()
H.updatehealth()
+1 -1
View File
@@ -17,7 +17,7 @@
user.Paralyse(5)
user << "\red An unexplicable force powerfully repels the sword from [target]!"
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/obj/item/organ/external/affecting = user.get_organ(organ)
if(affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade.
user.UpdateDamageIcon()
return
+2 -2
View File
@@ -578,8 +578,8 @@ var/list/sacrificed = list()
if(!(iscultist(V)))
victims += V//Checks for cult status and mob type
for(var/obj/item/I in src.loc)//Checks for MMIs/brains/Intellicards
if(istype(I,/obj/item/brain))
var/obj/item/brain/B = I
if(istype(I,/obj/item/organ/brain))
var/obj/item/organ/brain/B = I
victims += B.brainmob
else if(istype(I,/obj/item/device/mmi))
var/obj/item/device/mmi/B = I
+1 -1
View File
@@ -96,7 +96,7 @@ var/global/datum/controller/gameticker/ticker
src.mode = config.pick_mode(master_mode)
if (!src.mode.can_start())
world << "<B>Unable to start [mode.name].</B> Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby."
del(mode)
mode = null
current_state = GAME_STATE_PREGAME
job_master.ResetOccupations()
return 0
+3 -3
View File
@@ -20,7 +20,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective.
/datum/game_mode/heist/announce()
@@ -113,11 +113,11 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
vox.h_style = "Short Vox Quills"
vox.f_style = "Shaved"
for(var/datum/organ/external/limb in vox.organs)
for(var/obj/item/organ/external/limb in vox.organs)
limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT)
//Now apply cortical stack.
var/datum/organ/external/E = vox.get_organ("head")
var/obj/item/organ/external/E = vox.get_organ("head")
var/obj/item/weapon/implant/cortical/I = new(vox)
I.imp_in = vox
I.implanted = 1
@@ -62,7 +62,7 @@ datum/directive/ipc_virus/get_remaining_orders()
return text
/hook/debrain/proc/debrain_directive(obj/item/brain/B)
/hook/debrain/proc/debrain_directive(obj/item/organ/brain/B)
var/datum/directive/ipc_virus/D = get_directive("ipc_virus")
if (!D) return 1
+11 -5
View File
@@ -564,15 +564,21 @@ datum/objective/harm
return 0
var/mob/living/carbon/human/H = target.current
for(var/datum/organ/external/E in H.organs)
for(var/obj/item/organ/external/E in H.organs)
if(E.status & ORGAN_BROKEN)
already_completed = 1
return 1
if(E.status & ORGAN_DESTROYED && !E.amputated)
already_completed = 1
for(var/limb_tag in H.species.has_limbs) //todo check prefs for robotic limbs and amputations.
var/list/organ_data = H.species.has_limbs[limb_tag]
var/limb_type = organ_data["path"]
var/found
for(var/obj/item/organ/external/E in H.organs)
if(limb_type == E.type)
found = 1
break
if(!found)
return 1
var/datum/organ/external/head/head = H.get_organ("head")
var/obj/item/organ/external/head/head = H.get_organ("head")
if(head.disfigured)
return 1
return 0
+6 -6
View File
@@ -43,7 +43,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -88,7 +88,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -143,7 +143,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
@@ -189,7 +189,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -226,7 +226,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -265,7 +265,7 @@
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
+5 -5
View File
@@ -37,7 +37,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
L.imp_in = H
L.implanted = 1
captain_announcement.Announce("All hands, captain [H.real_name] on deck!")
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -133,7 +133,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -180,7 +180,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -221,7 +221,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
@@ -261,7 +261,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
var/datum/organ/external/affected = H.organs_by_name["head"]
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
return 1
+5 -6
View File
@@ -423,7 +423,7 @@
dat += "<th>Other Wounds</th>"
dat += "</tr>"
for(var/datum/organ/external/e in occupant.organs)
for(var/obj/item/organ/external/e in occupant.organs)
dat += "<tr>"
var/AN = ""
@@ -438,7 +438,7 @@
for(var/datum/wound/W in e.wounds) if(W.internal)
internal_bleeding = "<br>Internal bleeding"
break
if(istype(e, /datum/organ/external/chest) && occupant.is_lung_ruptured())
if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured())
lung_ruptured = "Lung ruptured:"
if(e.status & ORGAN_SPLINTED)
splint = "Splinted:"
@@ -478,12 +478,11 @@
if(!AN && !open && !infected & !imp)
AN = "None:"
if(!(e.status & ORGAN_DESTROYED))
dat += "<td>[e.display_name]</td><td>[e.burn_dam]</td><td>[e.brute_dam]</td><td>[robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]</td>"
dat += "<td>[e.name]</td><td>[e.burn_dam]</td><td>[e.brute_dam]</td><td>[robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]</td>"
else
dat += "<td>[e.display_name]</td><td>-</td><td>-</td><td>Not Found</td>"
dat += "<td>[e.name]</td><td>-</td><td>-</td><td>Not Found</td>"
dat += "</tr>"
for(var/n in occupant.internal_organs_by_name)
var/datum/organ/internal/i = occupant.internal_organs_by_name[n]
for(var/obj/item/organ/i in occupant.internal_organs)
var/mech = i.desc
var/infection = "None"
switch (i.germ_level)
+1 -1
View File
@@ -629,7 +629,7 @@ About the new airlock wires panel:
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
if(!istype(H.head, /obj/item/clothing/head/helmet))
visible_message("\red [user] headbutts the airlock.")
var/datum/organ/external/affecting = H.get_organ("head")
var/obj/item/organ/external/affecting = H.get_organ("head")
H.Stun(8)
H.Weaken(5)
if(affecting.take_damage(10, 0))
+1 -1
View File
@@ -81,7 +81,7 @@
O.Weaken(strength)
if (istype(O, /mob/living/carbon/human))
var/mob/living/carbon/human/H = O
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if ((E.damage > E.min_bruised_damage && prob(E.damage + 50)))
flick("e_flash", O:flash)
E.damage += rand(1, 2)
+5 -5
View File
@@ -59,7 +59,7 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
files = new /datum/research(src) //Setup the research data holder.
/obj/machinery/mecha_part_fabricator/upgraded/New()
..()
component_parts = list()
@@ -513,7 +513,7 @@
return 1
else
user << "<span class='danger'>You can't load \the [name] while it's opened.</span>"
return 1
return 1
if(istype(W, /obj/item/stack))
var/material
@@ -558,9 +558,9 @@
else
user << "\The [src] cannot hold any more [sname] sheet\s."
return
/obj/machinery/mecha_part_fabricator/emag_act(user as mob)
emag()
/obj/machinery/mecha_part_fabricator/emag_act(user as mob)
emag()
/obj/machinery/mecha_part_fabricator/proc/material2name(var/ID)
return copytext(ID,2)
@@ -51,8 +51,8 @@ var/global/list/image/splatter_cache=list()
if(amount < 1)
return
var/datum/organ/external/l_foot = perp.get_organ("l_foot")
var/datum/organ/external/r_foot = perp.get_organ("r_foot")
var/obj/item/organ/external/l_foot = perp.get_organ("l_foot")
var/obj/item/organ/external/r_foot = perp.get_organ("r_foot")
var/hasfeet = 1
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
hasfeet = 0
+9 -8
View File
@@ -135,11 +135,12 @@
/obj/item/attack_hand(mob/user as mob)
if (!user) return 0
if (hasorgans(user))
var/datum/organ/external/temp = user:organs_by_name["r_hand"]
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
if (user.hand)
temp = user:organs_by_name["l_hand"]
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
user << "<span class='notice'>You try to move your [temp.display_name], but cannot!"
user << "<span class='notice'>You try to move your [temp.name], but cannot!"
return 0
if (istype(src.loc, /obj/item/weapon/storage))
@@ -630,14 +631,14 @@
"\red [user] has stabbed themself with [src]!", \
"\red You stab yourself in the eyes with [src]!" \
)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"]
if(istype(H))
var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"]
if(!eyes)
return
eyes.take_damage(rand(3,4), 1)
if(eyes.damage >= eyes.min_bruised_damage)
if(M.stat != 2)
if(!(istype(eyes, /datum/organ/internal/eyes/robotic)) || istype(eyes, /datum/organ/internal/eyes/assisted)) //robot eyes bleeding might be a bit silly
if(!(eyes & ORGAN_ROBOT) || !(eyes & ORGAN_ASSISTED)) //robot eyes bleeding might be a bit silly
M << "\red Your eyes start to bleed profusely!"
if(prob(50))
if(M.stat != 2)
@@ -649,9 +650,9 @@
if (eyes.damage >= eyes.min_broken_damage)
if(M.stat != 2)
M << "\red You go blind!"
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = H.get_organ("head")
if(affecting.take_damage(7))
M:UpdateDamageIcon()
H.UpdateDamageIcon()
else
M.take_organ_damage(7)
M.eye_blurry += rand(3,4)
+3 -3
View File
@@ -1137,8 +1137,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/list/damaged = H.get_damaged_organs(1,1)
user.show_message("\blue Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/datum/organ/external/org in damaged)
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.display_name),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
for(var/obj/item/organ/external/org in damaged)
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.name),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
else
user.show_message("\blue \t Limbs are OK.",1)
@@ -1424,4 +1424,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/JFLOG(message as text)
if (config)
log_pda("[JFLOG_DescribeSelf()] >>> [message]")
log_pda("[JFLOG_DescribeSelf()] >>> [message]")
+5 -5
View File
@@ -37,7 +37,7 @@
W.time_inflicted = time_inflicted
return W
/obj/item/weapon/autopsy_scanner/proc/add_data(var/datum/organ/external/O)
/obj/item/weapon/autopsy_scanner/proc/add_data(var/obj/item/organ/external/O)
if(!O.autopsy_data.len && !O.trace_chemicals.len) return
for(var/V in O.autopsy_data)
@@ -64,9 +64,9 @@
if(!D.organs_scanned[O.name])
if(D.organ_names == "")
D.organ_names = O.display_name
D.organ_names = O.name
else
D.organ_names += ", [O.display_name]"
D.organ_names += ", [O.name]"
del D.organs_scanned[O.name]
D.organs_scanned[O.name] = W.copy()
@@ -189,7 +189,7 @@
src.timeofdeath = M.timeofdeath
var/datum/organ/external/S = M.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/S = M.get_organ(user.zone_sel.selecting)
if(!S)
usr << "<b>You can't scan this body part.</b>"
return
@@ -197,7 +197,7 @@
usr << "<b>You have to cut the limb open first!</b>"
return
for(var/mob/O in viewers(M))
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.name] with \the [src.name]", 1)
src.add_data(S)
@@ -112,7 +112,7 @@
severity -= 1
severity = min(max(severity, 0), 4)
var/mob/living/carbon/human/H = C
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
switch(severity)
if(0)
+8 -6
View File
@@ -172,9 +172,9 @@ REAGENT SCANNER
var/list/damaged = H.get_damaged_organs(1,1)
user.show_message("\blue Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/datum/organ/external/org in damaged)
for(var/obj/item/organ/external/org in damaged)
user.show_message(text("\blue \t []: [][]\blue - []", \
capitalize(org.display_name), \
capitalize(org.name), \
(org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \
(org.status & ORGAN_BLEEDING)?"\red <b>\[Bleeding\]</b>":"\t", \
(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" :0),1)
@@ -215,8 +215,10 @@ REAGENT SCANNER
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/name in H.organs_by_name)
var/datum/organ/external/e = H.organs_by_name[name]
var/limb = e.display_name
var/obj/item/organ/external/e = H.organs_by_name[name]
if(!e)
continue
var/limb = e.name
if(e.status & ORGAN_BROKEN)
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!(e.status & ORGAN_SPLINTED)))
user << "\red Unsecured fracture in subject [limb]. Splinting recommended for transport."
@@ -224,11 +226,11 @@ REAGENT SCANNER
user << "\red Infected wound detected in subject [limb]. Disinfection recommended."
for(var/name in H.organs_by_name)
var/datum/organ/external/e = H.organs_by_name[name]
var/obj/item/organ/external/e = H.organs_by_name[name]
if(e.status & ORGAN_BROKEN)
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
break
for(var/datum/organ/external/e in H.organs)
for(var/obj/item/organ/external/e in H.organs)
for(var/datum/wound/W in e.wounds) if(W.internal)
user.show_message(text("\red Internal bleeding detected. Advanced scanner required for location."), 1)
break
+27 -7
View File
@@ -9,41 +9,61 @@
var/list/construction_cost = list("metal"=20000,"glass"=5000)
var/list/part = null
var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics.
var/model_info
dir = SOUTH
/obj/item/robot_parts/New(var/newloc, var/model)
..(newloc)
if(model_info && model)
model_info = model
var/datum/robolimb/R = all_robolimbs[model]
if(R)
name = "[R.company] [initial(name)]"
desc = "[R.desc]"
if(icon_state in icon_states(R.icon))
icon = R.icon
else
name = "robot [initial(name)]"
/obj/item/robot_parts/l_arm
name = "robot left arm"
name = "left arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_arm"
construction_time = 200
construction_cost = list("metal"=10000)
part = list("l_arm","l_hand")
model_info = 1
/obj/item/robot_parts/r_arm
name = "robot right arm"
name = "right arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_arm"
construction_time = 200
construction_cost = list("metal"=10000)
part = list("r_arm","r_hand")
model_info = 1
/obj/item/robot_parts/l_leg
name = "robot left leg"
name = "left leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_leg"
construction_time = 200
construction_cost = list("metal"=10000)
part = list("l_leg","l_foot")
model_info = 1
/obj/item/robot_parts/r_leg
name = "robot right leg"
name = "right leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_leg"
construction_time = 200
construction_cost = list("metal"=10000)
part = list("r_leg","r_foot")
model_info = 1
/obj/item/robot_parts/chest
name = "robot torso"
name = "torso"
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
icon_state = "chest"
construction_time = 350
@@ -52,7 +72,7 @@
var/obj/item/weapon/stock_parts/cell/cell = null
/obj/item/robot_parts/head
name = "robot head"
name = "head"
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
icon_state = "head"
construction_time = 350
@@ -61,7 +81,7 @@
var/obj/item/device/flash/flash2 = null
/obj/item/robot_parts/robot_suit
name = "robot endoskeleton"
name = "endoskeleton"
desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors."
icon_state = "robo_suit"
construction_time = 500
+30 -33
View File
@@ -22,7 +22,7 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(isliving(M))
if(!M.can_inject(user, 1))
@@ -32,9 +32,6 @@
user << "<span class='danger'>This can't be used on a robotic limb.</span>"
return 1
if(affecting.status & ORGAN_PEG)
user << "<span class='danger'>This can't be used on a peg limb.</span>"
return 1
H.UpdateDamageIcon()
@@ -58,25 +55,25 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.bandage())
user << "\red The wounds on [M]'s [affecting.display_name] have already been bandaged."
user << "\red The wounds on [M]'s [affecting.name] have already been bandaged."
return 1
else
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] bandages \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You bandage \the [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] bandages \the [W.desc] on [M]'s [affecting.name].", \
"\blue You bandage \the [W.desc] on [M]'s [affecting.name]." )
else if (istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a bruise patch over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bruise patch over \the [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] places a bruise patch over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a bruise patch over \the [W.desc] on [M]'s [affecting.name]." )
else
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
@@ -99,15 +96,15 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.salve())
user << "\red The wounds on [M]'s [affecting.display_name] have already been salved."
user << "\red The wounds on [M]'s [affecting.name] have already been salved."
return 1
else
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.display_name].", \
"\blue You salve the wounds on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.name].", \
"\blue You salve the wounds on [M]'s [affecting.name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
@@ -115,7 +112,7 @@
if (do_surgery(H,user,src))
return
else
user << "<span class='notice'>The [affecting.display_name] is cut open, you'll need more than some ointment!</span>"
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than some ointment!</span>"
/obj/item/stack/medical/bruise_pack/tajaran
name = "\improper S'rendarr's Hand leaf"
@@ -147,29 +144,29 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
var/bandaged = affecting.bandage()
var/disinfected = affecting.disinfect()
if(!(bandaged || disinfected))
user << "\red The wounds on [M]'s [affecting.display_name] have already been treated."
user << "\red The wounds on [M]'s [affecting.name] have already been treated."
return 1
else
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] cleans \the [W.desc] on [M]'s [affecting.display_name] and seals the edges with bioglue.", \
"\blue You clean and seal \the [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] cleans \the [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \
"\blue You clean and seal \the [W.desc] on [M]'s [affecting.name]." )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a medicine patch over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a medicine patch over \the [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] places a medicine patch over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a medicine patch over \the [W.desc] on [M]'s [affecting.name]." )
else
user.visible_message( "\blue [user] smears some bioglue over [W.desc] on [M]'s [affecting.display_name].", \
"\blue You smear some bioglue over [W.desc] on [M]'s [affecting.display_name]." )
user.visible_message( "\blue [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].", \
"\blue You smear some bioglue over [W.desc] on [M]'s [affecting.name]." )
if (bandaged)
affecting.heal_damage(heal_brute,0)
use(1)
@@ -178,7 +175,7 @@
if (do_surgery(H,user,src))
return
else
user << "<span class='notice'>The [affecting.display_name] is cut open, you'll need more than a bandage!</span>"
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
/obj/item/stack/medical/advanced/ointment
name = "advanced burn kit"
@@ -195,15 +192,15 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.salve())
user << "\red The wounds on [M]'s [affecting.display_name] have already been salved."
user << "\red The wounds on [M]'s [affecting.name] have already been salved."
return 1
else
user.visible_message( "\blue [user] covers the wounds on [M]'s [affecting.display_name] with regenerative membrane.", \
"\blue You cover the wounds on [M]'s [affecting.display_name] with regenerative membrane." )
user.visible_message( "\blue [user] covers the wounds on [M]'s [affecting.name] with regenerative membrane.", \
"\blue You cover the wounds on [M]'s [affecting.name] with regenerative membrane." )
affecting.heal_damage(0,heal_burn)
use(1)
else
@@ -211,7 +208,7 @@
if (do_surgery(H,user,src))
return
else
user << "<span class='notice'>The [affecting.display_name] is cut open, you'll need more than a bandage!</span>"
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
/obj/item/stack/medical/splint
name = "medical splints"
@@ -230,8 +227,8 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.display_name
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.name
if(!((affecting.name == "l_arm") || (affecting.name == "r_arm") || (affecting.name == "l_leg") || (affecting.name == "r_leg")))
user << "\red You can't apply a splint there!"
return
+3 -3
View File
@@ -25,7 +25,7 @@
if (istype(M,/mob/living/carbon/human)) //Repairing robolimbs
var/mob/living/carbon/human/H = M
var/datum/organ/external/S = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
if(S.open == 1)
if (S && (S.status & ORGAN_ROBOT))
@@ -33,8 +33,8 @@
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"][S.display_name] with \the [src].</span>",\
"<span class='notice'>You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.display_name].</span>")
user.visible_message("<span class='notice'>\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"][S.name] with \the [src].</span>",\
"<span class='notice'>You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.name].</span>")
else
user << "<span class='notice'>Nothing to fix here.</span>"
else
+2 -2
View File
@@ -362,7 +362,7 @@
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
for(var/datum/organ/external/O in H.organs)
for(var/obj/item/organ/external/O in H.organs)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(H.health <= config.health_threshold_dead && total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations))
@@ -471,7 +471,7 @@
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
for(var/datum/organ/external/O in H.organs)
for(var/obj/item/organ/external/O in H.organs)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(H.health <= config.health_threshold_dead && total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations))
@@ -38,7 +38,7 @@
//Flash
if(!eye_safety)
var/mob/living/carbon/human/H = M
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
flick("e_flash", M.flash)
E.damage += rand(1, 3)
M.Stun(max(10/distance, 3))
+16 -16
View File
@@ -37,7 +37,7 @@
add_logs(user, C, "handcuffed")
else
user << "<span class='warning'>You fail to handcuff [C].</span>"
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user)
if(!target.handcuffed)
user.drop_item()
@@ -52,29 +52,29 @@
var/last_chew = 0
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
if (A != src)
if (A != src)
return ..()
if (last_chew + 26 > world.time)
if (last_chew + 26 > world.time)
return
var/mob/living/carbon/human/H = A
if (!H.handcuffed)
if (!H.handcuffed)
return
if (H.a_intent != "harm")
if (H.a_intent != "harm")
return
if (H.zone_sel.selecting != "mouth")
if (H.zone_sel.selecting != "mouth")
return
if (H.wear_mask)
if (H.wear_mask)
return
if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket))
if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket))
return
var/datum/organ/external/O = H.organs_by_name[H.hand ? "l_hand" : "r_hand"]
if (!O)
var/obj/item/organ/external/O = H.organs_by_name[H.hand ? "l_hand" : "r_hand"]
if (!O)
return
var/s = "<span class='danger'>[H.name] chews on \his [O.display_name]!</span>"
H.visible_message(s, "<span class='userdanger'>You chew on your [O.display_name]!</span>")
var/s = "<span class='danger'>[H.name] chews on \his [O.name]!</span>"
H.visible_message(s, "<span class='userdanger'>You chew on your [O.name]!</span>")
H.attack_log += text("\[[time_stamp()]\] <font color='red'>[s] ([H.ckey])</font>")
log_attack("[s] ([H.ckey])")
@@ -135,14 +135,14 @@ var/last_chew = 0
else
user << "<span class='warning'>You need one rod to make a wired rod.</span>"
return
/obj/item/weapon/restraints/handcuffs/cable/zipties
name = "zipties"
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
icon_state = "cuff_white"
breakouttime = 450 //Deciseconds = 45s
trashtype = /obj/item/weapon/restraints/handcuffs/cable/zipties/used
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
if(isrobot(user))
if(!C.handcuffed)
@@ -156,11 +156,11 @@ var/last_chew = 0
user << "<span class='notice'>You handcuff [C].</span>"
add_logs(user, C, "handcuffed")
else
user << "<span class='warning'>You fail to handcuff [C].</span>"
user << "<span class='warning'>You fail to handcuff [C].</span>"
/obj/item/weapon/restraints/handcuffs/cable/zipties/used/attack()
return
//Legcuffs
/obj/item/weapon/restraints/legcuffs
name = "leg cuffs"
@@ -155,7 +155,7 @@
user << "\red The nettle burns your bare hand!"
if(istype(user, /mob/living/carbon/human))
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/obj/item/organ/external/affecting = user.get_organ(organ)
if(affecting.take_damage(0,force))
user.UpdateDamageIcon()
else
@@ -182,7 +182,7 @@
if(!user.gloves)
if(istype(user, /mob/living/carbon/human))
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/obj/item/organ/external/affecting = user.get_organ(organ)
if(affecting.take_damage(0,force))
user.UpdateDamageIcon()
else
@@ -6,7 +6,7 @@
icon_state = "implant"
var/implanted = null
var/mob/living/imp_in = null
var/datum/organ/external/part = null
var/obj/item/organ/external/part = null
_color = "b"
var/allow_reagents = 0
var/malfunction = 0
@@ -33,7 +33,7 @@
return 0
proc/meltdown() //breaks it down, making implant unrecongizible
imp_in << "\red You feel something melting inside [part ? "your [part.display_name]" : "you"]!"
imp_in << "\red You feel something melting inside [part ? "your [part.name]" : "you"]!"
if (part)
part.take_damage(burn = 15, used_weapon = "Electronics meltdown")
else
@@ -169,18 +169,18 @@ Implant Specifics:<BR>"}
if(ishuman(imp_in))
if (elevel == "Localized Limb")
if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste.
imp_in.visible_message("\red Something beeps inside [imp_in][part ? "'s [part.display_name]" : ""]!")
imp_in.visible_message("\red Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!")
playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
sleep(25)
if (istype(part,/datum/organ/external/chest) || \
istype(part,/datum/organ/external/groin) || \
istype(part,/datum/organ/external/head))
if (istype(part,/obj/item/organ/external/chest) || \
istype(part,/obj/item/organ/external/groin) || \
istype(part,/obj/item/organ/external/head))
part.createwound(BRUISE, 60) //mangle them instead
explosion(get_turf(imp_in), -1, -1, 2, 3)
del(src)
else
explosion(get_turf(imp_in), -1, -1, 2, 3)
part.droplimb(1)
part.droplimb()
del(src)
if (elevel == "Destroy Body")
explosion(get_turf(T), -1, 0, 1, 6)
@@ -234,18 +234,18 @@ Implant Specifics:<BR>"}
proc/small_boom()
if (ishuman(imp_in) && part)
imp_in.visible_message("\red Something beeps inside [imp_in][part ? "'s [part.display_name]" : ""]!")
imp_in.visible_message("\red Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!")
playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
spawn(25)
if (ishuman(imp_in) && part)
//No tearing off these parts since it's pretty much killing
//and you can't replace groins
if (istype(part,/datum/organ/external/chest) || \
istype(part,/datum/organ/external/groin) || \
istype(part,/datum/organ/external/head))
if (istype(part,/obj/item/organ/external/chest) || \
istype(part,/obj/item/organ/external/groin) || \
istype(part,/obj/item/organ/external/head))
part.createwound(BRUISE, 60) //mangle them instead
else
part.droplimb(1)
part.droplimb()
explosion(get_turf(imp_in), -1, -1, 2, 3)
del(src)
@@ -43,7 +43,7 @@
src.imp.implanted = 1
if (ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affected = H.get_organ(user.zone_sel.selecting)
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
affected.implants += src.imp
imp.part = affected
H.hud_updateflag |= 1 << IMPLOYAL_HUD
+1 -1
View File
@@ -63,7 +63,7 @@
return
if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) )
var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
if(affecting.status & ORGAN_ROBOT)
return
H.Weaken(3)
@@ -35,7 +35,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/heal_amt = 10
for(var/datum/organ/external/affecting in H.organs)
for(var/obj/item/organ/external/affecting in H.organs)
if(affecting.heal_damage(heal_amt, heal_amt))
H.UpdateDamageIcon()
return
@@ -68,7 +68,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -100,7 +100,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/obj/item/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
@@ -207,7 +207,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -231,7 +231,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/obj/item/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
@@ -331,7 +331,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -475,14 +475,14 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
M.take_organ_damage(15)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -521,14 +521,14 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You nick an artery!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(75))
M:UpdateDamageIcon()
else
M.take_organ_damage(75)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -577,7 +577,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
@@ -605,7 +605,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/obj/item/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
@@ -693,7 +693,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
if(affecting.take_damage(40))
M:UpdateDamageIcon()
M.updatehealth()
@@ -701,7 +701,7 @@ LOOK FOR SURGERY.DM*/
M.take_organ_damage(40)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/obj/item/organ/external/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -778,7 +778,7 @@ LOOK FOR SURGERY.DM*/
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/obj/item/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
@@ -79,7 +79,7 @@ Frequency:
src.temp += "<B>Extranneous Signals:</B><BR>"
for (var/obj/item/weapon/implant/tracking/W in world)
if (!W.implanted || !(istype(W.loc,/datum/organ/external) || ismob(W.loc)))
if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc)))
continue
else
var/mob/M = W.loc
+3 -3
View File
@@ -369,7 +369,7 @@
var/safety = user:eyecheck()
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if(H.species.flags & IS_SYNTHETIC)
return
switch(safety)
@@ -475,7 +475,7 @@
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M))
var/datum/organ/external/S = M:organs_by_name[user.zone_sel.selecting]
var/obj/item/organ/external/S = M:organs_by_name[user.zone_sel.selecting]
if (!S) return
if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
@@ -493,7 +493,7 @@
if (WT.remove_fuel(0,null))
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
S.heal_damage(15,0,0,1)
user.visible_message("\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src].")
user.visible_message("\red \The [user] patches some dents on \the [M]'s [S.name] with \the [src].")
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
+2 -2
View File
@@ -112,7 +112,7 @@
M.adjustBruteLoss(damage)
return
var/datum/organ/external/affecting
var/obj/item/organ/external/affecting
switch(pick(list("ankle","wrist","head","knee","elbow")))
if("ankle")
@@ -127,7 +127,7 @@
affecting = H.get_organ("head")
if(affecting)
M << "\red You land heavily on your [affecting.display_name]!"
M << "\red You land heavily on your [affecting.name]!"
affecting.take_damage(damage, 0)
if(affecting.parent)
affecting.parent.add_autopsy_data("Misadventure", damage)
+5 -4
View File
@@ -28,12 +28,13 @@
/obj/structure/extinguisher_cabinet/attack_hand(mob/user)
if(isrobot(user) || isalien(user))
return
if (hasorgans(user))
var/datum/organ/external/temp = user:organs_by_name["r_hand"]
if (ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
if (user.hand)
temp = user:organs_by_name["l_hand"]
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
user << "<span class='notice'>You try to move your [temp.display_name], but cannot!"
user << "<span class='notice'>You try to move your [temp.name], but cannot!"
return
if(has_extinguisher)
user.put_in_hands(has_extinguisher)
+5 -4
View File
@@ -327,12 +327,13 @@
var/busy = 0 //Something's being washed at the moment
/obj/structure/sink/attack_hand(mob/user as mob)
if (hasorgans(user))
var/datum/organ/external/temp = user:organs_by_name["r_hand"]
if (ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
if (user.hand)
temp = user:organs_by_name["l_hand"]
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
user << "<span class='notice'>You try to move your [temp.display_name], but cannot!"
user << "<span class='notice'>You try to move your [temp.name], but cannot!"
return
if(isrobot(user) || isAI(user))
+2 -2
View File
@@ -59,7 +59,7 @@
if(!(damagetype | BRUTELOSS) && !(damagetype | FIRELOSS) && !(damagetype | TOXLOSS) && !(damagetype | OXYLOSS))
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
var/datum/organ/external/affected = get_organ("head")
var/obj/item/organ/external/affected = get_organ("head")
affected.add_autopsy_data("Suicide by [held_item]", 175)
updatehealth()
@@ -72,7 +72,7 @@
"\red <b>[src] is holding \his breath! It looks like \he's trying to commit suicide.</b>")
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
var/datum/organ/external/affected = get_organ("head")
var/obj/item/organ/external/affected = get_organ("head")
affected.add_autopsy_data("Suicide", 175)
updatehealth()