Skip to content

Commit

Permalink
Posibrains no longer limited to 1, but cyborgs cannot have repeat nam…
Browse files Browse the repository at this point in the history
…es (#11426)

* Removes limit on posibrains, adds name randomizer

* Update mobs.dm

* Reworks the whole thing
  • Loading branch information
Rukofamicom authored Sep 8, 2024
1 parent 9c06c40 commit 275b0c5
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 10 deletions.
19 changes: 19 additions & 0 deletions code/__HELPERS/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -775,6 +775,25 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
return TRUE
return FALSE

/// Special handler for cyborg naming to check if cyborg name preferences match a name that has already been used. Returns TRUE if preferences are good to use and FALSE if not.
/mob/proc/check_cyborg_name(client/C, obj/item/mmi/mmi)
var/name = C?.prefs?.read_character_preference(/datum/preference/name/cyborg)

//Name is original, add it to the list to prevent it from being used again and return TRUE
if(!(name in GLOB.cyborg_name_list))
GLOB.cyborg_name_list += name
mmi.original_name = name
return TRUE

//Name is not original, but is this the original user of the name? If so we still return TRUE but do not need to add it to the list
else if(name == mmi.original_name)
return TRUE

//This name has already been taken and this is not the original user, return FALSE
else
to_chat(C.mob, "<span class='warning'>Cyborg name already used this round by another character, your name has been randomized</span>")
return FALSE

/proc/view_or_range(distance = world.view , center = usr , type)
switch(type)
if("view")
Expand Down
2 changes: 1 addition & 1 deletion code/_globalvars/lists/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup)

GLOBAL_LIST_EMPTY(emote_list)

GLOBAL_LIST_EMPTY(posi_key_list)
GLOBAL_LIST_EMPTY(cyborg_name_list)

GLOBAL_LIST_INIT(construct_radial_images, list(
CONSTRUCT_JUGGERNAUT = image(icon = 'icons/mob/cult.dmi', icon_state = "juggernaut"),
Expand Down
2 changes: 1 addition & 1 deletion code/modules/jobs/job_types/_job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -504,5 +504,5 @@
mmi.brainmob.real_name = organic_name //the name of the brain inside the cyborg is the robotized human's name.
mmi.brainmob.name = organic_name
// If this checks fails, then the name will have been handled during initialization.
if(player_client.prefs.read_character_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME)
if(player_client.prefs.read_character_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME && check_cyborg_name(player_client, mmi))
apply_pref_name(/datum/preference/name/cyborg, player_client)
2 changes: 2 additions & 0 deletions code/modules/mob/living/brain/MMI.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
var/datum/ai_laws/laws = new()
var/force_replace_ai_name = FALSE
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
///Used to reserve an "original" cyborg name. When this mmi first becomes a cyborg, their name will be stored here in case of deconstruction.
var/original_name

/obj/item/mmi/Initialize(mapload)
. = ..()
Expand Down
7 changes: 1 addition & 6 deletions code/modules/mob/living/brain/posibrain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,6 @@ GLOBAL_VAR(posibrain_notify_cooldown)
return FALSE
if(is_occupied() || QDELETED(brainmob) || QDELETED(src) || QDELETED(user))
return FALSE
if(user.ckey in GLOB.posi_key_list)
to_chat(user, "<span class='warning'>Positronic brain spawns limited to 1 per round.</span>")
return FALSE
if(!(GLOB.ghost_role_flags & GHOSTROLE_SILICONS))
to_chat(user, "<span class='warning'>Central Command has temporarily outlawed posibrain sentience in this sector...</span>")
return FALSE
Expand All @@ -108,9 +105,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
return FALSE
if(brainmob.suiciding) //clear suicide status if the old occupant suicided.
brainmob.set_suicide(FALSE)
var/ckey = user.ckey
if(transfer_personality(user))
GLOB.posi_key_list += ckey
transfer_personality(user)

var/datum/job/posibrain/pj = SSjob.GetJob(JOB_NAME_POSIBRAIN)
pj.remove_posi_slot(src)
Expand Down
8 changes: 6 additions & 2 deletions code/modules/mob/living/silicon/robot/robot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -297,8 +297,12 @@
if(custom_name)
changed_name = custom_name
if(changed_name == "" && C && C.prefs.read_character_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME)
if(apply_pref_name(/datum/preference/name/cyborg, C))
return //built in camera handled in proc
if(check_cyborg_name(C, mmi))
if(apply_pref_name(/datum/preference/name/cyborg, C))
return //built in camera handled in proc
else
//Failed the vibe check on name theft, time to randomize it
changed_name = get_standard_name()
if(!changed_name)
changed_name = get_standard_name()

Expand Down

0 comments on commit 275b0c5

Please sign in to comment.