Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DZD
2014-12-06 13:09:13 -05:00
63 changed files with 2360 additions and 2405 deletions
-3
View File
@@ -1618,9 +1618,6 @@
var/obj/pageobj = B.contents[page]
data += "<A href='?src=\ref[src];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
world << data
world << "Sent by: [usr]"
usr << browse(data, "window=[B.name]")
else
usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]"
+8
View File
@@ -310,6 +310,7 @@ datum/preferences
dat += "-Color: <a href='?_src_=prefs;preference=UIcolor'><b>[UI_style_color]</b></a> <table style='display:inline;' bgcolor='[UI_style_color]'><tr><td>__</td></tr></table><br>"
dat += "-Alpha(transparence): <a href='?_src_=prefs;preference=UIalpha'><b>[UI_style_alpha]</b></a><br>"
dat += "<b>Play admin midis:</b> <a href='?_src_=prefs;preference=hear_midis'><b>[(sound & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
dat += "<b>Play lobby music:</b> <a href='?_src_=prefs;preference=lobby_music'><b>[(sound & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
dat += "<b>Randomized Character Slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]</b></a><br>"
@@ -1291,6 +1292,13 @@ datum/preferences
if("hear_midis")
sound ^= SOUND_MIDI
if("lobby_music")
sound ^= SOUND_LOBBY
if(sound & SOUND_LOBBY)
user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
else
user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
if("ghost_ears")
toggles ^= CHAT_GHOSTEARS
@@ -59,6 +59,21 @@
src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat."
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggletitlemusic()
set name = "Hear/Silence LobbyMusic"
set category = "Preferences"
set desc = "Toggles hearing the GameLobby music"
prefs.sound ^= SOUND_LOBBY
prefs.save_preferences(src)
if(prefs.sound & SOUND_LOBBY)
src << "You will now hear music in the game lobby."
if(istype(mob, /mob/new_player))
playtitlemusic()
else
src << "You will no longer hear music in the game lobby."
if(istype(mob, /mob/new_player))
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jamsz
feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglemidis()
set name = "Hear/Silence Midis"
+2 -16
View File
@@ -28,24 +28,10 @@
darkness_view = 8
/obj/item/clothing/glasses/hud/health/process_hud(var/mob/M)
if(!M) return
if(!M.client) return
var/client/C = M.client
for(var/mob/living/carbon/human/patient in view(get_turf(M)))
if(M.see_invisible < patient.invisibility)
continue
C.images += patient.hud_list[HEALTH_HUD]
C.images += patient.hud_list[STATUS_HUD]
process_med_hud(M,1)
/obj/item/clothing/glasses/hud/health_advanced/process_hud(var/mob/M)
if(!M) return
if(!M.client) return
var/client/C = M.client
for(var/mob/living/carbon/human/patient in view(get_turf(M)))
if(M.see_invisible < patient.invisibility)
continue
C.images += patient.hud_list[HEALTH_HUD]
C.images += patient.hud_list[STATUS_HUD]
process_sec_hud(M,1)
/obj/item/clothing/glasses/hud/security
+1 -1
View File
@@ -8,7 +8,7 @@
if (M.internals)
M.internals.icon_state = "internal1"
M.generate_name()
//M.generate_name()
if( M.species.name=="Tajaran" || M.species.name=="Unathi" )
if(M.mind.assigned_role == "Cyborg" || M.mind.assigned_role == "Clown")
@@ -1,6 +1,9 @@
/mob/living/carbon/brain/say(var/message)
if (silent)
return
if (stat == 2) // Dead.
return say_dead(message)
if(!(container && (istype(container, /obj/item/device/mmi) || istype(container, /obj/item/device/mmi/posibrain))))
return //No MMI, can't speak, bucko./N
-2
View File
@@ -219,8 +219,6 @@
"\blue [M] gives [src] a [pick("hug","warm embrace")].", \
"\blue You hug [src].", \
)
if(prob(10))
src.emote("fart")
/mob/living/carbon/proc/eyecheck()
+15 -9
View File
@@ -5,13 +5,13 @@
canmove = 0
icon = null
invisibility = 101
if(!(species.flags & IS_SYNTHETIC))
animation = new(loc)
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
animation = new(loc)
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10)
playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10)
for(var/datum/organ/external/E in src.organs)
if(istype(E, /datum/organ/external/chest))
@@ -20,9 +20,15 @@
if(prob(100 - E.get_damage()))
// Override the current limb status and don't cause an explosion
E.droplimb(1,1)
flick("gibbed-h", animation)
hgibs(loc, viruses, dna)
if(!(species.flags & IS_SYNTHETIC))
flick("gibbed-h", animation)
hgibs(loc, viruses, dna)
else
new /obj/effect/decal/cleanable/robot_debris(src.loc)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spawn(15)
if(animation) del(animation)
+33 -39
View File
@@ -635,8 +635,11 @@
// Needed for M_TOXIC_FART
if("fart")
if(world.time-lastFart >= 600)
playsound(src.loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins voted no to fun
message = "<b>[src]</b> [pick("passes wind","farts")]."
// playsound(src.loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun
if(M_TOXIC_FARTS in mutations)
message = "<b>[src]</b> unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart."
else
message = "<b>[src]</b> [pick("passes wind","farts")]."
m_type = 2
var/turf/location = get_turf(src)
@@ -644,38 +647,31 @@
if(M_SUPER_FART in mutations)
aoe_range+=3 //Was 5
// If we're wearing a suit, don't blast or gas those around us.
/* // If we're wearing a suit, don't blast or gas those around us.
var/wearing_suit=0
var/wearing_mask=0
if(wear_suit && wear_suit.body_parts_covered & LOWER_TORSO)
wearing_suit=1
if (internal != null && wear_mask && (wear_mask.flags & MASKINTERNALS))
wearing_mask=1
wearing_mask=1 */
// Process toxic farts first.
if(M_TOXIC_FARTS in mutations)
if(wearing_suit)
if(!wearing_mask)
src << "\red You gas yourself!"
reagents.add_reagent("space_drugs", rand(10,20))
else
// Was /turf/, now /mob/
for(var/mob/M in range(location,aoe_range))
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
continue
if(!airborne_can_reach(location,M,aoe_range))
continue
// Now, we don't have this:
//new /obj/effects/fart_cloud(T,L)
// But:
// <[REDACTED]> so, what it does is...imagine a 3x3 grid with the person in the center. When someone uses the emote *fart (it's not a spell style ability and has no cooldown), then anyone in the 8 tiles AROUND the person who uses it
// <[REDACTED]> gets between 1 and 10 units of jenkem added to them...we obviously don't have Jenkem, but Space Drugs do literally the same exact thing as Jenkem
// <[REDACTED]> the user, of course, isn't impacted because it's not an actual smoke cloud
// So, let's give 'em space drugs.
if (M == src)
continue
M.reagents.add_reagent("space_drugs",rand(1,10))
for(var/mob/M in range(location,aoe_range))
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
continue
if(!airborne_can_reach(location,M,aoe_range))
continue
// Now, we don't have this:
//new /obj/effects/fart_cloud(T,L)
// But:
// <[REDACTED]> so, what it does is...imagine a 3x3 grid with the person in the center. When someone uses the emote *fart (it's not a spell style ability and has no cooldown), then anyone in the 8 tiles AROUND the person who uses it
// <[REDACTED]> gets between 1 and 10 units of jenkem added to them...we obviously don't have Jenkem, but Space Drugs do literally the same exact thing as Jenkem
// <[REDACTED]> the user, of course, isn't impacted because it's not an actual smoke cloud
// So, let's give 'em space drugs.
if (M == src)
continue
M.reagents.add_reagent("space_drugs",rand(1,10))
/*
var/datum/effect/effect/system/smoke_spread/chem/fart/S = new /datum/effect/effect/system/smoke_spread/chem/fart
S.attach(location)
@@ -686,23 +682,21 @@
S.start()
*/
if(M_SUPER_FART in mutations)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
visible_message("\red <b>[name]</b> hunches down and grits their teeth!")
if(do_after(usr,30))
visible_message("\red <b>[name]</b> unleashes a [pick("tremendous","gigantic","colossal")] fart!","You hear a [pick("tremendous","gigantic","colossal")] fart.")
//playsound(L.loc, 'superfart.ogg', 50, 0)
if(!wearing_suit)
for(var/mob/living/V in range(location,aoe_range))
shake_camera(V,10,5)
if (V == src)
continue
if(!airborne_can_reach(get_turf(src), get_turf(V)))
continue
V << "\red You are sent flying!"
V.Weaken(5) // why the hell was this set to 12 christ
step_away(V,location,15)
step_away(V,location,15)
step_away(V,location,15)
for(var/mob/living/V in range(location,aoe_range))
shake_camera(V,10,5)
if (V == src)
continue
if(!airborne_can_reach(get_turf(src), get_turf(V)))
continue
V << "\red You are sent flying!"
V.Weaken(5) // why the hell was this set to 12 christ
step_away(V,location,15)
step_away(V,location,15)
step_away(V,location,15)
else
usr << "\red You were interrupted and couldn't fart! Rude!"
lastFart=world.time
@@ -474,30 +474,15 @@
return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health_advanced)
else
return 0
else if(istype(M, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = M
else if(istype(M, /mob/living/silicon))
var/mob/living/silicon/R = M
switch(hudtype)
if("security")
for(var/obj/I in R.contents)
if(istype(I, /obj/item/borg/sight/hud/sec))
return 1
if(R.sensor_mode == 1)
return 1
if("medical")
for(var/obj/I in R.contents)
if(istype(I, /obj/item/borg/sight/hud/med))
return 1
else
return 0
else if(istype(M, /mob/living/silicon/ai))
var/mob/living/silicon/ai/A = M
switch(hudtype)
if("security")
for(var/obj/I in A.contents)
if(istype(I, /obj/item/borg/sight/hud/sec))
return 1
if("medical")
for(var/obj/I in A.contents)
if(istype(I, /obj/item/borg/sight/hud/med))
return 1
if(R.sensor_mode == 2)
return 1
else
return 0
else
@@ -1555,7 +1555,7 @@
//Check for ID
var/obj/item/weapon/card/id/idcard = get_idcard()
if(judgebot.idcheck && !idcard && name=="Unknown")
if(judgebot.idcheck && !idcard)
threatcount += 4
//Check for weapons
@@ -1672,6 +1672,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
proc/handle_decay()
var/decaytime = world.time - timeofdeath
if(species.flags & IS_SYNTHETIC)
return
if(decaytime <= 6000) //10 minutes for decaylevel1 -- stinky
return
@@ -1,2 +1,2 @@
/mob/living/carbon/slime/proc/regular_hud_updates()
/mob/living/carbon/slime/regular_hud_updates()
return
+3 -2
View File
@@ -64,12 +64,13 @@
src <<"\red You have been hit by [P]!"
del P
return
*/
if(istype(P, /obj/item/projectile/energy/electrode) || istype(P, /obj/item/projectile/bullet/stunshot))
stun_effect_act(0, P.agony, def_zone, P)
src <<"\red You have been hit by [P]!"
del P
return
*/
//Armor
var/absorb = run_armor_check(def_zone, P.flag)
@@ -81,7 +82,7 @@
if(!P.nodamage)
apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge)
P.on_hit(src, absorb, def_zone)
if(istype(P, /obj/item/projectile/beam/lightning))
if(P.damage >= 200)
+6 -6
View File
@@ -10,11 +10,11 @@ var/list/department_radio_keys = list(
":s" = "Security", "#s" = "Security", ".s" = "Security",
":w" = "whisper", "#w" = "whisper", ".w" = "whisper",
":b" = "binary", "#b" = "binary", ".b" = "binary",
":d" = "drone", "#d" = "drone", ".d" = "drone",
":d" = "drone", "#d" = "drone", ".d" = "drone",
":a" = "alientalk", "#a" = "alientalk", ".a" = "alientalk",
":t" = "Syndicate", "#t" = "Syndicate", ".t" = "Syndicate",
":u" = "Supply", "#u" = "Supply", ".u" = "Supply",
":z" = "Service", "#z" = "Service", ".z" = "Service",
":z" = "Service", "#z" = "Service", ".z" = "Service",
":g" = "changeling", "#g" = "changeling", ".g" = "changeling",
@@ -28,14 +28,14 @@ var/list/department_radio_keys = list(
":E" = "Engineering", "#E" = "Engineering", ".E" = "Engineering",
":S" = "Security", "#S" = "Security", ".S" = "Security",
":W" = "whisper", "#W" = "whisper", ".W" = "whisper",
":D" = "drone", "#D" = "drone", ".D" = "drone",
":D" = "drone", "#D" = "drone", ".D" = "drone",
":B" = "binary", "#B" = "binary", ".B" = "binary",
":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk",
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
":Z" = "Service", "#Z" = "Service", ".Z" = "Service",
":G" = "changeling", "#G" = "changeling", ".G" = "changeling"
/* //kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
@@ -185,8 +185,8 @@ var/list/department_radio_keys = list(
if (!(istype(src,/mob/living/carbon/human) && !isAI(src) && !isrobot(src) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department") || isAI(src) && (message_mode=="department") || (message_mode in radiochannels)))
message_mode = null //only humans can use headsets
if(src.stunned > 2 || (traumatic_shock > 61 && prob(50)))
message_mode = null //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it
if(traumatic_shock > 61 && prob(50))
message_mode = null //people in shock will have a high chance of not being able to speak on radio; needed since people don't instantly pass out at 100 damage.
message = capitalize(message)
+3 -16
View File
@@ -830,23 +830,10 @@ var/list/ai_list = list()
lightNearbyCamera()
/mob/living/silicon/ai/proc/control_hud()
set name = "Toggle Sensors"
set desc = "Toggles your sensors to display security records, medical records or nothing."
set name = "Set Sensor Augmentation"
set desc = "Augment visual feed with internal sensor overlays."
set category = "AI Commands"
if(stat != 0)
return
var/hud = input("Please select a sensor module!", "Toggle Sensors", "None", null) in list("None","Security","Medical")
for(var/obj/item/borg/sight/hud/H in contents)
del(H)
switch(hud)
if("Security")
sechud = new/obj/item/borg/sight/hud/sec(src)
if("Medical")
healthhud = new/obj/item/borg/sight/hud/med(src)
else
return
toggle_sensor_mode()
// Handled camera lighting, when toggled.
// It will get the nearest camera from the eyeobj, lighting it.
+8 -12
View File
@@ -1,7 +1,4 @@
/mob/living/silicon/ai/Life()
if(client)
handle_regular_hud_updates()
if (src.stat == 2)
return
else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist
@@ -176,6 +173,13 @@
sleep(50)
theAPC = null
regular_hud_updates()
switch(src.sensor_mode)
if (SEC_HUD)
process_sec_hud(src,1,src.eyeobj)
if (MED_HUD)
process_med_hud(src,1,src.eyeobj)
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
health = 100
@@ -184,12 +188,4 @@
if(fire_res_on_core)
health = 100 - getOxyLoss() - getToxLoss() - getBruteLoss()
else
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
/mob/living/silicon/ai/proc/handle_regular_hud_updates()
for(var/image/hud in client.images) //COPIED FROM the human handle_regular_hud_updates() proc
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
client.images.Remove(hud)
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
if(hud && hud.hud) hud.hud.process_hud(src)
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
-110
View File
@@ -1,110 +0,0 @@
/mob/living/silicon/pai/proc/regular_hud_updates()
if(client)
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud")
client.images -= hud
/mob/living/silicon/pai/proc/securityHUD()
if(client)
var/image/holder
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/carbon/human/perp in view(T))
if(src.see_invisible < perp.invisibility)
continue
var/perpname = "wot"
holder = perp.hud_list[ID_HUD]
if(perp.wear_id)
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
if(I)
perpname = I.registered_name
holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
client.images += holder
else
perpname = perp.name
holder.icon_state = "hudunknown"
client.images += holder
else
holder.icon_state = "hudunknown"
client.images += holder
for(var/datum/data/record/E in data_core.general)
if(E.fields["name"] == perpname)
holder = perp.hud_list[WANTED_HUD]
for(var/datum/data/record/R in data_core.security)
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
holder.icon_state = "hudwanted"
client.images += holder
break
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
holder.icon_state = "hudprisoner"
client.images += holder
break
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
holder.icon_state = "hudparolled"
client.images += holder
break
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
holder.icon_state = "hudreleased"
client.images += holder
break
/mob/living/silicon/pai/proc/medicalHUD()
if(client)
var/image/holder
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/carbon/human/patient in view(T))
if(src.see_invisible < patient.invisibility)
continue
var/foundVirus = 0
for (var/ID in patient.virus2)
if (ID in virusDB)
foundVirus = 1
break
holder = patient.hud_list[HEALTH_HUD]
if(patient.stat == 2)
holder.icon_state = "hudhealth-100"
client.images += holder
else
holder.icon_state = "hud[RoundHealth(patient.health)]"
client.images += holder
holder = patient.hud_list[STATUS_HUD]
if(patient.stat == 2)
holder.icon_state = "huddead"
else if(patient.status_flags & XENO_HOST)
holder.icon_state = "hudxeno"
else if(foundVirus)
holder.icon_state = "hudill"
else if(patient.has_brain_worms())
var/mob/living/simple_animal/borer/B = patient.has_brain_worms()
if(B.controlling)
holder.icon_state = "hudbrainworm"
else
holder.icon_state = "hudhealthy"
else
holder.icon_state = "hudhealthy"
client.images += holder
/mob/living/silicon/pai/proc/RoundHealth(health)
switch(health)
if(100 to INFINITY)
return "health100"
if(70 to 100)
return "health80"
if(50 to 70)
return "health60"
if(30 to 50)
return "health40"
if(20 to 30)
return "health25"
if(5 to 15)
return "health10"
if(1 to 5)
return "health1"
if(-99 to 0)
return "health0"
else
return "health-100"
return "0"
+2 -2
View File
@@ -10,9 +10,9 @@
regular_hud_updates()
if(src.secHUD == 1)
src.securityHUD()
process_sec_hud(src, 1)
if(src.medHUD == 1)
src.medicalHUD()
process_med_hud(src, 1)
if(silence_time)
if(world.timeofday >= silence_time)
silence_time = null
@@ -177,12 +177,17 @@
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
for(var/image/hud in client.images) //COPIED FROM the human handle_regular_hud_updates() proc
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
client.images.Remove(hud)
regular_hud_updates()
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
if(hud && hud.hud) hud.hud.process_hud(src)
if(hud && hud.hud)
hud.hud.process_hud(src)
else
switch(src.sensor_mode)
if (SEC_HUD)
process_sec_hud(src,1)
if (MED_HUD)
process_med_hud(src,1)
if (src.healths)
if (src.stat != 2)
+3 -16
View File
@@ -460,23 +460,10 @@
src << "\red You enable [C.name]."
/mob/living/silicon/robot/verb/control_hud()
set name = "Toggle Sensors"
set desc = "Toggles your sensors to display security records, medical records or nothing."
set name = "Set Sensor Augmentation"
set desc = "Augment visual feed with internal sensor overlays."
set category = "Robot Commands"
if(stat != 0)
return
var/hud = input("Please select a sensor module!", "Toggle Sensors", "None", null) in list("None","Security","Medical")
for(var/obj/item/borg/sight/hud/H in contents)
del(H)
switch(hud)
if("Security")
sechud = new/obj/item/borg/sight/hud/sec(src)
if("Medical")
healthhud = new/obj/item/borg/sight/hud/med(src)
else
return
toggle_sensor_mode()
/mob/living/silicon/robot/blob_act()
if (stat != 2)
@@ -24,7 +24,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.emag = new /obj/item/toy/sword(src)
src.emag.name = "Placeholder Emag Item"
// src.jetpack = new /obj/item/toy/sword(src)
@@ -62,7 +62,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/loaded(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/wrench(src)
@@ -80,7 +80,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
src.modules += new /obj/item/weapon/scalpel(src)
@@ -119,7 +119,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/reagent_scanner/adv(src)
src.modules += new /obj/item/roller_holder(src)
@@ -164,7 +164,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
@@ -187,7 +187,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
@@ -228,7 +228,7 @@
New()
src.modules += new /obj/item/device/flashlight/seclite(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
@@ -244,7 +244,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
src.modules += new /obj/item/weapon/storage/bag/trash(src)
src.modules += new /obj/item/weapon/mop(src)
@@ -264,7 +264,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src)
src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
@@ -291,7 +291,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
src.modules += new /obj/item/device/taperecorder(src)
@@ -312,7 +312,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/screwdriver(src)
@@ -326,7 +326,7 @@
name = "NT advanced combat module"
/obj/item/weapon/robot_module/deathsquad/New()
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/borg/sight/thermal(src)
src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
@@ -340,7 +340,7 @@
name = "syndicate robot module"
/obj/item/weapon/robot_module/syndicate/New()
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
src.modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src)
@@ -356,7 +356,7 @@
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/borg/sight/thermal(src)
src.modules += new /obj/item/weapon/gun/energy/laser/cyborg(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
@@ -371,7 +371,7 @@
New()
src.modules += new /obj/item/weapon/melee/energy/alien/claws(src)
src.modules += new /obj/item/device/flash/alien(src)
src.modules += new /obj/item/device/flash/cyborg/alien(src)
src.modules += new /obj/item/borg/sight/thermal/alien(src)
var/obj/item/weapon/reagent_containers/spray/alien/stun/S = new /obj/item/weapon/reagent_containers/spray/alien/stun(src)
S.reagents.add_reagent("stoxin",250) //nerfed to sleeptoxin to make it less instant drop.
@@ -17,6 +17,9 @@
var/speak_exclamation = "declares"
var/speak_query = "queries"
var/pose //Yes, now AIs can pose too.
var/sensor_mode = 0 //Determines the current HUD.
#define SEC_HUD 1 //Security HUD mode
#define MED_HUD 2 //Medical HUD mode
/mob/living/silicon/proc/cancelAlarm()
return
@@ -254,3 +257,16 @@
set category = "IC"
flavor_text = copytext(sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text), 1)
/mob/living/silicon/proc/toggle_sensor_mode()
var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Disable")
switch(sensor_type)
if ("Security")
sensor_mode = SEC_HUD
src << "<span class='notice'>Security records overlay enabled.</span>"
if ("Medical")
sensor_mode = MED_HUD
src << "<span class='notice'>Life signs monitor overlay enabled.</span>"
if ("Disable")
sensor_mode = 0
src << "Sensor augmentations disabled."
+1
View File
@@ -33,3 +33,4 @@
spawn(40)
if(client)
handle_privacy_poll()
client.playtitlemusic()
+6
View File
@@ -633,6 +633,12 @@ obj/structure/cable/proc/cableColor(var/colorC)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
if(istype(M,/mob/living/carbon/human/machine) && M.stat == 0) // If an IPC is brought back to life by welding it, which is possible, update the mob list
if(M in dead_mob_list)
dead_mob_list -= M
respawnable_list -= M
living_mob_list += M
mob_list += M
return
else
user << "Nothing to fix!"
@@ -19,7 +19,7 @@
charge_cost = 100
fire_sound = 'sound/weapons/Taser.ogg'
user << "\red [src.name] is now set to stun."
projectile_type = "/obj/item/projectile/energy/electrode/revolver"
projectile_type = "/obj/item/projectile/energy/electrode"
if(0)
mode = 1
charge_cost = 100
@@ -232,3 +232,13 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
power_supply.give(5000)
playsound(src.loc, 'sound/weapons/shotgunpump.ogg', 60, 1)
return
/obj/item/weapon/gun/energy/disabler
name = "disabler"
desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse."
icon_state = "disabler"
item_state = null
projectile_type = "/obj/item/projectile/energy/disabler"
cell_type = "/obj/item/weapon/cell"
charge_cost = 500
+8 -8
View File
@@ -6,7 +6,7 @@
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
projectile_type = "/obj/item/projectile/energy/electrode"
cell_type = "/obj/item/weapon/cell"
cell_type = "/obj/item/weapon/cell/crap"
/obj/item/weapon/gun/energy/taser/cyborg
name = "taser gun"
@@ -29,7 +29,7 @@
/obj/item/weapon/gun/energy/taser/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
return 1
/obj/item/weapon/gun/energy/taser/cyborg/process_chambered()
if(in_chamber)
return 1
@@ -46,9 +46,9 @@
name = "stun revolver"
desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger."
icon_state = "stunrevolver"
fire_sound = 'sound/weapons/Taser.ogg'
fire_sound = "sound/weapons/gunshot.ogg"
origin_tech = "combat=3;materials=3;powerstorage=2"
projectile_type = "/obj/item/projectile/energy/electrode/revolver"
projectile_type = "/obj/item/projectile/energy/electrode"
cell_type = "/obj/item/weapon/cell"
@@ -77,10 +77,10 @@
/obj/item/weapon/gun/energy/crossbow/process()
charge_tick++
if(charge_tick < 4)
if(charge_tick < 4)
return 0
charge_tick = 0
if(!power_supply)
if(!power_supply)
return 0
power_supply.give(1000)
return 1
@@ -92,8 +92,8 @@
desc = "An energy-based crossbow that draws power from the cyborg's internal energy cell directly."
/obj/item/weapon/gun/energy/crossbow/cyborg/process()
return 1
return 1
/obj/item/weapon/gun/energy/crossbow/cyborg/process_chambered()
if(in_chamber)
return 1
+15 -7
View File
@@ -10,13 +10,9 @@
name = "electrode"
icon_state = "spark"
nodamage = 1
/*
stun = 10
weaken = 10
stutter = 10
*/
agony = 40
damage_type = HALLOSS
stun = 5
weaken = 5
stutter = 5
hitsound = 'sound/weapons/tase.ogg'
//Damage will be handled on the MOB side, to prevent window shattering.
@@ -74,3 +70,15 @@
damage = 20
damage_type = TOX
irradiate = 20
/obj/item/projectile/energy/disabler
name = "disabler beam"
icon_state = "omnilaser"
damage = 34
damage_type = HALLOSS
var/range = 8
/obj/item/projectile/energy/disabler/Range()
range--
if(range <= 0)
del(src)
@@ -251,6 +251,7 @@
icon_state = "virusfoodtank"
amount_per_transfer_from_this = 10
anchored = 1
density = 0
New()
..()
+11 -1
View File
@@ -1579,6 +1579,16 @@ datum/design/adv_reagent_scanner
reliability_base = 74
build_path = "/obj/item/device/reagent_scanner/adv"
datum/design/cyborg_analyzer
name = "Cyborg Analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
id = "cyborg_analyzer"
req_tech = list("programming" = 2, "biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 30, "$glass" = 20)
reliability_base = 74
build_path = "/obj/item/device/robotanalyzer"
datum/design/mmi
name = "Man-Machine Interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity."
@@ -1602,7 +1612,7 @@ datum/design/mmi_radio
category = "Misc"
datum/design/synthetic_flash
name = "Synthetic Flash"
name = "Flash"
desc = "When a problem arises, SCIENCE is the solution."
id = "sflash"
req_tech = list("magnets" = 3, "combat" = 2)
@@ -44,6 +44,25 @@
/obj/structure/boulder/New()
icon_state = "boulder[rand(1,4)]"
excavation_level = rand(5,50)
/obj/structure/boulder/Bumped(AM)
. = ..()
if(istype(AM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
attackby(H.l_hand,H)
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
attackby(H.r_hand,H)
else if(istype(AM,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = AM
if(istype(R.module_active,/obj/item/weapon/pickaxe))
attackby(R.module_active,R)
else if(istype(AM,/obj/mecha))
var/obj/mecha/M = AM
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill))
M.selected.action(src)
/obj/structure/boulder/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/core_sampler))
+2
View File
@@ -128,6 +128,8 @@
if (target.op_stage.face == 3)
var/datum/organ/external/head/h = affected
h.disfigured = 0
h.update_icon()
target.regenerate_icons()
target.op_stage.face = 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+37 -12
View File
@@ -26,20 +26,28 @@
min_duration = 80
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
return ..() && !(affected.status & ORGAN_CUT_AWAY)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts peeling back tattered flesh where [target]'s head used to be with \the [tool].", \
"You start peeling back tattered flesh where [target]'s head used to be with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("[user] starts peeling back tattered flesh where [target]'s head used to be with \the [tool].", \
"You start peeling back tattered flesh where [target]'s head used to be with \the [tool].")
else
user.visible_message("[user] starts peeling back metal where [target]'s head used to be with \the [tool].", \
"You start peeling back metal where [target]'s head used to be with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\blue [user] peels back tattered flesh where [target]'s head used to be with \the [tool].", \
"\blue You peel back tattered flesh where [target]'s head used to be with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\blue [user] peels back tattered flesh where [target]'s head used to be with \the [tool].", \
"\blue You peel back tattered flesh where [target]'s head used to be with \the [tool].")
else
user.visible_message("\blue [user] peels back metal where [target]'s head used to be with \the [tool].", \
"\blue You peel back metal where [target]'s head used to be with \the [tool].")
affected.status |= ORGAN_CUT_AWAY
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -47,7 +55,7 @@
if (affected.parent)
affected = affected.parent
user.visible_message("\red [user]'s hand slips, ripping [target]'s [affected.display_name] open!", \
"\red Your hand slips, ripping [target]'s [affected.display_name] open!")
"\red Your hand slips, ripping [target]'s [affected.display_name] open!")
affected.createwound(CUT, 10)
@@ -72,16 +80,25 @@
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\blue [user] has finished repositioning flesh and tissue to something anatomically recognizable where [target]'s head used to be with \the [tool].", \
"\blue You have finished repositioning flesh and tissue to something anatomically recognizable where [target]'s head used to be with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\blue [user] has finished repositioning flesh and tissue to something anatomically recognizable where [target]'s head used to be with \the [tool].", \
"\blue You have finished repositioning flesh and tissue to something anatomically recognizable where [target]'s head used to be with \the [tool].")
else
user.visible_message("\blue [user] has finished repositioning metal to something recognizable where [target]'s head used to be with \the [tool].", \
"\blue You have finished repositioning metal to something anatomically recognizable where [target]'s head used to be with \the [tool].")
target.op_stage.head_reattach = 1
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
if (affected.parent)
affected = affected.parent
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\red [user]'s hand slips, further rending flesh on [target]'s neck!", \
"\red Your hand slips, further rending flesh on [target]'s neck!")
else
user.visible_message("\red [user]'s hand slips, further rending metal on [target]'s neck!", \
"\red Your hand slips, further rending metal on [target]'s neck!")
target.apply_damage(10, BRUTE, affected)
/datum/surgery_step/head/suture
@@ -99,8 +116,12 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
// var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] is stapling and suturing flesh into place in [target]'s esophagal and vocal region with \the [tool].", \
"You start to staple and suture flesh into place in [target]'s esophagal and vocal region with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("[user] is stapling and suturing flesh into place in [target]'s esophagal and vocal region with \the [tool].", \
"You start to staple and suture flesh into place in [target]'s esophagal and vocal region with \the [tool].")
else
user.visible_message("[user] is stapling and suturing metal into place in [target]'s esophagal and vocal region with \the [tool].", \
"You start to staple and suture metal into place in [target]'s esophagal and vocal region with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -175,15 +196,19 @@
user.visible_message("\blue [user] has attached [target]'s head to the body.", \
"\blue You have attached [target]'s head to the body.")
affected.status = 0
if(istype(target,/mob/living/carbon/human/machine))
affected.status = 128
affected.amputated = 0
affected.destspawn = 0
var/obj/item/weapon/organ/head/B = tool
if (B.brainmob.mind)
B.brainmob.mind.transfer_to(target)
affected.setAmputatedTree()
target.handle_organs()
target.update_body()
target.updatehealth()
target.UpdateDamageIcon()
target.regenerate_icons()
target.updatehealth()
del(B)
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+32 -12
View File
@@ -37,14 +37,22 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \
"You start cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("[user] starts cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \
"You start cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].")
else
user.visible_message("[user] starts cutting away metal where [target]'s [affected.display_name] used to be with \the [tool].", \
"You start cutting away metal where [target]'s [affected.display_name] used to be with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\blue [user] cuts away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \
"\blue You cut away flesh where [target]'s [affected.display_name] used to be with \the [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\blue [user] cuts away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \
"\blue You cut away flesh where [target]'s [affected.display_name] used to be with \the [tool].")
else
user.visible_message("\blue [user] cuts away metal where [target]'s [affected.display_name] used to be with \the [tool].", \
"\blue You cut away metal where [target]'s [affected.display_name] used to be with \the [tool].")
affected.status |= ORGAN_CUT_AWAY
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -52,7 +60,7 @@
if (affected.parent)
affected = affected.parent
user.visible_message("\red [user]'s hand slips, cutting [target]'s [affected.display_name] open!", \
"\red Your hand slips, cutting [target]'s [affected.display_name] open!")
"\red Your hand slips, cutting [target]'s [affected.display_name] open!")
affected.createwound(CUT, 10)
@@ -71,22 +79,34 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] is beginning reposition flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].", \
"You start repositioning flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("[user] is beginning to reposition flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].", \
"You start repositioning flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].")
else
user.visible_message("[user] is beginning to reposition metal and wire endings where where [target]'s [affected.display_name] used to be with [tool].", \
"You start repositioning metal and wire endings where where [target]'s [affected.display_name] used to be with [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\blue [user] has finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].", \
"\blue You have finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\blue [user] has finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].", \
"\blue You have finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].")
else
user.visible_message("\blue [user] has finished repositioning metal and wire endings where [target]'s [affected.display_name] used to be with [tool].", \
"\blue You have finished repositioning metal and wire endings where [target]'s [affected.display_name] used to be with [tool].")
affected.open = 3
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
if (affected.parent)
affected = affected.parent
user.visible_message("\red [user]'s hand slips, tearing flesh on [target]'s [affected.display_name]!", \
"\red Your hand slips, tearing flesh on [target]'s [affected.display_name]!")
if(!(target.species.flags & IS_SYNTHETIC))
user.visible_message("\red [user]'s hand slips, tearing flesh on [target]'s [affected.display_name]!", \
"\red Your hand slips, tearing flesh on [target]'s [affected.display_name]!")
else
user.visible_message("\red [user]'s hand slips, tearing metal on [target]'s [affected.display_name]!", \
"\red Your hand slips, tearing metal on [target]'s [affected.display_name]!")
target.apply_damage(10, BRUTE, affected, sharp=1)
@@ -108,7 +128,7 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts adjusting area around [target]'s [affected.display_name] with \the [tool].", \
"You start adjusting area around [target]'s [affected.display_name] with \the [tool]..")
"You start adjusting area around [target]'s [affected.display_name] with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)