Translator augment (#18905)

Adds an augmented translator to the game, with which the user can
understand all human languages. I did not add a translator from xeno
languages, as it would have been very strong, given the difficulty of
translation and the peculiarities of their languages.

I have decomposed the original augment file to improve readability and
code handling. Hopefully this won't cause trouble in the future. (Sorry,
but an 800+ line file is a very large file.)
This commit is contained in:
SidVeld
2024-04-17 09:45:58 +00:00
committed by GitHub
parent 952036dbc0
commit 63b56177e6
37 changed files with 1000 additions and 882 deletions
-842
View File
@@ -1,842 +0,0 @@
/obj/item/organ/internal/augment
name = "augment"
icon = 'icons/obj/organs/augments.dmi'
icon_state = "augment"
parent_organ = BP_CHEST
organ_tag = "augment"
robotic = ROBOTIC_MECHANICAL
emp_coeff = 2
is_augment = TRUE
species_restricted = list(SPECIES_HUMAN,SPECIES_HUMAN_OFFWORLD,
SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI,
SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_SKRELL_AXIORI, SPECIES_IPC, SPECIES_IPC_G1,
SPECIES_IPC_G2, SPECIES_IPC_XION,
SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL)
robotic_sprite = FALSE
var/cooldown = 150
var/action_button_icon = "augment"
var/activable = FALSE
var/bypass_implant = FALSE
var/supports_limb = FALSE // if true, will make parent limb not count as broken, as long as it's not bruised (40%) and not broken (0%)
/obj/item/organ/internal/augment/Initialize()
robotize()
. = ..()
/obj/item/organ/internal/augment/refresh_action_button()
. = ..()
if(.)
if(activable)
action.button_icon_state = action_button_icon
if(action.button)
action.button.update_icon()
/obj/item/organ/internal/augment/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, SPAN_WARNING("\The [src] is still recharging!"))
return FALSE
if(use_check_and_message(owner))
return FALSE
if(is_bruised())
if(do_bruised_act())
return FALSE
if(is_broken())
if(do_broken_act())
return FALSE
if(!bypass_implant)
for (var/obj/item/implant/anti_augment/I in owner)
if (I.implanted)
return FALSE
owner.last_special = world.time + cooldown
return TRUE
/obj/item/organ/internal/augment/proc/do_broken_act()
spark(get_turf(owner), 3)
return TRUE
/obj/item/organ/internal/augment/proc/do_bruised_act()
spark(get_turf(owner), 3)
return FALSE
/obj/item/organ/internal/augment/timepiece
name = "integrated timepiece"
icon_state = "augment-clock"
parent_organ = BP_HEAD
action_button_name = "Activate Integrated Timepiece"
activable = TRUE
organ_tag = BP_AUG_TIMEPIECE
action_button_icon = "augment-clock"
cooldown = 10
/obj/item/organ/internal/augment/timepiece/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
to_chat(owner, SPAN_NOTICE("Hello [user], it is currently: '[worldtime2text()]'. Today's date is '[time2text(world.time, "Month DD")]. [GLOB.game_year]'. Have a lovely day."))
if (evacuation_controller.get_status_panel_eta())
to_chat(owner, SPAN_WARNING("Notice: You have one (1) scheduled flight, ETA: [evacuation_controller.get_status_panel_eta()]."))
/obj/item/organ/internal/augment/tool
name = "retractable widget"
action_button_name = "Deploy Widget"
cooldown = 10
activable = TRUE
var/obj/item/augment_type
var/aug_slot = slot_r_hand
/obj/item/organ/internal/augment/tool/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
if(!augment_type)
return FALSE
if (locate(augment_type) in owner)
var/obj/slot_item = locate(augment_type) in owner
owner.drop_from_inventory(slot_item)
qdel(slot_item)
owner.visible_message(SPAN_NOTICE("\The [slot_item] slides back into \the [owner]'s [owner.organs_by_name[parent_organ]]."), SPAN_NOTICE("You retract \the [slot_item]!"))
return
if (owner.get_equipped_item(aug_slot))
to_chat(owner, SPAN_WARNING("Something is stopping you from enabling your [src]!"))
return
var/obj/item/M = new augment_type(owner)
M.canremove = FALSE
M.item_flags |= ITEM_FLAG_NO_MOVE
owner.equip_to_slot(M, aug_slot)
var/obj/item/organ/O = owner.organs_by_name[parent_organ]
//If we didn't found the organ, it might be a sub-organ, search for it
if(!O)
for(var/external_organ_key in owner.organs_by_name)
var/obj/item/organ/external/external_organ = owner.organs_by_name[external_organ_key]
for(var/obj/item/organ/internal/internal_organ in external_organ.internal_organs)
if(internal_organ.organ_tag == parent_organ)
O = internal_organ
break
//If we have found it, print the message, otherwise don't bother, it would just runtime
if(O)
owner.visible_message(SPAN_NOTICE("\The [M] slides out of \the [owner]'s [O.name]."), SPAN_NOTICE("You deploy \the [M]!"))
/obj/item/organ/internal/augment/tool/combitool
name = "retractable combitool"
icon_state = "augment-tool"
action_button_name = "Deploy Combitool"
action_button_icon = "augment-tool"
parent_organ = BP_R_HAND
organ_tag = BP_AUG_TOOL
augment_type = /obj/item/combitool/robotic
/obj/item/organ/internal/augment/tool/combitool/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/tool/drill
name = "integrated drill"
icon_state = "drill"
action_button_name = "Deploy Drill"
action_button_icon = "drill"
parent_organ = BP_R_HAND
organ_tag = BP_AUG_DRILL
augment_type = /obj/item/pickaxe/drill/integrated
/obj/item/organ/internal/augment/tool/drill/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/tool/combitool/lighter
name = "integrated lighter"
icon_state = "lighter-aug"
action_button_name = "Deploy Lighter"
action_button_icon = "lighter-aug"
organ_tag = BP_AUG_LIGHTER
augment_type = /obj/item/flame/lighter/zippo/augment
/obj/item/organ/internal/augment/tool/combitool/lighter/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/tool/pen
name = "retractable pen"
icon_state = "combipen"
action_button_name = "Deploy Pen"
action_button_icon = "combipen"
organ_tag = BP_AUG_PEN
parent_organ = BP_R_HAND
augment_type = /obj/item/pen/augment
/obj/item/organ/internal/augment/tool/pen/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/tool/crayon
name = "integrated crayon"
icon_state = "crayonaugment"
action_button_name = "Deploy Crayon"
action_button_icon = "crayonaugment"
organ_tag = BP_AUG_CRAYON
parent_organ = BP_R_HAND
augment_type = /obj/item/pen/crayon/augment
/obj/item/organ/internal/augment/tool/crayon/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/tool/cyborg_analyzer
name = "retractable cyborg analyzer"
icon_state = "robotanalyzer"
action_button_name = "Deploy Analyzer"
action_button_icon = "augment-tool"
organ_tag = BP_AUG_CYBORG_ANALYZER
parent_organ = BP_R_HAND
augment_type = /obj/item/device/robotanalyzer/augment
/obj/item/organ/internal/augment/tool/cyborg_analyzer/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
/obj/item/organ/internal/augment/health_scanner
name = "integrated health scanner"
action_button_name = "Activate Health Scanner"
action_button_icon = "health"
organ_tag = BP_AUG_HEALTHSCAN
activable = TRUE
cooldown = 8
/obj/item/organ/internal/augment/health_scanner/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
health_scan_mob(owner, owner, TRUE, TRUE)
/obj/item/organ/internal/augment/tesla
name = "tesla spine"
icon_state = "tesla_spine"
organ_tag = BP_AUG_TESLA
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
species_restricted = list(SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI)
var/max_charges = 1
var/actual_charges = 0
var/recharge_time = 5 //this is in minutes
/obj/item/organ/internal/augment/tesla/proc/check_shock()
if(is_broken())
return FALSE
if(is_bruised())
if(prob(50))
return FALSE
if(actual_charges >= max_charges)
return FALSE
else
do_tesla_act()
return TRUE
/obj/item/organ/internal/augment/tesla/proc/do_tesla_act()
if(owner)
to_chat(owner, FONT_LARGE(SPAN_DANGER("You feel your [src.name] surge with energy!")))
spark(get_turf(owner), 3)
addtimer(CALLBACK(src, PROC_REF(disarm)), recharge_time MINUTES)
if(is_bruised() && prob(50))
owner.electrocute_act(40, owner)
/obj/item/organ/internal/augment/tesla/proc/disarm()
if(actual_charges <= 0)
return
actual_charges = min(actual_charges - 1, max_charges)
if(actual_charges > 0)
addtimer(CALLBACK(src, PROC_REF(disarm)), recharge_time MINUTES)
if(is_broken())
owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!"))
playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1)
tesla_zap(owner, 7, 1500)
/obj/item/organ/internal/augment/tesla/advanced
name = "advanced tesla spine"
max_charges = 15
cooldown = 50
emp_coeff = 1
action_button_icon = "tesla_spine"
action_button_name = "Activate Tesla Coil"
activable = TRUE
/obj/item/organ/internal/augment/tesla/advanced/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!"))
playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1)
tesla_zap(owner, 7, 1500)
/obj/item/organ/internal/augment/tesla/massive
name = "massive tesla spine"
icon_state = "tesla_spine"
organ_tag = BP_AUG_TESLA
on_mob_icon = 'icons/mob/human_races/tesla_body_augments.dmi'
species_restricted = list(SPECIES_TAJARA_TESLA_BODY)
/obj/item/organ/internal/augment/eye_sensors
name = "integrated HUD sensors"
icon_state = "augment_eyes"
cooldown = 25
activable = TRUE
organ_tag = BP_AUG_EYE_SENSORS
parent_organ = BP_HEAD
action_button_name = "Toggle Security Sensors"
var/active_hud = "disabled"
var/static/list/hud_types = list(
"disabled",
SEC_HUDTYPE,
MED_HUDTYPE)
var/selected_hud = "disabled"
/obj/item/organ/internal/augment/eye_sensors/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
/obj/item/organ/internal/augment/eye_sensors/process()
..()
if(!owner)
return
/obj/item/organ/internal/augment/eye_sensors/emp_act(severity)
. = ..()
var/obj/item/organ/internal/eyes/E = owner.get_eyes()
if(!E)
return
E.take_damage(5)
/obj/item/organ/internal/augment/eye_sensors/proc/check_hud(var/hud)
return (hud == active_hud)
/obj/item/organ/internal/augment/eye_sensors/security
name = "integrated security HUD sensors"
action_button_name = "Toggle Security Sensors"
/obj/item/organ/internal/augment/eye_sensors/security/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = SEC_HUDTYPE
to_chat(user, "You activate \the [src].")
else
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
/obj/item/organ/internal/augment/eye_sensors/security/process()
..()
switch(selected_hud)
if(SEC_HUDTYPE)
req_access = list(ACCESS_SECURITY)
if(allowed(owner))
active_hud = "security"
process_sec_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
/obj/item/organ/internal/augment/eye_sensors/medical
name = "integrated medical HUD sensors"
action_button_name = "Toggle Medical Sensors"
/obj/item/organ/internal/augment/eye_sensors/medical/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = MED_HUDTYPE
to_chat(user, "You activate \the [src].")
else
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
/obj/item/organ/internal/augment/eye_sensors/medical/process()
..()
switch(selected_hud)
if(MED_HUDTYPE)
req_access = list(ACCESS_MEDICAL)
if(allowed(owner))
active_hud = "medical"
process_med_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
/obj/item/organ/internal/augment/cyber_hair
name = "synthetic hair extensions"
cooldown = 20
action_button_icon = "cyber_hair"
organ_tag = BP_AUG_HAIR
activable = TRUE
action_button_name = "Activate Synthetic Hair Extensions"
species_restricted = list(SPECIES_HUMAN,SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_IPC_SHELL)
/obj/item/organ/internal/augment/cyber_hair/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
owner.visible_message(SPAN_NOTICE("\The [owner]'s hair begins to rapidly shift in shape and length."))
owner.change_appearance(APPEARANCE_ALL_HAIR, owner)
/obj/item/organ/internal/augment/suspension
name = "calf suspension"
icon_state = "suspension"
organ_tag = BP_AUG_SUSPENSION
parent_organ = BP_GROIN
min_broken_damage = 20
max_damage = 20
var/suspension_mod = 0.8
var/jump_bonus = 1
/obj/item/organ/internal/augment/suspension/advanced
name = "advanced calf suspension"
min_broken_damage = 50
max_damage = 50
suspension_mod = 0
/obj/item/organ/internal/augment/taste_booster
name = "taste booster"
organ_tag = BP_AUG_TASTE_BOOSTER
parent_organ = BP_HEAD
var/new_taste = TASTE_SENSITIVE //this will replace the species' taste var
/obj/item/organ/internal/augment/taste_booster/dull
name = "taste duller"
new_taste = TASTE_DULL
/obj/item/organ/internal/augment/fuel_cell
name = "integrated fuel cell"
organ_tag = BP_AUG_FUEL_CELL
/obj/item/organ/internal/augment/ethanol_burner
name = "integrated ethanol burner"
organ_tag = BP_AUG_ETHANOL_BURNER
// Geeves!
/obj/item/organ/internal/augment/language
name = "language processor"
desc = "An augment installed into the head that interfaces with the user's neural interface, intercepting and assisting language faculties."
organ_tag = BP_AUG_LANGUAGE
parent_organ = BP_HEAD
var/list/augment_languages = list() // a list of languages that this augment will add. add your language to this
var/list/added_languages = list() // a list of languages that get added when it's installed. used to remove languages later. don't touch this.
/obj/item/organ/internal/augment/language/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected)
. = ..()
for(var/language in augment_languages)
if(!(language in target.languages))
target.add_language(language)
added_languages += language
/obj/item/organ/internal/augment/language/removed(var/mob/living/carbon/human/target, mob/living/user)
for(var/language in added_languages)
target.remove_language(language)
added_languages = list()
..()
/obj/item/organ/internal/augment/language/emp_act()
. = ..()
for(var/language in added_languages)
if(prob(25))
owner.remove_language(language)
owner.set_default_language(pick(owner.languages))
/obj/item/organ/internal/augment/language/klax
name = "K'laxan language processor"
augment_languages = list(LANGUAGE_UNATHI)
species_restricted = list(SPECIES_VAURCA_BREEDER, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_WARFORM, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_WORKER)
/obj/item/organ/internal/augment/language/cthur
name = "C'thur language processor"
augment_languages = list(LANGUAGE_SKRELLIAN)
species_restricted = list(SPECIES_VAURCA_BREEDER, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_WARFORM, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_WORKER)
/obj/item/organ/internal/augment/language/mikuetz
name = "Mi'kuetz language processor"
augment_languages = list(LANGUAGE_AZAZIBA)
species_restricted = list(SPECIES_VAURCA_BREEDER, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_WARFORM, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_WORKER)
/obj/item/organ/internal/augment/language/zino
name = "Zino language processor"
augment_languages = list(LANGUAGE_GUTTER)
species_restricted = list(SPECIES_VAURCA_BREEDER, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_WARFORM, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_WORKER)
/obj/item/organ/internal/augment/language/eridani
name = "Eridani language processor"
augment_languages = list(LANGUAGE_TRADEBAND)
species_restricted = list(SPECIES_VAURCA_BREEDER, SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_WARFORM, SPECIES_VAURCA_WARRIOR, SPECIES_VAURCA_WORKER)
/obj/item/organ/internal/augment/language/zeng
name = "Zeng-Hu Nral'malic language processor"
augment_languages = list(LANGUAGE_SKRELLIAN)
/obj/item/organ/internal/augment/gustatorial
name = "gustatorial centre"
action_button_name = "Activate Gustatorial Centre (tongue)"
action_button_icon = "augment"
organ_tag = BP_AUG_GUSTATORIAL
parent_organ = BP_HEAD
activable = TRUE
cooldown = 8
var/taste_sensitivity = TASTE_NORMAL
var/action_verb = "samples"
var/self_action_verb = "sample"
/obj/item/organ/internal/augment/gustatorial/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
var/obj/item/reagent_containers/food/F = user.get_active_hand()
if(istype(F))
if(!F.is_open_container())
to_chat(user, SPAN_WARNING("\The [F] is closed!"))
return
user.visible_message("<b>[user]</b> [action_verb] \the [F].", SPAN_NOTICE("You [self_action_verb] \the [F]."))
to_chat(user, SPAN_NOTICE("\The [src] reports that \the [F] tastes like: [F.reagents.generate_taste_message(user, taste_sensitivity)]"))
else
var/list/tastes = list("Hypersensitive" = TASTE_HYPERSENSITIVE, "Sensitive" = TASTE_SENSITIVE, "Normal" = TASTE_NORMAL, "Dull" = TASTE_DULL, "Numb" = TASTE_NUMB)
var/taste_choice = input(user, "How well do you want to taste?", "Taste Sensitivity", "Normal") as null|anything in tastes
if(taste_choice)
to_chat(user, SPAN_NOTICE("\The [src] will now output taste as if you were <b>[taste_choice]</b>."))
taste_sensitivity = tastes[taste_choice]
/obj/item/organ/internal/augment/gustatorial/hand
parent_organ = BP_R_HAND
action_button_name = "Activate Gustatorial Centre (hand)"
action_verb = "sticks their finger in"
self_action_verb = "stick your finger in"
/obj/item/organ/internal/augment/gustatorial/hand/left
parent_organ = BP_L_HAND
/obj/item/organ/internal/augment/synthetic_cords
name = "synthetic vocal cords"
desc = "An array of vocal cords loaded into an augment kit, allowing easy installation by a skilled technician."
organ_tag = BP_AUG_CORDS
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/synthetic_cords/voice
desc = "An array of vocal cords. These appears to have been modified with a specific accent."
organ_tag = BP_AUG_ACC_CORDS
var/accent = ACCENT_TTS
/obj/item/organ/internal/augment/synthetic_cords/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected)
. = ..()
target.sdisabilities &= ~MUTE
/obj/item/organ/internal/augment/synthetic_cords/removed(var/mob/living/carbon/human/target, mob/living/user)
target.sdisabilities |= MUTE
..()
/obj/item/organ/internal/augment/cochlear
name = "cochlear implant"
desc = "A synthetic replacement for the structures within the ear, allowing the user to hear without requiring external tools."
organ_tag = BP_AUG_COCHLEAR
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/psi
name = "psionic receiver"
desc = "An augment installed into the head that functions as a surrogate for a missing zona bovinae, also functioning as a filter for the psionically-challenged."
organ_tag = BP_AUG_PSI
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/memory_inhibitor
name = "memory inhibitor"
desc = "A Zeng Hu implant that allows one to have control over their memories, allowing you to set a timer and remove any memories developed within it. This is most popular in Zeng Hu labs within Eridani."
icon_state = "memory_inhibitor"
organ_tag = BP_AUG_MEMORY
parent_organ = BP_HEAD
activable = TRUE
cooldown = 20
action_button_icon = "memory_inhibitor"
action_button_name = "Activate Memory Inhibitor"
var/ready_to_erase = FALSE
/obj/item/organ/internal/augment/memory_inhibitor/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
if(!ready_to_erase)
to_chat(owner, SPAN_NOTICE("Your memories following this point will be deleted on the following activation."))
ready_to_erase = TRUE
else
to_chat(owner, SPAN_WARNING("You do not recall the events since the last time you activated your memory inhibitor!"))
ready_to_erase = FALSE
/obj/item/organ/internal/augment/memory_inhibitor/do_broken_act()
if(owner)
to_chat(owner, SPAN_WARNING("You forgot everything that happened today!"))
return TRUE
/obj/item/organ/internal/augment/memory_inhibitor/emp_act(severity)
. = ..()
if(prob(25))
do_broken_act()
/obj/item/organ/internal/augment/emotional_manipulator
name = "emotional manipulator"
desc = "A Zeng Hu brain implant to manipulate the brain's chemicals to induce a calming or happy feeling. This is one of the most popular implants across the company."
icon_state = "emotional_manipulator"
organ_tag = BP_AUG_EMOTION
parent_organ = BP_HEAD
action_button_name = "Activate Emotional Manipulator"
activable = TRUE
action_button_icon = "emotional_manipulator"
cooldown = 10
var/set_emotion = "Disabled"
var/last_emotion = 0
var/list/possible_emotions = list(
"Disabled",
"Happiness",
"Calmness")
/obj/item/organ/internal/augment/emotional_manipulator/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
var/choice = input("Select the Emotional Choice.", "Emotional Manipulator") as null|anything in capitalize_list(possible_emotions)
set_emotion = lowertext(choice)
/obj/item/organ/internal/augment/emotional_manipulator/process()
..()
if(!owner)
return
if(world.time > (last_emotion + 5 MINUTES))
switch(set_emotion)
if("happiness")
to_chat(owner, SPAN_GOOD("You feel happy."))
if("calmness")
to_chat(owner, SPAN_GOOD("You feel calm."))
last_emotion = world.time
if(is_broken())
do_broken_act()
/obj/item/organ/internal/augment/emotional_manipulator/do_broken_act()
if(owner)
owner.hallucination += 20
return TRUE
/obj/item/organ/internal/augment/enhanced_vision
name = "vision enhanced retinas"
desc = "Zeng Hu implants given to EMTs to assist with finding the injured. These eye implants allow one to see further than you normally could."
icon_state = "enhanced_vision"
organ_tag = BP_AUG_ENCHANED_VISION
parent_organ = BP_HEAD
action_button_name = "Activate Vision Enhanced Retinas"
action_button_icon = "enhanced_vision"
cooldown = 30
activable = TRUE
/obj/item/organ/internal/augment/enhanced_vision/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
zoom(owner, 7, 7, FALSE, FALSE)
owner.visible_message(zoom ? "<b>[owner]</b>'s pupils narrow..." : "<b>[owner]</b>'s pupils return to normal.", range = 3)
/obj/item/organ/internal/augment/enhanced_vision/emp_act(severity)
. = ..()
var/obj/item/organ/internal/eyes/E = owner.get_eyes()
if(!E)
return
E.take_damage(5)
/obj/item/organ/internal/augment/sightlights
name = "ocular installed sightlights "
desc = "Designed to assist medical personnel in darker areas or places experiencing periodic power issues, Sightlights will allow one to be able to use their eyes as a flashlight."
icon_state = "sightlights"
organ_tag = BP_AUG_SIGHTLIGHTS
parent_organ = BP_HEAD
action_button_name = "Activate Ocular Installed Sightlights "
action_button_icon = "sightlights"
cooldown = 30
activable = TRUE
var/lights_on = FALSE
/obj/item/organ/internal/augment/sightlights/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
lights_on = !lights_on
if(lights_on)
set_light(5, 2, LIGHT_COLOR_TUNGSTEN, uv = 0, angle = LIGHT_WIDE)
else
set_light(0)
/obj/item/organ/internal/augment/sightlights/emp_act(severity)
. = ..()
set_light(0)
/obj/item/organ/internal/augment/sightlights/take_damage(var/amount, var/silent = 0)
. = ..()
set_light(0)
/obj/item/organ/internal/augment/sightlights/take_internal_damage(var/amount, var/silent = 0)
. = ..()
set_light(0)
/obj/item/organ/internal/augment/zenghu_plate
name = "zeng-hu veterancy plate "
desc = " A clear sign of Zeng-Hu's best, this plate bearing the company's symbol is installed on those who prove themselves in the hyper-competitive environment."
icon_state = "zenghu_plate"
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/augments_external.dmi'
)
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/head_fluff
name = "head augmentation"
desc = "An augment installed inside the head of someone."
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/head_fluff/chest_fluff
name = "chest augmentation"
desc = "An augment installed inside the chest of someone."
parent_organ = BP_CHEST
/obj/item/organ/internal/augment/head_fluff/rhand_fluff
name = "right hand augmentation"
desc = "An augment installed inside the right hand of someone."
parent_organ = BP_R_HAND
/obj/item/organ/internal/augment/head_fluff/lhand_fluff
name = "left hand augmentation"
desc = "An augment installed inside the left hand of someone."
parent_organ = BP_L_HAND
/obj/item/organ/internal/augment/head_fluff/die()
..()
if (owner)
to_chat(owner, SPAN_DANGER("You sense your [name] stops functioning!"))
/obj/item/organ/internal/augment/head_fluff/process()
..()
if (is_broken() && !ORGAN_DEAD)
if (prob(5))
to_chat(owner, SPAN_WARNING("You sense your [name] isn't working right!"))
/obj/item/organ/internal/augment/head_fluff/removed()
if (owner)
to_chat(owner, SPAN_DANGER("You lose your connection with \the [name]!"))
..()
/obj/item/organ/internal/augment/tool/correctivelens
name = "corrective lenses"
icon_state = "augment-tool"
action_button_name = "Deploy Corrective Lenses"
action_button_icon = "augment-tool"
parent_organ = BP_EYES
organ_tag = BP_AUG_CORRECTIVE_LENS
augment_type = /obj/item/clothing/glasses/aug/glasses
aug_slot = slot_glasses
/obj/item/organ/internal/augment/tool/correctivelens/glare_dampener
name = "glare dapmeners"
icon_state = "augment-tool"
action_button_name = "Deploy Glare Dampeners"
organ_tag = BP_AUG_GLARE_DAMPENER
augment_type = /obj/item/clothing/glasses/aug/welding
/obj/item/organ/internal/augment/eye_sensors/phalanx
name = "phalanx facial plate"
desc = "This modular face plate accommodates a wide array of cybernetic augmentations, enabling seamless integration with Phalanx's transhumanist doctrine. \
Enhanced sensory overlays and HUDs offer Phalanx members superior situational awareness and promote a sense of hive-thinking."
icon_state = "vaurca_plate"
action_button_name = "Toggle HUD"
action_button_icon = "vaurca_plate"
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/augments_external.dmi',
BODYTYPE_VAURCA = 'icons/mob/species/vaurca/augments_external.dmi'
)
/obj/item/organ/internal/augment/eye_sensors/phalanx/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = SEC_HUDTYPE
to_chat(user, "You activate \the [src] security HUD.")
return
if(selected_hud == SEC_HUDTYPE)
selected_hud = MED_HUDTYPE
to_chat(user, "You activate \the [src] medical HUD.")
return
if(selected_hud == MED_HUDTYPE)
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
return
/obj/item/organ/internal/augment/eye_sensors/phalanx/process()
..()
switch(selected_hud)
if(SEC_HUDTYPE)
req_access = list(ACCESS_SECURITY)
if(allowed(owner))
active_hud = "security"
process_sec_hud(owner, 1)
else
active_hud = "disabled"
if(MED_HUDTYPE)
req_access = list(ACCESS_MEDICAL)
if(allowed(owner))
active_hud = "medical"
process_med_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
@@ -0,0 +1,84 @@
/obj/item/organ/internal/augment
name = "augment"
icon = 'icons/obj/organs/augments.dmi'
icon_state = "augment"
parent_organ = BP_CHEST
organ_tag = "augment"
robotic = ROBOTIC_MECHANICAL
emp_coeff = 2
is_augment = TRUE
species_restricted = list(
SPECIES_HUMAN_OFFWORLD,
SPECIES_HUMAN,
SPECIES_IPC_BISHOP,
SPECIES_IPC_G1,
SPECIES_IPC_G2,
SPECIES_IPC_SHELL,
SPECIES_IPC_XION,
SPECIES_IPC_ZENGHU,
SPECIES_IPC,
SPECIES_SKRELL_AXIORI,
SPECIES_SKRELL,
SPECIES_TAJARA_MSAI,
SPECIES_TAJARA_ZHAN,
SPECIES_TAJARA,
SPECIES_UNATHI,
)
robotic_sprite = FALSE
var/cooldown = 150
var/action_button_icon = "augment"
var/activable = FALSE
var/bypass_implant = FALSE
/// If true, will make parent limb not count as broken, as long as it's not bruised (40%) and not broken (0%)
var/supports_limb = FALSE
/obj/item/organ/internal/augment/Initialize()
robotize()
. = ..()
/obj/item/organ/internal/augment/refresh_action_button()
. = ..()
if(.)
if(activable)
action.button_icon_state = action_button_icon
if(action.button)
action.button.update_icon()
/obj/item/organ/internal/augment/attack_self(var/mob/user)
. = ..()
if(.)
if(owner.last_special > world.time)
to_chat(owner, SPAN_WARNING("\The [src] is still recharging!"))
return FALSE
if(use_check_and_message(owner))
return FALSE
if(is_bruised())
if(do_bruised_act())
return FALSE
if(is_broken())
if(do_broken_act())
return FALSE
if(!bypass_implant)
for (var/obj/item/implant/anti_augment/I in owner)
if (I.implanted)
return FALSE
owner.last_special = world.time + cooldown
return TRUE
/obj/item/organ/internal/augment/proc/do_broken_act()
spark(get_turf(owner), 3)
return TRUE
/obj/item/organ/internal/augment/proc/do_bruised_act()
spark(get_turf(owner), 3)
return FALSE
@@ -0,0 +1,52 @@
/obj/item/organ/internal/augment/tool
name = "retractable widget"
action_button_name = "Deploy Widget"
cooldown = 10
activable = TRUE
var/obj/item/augment_type
var/aug_slot = slot_r_hand
/obj/item/organ/internal/augment/tool/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
if(!augment_type)
return FALSE
if (locate(augment_type) in owner)
var/obj/slot_item = locate(augment_type) in owner
owner.drop_from_inventory(slot_item)
qdel(slot_item)
owner.visible_message(
SPAN_NOTICE("\The [slot_item] slides back into \the [owner]'s [owner.organs_by_name[parent_organ]]."),
SPAN_NOTICE("You retract \the [slot_item]!")
)
return
if (owner.get_equipped_item(aug_slot))
to_chat(owner, SPAN_WARNING("Something is stopping you from enabling your [src]!"))
return
var/obj/item/M = new augment_type(owner)
M.canremove = FALSE
M.item_flags |= ITEM_FLAG_NO_MOVE
owner.equip_to_slot(M, aug_slot)
var/obj/item/organ/O = owner.organs_by_name[parent_organ]
//If we didn't found the organ, it might be a sub-organ, search for it
if(!O)
for(var/external_organ_key in owner.organs_by_name)
var/obj/item/organ/external/external_organ = owner.organs_by_name[external_organ_key]
for(var/obj/item/organ/internal/internal_organ in external_organ.internal_organs)
if(internal_organ.organ_tag == parent_organ)
O = internal_organ
break
//If we have found it, print the message, otherwise don't bother, it would just runtime
if(O)
owner.visible_message(
SPAN_NOTICE("\The [M] slides out of \the [owner]'s [O.name]."),
SPAN_NOTICE("You deploy \the [M]!")
)
@@ -0,0 +1,5 @@
/obj/item/organ/internal/augment/cochlear
name = "cochlear implant"
desc = "A synthetic replacement for the structures within the ear, allowing the user to hear without requiring external tools."
organ_tag = BP_AUG_COCHLEAR
parent_organ = BP_HEAD
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/tool/combitool
name = "retractable combitool"
icon_state = "augment-tool"
action_button_name = "Deploy Combitool"
action_button_icon = "augment-tool"
parent_organ = BP_R_HAND
organ_tag = BP_AUG_TOOL
augment_type = /obj/item/combitool/robotic
/obj/item/organ/internal/augment/tool/combitool/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,16 @@
/obj/item/organ/internal/augment/tool/correctivelens
name = "corrective lenses"
icon_state = "augment-tool"
action_button_name = "Deploy Corrective Lenses"
action_button_icon = "augment-tool"
parent_organ = BP_EYES
organ_tag = BP_AUG_CORRECTIVE_LENS
augment_type = /obj/item/clothing/glasses/aug/glasses
aug_slot = slot_glasses
/obj/item/organ/internal/augment/tool/correctivelens/glare_dampener
name = "glare dapmeners"
icon_state = "augment-tool"
action_button_name = "Deploy Glare Dampeners"
organ_tag = BP_AUG_GLARE_DAMPENER
augment_type = /obj/item/clothing/glasses/aug/welding
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/tool/crayon
name = "integrated crayon"
icon_state = "crayonaugment"
action_button_name = "Deploy Crayon"
action_button_icon = "crayonaugment"
organ_tag = BP_AUG_CRAYON
parent_organ = BP_R_HAND
augment_type = /obj/item/pen/crayon/augment
/obj/item/organ/internal/augment/tool/crayon/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,24 @@
/obj/item/organ/internal/augment/cyber_hair
name = "synthetic hair extensions"
cooldown = 20
action_button_icon = "cyber_hair"
organ_tag = BP_AUG_HAIR
activable = TRUE
action_button_name = "Activate Synthetic Hair Extensions"
species_restricted = list(
SPECIES_HUMAN_OFFWORLD,
SPECIES_HUMAN,
SPECIES_IPC_SHELL,
SPECIES_TAJARA_MSAI,
SPECIES_TAJARA_ZHAN,
SPECIES_TAJARA,
)
/obj/item/organ/internal/augment/cyber_hair/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
owner.visible_message(SPAN_NOTICE("\The [owner]'s hair begins to rapidly shift in shape and length."))
owner.change_appearance(APPEARANCE_ALL_HAIR, owner)
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/tool/cyborg_analyzer
name = "retractable cyborg analyzer"
icon_state = "robotanalyzer"
action_button_name = "Deploy Analyzer"
action_button_icon = "augment-tool"
organ_tag = BP_AUG_CYBORG_ANALYZER
parent_organ = BP_R_HAND
augment_type = /obj/item/device/robotanalyzer/augment
/obj/item/organ/internal/augment/tool/cyborg_analyzer/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/tool/drill
name = "integrated drill"
icon_state = "drill"
action_button_name = "Deploy Drill"
action_button_icon = "drill"
parent_organ = BP_R_HAND
organ_tag = BP_AUG_DRILL
augment_type = /obj/item/pickaxe/drill/integrated
/obj/item/organ/internal/augment/tool/drill/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,54 @@
/obj/item/organ/internal/augment/emotional_manipulator
name = "emotional manipulator"
desc = "A Zeng Hu brain implant to manipulate the brain's chemicals to induce a calming or happy feeling. " \
+ "This is one of the most popular implants across the company."
icon_state = "emotional_manipulator"
organ_tag = BP_AUG_EMOTION
parent_organ = BP_HEAD
action_button_name = "Activate Emotional Manipulator"
activable = TRUE
action_button_icon = "emotional_manipulator"
cooldown = 10
var/set_emotion = "Disabled"
var/last_emotion = 0
var/list/possible_emotions = list(
"Disabled",
"Happiness",
"Calmness",
)
/obj/item/organ/internal/augment/emotional_manipulator/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
var/choice = input(
"Select the Emotional Choice.",
"Emotional Manipulator"
) as null|anything in capitalize_list(possible_emotions)
set_emotion = lowertext(choice)
/obj/item/organ/internal/augment/emotional_manipulator/process()
..()
if(!owner)
return
if(world.time > (last_emotion + 5 MINUTES))
switch(set_emotion)
if("happiness")
to_chat(owner, SPAN_GOOD("You feel happy."))
if("calmness")
to_chat(owner, SPAN_GOOD("You feel calm."))
last_emotion = world.time
if(is_broken())
do_broken_act()
/obj/item/organ/internal/augment/emotional_manipulator/do_broken_act()
if(owner)
owner.hallucination += 20
return TRUE
@@ -0,0 +1,31 @@
/obj/item/organ/internal/augment/enhanced_vision
name = "vision enhanced retinas"
desc = "Zeng Hu implants given to EMTs to assist with finding the injured. These eye implants allow one to see further than you normally could."
icon_state = "enhanced_vision"
organ_tag = BP_AUG_ENCHANED_VISION
parent_organ = BP_HEAD
action_button_name = "Activate Vision Enhanced Retinas"
action_button_icon = "enhanced_vision"
cooldown = 30
activable = TRUE
/obj/item/organ/internal/augment/enhanced_vision/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
zoom(owner, 7, 7, FALSE, FALSE)
owner.visible_message(
zoom ? "<b>[owner]</b>'s pupils narrow..." : "<b>[owner]</b>'s pupils return to normal.",
range = 3
)
/obj/item/organ/internal/augment/enhanced_vision/emp_act(severity)
. = ..()
var/obj/item/organ/internal/eyes/E = owner.get_eyes()
if(!E)
return
E.take_damage(5)
@@ -0,0 +1,3 @@
/obj/item/organ/internal/augment/ethanol_burner
name = "integrated ethanol burner"
organ_tag = BP_AUG_ETHANOL_BURNER
@@ -0,0 +1,97 @@
/obj/item/organ/internal/augment/eye_sensors
name = "integrated HUD sensors"
icon_state = "augment_eyes"
cooldown = 25
activable = TRUE
organ_tag = BP_AUG_EYE_SENSORS
parent_organ = BP_HEAD
action_button_name = "Toggle Security Sensors"
var/active_hud = "disabled"
var/static/list/hud_types = list(
"disabled",
SEC_HUDTYPE,
MED_HUDTYPE)
var/selected_hud = "disabled"
/obj/item/organ/internal/augment/eye_sensors/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
/obj/item/organ/internal/augment/eye_sensors/process()
..()
if(!owner)
return
/obj/item/organ/internal/augment/eye_sensors/emp_act(severity)
. = ..()
var/obj/item/organ/internal/eyes/E = owner.get_eyes()
if(!E)
return
E.take_damage(5)
/obj/item/organ/internal/augment/eye_sensors/proc/check_hud(var/hud)
return (hud == active_hud)
/obj/item/organ/internal/augment/eye_sensors/security
name = "integrated security HUD sensors"
action_button_name = "Toggle Security Sensors"
/obj/item/organ/internal/augment/eye_sensors/security/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = SEC_HUDTYPE
to_chat(user, "You activate \the [src].")
else
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
/obj/item/organ/internal/augment/eye_sensors/security/process()
..()
switch(selected_hud)
if(SEC_HUDTYPE)
req_access = list(ACCESS_SECURITY)
if(allowed(owner))
active_hud = "security"
process_sec_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
/obj/item/organ/internal/augment/eye_sensors/medical
name = "integrated medical HUD sensors"
action_button_name = "Toggle Medical Sensors"
/obj/item/organ/internal/augment/eye_sensors/medical/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = MED_HUDTYPE
to_chat(user, "You activate \the [src].")
else
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
/obj/item/organ/internal/augment/eye_sensors/medical/process()
..()
switch(selected_hud)
if(MED_HUDTYPE)
req_access = list(ACCESS_MEDICAL)
if(allowed(owner))
active_hud = "medical"
process_med_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
@@ -0,0 +1,37 @@
/obj/item/organ/internal/augment/head_fluff
name = "head augmentation"
desc = "An augment installed inside the head of someone."
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/head_fluff/die()
..()
if (owner)
to_chat(owner, SPAN_DANGER("You sense your [name] stops functioning!"))
/obj/item/organ/internal/augment/head_fluff/process()
..()
if (is_broken() && !ORGAN_DEAD)
if (prob(5))
to_chat(owner, SPAN_WARNING("You sense your [name] isn't working right!"))
/obj/item/organ/internal/augment/head_fluff/removed()
if (owner)
to_chat(owner, SPAN_DANGER("You lose your connection with \the [name]!"))
..()
/obj/item/organ/internal/augment/head_fluff/chest_fluff
name = "chest augmentation"
desc = "An augment installed inside the chest of someone."
parent_organ = BP_CHEST
/obj/item/organ/internal/augment/head_fluff/rhand_fluff
name = "right hand augmentation"
desc = "An augment installed inside the right hand of someone."
parent_organ = BP_R_HAND
/obj/item/organ/internal/augment/head_fluff/lhand_fluff
name = "left hand augmentation"
desc = "An augment installed inside the left hand of someone."
parent_organ = BP_L_HAND
@@ -0,0 +1,3 @@
/obj/item/organ/internal/augment/fuel_cell
name = "integrated fuel cell"
organ_tag = BP_AUG_FUEL_CELL
@@ -0,0 +1,41 @@
/obj/item/organ/internal/augment/gustatorial
name = "gustatorial centre"
action_button_name = "Activate Gustatorial Centre (tongue)"
action_button_icon = "augment"
organ_tag = BP_AUG_GUSTATORIAL
parent_organ = BP_HEAD
activable = TRUE
cooldown = 8
var/taste_sensitivity = TASTE_NORMAL
var/action_verb = "samples"
var/self_action_verb = "sample"
/obj/item/organ/internal/augment/gustatorial/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
var/obj/item/reagent_containers/food/F = user.get_active_hand()
if(istype(F))
if(!F.is_open_container())
to_chat(user, SPAN_WARNING("\The [F] is closed!"))
return
user.visible_message("<b>[user]</b> [action_verb] \the [F].", SPAN_NOTICE("You [self_action_verb] \the [F]."))
to_chat(user, SPAN_NOTICE("\The [src] reports that \the [F] tastes like: [F.reagents.generate_taste_message(user, taste_sensitivity)]"))
else
var/list/tastes = list("Hypersensitive" = TASTE_HYPERSENSITIVE, "Sensitive" = TASTE_SENSITIVE, "Normal" = TASTE_NORMAL, "Dull" = TASTE_DULL, "Numb" = TASTE_NUMB)
var/taste_choice = input(user, "How well do you want to taste?", "Taste Sensitivity", "Normal") as null|anything in tastes
if(taste_choice)
to_chat(user, SPAN_NOTICE("\The [src] will now output taste as if you were <b>[taste_choice]</b>."))
taste_sensitivity = tastes[taste_choice]
/obj/item/organ/internal/augment/gustatorial/hand
parent_organ = BP_R_HAND
action_button_name = "Activate Gustatorial Centre (hand)"
action_verb = "sticks their finger in"
self_action_verb = "stick your finger in"
/obj/item/organ/internal/augment/gustatorial/hand/left
parent_organ = BP_L_HAND
@@ -0,0 +1,14 @@
/obj/item/organ/internal/augment/health_scanner
name = "integrated health scanner"
action_button_name = "Activate Health Scanner"
action_button_icon = "health"
organ_tag = BP_AUG_HEALTHSCAN
activable = TRUE
cooldown = 8
/obj/item/organ/internal/augment/health_scanner/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
health_scan_mob(owner, owner, TRUE, TRUE)
@@ -0,0 +1,101 @@
/obj/item/organ/internal/augment/language
name = "language processor"
desc = "An augment installed into the head that interfaces with the user's neural interface, " \
+ "intercepting and assisting language faculties."
organ_tag = BP_AUG_LANGUAGE
parent_organ = BP_HEAD
/// A list of languages that this augment will add. add your language to this
var/list/augment_languages = list()
/// A list of languages that get added when it's installed. used to remove languages later. don't touch this.
var/list/added_languages = list()
/obj/item/organ/internal/augment/language/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected)
. = ..()
for(var/language in augment_languages)
if(!(language in target.languages))
target.add_language(language)
added_languages += language
/obj/item/organ/internal/augment/language/removed(var/mob/living/carbon/human/target, mob/living/user)
for(var/language in added_languages)
target.remove_language(language)
added_languages = list()
..()
/obj/item/organ/internal/augment/language/emp_act()
. = ..()
for(var/language in added_languages)
if(prob(25))
owner.remove_language(language)
owner.set_default_language(pick(owner.languages))
/obj/item/organ/internal/augment/language/klax
name = "K'laxan language processor"
augment_languages = list(LANGUAGE_UNATHI)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/cthur
name = "C'thur language processor"
augment_languages = list(LANGUAGE_SKRELLIAN)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/mikuetz
name = "Mi'kuetz language processor"
augment_languages = list(LANGUAGE_AZAZIBA)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/zino
name = "Zino language processor"
augment_languages = list(LANGUAGE_GUTTER)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/eridani
name = "Eridani language processor"
augment_languages = list(LANGUAGE_TRADEBAND)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/zeng
name = "Zeng-Hu Nral'malic language processor"
augment_languages = list(LANGUAGE_SKRELLIAN)
species_restricted = list(
SPECIES_VAURCA_BREEDER,
SPECIES_VAURCA_BULWARK,
SPECIES_VAURCA_WARFORM,
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
@@ -0,0 +1,11 @@
/obj/item/organ/internal/augment/tool/combitool/lighter
name = "integrated lighter"
icon_state = "lighter-aug"
action_button_name = "Deploy Lighter"
action_button_icon = "lighter-aug"
organ_tag = BP_AUG_LIGHTER
augment_type = /obj/item/flame/lighter/zippo/augment
/obj/item/organ/internal/augment/tool/combitool/lighter/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,43 @@
/obj/item/organ/internal/augment/memory_inhibitor
name = "memory inhibitor"
desc = "A Zeng Hu implant that allows one to have control over their memories, " \
+ "allowing you to set a timer and remove any memories developed within it. " \
+ "This is most popular in Zeng Hu labs within Eridani."
icon_state = "memory_inhibitor"
organ_tag = BP_AUG_MEMORY
parent_organ = BP_HEAD
activable = TRUE
cooldown = 20
action_button_icon = "memory_inhibitor"
action_button_name = "Activate Memory Inhibitor"
var/ready_to_erase = FALSE
/obj/item/organ/internal/augment/memory_inhibitor/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
if(!ready_to_erase)
to_chat(
owner,
SPAN_NOTICE("Your memories following this point will be deleted on the following activation.")
)
ready_to_erase = TRUE
else
to_chat(
owner,
SPAN_WARNING("You do not recall the events since the last time you activated your memory inhibitor!")
)
ready_to_erase = FALSE
/obj/item/organ/internal/augment/memory_inhibitor/do_broken_act()
if(owner)
to_chat(owner, SPAN_WARNING("You forgot everything that happened today!"))
return TRUE
/obj/item/organ/internal/augment/memory_inhibitor/emp_act(severity)
. = ..()
if(prob(25))
do_broken_act()
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/tool/pen
name = "retractable pen"
icon_state = "combipen"
action_button_name = "Deploy Pen"
action_button_icon = "combipen"
organ_tag = BP_AUG_PEN
parent_organ = BP_R_HAND
augment_type = /obj/item/pen/augment
/obj/item/organ/internal/augment/tool/pen/left
parent_organ = BP_L_HAND
aug_slot = slot_l_hand
@@ -0,0 +1,51 @@
/obj/item/organ/internal/augment/eye_sensors/phalanx
name = "phalanx facial plate"
desc = "This modular face plate accommodates a wide array of cybernetic augmentations, " \
+ "enabling seamless integration with Phalanx's transhumanist doctrine. " \
+ " Enhanced sensory overlays and HUDs offer Phalanx members superior situational " \
+ "awareness and promote a sense of hive-thinking."
icon_state = "vaurca_plate"
action_button_name = "Toggle HUD"
action_button_icon = "vaurca_plate"
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/augments_external.dmi',
BODYTYPE_VAURCA = 'icons/mob/species/vaurca/augments_external.dmi'
)
/obj/item/organ/internal/augment/eye_sensors/phalanx/attack_self(var/mob/user)
. = ..()
if(selected_hud == "disabled")
selected_hud = SEC_HUDTYPE
to_chat(user, "You activate \the [src] security HUD.")
return
if(selected_hud == SEC_HUDTYPE)
selected_hud = MED_HUDTYPE
to_chat(user, "You activate \the [src] medical HUD.")
return
if(selected_hud == MED_HUDTYPE)
selected_hud = "disabled"
to_chat(user, "You deactivate \the [src].")
return
/obj/item/organ/internal/augment/eye_sensors/phalanx/process()
..()
switch(selected_hud)
if(SEC_HUDTYPE)
req_access = list(ACCESS_SECURITY)
if(allowed(owner))
active_hud = "security"
process_sec_hud(owner, 1)
else
active_hud = "disabled"
if(MED_HUDTYPE)
req_access = list(ACCESS_MEDICAL)
if(allowed(owner))
active_hud = "medical"
process_med_hud(owner, 1)
else
active_hud = "disabled"
else
active_hud = "disabled"
@@ -0,0 +1,6 @@
/obj/item/organ/internal/augment/psi
name = "psionic receiver"
desc = "An augment installed into the head that functions as a surrogate " \
+ "for a missing zona bovinae, also functioning as a filter for the psionically-challenged."
organ_tag = BP_AUG_PSI
parent_organ = BP_HEAD
@@ -0,0 +1,37 @@
/obj/item/organ/internal/augment/sightlights
name = "ocular installed sightlights "
desc = "Designed to assist medical personnel in darker areas or places experiencing periodic power issues, " \
+ "Sightlights will allow one to be able to use their eyes as a flashlight."
icon_state = "sightlights"
organ_tag = BP_AUG_SIGHTLIGHTS
parent_organ = BP_HEAD
action_button_name = "Activate Ocular Installed Sightlights "
action_button_icon = "sightlights"
cooldown = 30
activable = TRUE
var/lights_on = FALSE
/obj/item/organ/internal/augment/sightlights/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
lights_on = !lights_on
if(lights_on)
set_light(5, 2, LIGHT_COLOR_TUNGSTEN, uv = 0, angle = LIGHT_WIDE)
else
set_light(0)
/obj/item/organ/internal/augment/sightlights/emp_act(severity)
. = ..()
set_light(0)
/obj/item/organ/internal/augment/sightlights/take_damage(var/amount, var/silent = 0)
. = ..()
set_light(0)
/obj/item/organ/internal/augment/sightlights/take_internal_damage(var/amount, var/silent = 0)
. = ..()
set_light(0)
@@ -0,0 +1,15 @@
/obj/item/organ/internal/augment/suspension
name = "calf suspension"
icon_state = "suspension"
organ_tag = BP_AUG_SUSPENSION
parent_organ = BP_GROIN
min_broken_damage = 20
max_damage = 20
var/suspension_mod = 0.8
var/jump_bonus = 1
/obj/item/organ/internal/augment/suspension/advanced
name = "advanced calf suspension"
min_broken_damage = 50
max_damage = 50
suspension_mod = 0
@@ -0,0 +1,18 @@
/obj/item/organ/internal/augment/synthetic_cords
name = "synthetic vocal cords"
desc = "An array of vocal cords loaded into an augment kit, allowing easy installation by a skilled technician."
organ_tag = BP_AUG_CORDS
parent_organ = BP_HEAD
/obj/item/organ/internal/augment/synthetic_cords/voice
desc = "An array of vocal cords. These appears to have been modified with a specific accent."
organ_tag = BP_AUG_ACC_CORDS
var/accent = ACCENT_TTS
/obj/item/organ/internal/augment/synthetic_cords/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected)
. = ..()
target.sdisabilities &= ~MUTE
/obj/item/organ/internal/augment/synthetic_cords/removed(var/mob/living/carbon/human/target, mob/living/user)
target.sdisabilities |= MUTE
..()
@@ -0,0 +1,9 @@
/obj/item/organ/internal/augment/taste_booster
name = "taste booster"
organ_tag = BP_AUG_TASTE_BOOSTER
parent_organ = BP_HEAD
var/new_taste = TASTE_SENSITIVE //this will replace the species' taste var
/obj/item/organ/internal/augment/taste_booster/dull
name = "taste duller"
new_taste = TASTE_DULL
@@ -0,0 +1,66 @@
/obj/item/organ/internal/augment/tesla
name = "tesla spine"
icon_state = "tesla_spine"
organ_tag = BP_AUG_TESLA
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
species_restricted = list(SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI)
var/max_charges = 1
var/actual_charges = 0
var/recharge_time = 5 //this is in minutes
/obj/item/organ/internal/augment/tesla/proc/check_shock()
if(is_broken())
return FALSE
if(is_bruised())
if(prob(50))
return FALSE
if(actual_charges >= max_charges)
return FALSE
else
do_tesla_act()
return TRUE
/obj/item/organ/internal/augment/tesla/proc/do_tesla_act()
if(owner)
to_chat(owner, FONT_LARGE(SPAN_DANGER("You feel your [src.name] surge with energy!")))
spark(get_turf(owner), 3)
addtimer(CALLBACK(src, PROC_REF(disarm)), recharge_time MINUTES)
if(is_bruised() && prob(50))
owner.electrocute_act(40, owner)
/obj/item/organ/internal/augment/tesla/proc/disarm()
if(actual_charges <= 0)
return
actual_charges = min(actual_charges - 1, max_charges)
if(actual_charges > 0)
addtimer(CALLBACK(src, PROC_REF(disarm)), recharge_time MINUTES)
if(is_broken())
owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!"))
playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1)
tesla_zap(owner, 7, 1500)
/obj/item/organ/internal/augment/tesla/advanced
name = "advanced tesla spine"
max_charges = 15
cooldown = 50
emp_coeff = 1
action_button_icon = "tesla_spine"
action_button_name = "Activate Tesla Coil"
activable = TRUE
/obj/item/organ/internal/augment/tesla/advanced/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!"))
playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1)
tesla_zap(owner, 7, 1500)
/obj/item/organ/internal/augment/tesla/massive
name = "massive tesla spine"
icon_state = "tesla_spine"
organ_tag = BP_AUG_TESLA
on_mob_icon = 'icons/mob/human_races/tesla_body_augments.dmi'
species_restricted = list(SPECIES_TAJARA_TESLA_BODY)
@@ -0,0 +1,20 @@
/obj/item/organ/internal/augment/timepiece
name = "integrated timepiece"
icon_state = "augment-clock"
parent_organ = BP_HEAD
action_button_name = "Activate Integrated Timepiece"
activable = TRUE
organ_tag = BP_AUG_TIMEPIECE
action_button_icon = "augment-clock"
cooldown = 10
/obj/item/organ/internal/augment/timepiece/attack_self(var/mob/user)
. = ..()
if(!.)
return FALSE
to_chat(owner, SPAN_NOTICE("Hello [user], it is currently: '[worldtime2text()]'. Today's date is '[time2text(world.time, "Month DD")]. [GLOB.game_year]'. Have a lovely day."))
if(evacuation_controller.get_status_panel_eta())
to_chat(owner, SPAN_WARNING("Notice: You have one (1) scheduled flight, ETA: [evacuation_controller.get_status_panel_eta()]."))
@@ -0,0 +1,12 @@
/obj/item/organ/internal/augment/translator
name = "universal translator"
parent_organ = BP_HEAD
organ_tag = BP_AUG_TRANSLATOR
/// List of languages that the augment can translate.
var/list/languages = list(
LANGUAGE_ELYRAN_STANDARD,
LANGUAGE_GUTTER,
LANGUAGE_SOL_COMMON,
LANGUAGE_TCB,
LANGUAGE_TRADEBAND,
)
@@ -0,0 +1,9 @@
/obj/item/organ/internal/augment/zenghu_plate
name = "zeng-hu veterancy plate"
desc = "A clear sign of Zeng-Hu's best, this plate bearing the company's symbol is installed on those who prove themselves in the hyper-competitive environment."
icon_state = "zenghu_plate"
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/augments_external.dmi'
)
parent_organ = BP_HEAD