Adds the Aut'akh unathi (#5919)

* Base work for the unathi robot subspecies.

* Adds metabolism species, kidney vars, and the robot unathi organs.

* Moves some action buttons to organs, pretty much a bay port right now. Todo: the unathi and alien stuff should also go here.

* First autakh implant power.

* Fixes the organs action button this time.

* Finishes more implants, and interactions with flashs and vaurca.

* Prepare for great changes.

* Drops the real bomb, boss.

* He who fights with monsters.

* Far more work into augments and limb removing powers.

* Limb verbs should be good now.

* A LOT of work into the assited organ, allowing it to bleed and etc, as well adding a new chem that will stop bleeding in their case.

* Probably the last work on implants.

* Some extra touches.

* Some tweaks to the species.

* More fixes and adds kyre's sprites.

* More runtime fixes.

* Fixes the species name too.

* Fixes travis.

* Updates this file too to work with the new tools procs.

* Adds changelog

* Fixed changelog.

* Unathi hair and lore description.

* Some tweaks to this too.

* Locks away them for now, they will be released after we got all the events and etc done.

* Changes this chemical.

* Fixes an airlock runtime.

* Adds the non scan flag to the autakh, mostly due to some bizzare interactions with changelings and cloning.

* Organs removal changes; can't take out the organ if it is too damage.

* Restricts them back again.

* Robotic organs now have the proper icons and names.

* Adds sprites for their organs and some extra tweaks.

* Fixes this missing icon.

* emp should also now hurt assited organs.

* Tweaks more organ related things.

* Fixes the head not being properly set as well.

* Fixes their flags.

* fixes the flag for real this time.

* Poze's review.

* Changes the au'takh organ buttons to don't be animated.

* Helps with adminbus or something.

* Fowl's requested changes.

* Fixes a typo.

* Robotic limb's brute and burn mods are now controlled by the limb model.

* Fowl's changes once more.

* Stops some spam.

* More grammar.

* No eal.

