mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 07:03:30 +01:00
Merge pull request #710 from ZomgPonies/limb
Port of the BS12 limb overhaul
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user