Ve'katak Hivenet Receiver (#18771)

Adds a new augment, available in loadout to non-Vaurca members of the
Ve'katak Phalanx, which can receive Hivenet broadcasts and transmit from
a selection of preset messages. Sprites done by @GMR25

---------

Signed-off-by: RustingWithYou <63625389+RustingWithYou@users.noreply.github.com>
Co-authored-by: GMR25 <GMR25@users.noreply.github.com>
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
This commit is contained in:
RustingWithYou
2024-06-09 12:09:08 +00:00
committed by GitHub
co-authored by GMR25 Cody Brittain
parent 5b36e475eb
commit ddbe7073eb
7 changed files with 274 additions and 38 deletions
@@ -262,3 +262,12 @@
allowed_roles = list("Physician", "Surgeon", "Pharmacist", "First Responder", "Psychiatrist", "Medical Intern", "Medical Personnel", "Security Officer", "Warden", "Security Cadet", "Investigator", "Security Personnel", "Corporate Liaison", "Assistant", "Off-Duty Crew Member")
faction = "Private Military Contracting Group"
cost = 1
/datum/gear/augment/vekatak_hivenet
display_name = "Ve'katak Phalanx Hivenet receiver"
description = "An experimental augment developed for the non-Vaurca of the Ve'katak Phalanx, allowing them to recieve Hivenet transmissions and send preset messages."
path = /obj/item/organ/internal/augment/language/vekatak
whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, 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, SPECIES_UNATHI)
faction = "Private Military Contracting Group"
cost = 4
allowed_roles = list("Physician", "Surgeon", "Pharmacist", "First Responder", "Psychiatrist", "Medical Intern", "Medical Personnel", "Security Officer", "Warden", "Security Cadet", "Investigator", "Security Personnel", "Corporate Liaison", "Assistant", "Off-Duty Crew Member")
+14
View File
@@ -265,9 +265,13 @@
to_chat(player, encrypted_msg)
continue
var/obj/item/organ/internal/vaurca/neuralsocket/listener_socket = listener_human.internal_organs_by_name[BP_NEURAL_SOCKET]
var/obj/item/organ/internal/augment/language/vekatak/receiver = listener_human.internal_organs_by_name[BP_AUG_LANGUAGE]
if(!listener_socket || listener_socket.decryption_key != speaker_encryption_key)
to_chat(player, encrypted_msg)
continue
if (!receiver || receiver.decryption_key != speaker_encryption_key)
to_chat(player, encrypted_msg)
continue
to_chat(player, msg)
/datum/language/bug/format_message(message, verb, speaker_mask)
@@ -301,6 +305,10 @@
return 0
if(M.internal_organs_by_name[BP_NEURAL_SOCKET] && (GLOB.all_languages[LANGUAGE_VAURCA] in M.languages))
return 1
if(M.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = M.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V) && (GLOB.all_languages[LANGUAGE_VAURCA] in M.languages))
return 1
if(M.internal_organs_by_name["blackkois"])
return 1
@@ -321,11 +329,17 @@
/datum/language/bug/check_speech_restrict(var/mob/speaker)
var/mob/living/carbon/human/H = speaker
var/obj/item/organ/internal/vaurca/neuralsocket/S = H.internal_organs_by_name[BP_NEURAL_SOCKET]
var/obj/item/organ/internal/augment/language/vekatak/V = H.internal_organs_by_name[BP_AUG_LANGUAGE]
//Black k'ois zombies don't have neural sockets but need to talk, hence check if the socket exists, or it will runtime for them
if(S && (S.muted || S.disrupted))
to_chat(speaker, SPAN_WARNING("You have been muted over the Hivenet!"))
return FALSE
if(istype(V))
if(!V.transmitting || V.disrupted || V.muted)
to_chat(speaker, SPAN_WARNING("Your implant cannot transmit over the Hivenet!"))
return FALSE
else
return TRUE
@@ -1415,13 +1415,32 @@
var/player_surname = player_fullname[2]
if(player_surname == surname || HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to ban.", "Hivenet Ban") as null|anything in available_vaurca
if(!target || !isvaurca(target))
if(player.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = player.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to ban", "Hivenet Ban", available_vaurca)
if(!target)
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/obj/item/organ/internal/augment/language/vekatak/V = target.internal_organs_by_name[BP_AUG_LANGUAGE]
var/list/target_fullname = splittext(target.name, " ")
var/target_surname = target_fullname[2]
to_chat(src, target.real_name)
var/target_surname = target_fullname[target_fullname.len]
if(istype(V))
if(!(GLOB.all_languages[LANGUAGE_VAURCA] in target.languages) && V.banned)
target.add_language(LANGUAGE_VAURCA)
V.banned = FALSE
to_chat(src, SPAN_NOTICE("You extend your will, restoring [target]'s connection to the Hivenet. Hopefully they will be better-behaved in future."))
to_chat(target, SPAN_NOTICE("You feel your implant reactivate, as your limited connection to the Hivenet is restored."))
return
else if((GLOB.all_languages[LANGUAGE_VAURCA] in target.languages) && !V.banned)
to_chat(src, SPAN_NOTICE("You extend your will, severing [target]'s connection to the Hivenet. Perhaps now they will learn their lesson."))
to_chat(target, SPAN_WARNING("You feel your implant's connection to the Hivenet shut off, as [src]'s will severs it."))
target.remove_language(LANGUAGE_VAURCA)
V.banned = TRUE
host.last_action = world.time + 1 MINUTES
return
if(!(GLOB.all_languages[LANGUAGE_VAURCA] in target.languages) && S.banned)
target.add_language(LANGUAGE_VAURCA)
S.banned = FALSE
@@ -1505,16 +1524,16 @@
var/player_surname = player_fullname[2]
if(player_surname == surname || HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to void.", "Hivenet Void") as null|anything in available_vaurca
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to void", "Hivenet Void", available_vaurca)
if(!target || !isvaurca(target))
return
var/choice = alert(src, "Are you sure you want to void [target]? This cannot be undone!", "Void User?", "Proceed", "Cancel")
var/choice = tgui_alert(src, "Are you sure you want to void [target]? This cannot be undone!", "Void User?", list("Proceed", "Cancel"))
if(choice == "Cancel")
return
msg_admin_attack("[key_name_admin(src)] attempted to void [key_name_admin(target)]'s neural socket! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(src),ckey_target=key_name(target))
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/list/target_fullname = splittext(target.name, " ")
var/target_surname = target_fullname[2]
var/target_surname = target_fullname[target_fullname.len]
if(target_surname == surname)
if(S.shielded)
to_chat(src, SPAN_WARNING("You feel a sudden pain in your neural socket as you are repelled by [target]'s countermeasures!"))
@@ -1573,15 +1592,35 @@
for(var/mob/living/carbon/human/player in (GLOB.human_mob_list - src))
if(isvaurca(player) && player.internal_organs_by_name[BP_NEURAL_SOCKET])
var/list/player_fullname = splittext(player.name, " ")
var/player_surname = player_fullname[2]
var/player_surname = player_fullname[player_fullname.len]
if(player_surname == surname || HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to mute.", "Hivenet Mute") as null|anything in available_vaurca
if(!target || !isvaurca(target))
if(player.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = player.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to mute", "Hivenet Mute", available_vaurca)
if(!target)
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/obj/item/organ/internal/augment/language/vekatak/V = target.internal_organs_by_name[BP_AUG_LANGUAGE]
var/list/target_fullname = splittext(target.name, " ")
var/target_surname = target_fullname[2]
var/target_surname = target_fullname[target_fullname.len]
if(istype(V))
if(V.banned)
to_chat(src, SPAN_NOTICE("[target] is already banned from the Hivenet. Muting them would be pointless."))
return
if(V.muted)
V.muted = FALSE
to_chat(src, SPAN_NOTICE("You extend your will, restoring [target]'s ability to speak over the Hivenet. Hopefully it will be better-behaved in future."))
to_chat(target, SPAN_NOTICE("You feel [src]'s restriction on your implant lifted, allowing you to transmit over the Hivenet once more."))
return
to_chat(src, SPAN_NOTICE("You extend your will, disabling [target]'s Hivenet implant."))
to_chat(target, SPAN_WARNING("You feel [src]'s will enter your mind, disabling your implant's transmission function. Though you can still receive Hivenet broadcasts, you are incapable of transmitting."))
V.muted = TRUE
host.last_action = world.time + 5 MINUTES
return
if(S.banned)
to_chat(src, SPAN_NOTICE("[target] is already banned from the Hivenet. Muting them would be pointless."))
return
@@ -1649,14 +1688,34 @@
set category = "Hivenet"
var/obj/item/organ/internal/vaurca/neuralsocket/S = src.internal_organs_by_name[BP_NEURAL_SOCKET]
if(!src.can_hivenet())
var/obj/item/organ/internal/augment/language/vekatak/V = src.internal_organs_by_name[BP_AUG_LANGUAGE]
if(src.stat != CONSCIOUS)
to_chat(src, SPAN_WARNING("You must be conscious to use this ability!"))
return
if(S.decryption_key)
S.decryption_key = null
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been reset."))
if(!(GLOB.all_languages[LANGUAGE_VAURCA] in src.languages))
to_chat(src, SPAN_DANGER("Your mind is dark, unable to communicate with the Hive."))
return
S.decryption_key = input(src, "Enter a new decryption key for Hivenet messages.", "Hivenet Decryption") as text
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been set to [S.decryption_key]."))
if(!istype(S) && !istype(V))
to_chat(src, SPAN_WARNING("You do not have a functional connection to the Hivenet!"))
return
if(istype(S))
if(S.decryption_key)
S.decryption_key = null
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been reset."))
return
S.decryption_key = tgui_input_text(src, "Enter a new decryption key for Hivenet messages", "Hivenet Decryption")
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been set to [S.decryption_key]."))
else if(istype(V))
if(V.decryption_key)
V.decryption_key = null
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been reset."))
return
V.decryption_key = tgui_input_text(src, "Enter a new decryption key for Hivenet messages", "Hivenet Decryption")
to_chat(src, SPAN_NOTICE("Your Hivenet decryption key has been set to [V.decryption_key]."))
/mob/living/carbon/human/proc/hivenet_encrypt()
set name = "Set Hivenet Encryption"
@@ -1669,7 +1728,7 @@
S.encryption_key = null
to_chat(src, SPAN_NOTICE("Your Hivenet encryption key has been reset."))
return
S.encryption_key = input(src, "Enter a new encryption key for Hivenet messages.", "Hivenet Decryption") as text
S.encryption_key = tgui_input_text(src, "Enter a new encryption key for Hivenet messages", "Hivenet Encryption")
to_chat(src, SPAN_NOTICE("Your Hivenet encryption key has been set to [S.encryption_key]."))
/mob/living/carbon/human/proc/hivenet_decrypt()
@@ -1716,25 +1775,35 @@
reset_view(0)
return
for(var/mob/living/carbon/human/player in (GLOB.human_mob_list - src))
if(player.stat != CONSCIOUS)
continue
if(isvaurca(player) && player.internal_organs_by_name[BP_NEURAL_SOCKET])
if(player.stat != CONSCIOUS)
continue
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to observe.", "Hivenet Remote Observation") as null|anything in available_vaurca
if(!target || !isvaurca(target))
if(player.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = player.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a Vaurca to observe.", "Hivenet Remote Observation", available_vaurca)
if(!target)
remoteview_target = null
reset_view(0)
return
var/obj/item/organ/internal/augment/language/vekatak/V = target.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
to_chat(src, SPAN_NOTICE("You extend your mind into the Hivenet, accessing [target]'s senses. Use this verb again to cancel."))
remoteview_target = target
reset_view(target)
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/list/target_fullname = splittext(target.name, " ")
var/target_surname = target_fullname[2]
var/target_surname = target_fullname[target_fullname.len]
if(target_surname == surname && !S.shielded)
to_chat(src, SPAN_NOTICE("You extend your mind into the Hivenet, accessing [target]'s senses. Use this verb again to cancel."))
remoteview_target = target
reset_view(target)
else
host.last_action = world.time + 5 MINUTES
var/choice = alert(target, "[src] is attempting to access your senses. Do you wish to allow this?", "Hivenet Remote Observation", "Deny", "Allow")
var/choice = tgui_alert(target, "[src] is attempting to access your senses. Do you wish to allow this?", "Hivenet Remote Observation", list("Deny", "Allow"))
if(choice == "Allow")
to_chat(src, SPAN_NOTICE("You extend your mind into the Hivenet, accessing [target]'s senses. Use this verb again to cancel."))
remoteview_target = target
@@ -1742,7 +1811,7 @@
if(choice == "Deny")
if(HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
var/hijack = alert(src, "[target] has denied your access request. Attempt a hijack?", "Hijack Hivenet Senses", "No", "Yes")
var/hijack = tgui_alert(src, "[target] has denied your access request. Attempt a hijack?", "Hijack Hivenet Senses", list("No", "Yes"))
if(hijack == "Yes")
if(prob(40) && !S.shielded)
to_chat(src, SPAN_NOTICE("You extend your mind into the Hivenet, accessing [target]'s senses. Use this verb again to cancel."))
@@ -1777,15 +1846,28 @@
for(var/mob/living/carbon/human/player in (GLOB.human_mob_list - src))
if(isvaurca(player) && player.internal_organs_by_name[BP_NEURAL_SOCKET])
var/list/player_fullname = splittext(player.name, " ")
var/player_surname = player_fullname[2]
var/player_surname = player_fullname[player_fullname.len]
if(player_surname == surname || HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to shock.", "Neural Shock") as null|anything in available_vaurca
if(!target || !isvaurca(target))
if(player.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = player.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to shock", "Neural Shock", available_vaurca)
if(!target)
return
var/obj/item/organ/internal/augment/language/vekatak/V = target.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
to_chat(src, SPAN_WARNING("You lash out over the Hivenet, delivering a neural shock to [target]!"))
to_chat(target, SPAN_DANGER("You feel [src]'s will strike out at you, pain burning inside your head!"))
target.adjustHalLoss(15)
target.flash_pain(15)
target.adjustBrainLoss(10)
host.last_action = world.time + 5 MINUTES
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/list/target_fullname = splittext(target.name, " ")
var/target_surname = target_fullname[2]
var/target_surname = target_fullname[target_fullname.len]
if(!istype(S) || S.is_broken())
to_chat(src, SPAN_WARNING("The target must have a functional neural socket!"))
return
@@ -1832,10 +1914,9 @@
if(HAS_TRAIT(src, TRAIT_ORIGIN_ELECTRONIC_WARFARE))
max = 5
if(length(host.shielded_sockets))
var/choice = alert(src, "Do you wish to remove your protection from a Vaurca?", "Hivenet Defensive Lattice", "No", "Yes")
to_chat(src, SPAN_NOTICE("You chose [choice]"))
var/choice = tgui_alert(src, "Do you wish to remove your protection from a Vaurca?", "Hivenet Defensive Lattice", list("No", "Yes"))
if(choice == "Yes")
var/mob/living/carbon/human/H = input(src, "Select a Vaurca to remove your defenses from.", "Hivenet Defensive Lattice", null) as anything in host.shielded_mobs
var/mob/living/carbon/human/H = tgui_input_list(src, "Select a Vaurca to remove your defenses from.", "Hivenet Defensive Lattice", host.shielded_mobs)
var/obj/item/organ/internal/vaurca/neuralsocket/S = H.internal_organs_by_name[BP_NEURAL_SOCKET]
to_chat(src, SPAN_NOTICE("You remove your protection from [H]'s neural socket."))
to_chat(H, SPAN_WARNING("You feel [src]'s protection vanish from you, leaving your neural socket exposed."))
@@ -1882,14 +1963,30 @@
continue
if(isvaurca(player) && player.internal_organs_by_name[BP_NEURAL_SOCKET])
LAZYADD(available_vaurca, player)
if(player.internal_organs_by_name[BP_AUG_LANGUAGE])
var/obj/item/organ/internal/augment/language/vekatak/V = player.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
LAZYADD(available_vaurca, player)
LAZYADD(available_vaurca, "Cancel")
var/mob/living/carbon/human/target = input(src, "Select a target to disrupt", "Disrupt Hivenet User", null) as anything in available_vaurca
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to disrupt", "Hivenet Disrupt", available_vaurca)
if(!istype(target))
return
var/obj/item/organ/internal/augment/language/vekatak/V = target.internal_organs_by_name[BP_AUG_LANGUAGE]
if(istype(V))
if(prob(35))
to_chat(src, SPAN_DANGER("Your disruption attempt fails, [target]'s countermeasures repelling your assault! You can feel their defenses spring to life, tracing your location!"))
to_chat(target, SPAN_DANGER("You feel a presence attempting to block your neural socket, but your countermeasures repel it! Analysing the attack, you sense that it came from [get_area(src)]!"))
return
to_chat(target, SPAN_DANGER("Suddenly, you feel an attack on your systems, blocking your neural socket's ability to transmit to the Hivenet!"))
V.disrupted = TRUE
V.disrupttime = world.time + 10 MINUTES
host.last_action = world.time + 5 MINUTES
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
if(prob(70) || S.shielded)
if(prob(60) || S.shielded)
to_chat(src, SPAN_DANGER("Your disruption attempt fails, [target]'s countermeasures repelling your assault! You can feel their defenses spring to life, tracing your location!"))
to_chat(target, SPAN_DANGER("You feel a presence attempting to block your neural socket, but your countermeasures repel it! Analysing the attack, you sense that it came from [get_area(src)]!"))
return
to_chat(target, SPAN_DANGER("Suddenly, you feel an attack on your systems, blocking your neural socket's ability to transmit to the Hivenet!"))
S.disrupted = TRUE
S.disrupttime = world.time + 10 MINUTES
@@ -1909,7 +2006,7 @@
continue
if(isvaurca(player) && player.internal_organs_by_name[BP_NEURAL_SOCKET])
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a target to shock", "Neural Shock User", null) as anything in available_vaurca
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to shock", "Neural Shock", available_vaurca)
if(!istype(target))
to_chat(src, SPAN_WARNING("Invalid target!"))
return
@@ -1954,15 +2051,15 @@
if(player.stat != CONSCIOUS)
continue
LAZYADD(available_vaurca, player)
var/mob/living/carbon/human/target = input(src, "Select a Vaurca to observe.", "Hivenet Sensory Hijack") as null|anything in available_vaurca
var/mob/living/carbon/human/target = tgui_input_list(src, "Select a target to observe", "Hivenet Sensory Hijack", available_vaurca)
if(!target || !isvaurca(target))
remoteview_target = null
reset_view(0)
return
var/obj/item/organ/internal/vaurca/neuralsocket/S = target.internal_organs_by_name[BP_NEURAL_SOCKET]
var/stealth = alert(src, "Do you wish to ask your target's permission?", "Hivenet Sensory Hijack", "No", "Yes")
var/stealth = tgui_alert(src, "Do you wish to ask your target's permission?", "Hivenet Sensory Hijack", list("No", "Yes"))
if(stealth == "Yes")
var/allowed = alert(target, "Someone is attempting to access your senses through the Hivenet. Do you wish to allow them?", "Hivenet Sensory Access", "Deny", "Allow")
var/allowed = tgui_alert(target, "Someone is attempting to access your senses through the Hivenet. Do you wish to allow them?", "Hivenet Sensory Access", list("Allow", "Deny"))
if(allowed == "Allow")
to_chat(src, SPAN_NOTICE("You extend your mind into the Hivenet, accessing [target]'s senses. Use this verb again to cancel."))
remoteview_target = target
@@ -2095,6 +2192,44 @@
msg_admin_attack("[key_name_admin(src)] infected [key_name_admin(H)] with black k'ois! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(src),ckey_target=key_name(H))
/mob/living/carbon/human/proc/phalanx_transmit()
set name = "Phalanx Hivenet Transmission"
set desc = "Make a preset transmission over the Hivenet."
set category = "Hivenet"
var/obj/item/organ/internal/augment/language/vekatak/V = src.internal_organs_by_name[BP_AUG_LANGUAGE]
var/list/messages = list(
"I remain operational.",
"Message received.",
"Order completed.",
"Cannot complete order.",
"I am on standby.",
"Minor damage registered.",
"Damage registered",
"Critical damage registered",
"Assistance required at my location.",
"Hostiles sighted at my location.",
"Location clear of threats."
)
if(src.stat != CONSCIOUS)
to_chat(src, SPAN_WARNING("You are in no state to do that!"))
return
if(!(GLOB.all_languages[LANGUAGE_VAURCA] in src.languages) || !(istype(V)))
to_chat(src, SPAN_WARNING("You are not connected to the Hivenet!"))
return
if(within_jamming_range(src))
to_chat(src, SPAN_WARNING("You attempt to reach the Hivenet, but find nothing!"))
return
var/message = input("What message do you wish to transmit?","Choose a message") as null|anything in messages
if(!message)
return
V.transmitting = TRUE
say(",9[message]")
V.transmitting = FALSE
/mob/living/carbon/human/proc/hivenet_manifest()
set name = "Hivenet Manifest"
set desc = "Get a list of all vaurca currently on the Hivenet."
@@ -8,6 +8,8 @@
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()
/// A list of language-related verbs granted by the augment.
var/list/granted_verbs = list()
/obj/item/organ/internal/augment/language/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected)
. = ..()
@@ -15,11 +17,13 @@
if(!(language in target.languages))
target.add_language(language)
added_languages += language
add_verb(target, granted_verbs)
/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()
remove_verb(target, granted_verbs)
..()
/obj/item/organ/internal/augment/language/emp_act()
@@ -99,3 +103,36 @@
SPECIES_VAURCA_WARRIOR,
SPECIES_VAURCA_WORKER,
)
/obj/item/organ/internal/augment/language/vekatak
name = "Ve'katak Phalanx Hivenet receiver"
icon_state = "phalanx_hivenet"
dead_icon = "phalanx_hivenet_broken"
on_mob_icon = 'icons/mob/human_races/augments_external.dmi'
augment_languages = list(LANGUAGE_VAURCA)
granted_verbs = list(/mob/living/carbon/human/proc/hivenet_recieve, /mob/living/carbon/human/proc/phalanx_transmit)
var/decryption_key
var/banned = FALSE
var/muted = FALSE
var/transmitting = FALSE
var/disrupted = FALSE
var/disrupttime = 0
/obj/item/organ/internal/augment/language/vekatak/process()
. = ..()
if(disrupted)
if(disrupttime > world.time)
disrupttime--
else
disrupted = FALSE
/obj/item/organ/internal/augment/language/vekatak/emp_act()
. = ..()
for(var/language in added_languages)
if(prob(25))
owner.remove_language(language)
owner.set_default_language(pick(owner.languages))
to_chat(owner, SPAN_DANGER("You feel thousands of voices, all clamoring inside your mind!"))
owner.adjustHalLoss(15)
owner.flash_pain(15)
owner.adjustBrainLoss(5)