* Skull's review.
This commit is contained in:
Alberyk
2019-01-23 16:27:44 -02:00
committed by Werner
parent b1742dd3f1
commit 76b743a986
280 changed files with 1651 additions and 874 deletions
+47 -29
View File
@@ -1,6 +1,7 @@
/obj/item/organ
name = "organ"
icon = 'icons/obj/surgery.dmi'
default_action_type = /datum/action/item_action/organ
var/dead_icon
var/mob/living/carbon/human/owner = null
var/status = 0
@@ -27,6 +28,11 @@
var/force_skintone = FALSE // If true, icon generation will skip is-robotic checks. Used for synthskin limbs.
var/list/organ_verbs //verb that are added when you gain the organ
var/robotic_name
var/robotic_sprite
/obj/item/organ/New(loc, ...)
..()
if (!initialized && istype(loc, /mob/living/carbon/human/dummy/mannequin))
@@ -54,6 +60,12 @@
return ..()
/obj/item/organ/proc/refresh_action_button()
return action
/obj/item/organ/attack_self(var/mob/user)
return (owner && loc == owner && owner == user)
/obj/item/organ/proc/update_health()
return
@@ -98,7 +110,7 @@
damage = max_damage
status |= ORGAN_DEAD
STOP_PROCESSING(SSprocessing, src)
if(dead_icon)
if(dead_icon && !robotic)
icon_state = dead_icon
if(owner && vital)
owner.death()
@@ -132,7 +144,7 @@
create_reagents(5)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
if(B && prob(40))
if(B && !(status & ORGAN_ROBOT) && prob(40))
reagents.remove_reagent("blood",0.1)
if (isturf(loc))
blood_splatter(src,B,1)
@@ -272,6 +284,10 @@
src.status &= ~ORGAN_CUT_AWAY
src.status |= ORGAN_ROBOT
src.status |= ORGAN_ASSISTED
if(robotic_name)
name = robotic_name
if(robotic_sprite)
icon_state = robotic_sprite
/obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc
robotize()
@@ -279,24 +295,33 @@
robotic = 1
min_bruised_damage = 15
min_broken_damage = 35
name = initial(name)
icon_state = initial(icon_state)
/obj/item/organ/emp_act(severity)
if(!(status & ORGAN_ROBOT))
if(!(status & ORGAN_ASSISTED))
return
var/organ_fragility = 0.5
if((status & ORGAN_ROBOT)) //fully robotic organs take the normal emp damage, assited ones only suffer half of it
organ_fragility = 1
switch (severity)
if (1.0)
take_damage(rand(7,20) * emp_coeff)
take_damage(rand(7,20) * emp_coeff * organ_fragility)
if (2.0)
take_damage(rand(3,7) * emp_coeff)
take_damage(rand(3,7) * emp_coeff * organ_fragility)
if(3.0)
take_damage(rand(3) * emp_coeff)
take_damage(rand(3) * emp_coeff * organ_fragility)
/obj/item/organ/proc/removed(var/mob/living/user)
if(!istype(owner))
return
action_button_name = null
owner.internal_organs_by_name[organ_tag] = null
owner.internal_organs_by_name -= organ_tag
owner.internal_organs_by_name -= null
@@ -340,13 +365,14 @@
transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"]
owner = target
action_button_name = initial(action_button_name)
src.forceMove(owner)
STOP_PROCESSING(SSprocessing, src)
target.internal_organs |= src
affected.internal_organs |= src
target.internal_organs_by_name[organ_tag] = src
if(robotic)
status |= ORGAN_ROBOT
robotize()
/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target)
@@ -358,34 +384,26 @@
target.update_eyes()
..()
/obj/item/organ/proc/bitten(mob/user)
/obj/item/organ/attack(var/mob/target, var/mob/user)
if(robotic)
if(robotic || !istype(target) || !istype(user) || (user != target && user.a_intent == I_HELP))
return ..()
if(alert("Do you really want to use this organ as food? It will be useless for anything else afterwards.",,"No.","Yes.") == "No.")
to_chat(user, "<span class='notice'>You successfully repress your cannibalistic tendencies.</span>")
return
user << "<span class='notice'>You take an experimental bite out of \the [src].</span>"
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
blood_splatter(src,B,1)
user.drop_from_inventory(src)
var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src))
O.name = name
O.icon = icon
O.icon_state = icon_state
// Pass over the blood.
O.appearance = src
reagents.trans_to(O, reagents.total_volume)
if(fingerprints) O.fingerprints = fingerprints.Copy()
if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy()
if(fingerprintslast) O.fingerprintslast = fingerprintslast
if(fingerprints)
O.fingerprints = fingerprints.Copy()
if(fingerprintshidden)
O.fingerprintshidden = fingerprintshidden.Copy()
if(fingerprintslast)
O.fingerprintslast = fingerprintslast
user.put_in_active_hand(O)
qdel(src)
/obj/item/organ/attack_self(mob/user as mob)
// Convert it to an edible form, yum yum.
if(!robotic && user.a_intent == "help" && user.zone_sel.selecting == "mouth")
bitten(user)
return
target.attackby(O, user)
+12 -12
View File
@@ -214,13 +214,6 @@
break
parent.update_damages()
/obj/item/organ/external/robotize()
..()
//robit limbs take reduced brute damage, but melt easier
brute_mod = 0.9
burn_mod = 1.1
/****************************************************
DAMAGE PROCS
****************************************************/
@@ -625,10 +618,10 @@ Note that amputating the affected organ does in fact remove the infection from t
if(!(W.can_autoheal() || (bicardose && inaprovaline))) //bicaridine and inaprovaline stop internal wounds from growing bigger with time, unless it is so small that it is already healing
W.open_wound(0.09 * wound_update_accuracy)
owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place.
if(prob(1 * wound_update_accuracy))
owner.custom_pain("You feel a stabbing pain in your [name]!",1)
if(!owner.reagents.has_reagent("coagulant", 2))
owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place.
if(prob(1 * wound_update_accuracy))
owner.custom_pain("You feel a stabbing pain in your [name]!",1)
// slow healing
var/heal_amt = 0
@@ -979,6 +972,9 @@ Note that amputating the affected organ does in fact remove the infection from t
if(R.paintable)
painted = 1
brute_mod = R.brute_mod
burn_mod = R.burn_mod
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
cannot_break = 1
get_icon()
@@ -987,6 +983,10 @@ Note that amputating the affected organ does in fact remove the infection from t
if(T)
T.robotize()
/obj/item/organ/external/mechassist()
..()
cannot_break = 0
/obj/item/organ/external/proc/robotize_advanced()
status |= ORGAN_ADV_ROBOT
for (var/obj/item/organ/external/T in children)
@@ -1109,7 +1109,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(status & ORGAN_DESTROYED && !is_stump())
. += "tear at [amputation_point] so severe that it hangs by a scrap of flesh"
if(status & ORGAN_ROBOT)
if(status & ORGAN_ASSISTED)
if(brute_dam)
switch(brute_dam)
if(0 to 20)
+1 -1
View File
@@ -15,7 +15,7 @@
s_tone = null
skin_color = null
hair_color = null
if(status & ORGAN_ROBOT && !(isipc(human)))
if(status & ORGAN_ROBOT && !(isipc(human)) && !(isautakh(human)))
return
if(species && human.species && species.name != human.species.name)
return
+13
View File
@@ -12,6 +12,8 @@
organ_tag = "heart"
parent_organ = "chest"
dead_icon = "heart-off"
robotic_name = "circulatory pump"
robotic_sprite = "heart-prosthetic"
/obj/item/organ/lungs
name = "lungs"
@@ -19,6 +21,8 @@
gender = PLURAL
organ_tag = "lungs"
parent_organ = "chest"
robotic_name = "gas exchange system"
robotic_sprite = "heart-prosthetic"
/obj/item/organ/lungs/process()
..()
@@ -44,6 +48,8 @@
gender = PLURAL
organ_tag = "kidneys"
parent_organ = "groin"
robotic_name = "prosthetic kidneys"
robotic_sprite = "kidneys-prosthetic"
/obj/item/organ/kidneys/process()
@@ -68,6 +74,8 @@
gender = PLURAL
organ_tag = "eyes"
parent_organ = "head"
robotic_name = "visual prosthesis"
robotic_sprite = "eyes-prosthetic"
var/list/eye_colour = list(0,0,0)
var/singular_name = "eye"
@@ -86,6 +94,9 @@
if(is_broken() && !oldbroken && owner && !owner.stat)
owner << "<span class='danger'>You go blind!</span>"
/obj/item/organ/eyes/proc/flash_act()
return
/obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var.
..()
if(!owner)
@@ -100,6 +111,8 @@
icon_state = "liver"
organ_tag = "liver"
parent_organ = "groin"
robotic_name = "toxin filter"
robotic_sprite = "liver-prosthetic"
/obj/item/organ/liver/process()
+13
View File
@@ -28,6 +28,8 @@ var/global/datum/robolimb/basic_robolimb
)
var/paintable = 0 //tired of istype exceptions. bullshirt to find, and by god do i know it after this project.
var/linked_frame = "Unbranded Frame" //which machine species this limb will create
var/brute_mod = 0.9 //how resistant is this mode to brute damage
var/burn_mod = 1.1 //how resistant is this mode to burn damage
/datum/robolimb/bishop
company = PROSTHETIC_BC
@@ -80,3 +82,14 @@ var/global/datum/robolimb/basic_robolimb
icon = 'icons/mob/human_races/r_human.dmi'
species_can_use = list("Human")
linked_frame = "Shell Frame"
/datum/robolimb/autakh
company = PROSTHETIC_AUTAKH
desc = "This limb has been designed by the Aut'akh sect, it was created to interact exclusively with their bodies and implants."
icon = 'icons/mob/human_races/r_autakh.dmi'
species_can_use = list("Aut'akh Unathi")
linked_frame = "Aut'akh Unathi"
unavailable_at_chargen = 1
paintable = 1
brute_mod = 1
burn_mod = 1
+463
View File
@@ -0,0 +1,463 @@
/obj/item/organ/external/head/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/head/autakh/Initialize()
mechassist()
. = ..()
/obj/item/organ/external/chest/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/chest/autakh/Initialize()
mechassist()
. = ..()
/obj/item/organ/external/groin/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/groin/autakh/Initialize()
mechassist()
. = ..()
/obj/item/organ/external/arm/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/arm/right/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/leg/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/leg/right/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/foot/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/foot/right/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/hand/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
/obj/item/organ/external/hand/right/autakh
dislocated = -1
encased = "support frame"
robotize_type = PROSTHETIC_AUTAKH
//internal organs
/obj/item/organ/kidneys/autakh
name = "toxin screen"
icon_state = "screen"
robotic = 1
robotic_name = null
robotic_sprite = null
/obj/item/organ/kidneys/autakh/Initialize()
mechassist()
. = ..()
/obj/item/organ/anchor
name = "soul anchor"
icon_state = "anchor"
organ_tag = "anchor"
parent_organ = "head"
robotic = 2
/obj/item/organ/anchor/Initialize()
robotize()
. = ..()
/obj/item/organ/eyes/autakh
name = "bionic eyeballs"
icon_state = "mk1eyes"
singular_name = "bionic eye"
action_button_name = "Toggle Bionic Eyes Sensors"
robotic_name = null
robotic_sprite = null
robotic = 2
var/static/list/hud_types = list(
"Disabled",
"Security",
"Medical")
var/selected_hud = "Disabled"
var/disabled = FALSE
/obj/item/organ/eyes/autakh/Initialize()
robotize()
. = ..()
/obj/item/organ/eyes/autakh/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "mk1eyes"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/eyes/autakh/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use your \the [src] in your current state!</span>")
return
if(disabled || is_broken())
to_chat(owner, "<span class='danger'>\The [src] shudders and sparks, unable to change its sensors!</span>")
return
owner.last_special = world.time + 100
var/choice = input("Select the Sensor Type.", "Bionic Eyes Sensors") as null|anything in hud_types
selected_hud = choice
/obj/item/organ/eyes/autakh/process()
..()
if(!owner)
return
if(disabled)
return
switch(selected_hud)
if("Security")
req_access = list(access_security)
if(allowed(owner))
process_sec_hud(owner, 1)
if("Medical")
req_access = list(access_medical)
if(allowed(owner))
process_med_hud(owner, 1)
/obj/item/organ/eyes/autakh/flash_act()
if(owner)
to_chat(owner, "<span class='notice'>\The [src]'s retinal overlays are overloaded by the strong light!</span>")
owner.eye_blind = 5
owner.eye_blurry = 5
spark(get_turf(owner), 3)
disabled = TRUE
selected_hud = "Disabled"
addtimer(CALLBACK(src, .proc/rearm), 40 SECONDS)
return
/obj/item/organ/eyes/autakh/emp_act(severity)
..()
disabled = TRUE
selected_hud = "Disabled"
addtimer(CALLBACK(src, .proc/rearm), 40 SECONDS)
/obj/item/organ/eyes/autakh/proc/rearm()
if(!disabled)
return
disabled = FALSE
if(owner)
to_chat(owner, "<span class='notice'>\The [src]'s retinal overlays clicks and shifts!</span>")
/obj/item/organ/adrenal
name = "adrenal management system"
icon_state = "ams"
organ_tag = "adrenal"
parent_organ = "chest"
robotic = 2
action_button_name = "Activate Adrenal Management System"
/obj/item/organ/adrenal/Initialize()
robotize()
. = ..()
/obj/item/organ/adrenal/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "ams"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/adrenal/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use \the [src] in your current state!</span>")
return
owner.last_special = world.time + 500
to_chat(owner, "<span class='notice'>\The [src] activates, releasing a stream of chemicals into your veins!</span>")
if(owner.reagents)
if(is_bruised())
owner.reagents.add_reagent("toxin", 10)
if(is_broken())
owner.reagents.add_reagent("toxin", 25)
return
owner.vessel.remove_reagent("blood",rand(15,30))
owner.adjustToxLoss(rand(5,25))
owner.reagents.add_reagent("paracetamol", 5)
owner.reagents.add_reagent("inaprovaline", 5)
/obj/item/organ/haemodynamic
name = "haemodynamic control system"
icon_state = "stabilizer"
organ_tag = "haemodynamic"
parent_organ = "chest"
robotic = 1
action_button_name = "Activate Haemodynamic Control System"
/obj/item/organ/haemodynamic/Initialize()
mechassist()
. = ..()
/obj/item/organ/haemodynamic/Initialize()
robotize()
. = ..()
/obj/item/organ/haemodynamic/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "stabilizer"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/haemodynamic/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use \the [src] in your current state!</span>")
return
owner.last_special = world.time + 500
owner.adjustNutritionLoss(300)
owner.adjustHydrationLoss(300)
if(is_broken())
owner.vessel.remove_reagent("blood",rand(50,75))
return
to_chat(owner, "<span class='notice'>\The [src] activates, releasing a stream of chemicals into your veins!</span>")
if(is_bruised())
owner.vessel.remove_reagent("blood",rand(25,50))
if(owner.reagents)
owner.reagents.add_reagent("coagulant", 15)
//limb implants
/obj/item/organ/external/hand/right/autakh/tool
name = "engineering grasper"
action_button_name = "Deploy Mechanical Combitool"
var/augment_type = /obj/item/combitool/robotic
/obj/item/organ/external/hand/right/autakh/tool/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "digitool"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/external/hand/right/autakh/tool/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use \the [src] in your current state!</span>")
return
if(owner.get_active_hand())
to_chat(owner, "<span class='danger'>You must empty your active hand before enabling your [src]!</span>")
return
if(is_broken())
to_chat(owner, "<span class='danger'>\The [src] is too damaged to be used!</span>")
return
if(is_bruised())
spark(get_turf(owner), 3)
owner.last_special = world.time + 100
var/obj/item/M = new augment_type(owner)
owner.put_in_active_hand(M)
owner.visible_message("<span class='notice'>\The [M] slides out of \the [owner]'s [src].</span>","<span class='notice'>You deploy \the [M]!</span>")
/obj/item/combitool/robotic
name = "robotic combitool"
desc = "An integrated combitool module."
icon_state = "digitool"
/obj/item/combitool/robotic/throw_at()
usr.drop_from_inventory(src)
/obj/item/combitool/robotic/dropped()
loc = null
qdel(src)
/obj/item/organ/external/hand/right/autakh/tool/mining
name = "engineering grasper"
action_button_name = "Deploy Mounted Drill"
augment_type = /obj/item/weapon/pickaxe/drill/integrated
/obj/item/organ/external/hand/right/autakh/mining/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "drill"
if(action.button)
action.button.UpdateIcon()
/obj/item/weapon/pickaxe/drill/integrated
name = "integrated mining drill"
/obj/item/weapon/pickaxe/drill/integrated/throw_at()
usr.drop_from_inventory(src)
/obj/item/weapon/pickaxe/drill/integrated/dropped()
loc = null
qdel(src)
/obj/item/organ/external/hand/right/autakh/medical
name = "medical grasper"
action_button_name = "Deploy Mounted Health Scanner"
/obj/item/organ/external/hand/right/autakh/medical/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "health"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/external/hand/right/autakh/medical/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use \the [src] in your current state!</span>")
return
if(is_broken())
to_chat(owner, "<span class='danger'>\The [src] is too damaged to be used!</span>")
return
if(is_bruised())
spark(get_turf(owner), 3)
var/obj/item/weapon/grab/G = owner.get_active_hand()
if(!istype(G))
to_chat(owner, "<span class='danger'>You must grab someone before trying to analyze their health!</span>")
return
owner.last_special = world.time + 50
if(ishuman(G.affecting))
var/mob/living/carbon/human/H = G.affecting
health_scan_mob(H, owner)
/obj/item/organ/external/hand/right/autakh/security
name = "security grasper"
action_button_name = "Activate Integrated Electroshock Weapon"
/obj/item/organ/external/hand/right/autakh/security/refresh_action_button()
. = ..()
if(.)
action.button_icon_state = "baton"
if(action.button)
action.button.UpdateIcon()
/obj/item/organ/external/hand/right/autakh/security/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, "<span class='danger'>\The [src] is still recharging!</span>")
return
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
to_chat(owner, "<span class='danger'>You can not use \the [src] in your current state!</span>")
return
if(is_broken())
to_chat(owner, "<span class='danger'>\The [src] is too damaged to be used!</span>")
return
if(is_bruised())
spark(get_turf(owner), 3)
var/obj/item/weapon/grab/G = owner.get_active_hand()
if(!istype(G))
to_chat(owner, "<span class='danger'>You must grab someone before trying to use your [src]!</span>")
return
if(owner.nutrition <= 200)
to_chat(owner, "<span class='danger'>Your energy reserves are too low to use your [src]!</span>")
return
if(ishuman(G.affecting))
var/mob/living/carbon/human/H = G.affecting
var/target_zone = check_zone(owner.zone_sel.selecting)
owner.last_special = world.time + 100
owner.adjustNutritionLoss(50)
if(owner.a_intent == I_HURT)
H.electrocute_act(10, owner, def_zone = target_zone)
else
H.stun_effect_act(0, 50, target_zone, owner)
owner.visible_message("<span class='danger'>[H] has been prodded with [src] by [owner]!</span>")
playsound(get_turf(owner), 'sound/weapons/Egloves.ogg', 50, 1, -1)
+24
View File
@@ -21,15 +21,39 @@
/obj/item/organ/eyes/vaurca
icon_state = "eyes_vaurca"
/obj/item/organ/eyes/vaurca/flash_act()
if(!owner)
return
to_chat(owner, "<span class='warning'>Your eyes burn with the intense light of the flash!</span>")
owner.Weaken(10)
take_damage(rand(10, 11))
if(damage > 12)
owner.eye_blurry += rand(3,6)
if(damage >= min_broken_damage)
owner.sdisabilities |= BLIND
else if(damage >= min_bruised_damage)
owner.eye_blind = 5
owner.eye_blurry = 5
owner.disabilities |= NEARSIGHTED
addtimer(CALLBACK(owner, /mob/.proc/reset_nearsighted), 100)
/obj/item/organ/kidneys/vaurca/robo
icon_state = "kidney_vaurca"
organ_tag = "mechanical kidneys"
robotic = 2
robotic_name = null
robotic_sprite = null
/obj/item/organ/liver/vaurca/robo
icon_state = "liver_vaurca"
organ_tag = "mechanical liver"
robotic = 2
robotic_name = null
robotic_sprite = null
/obj/item/organ/liver/vaurca
icon_state = "liver_vaurca"