diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 8c3982369ef..e7e6a941796 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -128,6 +128,7 @@ #define BP_AUG_AIR_ANALYZER "integrated air analyzer" #define BP_AUG_LANGUAGE "integrated language processor" #define BP_AUG_PSI "psionic receiver" +#define BP_AUG_CALF_OVERRIDE "calf overdrive" //Organ defines #define PROCESS_ACCURACY 10 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e35125ee228..6d8a4bd841b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -695,7 +695,7 @@ modules/mob/mob_movement.dm if you move you will be zoomed out modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. */ //Looking through a scope or binoculars should /not/ improve your periphereal vision. Still, increase viewsize a tiny bit so that sniping isn't as restricted to NSEW -/obj/item/proc/zoom(var/mob/M, var/tileoffset = 14, var/viewsize = 9) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view +/obj/item/proc/zoom(var/mob/M, var/tileoffset = 14, var/viewsize = 9, var/do_device_check = TRUE) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view if (!M) return @@ -714,7 +714,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. else if(!zoom && (global_hud.darkMask[1] in M.client.screen)) to_chat(M, SPAN_WARNING("Your visor gets in the way of looking through the [devicename]!")) cannotzoom = 1 - else if(!zoom && M.get_active_hand() != src) + else if(do_device_check && !zoom && M.get_active_hand() != src) to_chat(M, SPAN_WARNING("You are too distracted to look through the [devicename], perhaps if it was in your active hand this might work better.")) cannotzoom = 1 diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm index 482ac843225..c239e20893b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm @@ -140,26 +140,37 @@ sort_category = "Xenowear - Unathi" flags = GEAR_HAS_DESC_SELECTION -/datum/gear/augment/anchor +/datum/gear/augment/autakh display_name = "soul anchor" - description = "An implant that connects the Aut'akh to the Mesh." + description = "A rune inscribed mirror or piece of glass placed behind the eyes. Believed to be the 'Window to the Soul' and house the concentrated spirit of an individual." path = /obj/item/organ/internal/anchor cost = 1 whitelisted = list("Unathi") sort_category = "Xenowear - Unathi" -/datum/gear/augment/haemodynamic - display_name = "haemodynamic control system" - description = "An Aut'akh augment that allows the user to stabilize themselves." - path = /obj/item/organ/internal/augment/haemodynamic - cost = 4 - whitelisted = list("Unathi") - sort_category = "Xenowear - Unathi" +/datum/gear/augment/autakh/calf_override + display_name = "calf overdrive" + description = "An Aut'akh augment that allows the user to run at high speeds without the cost of stamina, causes damage to the lower body when used." + path = /obj/item/organ/internal/augment/calf_override -/datum/gear/augment/adrenal - display_name = "adrenal management system" - description = "A series of aut'akh mechanical stimulants and extra glands placed along the adrenal system. ." - path = /obj/item/organ/internal/augment/adrenal - cost = 4 - whitelisted = list("Unathi") - sort_category = "Xenowear - Unathi" +/datum/gear/augment/autakh/protein_valve + display_name = "protein breakdown valve" + description = "An aut'akh valve on the chest that releases a dangerous chemical into the stomach, forcing rapid digestion for immediate adrenal stimulation. Causes long-term damage." + path = /obj/item/organ/internal/augment/protein_valve + +/datum/gear/augment/autakh/venomous_rest + display_name = "venomous rest implant" + description = "An aut'akh compartment connected to the blood system that administers a traditional Unathi healing agent." + path = /obj/item/organ/internal/augment/venomous_rest + +/datum/gear/augment/autakh/eyes + display_name = "eye augment selection" + description = "A selection of au'takh eye augments." + path = /obj/item/organ/internal/augment/farseer_eye + +/datum/gear/augment/autakh/eyes/New() + ..() + var/augs = list() + augs["farseer eye"] = /obj/item/organ/internal/augment/farseer_eye + augs["eye flashlight"] = /obj/item/organ/internal/augment/eye_flashlight + gear_tweaks += new /datum/gear_tweak/path(augs) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 006790b4a79..da71e6c4b66 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -517,6 +517,11 @@ log_debug("Error: Species with special sprint mechanics has not overridden cost function.") return 0 + var/obj/item/organ/internal/augment/calf_override/C = H.internal_organs_by_name[BP_AUG_CALF_OVERRIDE] + if(C && !C.is_broken()) + cost = 0 + C.do_run_act() + var/remainder = 0 if (H.stamina > cost) H.stamina -= cost diff --git a/code/modules/organs/subtypes/autakh.dm b/code/modules/organs/subtypes/autakh.dm index 309692d72f7..10376bb14f0 100644 --- a/code/modules/organs/subtypes/autakh.dm +++ b/code/modules/organs/subtypes/autakh.dm @@ -67,192 +67,181 @@ //internal organs -/obj/item/organ/internal/kidneys/autakh - name = "toxin screen" - icon_state = "screen" - robotic = 1 - robotic_name = null - robotic_sprite = null - -/obj/item/organ/internal/kidneys/autakh/Initialize() - mechassist() - . = ..() - /obj/item/organ/internal/anchor name = "soul anchor" icon_state = "anchor" organ_tag = "anchor" parent_organ = BP_HEAD robotic = 2 + var/suffered_revelation = FALSE /obj/item/organ/internal/anchor/Initialize() robotize() . = ..() -/obj/item/organ/internal/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 +/obj/item/organ/internal/anchor/process() - var/static/list/hud_types = list( - "Disabled", - "Security", - "Medical") - - var/selected_hud = "Disabled" - var/disabled = FALSE - -/obj/item/organ/internal/eyes/autakh/Initialize() - robotize() - . = ..() - -/obj/item/organ/internal/eyes/autakh/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "mk1eyes" - if(action.button) - action.button.UpdateIcon() - -/obj/item/organ/internal/eyes/autakh/attack_self(var/mob/user) - . = ..() - - if(.) - - if(owner.last_special > world.time) - to_chat(owner, "\The [src] is still recharging!") - return - - if(owner.stat || owner.paralysis || owner.stunned || owner.weakened) - to_chat(owner, "You can not use your \the [src] in your current state!") - return - - if(disabled || is_broken()) - to_chat(owner, "\The [src] shudders and sparks, unable to change its sensors!") - 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/internal/eyes/autakh/process() ..() if(!owner) return - if(disabled) - return - switch(selected_hud) + if(!suffered_revelation) + if(prob(0.1)) + revelation() + suffered_revelation = TRUE - 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/internal/eyes/autakh/flash_act() - if(owner) - to_chat(owner, "Your [singular_name]'s retinal overlays are overloaded by the strong light!") - 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/internal/eyes/autakh/emp_act(severity) +/obj/item/organ/internal/anchor/emp_act(severity) ..() - disabled = TRUE - selected_hud = "Disabled" - addtimer(CALLBACK(src, .proc/rearm), 40 SECONDS) - -/obj/item/organ/internal/eyes/autakh/proc/rearm() - if(!disabled) - return - disabled = FALSE + revelation() +/obj/item/organ/internal/anchor/proc/revelation() if(owner) - to_chat(owner, "\The [singular_name]'s retinal overlays clicks and shifts!") + owner.hallucination += 20 -/obj/item/organ/internal/augment/adrenal - name = "adrenal management system" +/obj/item/organ/internal/augment/calf_override + name = "calf overdrive" icon_state = "ams" - organ_tag = "adrenal" + organ_tag = BP_AUG_CALF_OVERRIDE + parent_organ = BP_GROIN + +/obj/item/organ/internal/augment/calf_override/proc/do_run_act() + owner.apply_damage(1, BRUTE, BP_GROIN) + +/obj/item/organ/internal/augment/protein_valve + name = "protein breakdown valve" + icon_state = "screen" + organ_tag = "protein valve" parent_organ = BP_CHEST - action_button_icon = "ams" - action_button_name = "Activate Adrenal Management System" + action_button_icon = "screen" + action_button_name = "Activate Protein Breakdown Valve" cooldown = 300 activable = TRUE -/obj/item/organ/internal/augment/adrenal/attack_self(var/mob/user) +/obj/item/organ/internal/augment/protein_valve/attack_self(var/mob/user) . = ..() if(!.) return FALSE - to_chat(owner, "\The [src] activates, releasing a stream of chemicals into your veins!") - if(owner.reagents) + var/obj/item/organ/F = owner.internal_organs_by_name[BP_STOMACH] - owner.vessel.remove_reagent("blood",rand(15,30)) - owner.reagents.add_reagent("paracetamol", 5) - owner.reagents.add_reagent("norepinephrine", 5) + if(isnull(F)) + return FALSE -/obj/item/organ/internal/augment/adrenal/do_broken_act() - if(owner.reagents) - owner.reagents.add_reagent("toxin", 25) - return TRUE + if(F.is_broken()) + return FALSE -/obj/item/organ/internal/augment/adrenal/do_bruised_act() - if(owner.reagents) - owner.reagents.add_reagent("toxin", 10) - return FALSE + F.take_damage(10) + to_chat(owner, "\The [src] activates, releasing a stream of chemicals into your veins!") -/obj/item/organ/internal/augment/haemodynamic - name = "haemodynamic control system" + owner.reagents.add_reagent("adrenaline", 15) + +/obj/item/organ/internal/augment/venomous_rest + name = "venomous rest implant" icon_state = "stabilizer" - organ_tag = "haemodynamic" + organ_tag = "venomous rest" parent_organ = BP_CHEST - action_button_name = "Activate Haemodynamic Control System" + action_button_name = "Activate Venomous Rest Implant" action_button_icon = "stabilizer" cooldown = 300 activable = TRUE -/obj/item/organ/internal/augment/haemodynamic/attack_self(var/mob/user) +/obj/item/organ/internal/augment/venomous_rest/attack_self(var/mob/user) . = ..() if(!.) return FALSE - owner.adjustNutritionLoss(300) - owner.adjustHydrationLoss(300) - - to_chat(owner, "\The [src] activates, releasing a stream of chemicals into your veins!") - if(owner.reagents) - owner.reagents.add_reagent("coagulant", 15) + owner.reagents.add_reagent("norepinephrine", 10) + owner.reagents.add_reagent("tricordrazine", 10) + owner.reagents.add_reagent("stoxin", 15) + take_damage(15) + to_chat(owner, "\The [src] activates, releasing a stream of chemicals into your veins!") -/obj/item/organ/internal/augment/haemodynamic/do_broken_act() - if(owner.reagents) - owner.vessel.remove_reagent("blood",rand(50,75)) - return TRUE +/obj/item/organ/internal/augment/farseer_eye + name = "farseer eye" + icon_state = "hunterseye" + organ_tag = "farseer eye" + parent_organ = BP_HEAD + action_button_name = "Activate Farseer Eye" + action_button_icon = "hunterseye" + cooldown = 30 + activable = TRUE -/obj/item/organ/internal/augment/haemodynamic/do_bruised_act() - if(owner.reagents) - owner.vessel.remove_reagent("blood",rand(25,50)) - return FALSE +/obj/item/organ/internal/augment/farseer_eye/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + owner.visible_message("[user]'s eyes whirrs loudly as they focus ahead.") + take_damage(1) + zoom(owner,7,3, FALSE) + +/obj/item/organ/internal/augment/eye_flashlight + name = "eye flashlight" + icon_state = "mk1eyes" + organ_tag = "eye flashlight" + parent_organ = BP_HEAD + action_button_name = "Activate Eye Flashlight" + action_button_icon = "mk1eyes" + cooldown = 50 + activable = TRUE + var/online = FALSE + var/warning_level = 0 + +/obj/item/organ/internal/augment/eye_flashlight/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + if(!online) + set_light(3, 2, LIGHT_COLOR_RED, uv = 0, angle = LIGHT_WIDE) + owner.change_eye_color(250, 130, 130) + owner.update_eyes() + online = TRUE + addtimer(CALLBACK(src, .proc/add_warning), 5 MINUTES) + addtimer(CALLBACK(src, .proc/add_warning), 6 MINUTES) + else + turn_off() + +/obj/item/organ/internal/augment/eye_flashlight/proc/turn_off() + online = FALSE + set_light(0) + if(owner.client) + owner.change_eye_color(owner.client.prefs.r_eyes, owner.client.prefs.g_eyes, owner.client.prefs.b_eyes) + owner.update_eyes() + warning_level = 0 + +/obj/item/organ/internal/augment/eye_flashlight/emp_act(severity) + ..() + turn_off() + +/obj/item/organ/internal/augment/eye_flashlight/proc/add_warning() + if(online) + + warning_level = min(warning_level+1,2) + + if(warning_level >= 1) + to_chat(owner, SPAN_DANGER ("Your eyes are feeling warm!")) + +/obj/item/organ/internal/augment/eye_flashlight/process() + + ..() + + if(!owner) + return + + if(warning_level >= 2) + var/obj/item/organ/internal/eyes/E = owner.get_eyes() + if(!E) + return + E.take_damage(1) //limb implants diff --git a/html/changelogs/alberyk-autakhaugs.yml b/html/changelogs/alberyk-autakhaugs.yml new file mode 100644 index 00000000000..4d8deb4c6ae --- /dev/null +++ b/html/changelogs/alberyk-autakhaugs.yml @@ -0,0 +1,6 @@ +author: Alberyk + +delete-after: True + +changes: + - tweak: "Reworked aut'akh augments." \ No newline at end of file diff --git a/icons/obj/action_buttons/organs.dmi b/icons/obj/action_buttons/organs.dmi index 0db0a83f09d..3895aee651c 100644 Binary files a/icons/obj/action_buttons/organs.dmi and b/icons/obj/action_buttons/organs.dmi differ