From 9ab7d8f2e819c4bdf9c2227e4cc6380e149a6681 Mon Sep 17 00:00:00 2001 From: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:25:33 -0700 Subject: [PATCH] Bitrunning: Avatars get silly hacker names (#84279) ## About The Pull Request Bit avatars now get corny names while spawning in to the virtual domain. You can change your alias in prefs or have it randomized for s0meth1ng 1337. Added sechud icons (and thereby orbit ui icons) for bit avatars since "Cyb3rHaxx0r" might be confusing to find in the living players section. ## Why It's Good For The Game This was done as a request and after discussion in the code channel. A little bit of character persistence across simulations. ## Changelog :cl: add: Bitrunning: You can now choose your hacker alias in prefs. add: Bit avatars get orbit icons. /:cl: --- code/__DEFINES/atom_hud.dm | 1 + code/_globalvars/lists/names.dm | 1 + code/datums/id_trim/outfits.dm | 1 + .../components/avatar_connection.dm | 24 ++++++++- .../bitrunning/server/obj_generation.dm | 3 -- code/modules/client/preferences/names.dm | 12 +++++ icons/mob/huds/hud.dmi | Bin 10830 -> 10885 bytes strings/names/hackers.txt | 46 ++++++++++++++++++ .../tgui/interfaces/Orbit/OrbitContent.tsx | 2 +- 9 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 strings/names/hackers.txt diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 7df79b7e57a..86de96f07a1 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -81,6 +81,7 @@ #define SECHUD_ASSISTANT "hudassistant" #define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician" #define SECHUD_BARTENDER "hudbartender" +#define SECHUD_BITAVATAR "hudbitavatar" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" #define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant" diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 81fe08373b3..dce2dc69a50 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -24,6 +24,7 @@ GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt") GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt")) GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) +GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt")) GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt")) GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) diff --git a/code/datums/id_trim/outfits.dm b/code/datums/id_trim/outfits.dm index 2e7aebff26a..a2944a469f4 100644 --- a/code/datums/id_trim/outfits.dm +++ b/code/datums/id_trim/outfits.dm @@ -62,6 +62,7 @@ trim_state = "trim_bitavatar" department_color = COLOR_BLACK subdepartment_color = COLOR_GREEN + sechud_icon_state = SECHUD_BITAVATAR /// Trim for cyber police in the Virtual Domain. /datum/id_trim/cyber_police diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index b533e2b5661..a92e8ef3d2e 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -60,9 +60,16 @@ var/datum/action/avatar_domain_info/action = new(help_datum) action.Grant(avatar) + var/client/our_client = old_body.client + var/alias = our_client?.prefs?.read_preference(/datum/preference/name/hacker_alias) || pick(GLOB.hacker_aliases) + + if(alias && avatar.real_name != alias) + avatar.fully_replace_character_name(avatar.real_name, alias) + avatar.playsound_local(avatar, 'sound/magic/blink.ogg', 25, TRUE) avatar.set_static_vision(2 SECONDS) - avatar.set_temp_blindness(1 SECONDS) + avatar.set_temp_blindness(1 SECONDS) // I'm in + /datum/component/avatar_connection/PostTransfer() var/obj/machinery/netpod/pod = netpod_ref?.resolve() @@ -74,6 +81,7 @@ pod.avatar_ref = WEAKREF(parent) + /datum/component/avatar_connection/RegisterWithParent() ADD_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) /** @@ -87,6 +95,7 @@ RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage)) + /datum/component/avatar_connection/UnregisterFromParent() REMOVE_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) UnregisterSignal(parent, list( @@ -98,6 +107,7 @@ COMSIG_MOB_APPLY_DAMAGE, )) + /// Disconnects the avatar and returns the mind to the old_body. /datum/component/avatar_connection/proc/full_avatar_disconnect(cause_damage = FALSE, datum/source) #ifndef UNIT_TESTS @@ -115,6 +125,7 @@ qdel(src) + /// Triggers whenever the server gets a loot crate pushed to goal area /datum/component/avatar_connection/proc/on_domain_completed(datum/source, atom/entered) SIGNAL_HANDLER @@ -127,6 +138,7 @@ new_master = entered, ) + /// Transfers damage from the avatar to the old_body /datum/component/avatar_connection/proc/on_linked_damage(datum/source, damage, damage_type, def_zone, blocked, ...) SIGNAL_HANDLER @@ -147,6 +159,7 @@ if(old_body.stat > SOFT_CRIT) // KO! full_avatar_disconnect(cause_damage = TRUE) + /// Handles minds being swapped around in subsequent avatars /datum/component/avatar_connection/proc/on_mind_transfer(datum/mind/source, mob/living/previous_body) SIGNAL_HANDLER @@ -157,6 +170,7 @@ source.current.TakeComponent(src) + /// Triggers when someone starts prying open our netpod /datum/component/avatar_connection/proc/on_netpod_crowbar(datum/source, mob/living/intruder) SIGNAL_HANDLER @@ -171,6 +185,7 @@ alert.name = "Netpod Breached" alert.desc = "Someone is prying open the netpod. Find an exit." + /// Triggers when the netpod is taking damage and is under 50% /datum/component/avatar_connection/proc/on_netpod_damaged(datum/source) SIGNAL_HANDLER @@ -184,24 +199,28 @@ alert.name = "Integrity Compromised" alert.desc = "The netpod is damaged. Find an exit." + //if your bitrunning avatar somehow manages to acquire and consume a red pill, they will be ejected from the Matrix /datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/pill/pill, mob/feeder) SIGNAL_HANDLER if(pill.icon_state == "pill4") full_avatar_disconnect() + /// Triggers when a safe disconnect is called /datum/component/avatar_connection/proc/on_safe_disconnect(datum/source) SIGNAL_HANDLER full_avatar_disconnect() + /// Received message to sever connection /datum/component/avatar_connection/proc/on_sever_connection(datum/source) SIGNAL_HANDLER full_avatar_disconnect(cause_damage = TRUE, source = source) + /// Triggers when the server is shutting down /datum/component/avatar_connection/proc/on_shutting_down(datum/source, mob/living/hackerman) SIGNAL_HANDLER @@ -216,6 +235,7 @@ alert.name = "Domain Rebooting" alert.desc = "The domain is rebooting. Find an exit." + /// Triggers whenever an antag steps onto an exit turf and the server is emagged /datum/component/avatar_connection/proc/on_station_spawn(datum/source) SIGNAL_HANDLER @@ -230,6 +250,7 @@ alert.name = "Security Breach" alert.desc = "A hostile entity is breaching the safehouse. Find an exit." + /// Server has spawned a ghost role threat /datum/component/avatar_connection/proc/on_threat_created(datum/source) SIGNAL_HANDLER @@ -243,6 +264,7 @@ alert.name = "Threat Detected" alert.desc = "Data stream abnormalities present." + /// Returns the mind to the old body /datum/component/avatar_connection/proc/return_to_old_body() var/datum/mind/old_mind = old_mind_ref?.resolve() diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index e8dbd72228c..34a870a3426 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -76,9 +76,6 @@ var/obj/item/card/id/outfit_id = avatar.wear_id if(outfit_id) - outfit_id.assignment = "Bit Avatar" - outfit_id.registered_name = avatar.real_name - outfit_id.registered_account = new() outfit_id.registered_account.replaceable = FALSE diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 9afc8da18c1..8456eb9a627 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -174,3 +174,15 @@ return TRUE return FALSE + + +/// The name to use while bitrunning +/datum/preference/name/hacker_alias + explanation = "Hacker alias" + group = "bitrunning" + savefile_key = "hacker_alias" + allow_numbers = TRUE + relevant_job = /datum/job/bitrunner + +/datum/preference/name/hacker_alias/create_default_value() + return pick(GLOB.hacker_aliases) diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index a3bbdf2ede075bf1d15aaf868a7505413d65787b..086e886bab7b29d06045dd90e7d4db2a8bc758c7 100644 GIT binary patch delta 8763 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 aIY0|Js>NVu%qk4}*q=OoqSVUw-v0uM-8|6% delta 8765 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 diff --git a/strings/names/hackers.txt b/strings/names/hackers.txt new file mode 100644 index 00000000000..e2722fb09fd --- /dev/null +++ b/strings/names/hackers.txt @@ -0,0 +1,46 @@ +Ne0Phyte +CipherX +Gh0stWire +L33tByt3 +Vortex9 +Syn4pse +DarkMatt3r +QuantumDr1ft +Crash0verr1de +Z3r0C00l +NyxShad0w +Gl1tchR3aper +CryptoWra1th +Raz0rEdge +VoidWalk3r +Neur0mancer +EchoH3xx +DataSt0rm +CyberS1ren +Rogu3Protocol +Nexu5Prim3 +CircuitBr3aker +EnigmaPulse +PhantomBit +FluxC4pac1tor +OmegaC0dec +Ne0nRon1n +Senpa1Sw1pe +MechaM0chii +SakuraSn1per +WaifuWarri0r +KatanaKid99 +xXDarkL0rd69Xx +H4xx0rNinja +CyberNinja1337 +Ub3r1337Sk1llz +PhrEaK420 +IRCWizard69 +EliteWar3zKing +Y2KPwn3r +BBSPh34r +BlackWill0w69 +2038Pr0blem +Sp4ceW1nd +B0bbyT4bles +C0deInjector diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx index 91502644faa..24aab8eba74 100644 --- a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx @@ -15,7 +15,7 @@ type ContentSection = { /** * The primary content display for points of interest. - * Renders a scrollable section replete collapsibles for each + * Renders a scrollable section replete with collapsibles for each * observable group. */ export function OrbitContent(props) {