mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-21 21:10:30 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user