Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+7 -3
View File
@@ -43,9 +43,9 @@
/obj/item/bodypart/examine(mob/user)
..()
if(brute_dam > 0)
user << "<span class='warning'>This limb has [brute_dam > 30 ? "severe" : "minor"] bruising.</span>"
to_chat(user, "<span class='warning'>This limb has [brute_dam > 30 ? "severe" : "minor"] bruising.</span>")
if(burn_dam > 0)
user << "<span class='warning'>This limb has [burn_dam > 30 ? "severe" : "minor"] burns.</span>"
to_chat(user, "<span class='warning'>This limb has [burn_dam > 30 ? "severe" : "minor"] burns.</span>")
/obj/item/bodypart/blob_act()
take_damage(max_damage)
@@ -76,7 +76,7 @@
if(W.sharpness)
add_fingerprint(user)
if(!contents.len)
user << "<span class='warning'>There is nothing left inside [src]!</span>"
to_chat(user, "<span class='warning'>There is nothing left inside [src]!</span>")
return
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
user.visible_message("<span class='warning'>[user] begins to cut open [src].</span>",\
@@ -115,6 +115,10 @@
brute = max(0, brute - 5)
burn = max(0, burn - 4)
switch(animal_origin)
if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take double burn
burn *= 2
var/can_inflict = max_damage - (brute_dam + burn_dam)
if(!can_inflict)
return 0
@@ -58,23 +58,23 @@
/obj/item/bodypart/chest/robot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(src.cell)
user << "<span class='warning'>You have already inserted a cell!</span>"
to_chat(user, "<span class='warning'>You have already inserted a cell!</span>")
return
else
if(!user.transferItemToLoc(W, src))
return
src.cell = W
user << "<span class='notice'>You insert the cell.</span>"
to_chat(user, "<span class='notice'>You insert the cell.</span>")
else if(istype(W, /obj/item/stack/cable_coil))
if(src.wired)
user << "<span class='warning'>You have already inserted wire!</span>"
to_chat(user, "<span class='warning'>You have already inserted wire!</span>")
return
var/obj/item/stack/cable_coil/coil = W
if (coil.use(1))
src.wired = 1
user << "<span class='notice'>You insert the wire.</span>"
to_chat(user, "<span class='notice'>You insert the wire.</span>")
else
user << "<span class='warning'>You need one length of coil to wire it!</span>"
to_chat(user, "<span class='warning'>You need one length of coil to wire it!</span>")
else
return ..()
@@ -111,10 +111,10 @@
if(istype(W, /obj/item/device/assembly/flash/handheld))
var/obj/item/device/assembly/flash/handheld/F = W
if(src.flash1 && src.flash2)
user << "<span class='warning'>You have already inserted the eyes!</span>"
to_chat(user, "<span class='warning'>You have already inserted the eyes!</span>")
return
else if(F.crit_fail)
user << "<span class='warning'>You can't use a broken flash!</span>"
to_chat(user, "<span class='warning'>You can't use a broken flash!</span>")
return
else
if(!user.transferItemToLoc(F, src))
@@ -123,11 +123,11 @@
src.flash2 = F
else
src.flash1 = F
user << "<span class='notice'>You insert the flash into the eye socket.</span>"
to_chat(user, "<span class='notice'>You insert the flash into the eye socket.</span>")
else if(istype(W, /obj/item/weapon/crowbar))
if(flash1 || flash2)
playsound(src.loc, W.usesound, 50, 1)
user << "<span class='notice'>You remove the flash from [src].</span>"
to_chat(user, "<span class='notice'>You remove the flash from [src].</span>")
if(flash1)
flash1.forceMove(user.loc)
flash1 = null
@@ -135,7 +135,7 @@
flash2.forceMove(user.loc)
flash2 = null
else
user << "<span class='warning'>There are no flash to remove from [src].</span>"
to_chat(user, "<span class='warning'>There are no flash to remove from [src].</span>")
else
return ..()
@@ -177,15 +177,15 @@
max_damage = 20
/obj/item/bodypart/l_leg/robot/surplus
name = "surplus prosthetic leg"
name = "surplus prosthetic left leg"
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
icon = 'icons/mob/augments.dmi'
icon_state = "surplus_l_leg"
max_damage = 20
/obj/item/bodypart/r_leg/robot/surplus
name = "surplus prosthetic leg"
name = "surplus prosthetic right leg"
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
icon = 'icons/mob/augments.dmi'
icon_state = "surplus_r_leg"
max_damage = 20
max_damage = 20
+2 -2
View File
@@ -25,7 +25,7 @@
var/obj/item/bodypart/chest/CH = target.get_bodypart("chest")
if(tool)
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (NODROP in tool.flags) || istype(tool, /obj/item/organ))
user << "<span class='warning'>You can't seem to fit [tool] in [target]'s [target_zone]!</span>"
to_chat(user, "<span class='warning'>You can't seem to fit [tool] in [target]'s [target_zone]!</span>")
return 0
else
user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "<span class='notice'>You stuff [tool] into [target]'s [target_zone].</span>")
@@ -40,5 +40,5 @@
CH.cavity_item = null
return 1
else
user << "<span class='warning'>You don't find anything in [target]'s [target_zone].</span>"
to_chat(user, "<span class='warning'>You don't find anything in [target]'s [target_zone].</span>")
return 0
+1 -1
View File
@@ -32,5 +32,5 @@
else
return 0
else
user << "<span class='warning'>There aren't any cores left in [target]!</span>"
to_chat(user, "<span class='warning'>There aren't any cores left in [target]!</span>")
return 1
+1 -1
View File
@@ -32,7 +32,7 @@
/datum/action/item_action/hands_free/activate_pill/Trigger()
if(!..())
return 0
owner << "<span class='caution'>You grit your teeth and burst the implanted [target.name]!</span>"
to_chat(owner, "<span class='caution'>You grit your teeth and burst the implanted [target.name]!</span>")
add_logs(owner, null, "swallowed an implanted pill", target)
if(target.reagents.total_volume)
target.reagents.reaction(owner, INGEST)
+1 -1
View File
@@ -14,7 +14,7 @@
/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/eyes/E = target.getorganslot("eye_sight")
if(!E)
user << "It's hard to do surgery on someones eyes when they don't have any."
to_chat(user, "It's hard to do surgery on someones eyes when they don't have any.")
return FALSE
/datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+2 -2
View File
@@ -68,7 +68,7 @@
add_logs(user, M, "operated", addition="Operation type: [procedure.name], location: [selected_zone]")
else
user << "<span class='warning'>You need to expose [M]'s [parse_zone(selected_zone)] first!</span>"
to_chat(user, "<span class='warning'>You need to expose [M]'s [parse_zone(selected_zone)] first!</span>")
else if(!current_surgery.step_in_progress)
if(current_surgery.status == 1)
@@ -82,7 +82,7 @@
"<span class='notice'>You mend the incision and remove the drapes from [M]'s [parse_zone(selected_zone)].</span>")
qdel(current_surgery)
else if(current_surgery.can_cancel)
user << "<span class='warning'>You need to hold a cautery in inactive hand to stop [M]'s surgery!</span>"
to_chat(user, "<span class='warning'>You need to hold a cautery in inactive hand to stop [M]'s surgery!</span>")
return 1
+1 -1
View File
@@ -42,5 +42,5 @@
qdel(I)
else
user << "<span class='warning'>You can't find anything in [target]'s [target_zone]!</span>"
to_chat(user, "<span class='warning'>You can't find anything in [target]'s [target_zone]!</span>")
return 1
+3 -3
View File
@@ -24,10 +24,10 @@
/datum/surgery_step/add_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/aug = tool
if(aug.status != BODYPART_ROBOTIC)
user << "<span class='warning'>that's not an augment silly!</span>"
to_chat(user, "<span class='warning'>that's not an augment silly!</span>")
return -1
if(aug.body_zone != target_zone)
user << "<span class='warning'>[tool] isn't the right type for [parse_zone(target_zone)].</span>"
to_chat(user, "<span class='warning'>[tool] isn't the right type for [parse_zone(target_zone)].</span>")
return -1
L = surgery.operated_bodypart
if(L)
@@ -56,5 +56,5 @@
target.updatehealth()
add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
else
user << "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>"
to_chat(user, "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>")
return 1
+3 -3
View File
@@ -58,7 +58,7 @@
current_type = "insert"
I = tool
if(target_zone != I.zone || target.getorganslot(I.slot))
user << "<span class='notice'>There is no room for [I] in [target]'s [parse_zone(target_zone)]!</span>"
to_chat(user, "<span class='notice'>There is no room for [I] in [target]'s [parse_zone(target_zone)]!</span>")
return -1
user.visible_message("[user] begins to insert [tool] into [target]'s [parse_zone(target_zone)].",
@@ -73,7 +73,7 @@
"<span class='notice'>You begin to extract [B] from [target]'s [parse_zone(target_zone)]...</span>")
return TRUE
if(!organs.len)
user << "<span class='notice'>There is no removeable organs in [target]'s [parse_zone(target_zone)]!</span>"
to_chat(user, "<span class='notice'>There is no removeable organs in [target]'s [parse_zone(target_zone)]!</span>")
return -1
else
for(var/obj/item/organ/O in organs)
@@ -96,7 +96,7 @@
"<span class='notice'>You begin to mend the incision in [target]'s [parse_zone(target_zone)]...</span>")
else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ))
user << "<span class='warning'>[tool] was biten by someone! It's too damaged to use!</span>"
to_chat(user, "<span class='warning'>[tool] was biten by someone! It's too damaged to use!</span>")
return -1
/datum/surgery_step/manipulate_organs/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+11 -11
View File
@@ -31,7 +31,7 @@
/obj/item/organ/cyberimp/arm/examine(mob/user)
..()
user << "<span class='info'>[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.</span>"
to_chat(user, "<span class='info'>[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.</span>")
/obj/item/organ/cyberimp/arm/attackby(obj/item/weapon/W, mob/user, params)
..()
@@ -41,7 +41,7 @@
else
zone = "r_arm"
slot = zone + "_device"
user << "<span class='notice'>You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.</span>"
to_chat(user, "<span class='notice'>You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.</span>")
update_icon()
else if(istype(W, /obj/item/weapon/card/emag))
emag_act()
@@ -55,7 +55,7 @@
/obj/item/organ/cyberimp/arm/gun/emp_act(severity)
if(prob(15/severity) && owner)
owner << "<span class='warning'>[src] is hit by EMP!</span>"
to_chat(owner, "<span class='warning'>[src] is hit by EMP!</span>")
// give the owner an idea about why his implant is glitching
Retract()
..()
@@ -70,7 +70,7 @@
if(istype(holder, /obj/item/device/assembly/flash/armimplant))
var/obj/item/device/assembly/flash/F = holder
F.SetLuminosity(0)
F.set_light(0)
owner.transferItemToLoc(holder, src, TRUE)
holder = null
@@ -90,20 +90,20 @@
if(istype(holder, /obj/item/device/assembly/flash/armimplant))
var/obj/item/device/assembly/flash/F = holder
F.SetLuminosity(7)
F.set_light(7)
var/obj/item/arm_item = owner.get_active_held_item()
if(arm_item)
if(!owner.dropItemToGround(arm_item))
owner << "<span class='warning'>Your [arm_item] interferes with [src]!</span>"
to_chat(owner, "<span class='warning'>Your [arm_item] interferes with [src]!</span>")
return
else
owner << "<span class='notice'>You drop [arm_item] to activate [src]!</span>"
to_chat(owner, "<span class='notice'>You drop [arm_item] to activate [src]!</span>")
var/result = (zone == "r_arm" ? owner.put_in_r_hand(holder) : owner.put_in_l_hand(holder))
if(!result)
owner << "<span class='warning'>Your [src] fails to activate!</span>"
to_chat(owner, "<span class='warning'>Your [src] fails to activate!</span>")
return
// Activate the hand that now holds our item.
@@ -116,7 +116,7 @@
/obj/item/organ/cyberimp/arm/ui_action_click()
if(crit_fail || (!holder && !contents.len))
owner << "<span class='warning'>The implant doesn't respond. It seems to be broken...</span>"
to_chat(owner, "<span class='warning'>The implant doesn't respond. It seems to be broken...</span>")
return
// You can emag the arm-mounted implant by activating it while holding emag in it's hand.
@@ -141,7 +141,7 @@
Retract()
owner.visible_message("<span class='danger'>A loud bang comes from [owner]\'s [zone == "r_arm" ? "right" : "left"] arm!</span>")
playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1)
owner << "<span class='userdanger'>You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!</span>"
to_chat(owner, "<span class='userdanger'>You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!</span>")
owner.adjust_fire_stacks(20)
owner.IgniteMob()
owner.adjustFireLoss(25)
@@ -184,7 +184,7 @@
/obj/item/organ/cyberimp/arm/toolset/emag_act()
if(!(locate(/obj/item/weapon/kitchen/knife/combat/cyborg) in items_list))
usr << "<span class='notice'>You unlock [src]'s integrated knife!</span>"
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
items_list += new /obj/item/weapon/kitchen/knife/combat/cyborg(src)
return 1
return 0
@@ -22,7 +22,7 @@
if(owner.nutrition <= hunger_threshold)
synthesizing = TRUE
owner << "<span class='notice'>You feel less hungry...</span>"
to_chat(owner, "<span class='notice'>You feel less hungry...</span>")
owner.nutrition += 50
sleep(50)
synthesizing = FALSE
@@ -31,7 +31,7 @@
if(!owner)
return
owner.reagents.add_reagent("bad_food", poison_amount / severity)
owner << "<span class='warning'>You feel like your insides are burning.</span>"
to_chat(owner, "<span class='warning'>You feel like your insides are burning.</span>")
/obj/item/organ/cyberimp/chest/nutriment/plus
@@ -61,7 +61,7 @@
else
cooldown = revive_cost + world.time
reviving = FALSE
owner << "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [revive_cost/10] seconds.</span>"
to_chat(owner, "<span class='notice'>Your reviver implant shuts down and starts recharging. It will be ready again in [revive_cost/10] seconds.</span>")
return
if(cooldown > world.time)
@@ -73,7 +73,7 @@
revive_cost = 0
reviving = TRUE
owner << "<span class='notice'>You feel a faint buzzing as your reviver implant starts patching your wounds...</span>"
to_chat(owner, "<span class='notice'>You feel a faint buzzing as your reviver implant starts patching your wounds...</span>")
/obj/item/organ/cyberimp/chest/reviver/proc/heal()
if(owner.getOxyLoss())
@@ -102,7 +102,7 @@
var/mob/living/carbon/human/H = owner
if(H.stat != DEAD && prob(50 / severity) && H.can_heartattack())
H.set_heartattack(TRUE)
H << "<span class='userdanger'>You feel a horrible agony in your chest!</span>"
to_chat(H, "<span class='userdanger'>You feel a horrible agony in your chest!</span>")
addtimer(CALLBACK(src, .proc/undo_heart_attack), 600 / severity)
/obj/item/organ/cyberimp/chest/reviver/proc/undo_heart_attack()
@@ -111,7 +111,7 @@
return
H.set_heartattack(FALSE)
if(H.stat == CONSCIOUS)
H << "<span class='notice'>You feel your heart beating again!</span>"
to_chat(H, "<span class='notice'>You feel your heart beating again!</span>")
/obj/item/organ/cyberimp/chest/thrusters
@@ -146,17 +146,17 @@
if(!on)
if(crit_fail)
if(!silent)
owner << "<span class='warning'>Your thrusters set seems to be broken!</span>"
to_chat(owner, "<span class='warning'>Your thrusters set seems to be broken!</span>")
return 0
on = 1
if(allow_thrust(0.01))
ion_trail.start()
if(!silent)
owner << "<span class='notice'>You turn your thrusters set on.</span>"
to_chat(owner, "<span class='notice'>You turn your thrusters set on.</span>")
else
ion_trail.stop()
if(!silent)
owner << "<span class='notice'>You turn your thrusters set off.</span>"
to_chat(owner, "<span class='notice'>You turn your thrusters set off.</span>")
on = 0
update_icon()
@@ -33,7 +33,7 @@
return
var/stun_amount = 5 + (severity-1 ? 0 : 5)
owner.Stun(stun_amount)
owner << "<span class='warning'>Your body seizes up!</span>"
to_chat(owner, "<span class='warning'>Your body seizes up!</span>")
return stun_amount
@@ -56,17 +56,17 @@
var/list/L = owner.get_empty_held_indexes()
if(LAZYLEN(L) == owner.held_items.len)
owner << "<span class='notice'>You are not holding any items, your hands relax...</span>"
to_chat(owner, "<span class='notice'>You are not holding any items, your hands relax...</span>")
active = 0
stored_items = list()
else
for(var/obj/item/I in stored_items)
owner << "<span class='notice'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.</span>"
to_chat(owner, "<span class='notice'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.</span>")
I.flags |= NODROP
else
release_items()
owner << "<span class='notice'>Your hands relax...</span>"
to_chat(owner, "<span class='notice'>Your hands relax...</span>")
/obj/item/organ/cyberimp/brain/anti_drop/emp_act(severity)
@@ -80,7 +80,7 @@
for(var/obj/item/I in stored_items)
A = pick(oview(range))
I.throw_at(A, range, 2)
owner << "<span class='warning'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))] spasms and throws the [I.name]!</span>"
to_chat(owner, "<span class='warning'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))] spasms and throws the [I.name]!</span>")
stored_items = list()
@@ -136,7 +136,7 @@
/obj/item/organ/cyberimp/mouth/breathing_tube/emp_act(severity)
if(prob(60/severity))
owner << "<span class='warning'>Your breathing tube suddenly closes!</span>"
to_chat(owner, "<span class='warning'>Your breathing tube suddenly closes!</span>")
owner.losebreath += 2
+7 -7
View File
@@ -17,10 +17,10 @@
/obj/item/device/autoimplanter/attack_self(mob/user)//when the object it used...
if(!uses)
user << "<span class='warning'>[src] has already been used. The tools are dull and won't reactivate.</span>"
to_chat(user, "<span class='warning'>[src] has already been used. The tools are dull and won't reactivate.</span>")
return
else if(!storedorgan)
user << "<span class='notice'>[src] currently has no implant stored.</span>"
to_chat(user, "<span class='notice'>[src] currently has no implant stored.</span>")
return
storedorgan.Insert(user)//insert stored organ into the user
user.visible_message("<span class='notice'>[user] presses a button on [src], and you hear a short mechanical noise.</span>", "<span class='notice'>You feel a sharp sting as [src] plunges into your body.</span>")
@@ -34,23 +34,23 @@
/obj/item/device/autoimplanter/attackby(obj/item/I, mob/user, params)
if(istype(I, organ_type))
if(storedorgan)
user << "<span class='notice'>[src] already has an implant stored.</span>"
to_chat(user, "<span class='notice'>[src] already has an implant stored.</span>")
return
else if(!uses)
user << "<span class='notice'>[src] has already been used up.</span>"
to_chat(user, "<span class='notice'>[src] has already been used up.</span>")
return
if(!user.drop_item())
return
I.loc = src
storedorgan = I
user << "<span class='notice'>You insert the [I] into [src].</span>"
to_chat(user, "<span class='notice'>You insert the [I] into [src].</span>")
else if(istype(I, /obj/item/weapon/screwdriver))
if(!storedorgan)
user << "<span class='notice'>There's no implant in [src] for you to remove.</span>"
to_chat(user, "<span class='notice'>There's no implant in [src] for you to remove.</span>")
else
var/turf/open/floorloc = get_turf(user)
floorloc.contents += contents
user << "<span class='notice'>You remove the [storedorgan] from [src].</span>"
to_chat(user, "<span class='notice'>You remove the [storedorgan] from [src].</span>")
playsound(get_turf(user), I.usesound, 50, 1)
storedorgan = null
if(uses != INFINITE)
+19 -14
View File
@@ -51,7 +51,7 @@
/obj/item/organ/examine(mob/user)
..()
if(status == ORGAN_ROBOTIC && crit_fail)
user << "<span class='warning'>[src] seems to be broken!</span>"
to_chat(user, "<span class='warning'>[src] seems to be broken!</span>")
/obj/item/organ/proc/prepare_eat()
@@ -181,7 +181,7 @@
var/mob/living/carbon/human/H = owner
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
H.blood_volume = max(H.blood_volume - blood_loss, 0)
H << "<span class = 'userdanger'>You have to keep pumping your blood!</span>"
to_chat(H, "<span class = 'userdanger'>You have to keep pumping your blood!</span>")
if(add_colour)
H.add_client_colour(/datum/client_colour/cursed_heart_blood) //bloody screen so real
add_colour = FALSE
@@ -191,7 +191,7 @@
/obj/item/organ/heart/cursed/Insert(mob/living/carbon/M, special = 0)
..()
if(owner)
owner << "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>"
to_chat(owner, "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
/datum/action/item_action/organ_action/cursed_heart
name = "Pump your blood"
@@ -203,12 +203,12 @@
var/obj/item/organ/heart/cursed/cursed_heart = target
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam
owner << "<span class='userdanger'>Too soon!</span>"
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
cursed_heart.last_pump = world.time
playsound(owner,'sound/effects/singlebeat.ogg',40,1)
owner << "<span class = 'notice'>Your heart beats.</span>"
to_chat(owner, "<span class = 'notice'>Your heart beats.</span>")
var/mob/living/carbon/human/H = owner
if(istype(H))
@@ -577,10 +577,10 @@
var/datum/species/abductor/Byy = H.dna.species
if(Ayy.team != Byy.team)
continue
H << rendered
to_chat(H, rendered)
for(var/mob/M in dead_mob_list)
var/link = FOLLOW_LINK(M, user)
M << "[link] [rendered]"
to_chat(M, "[link] [rendered]")
return ""
/obj/item/organ/tongue/zombie
@@ -704,6 +704,8 @@
return 0
/mob/living/carbon/regenerate_organs()
CHECK_DNA_AND_SPECIES(src)
if(!(NOBREATH in dna.species.species_traits) && !getorganslot("lungs"))
var/obj/item/organ/lungs/L = new()
L.Insert(src)
@@ -747,18 +749,21 @@
var/sight_flags = 0
var/see_in_dark = 2
var/tint = 0
var/eye_color = "fff"
var/eye_color = "" //set to a hex code to override a mob's eye color
var/old_eye_color = "fff"
var/flash_protect = 0
var/see_invisible = SEE_INVISIBLE_LIVING
/obj/item/organ/eyes/Insert(mob/living/carbon/M, special = 0)
..()
if(ishuman(owner) && eye_color)
if(ishuman(owner))
var/mob/living/carbon/human/HMN = owner
old_eye_color = HMN.eye_color
HMN.eye_color = eye_color
HMN.regenerate_icons()
if(eye_color)
HMN.eye_color = eye_color
HMN.regenerate_icons()
else
eye_color = HMN.eye_color
M.update_tint()
owner.update_sight()
@@ -812,7 +817,7 @@
if(severity > 1)
if(prob(10 * severity))
return
owner << "<span class='warning'>Static obfuscates your vision!</span>"
to_chat(owner, "<span class='warning'>Static obfuscates your vision!</span>")
owner.flash_act(visual = 1)
/obj/item/organ/eyes/robotic/xray
@@ -846,11 +851,11 @@
/obj/item/organ/eyes/robotic/flashlight/Insert(var/mob/living/carbon/M, var/special = 0)
..()
M.AddLuminosity(15)
set_light(15)
/obj/item/organ/eyes/robotic/flashlight/Remove(var/mob/living/carbon/M, var/special = 0)
M.AddLuminosity(-15)
set_light(-15)
..()
// Welding shield implant
+3 -3
View File
@@ -101,7 +101,7 @@ var/static/regex/multispin_words = regex("like a record baby|right round")
. = ..()
if(!IsAvailable())
if(world.time < cords.next_command)
owner << "<span class='notice'>You must wait [(cords.next_command - world.time)/10] seconds before Speaking again.</span>"
to_chat(owner, "<span class='notice'>You must wait [(cords.next_command - world.time)/10] seconds before Speaking again.</span>")
return
var/command = input(owner, "Speak with the Voice of God", "Command")
if(QDELETED(src) || QDELETED(owner))
@@ -112,12 +112,12 @@ var/static/regex/multispin_words = regex("like a record baby|right round")
/obj/item/organ/vocal_cords/colossus/can_speak_with()
if(world.time < next_command)
owner << "<span class='notice'>You must wait [(next_command - world.time)/10] seconds before Speaking again.</span>"
to_chat(owner, "<span class='notice'>You must wait [(next_command - world.time)/10] seconds before Speaking again.</span>")
return FALSE
if(!owner)
return FALSE
if(!owner.can_speak())
owner << "<span class='warning'>You are unable to speak!</span>"
to_chat(owner, "<span class='warning'>You are unable to speak!</span>")
return FALSE
return TRUE
@@ -25,13 +25,13 @@
var/obj/item/bodypart/BP = tool
if(ismonkey(target))// monkey patient only accept organic monkey limbs
if(BP.status == BODYPART_ROBOTIC || BP.animal_origin != MONKEY_BODYPART)
user << "<span class='warning'>[BP] doesn't match the patient's morphology.</span>"
to_chat(user, "<span class='warning'>[BP] doesn't match the patient's morphology.</span>")
return -1
if(BP.status != BODYPART_ROBOTIC)
organ_rejection_dam = 10
if(ishuman(target))
if(BP.animal_origin)
user << "<span class='warning'>[BP] doesn't match the patient's morphology.</span>"
to_chat(user, "<span class='warning'>[BP] doesn't match the patient's morphology.</span>")
return -1
var/mob/living/carbon/human/H = target
if(H.dna.species.id != BP.species_id)
@@ -40,12 +40,12 @@
if(target_zone == BP.body_zone) //so we can't replace a leg with an arm, or a human arm with a monkey arm.
user.visible_message("[user] begins to replace [target]'s [parse_zone(target_zone)].", "<span class ='notice'>You begin to replace [target]'s [parse_zone(target_zone)]...</span>")
else
user << "<span class='warning'>[tool] isn't the right type for [parse_zone(target_zone)].</span>"
to_chat(user, "<span class='warning'>[tool] isn't the right type for [parse_zone(target_zone)].</span>")
return -1
else if(target_zone == "l_arm" || target_zone == "r_arm")
user.visible_message("[user] begins to attach [tool] onto [target].", "<span class='notice'>You begin to attach [tool] onto [target]...</span>")
else
user << "<span class='warning'>[tool] must be installed onto an arm.</span>"
to_chat(user, "<span class='warning'>[tool] must be installed onto an arm.</span>")
return -1
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -32,9 +32,9 @@
if(objects > 0)
user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L]!", "<span class='notice'>You successfully remove [objects] objects from [H]'s [L.name].</span>")
else
user << "<span class='warning'>You find no objects embedded in [H]'s [L]!</span>"
to_chat(user, "<span class='warning'>You find no objects embedded in [H]'s [L]!</span>")
else
user << "<span class='warning'>You can't find [target]'s [parse_zone(user.zone_selected)], let alone any objects embedded in it!</span>"
to_chat(user, "<span class='warning'>You can't find [target]'s [parse_zone(user.zone_selected)], let alone any objects embedded in it!</span>")
return 1
+1 -1
View File
@@ -29,7 +29,7 @@
initiate(user, target, target_zone, tool, surgery)
return 1
else
user << "<span class='warning'>You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!</span>"
to_chat(user, "<span class='warning'>You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!</span>")
return 1 //returns 1 so we don't stab the guy in the dick or wherever.
if(iscyborg(user) && user.a_intent != INTENT_HARM) //to save asimov borgs a LOT of heartache
return 1