diff --git a/code/__HELPERS/stonekeep.dm b/code/__HELPERS/stonekeep.dm index 237e221b9ec..f1891f53f8e 100644 --- a/code/__HELPERS/stonekeep.dm +++ b/code/__HELPERS/stonekeep.dm @@ -72,21 +72,21 @@ return key return null -/proc/is_human_part_visible(mob/living/carbon/human/human, flags_inv) - if(!istype(human)) +/proc/is_human_part_visible(mob/living/carbon/C, flags_inv) // tee-hee, I'm not a human at all! + if(!istype(C)) return TRUE if(flags_inv == NONE) return TRUE - var/list/worn_items = get_all_worn_items(human) + var/list/worn_items = get_all_worn_items(C) for(var/obj/item/item as anything in worn_items) if(item.flags_inv & flags_inv) return FALSE return TRUE -/proc/get_all_worn_items(mob/living/carbon/human/human) +/proc/get_all_worn_items(mob/living/carbon/C) var/list/worn_items = list() for(var/slot in DEFAULT_SLOT_PRIORITY) - var/obj/item/item = human.get_item_by_slot(slot) + var/obj/item/item = C.get_item_by_slot(slot) if(!item) continue worn_items += item diff --git a/code/datums/migrants/waves/grenzelhoft_wave.dm b/code/datums/migrants/waves/grenzelhoft_wave.dm index 77554bc2100..35a6d661503 100644 --- a/code/datums/migrants/waves/grenzelhoft_wave.dm +++ b/code/datums/migrants/waves/grenzelhoft_wave.dm @@ -10,6 +10,8 @@ allowed_sexes = list(MALE) allowed_races = RACES_PLAYER_GRENZ is_recognized = TRUE + honorary = "Count" + honorary_f = "Countess" jobstats = list( STATKEY_INT = 1, @@ -42,12 +44,6 @@ /datum/job/migrant/grenzelhoft_count/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Count" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(!spawned.dna?.species) return var/datum/species/species = spawned.dna.species @@ -83,6 +79,9 @@ allowed_sexes = list(FEMALE) allowed_races = RACES_PLAYER_GRENZ is_recognized = TRUE + honorary = "Count" + honorary_f = "Countess" + jobstats = list( STATKEY_INT = 1, @@ -114,12 +113,6 @@ /datum/job/migrant/grenzelhoft_countess/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Countess" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(!spawned.dna?.species) return var/datum/species/species = spawned.dna.species @@ -152,7 +145,6 @@ title = "Grenzelhoft Knight" tutorial = "Your liege, the count and the countess have both took the duty given by the council to voyage to Vanderlin, ensure their survival and obey their orders." outfit = /datum/outfit/grenzelhoft_knight - allowed_sexes = list(MALE) allowed_races = RACES_PLAYER_GRENZ is_recognized = TRUE exp_types_granted = list(EXP_TYPE_COMBAT) @@ -162,6 +154,8 @@ STATKEY_CON = 2, STATKEY_SPD = -1, ) + honorary = "Ritter" + honorary_f = "Ritterin" skills = list( /datum/skill/combat/wrestling = 3, @@ -178,14 +172,6 @@ /datum/job/migrant/grenzelhoft_knight/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Ritter" - if(spawned.pronouns == SHE_HER) - honorary = "Ritterin" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(!spawned.dna?.species) return var/datum/species/species = spawned.dna.species diff --git a/code/datums/migrants/waves/heartfelt_wave.dm b/code/datums/migrants/waves/heartfelt_wave.dm index bd7822b8ccf..5d727c80eaf 100644 --- a/code/datums/migrants/waves/heartfelt_wave.dm +++ b/code/datums/migrants/waves/heartfelt_wave.dm @@ -11,6 +11,9 @@ allowed_races = RACES_PLAYER_NONDISCRIMINATED blacklisted_species = list(SPEC_ID_HALFLING) is_recognized = TRUE + honorary = "Lord" + honorary_f = "Lady" + jobstats = list( STATKEY_STR = 1, @@ -77,6 +80,9 @@ allowed_races = RACES_PLAYER_NONDISCRIMINATED blacklisted_species = list(SPEC_ID_HALFLING) is_recognized = TRUE + honorary = "Lord" + honorary_f = "Lady" + jobstats = list( STATKEY_INT = 3, @@ -145,6 +151,9 @@ allowed_races = RACES_PLAYER_NONDISCRIMINATED blacklisted_species = list(SPEC_ID_HALFLING) is_recognized = TRUE + honorary = "Lord" + honorary_f = "Lady" + jobstats = list( STATKEY_STR = 2, @@ -209,6 +218,8 @@ STATKEY_SPD = -1, STATKEY_INT = 2, ) + honorary = "Sir" + honorary_f = "Dame" skills = list( /datum/skill/craft/engineering = 3, @@ -250,14 +261,6 @@ index = spawned.real_name S.name = "knight tabard ([index])" - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - var/obj/item/clothing/cloak/boiler/boiler = locate() in spawned.get_all_gear() if(boiler) SEND_SIGNAL(boiler, COMSIG_ATOM_STEAM_INCREASE, rand(500, 900)) diff --git a/code/datums/migrants/waves/itinerant_knight_wave.dm b/code/datums/migrants/waves/itinerant_knight_wave.dm index 85e8a3017c4..7cc2318d926 100644 --- a/code/datums/migrants/waves/itinerant_knight_wave.dm +++ b/code/datums/migrants/waves/itinerant_knight_wave.dm @@ -18,6 +18,8 @@ STATKEY_END = 3, STATKEY_SPD = -2, ) + honorary = "Sir" + honorary_f = "Dame" skills = list( /datum/skill/combat/polearms = 4, @@ -47,11 +49,6 @@ /datum/job/migrant/itinerant_knight/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Itinerant Knight" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" /datum/outfit/itinerant_knight name = "Itinerant Knight (Migrant Wave)" diff --git a/code/datums/migrants/waves/nomad_migration.dm b/code/datums/migrants/waves/nomad_migration.dm index 33cde2933df..fcae6bdb57c 100644 --- a/code/datums/migrants/waves/nomad_migration.dm +++ b/code/datums/migrants/waves/nomad_migration.dm @@ -14,6 +14,8 @@ STATKEY_END = 2, STATKEY_PER = 2, ) + honorary_suffix = "Khan" + honorary_suffix_f = "Khatun" skills = list( /datum/skill/combat/swords = 4, @@ -47,13 +49,6 @@ /datum/job/migrant/khan/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Khan" - if(spawned.pronouns == SHE_HER) - honorary = "Khatun" - spawned.real_name = "[prev_real_name] [honorary]" - spawned.name = "[prev_name] [honorary]" new /mob/living/simple_animal/hostile/retaliate/saigabuck/tame/saddled(get_turf(spawned)) /datum/outfit/khan diff --git a/code/datums/migrants/waves/rockhill_wave.dm b/code/datums/migrants/waves/rockhill_wave.dm index f956f577a81..35ce35c148c 100644 --- a/code/datums/migrants/waves/rockhill_wave.dm +++ b/code/datums/migrants/waves/rockhill_wave.dm @@ -10,6 +10,7 @@ allowed_sexes = list(MALE, FEMALE) allowed_races = RACES_PLAYER_NONDISCRIMINATED is_recognized = TRUE + honorary = "Mayor" jobstats = list( STATKEY_STR = 1, @@ -97,6 +98,9 @@ STATKEY_END = 2, STATKEY_SPD = -1, ) + honorary = "Sir" + honorary_f = "Dame" + skills = list( /datum/skill/combat/polearms = 4, @@ -137,14 +141,6 @@ index = spawned.real_name S.name = "knight tabard ([index])" - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - /datum/outfit/rockhill/knight name = "Knight of Rockhill (Migrant Wave)" head = /obj/item/clothing/head/helmet @@ -184,6 +180,7 @@ STATKEY_INT = 2, STATKEY_END = 2, ) + honorary = "Serjeant" skills = list( /datum/skill/combat/axesmaces = 3, diff --git a/code/datums/migrants/waves/sweetshare.dm b/code/datums/migrants/waves/sweetshare.dm index 92baf3e8018..13cb3e07e91 100644 --- a/code/datums/migrants/waves/sweetshare.dm +++ b/code/datums/migrants/waves/sweetshare.dm @@ -19,6 +19,8 @@ STATKEY_STR = -2, STATKEY_CON = -1, ) + honorary_suffix = "the Candyman" + honorary_suffix_f = "the Candywoman" skills = list( /datum/skill/combat/knives = 1, @@ -38,14 +40,6 @@ /datum/job/migrant/sweetshare/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Candyman" - if(spawned.pronouns == SHE_HER) - honorary = "Candywoman" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - /datum/outfit/sweetshare name = "Candyman (Migrant Wave)" shirt = /obj/item/clothing/shirt/undershirt/colored/black diff --git a/code/datums/migrants/waves/zalad_wave.dm b/code/datums/migrants/waves/zalad_wave.dm index 640d711a29a..f204c77f647 100644 --- a/code/datums/migrants/waves/zalad_wave.dm +++ b/code/datums/migrants/waves/zalad_wave.dm @@ -10,6 +10,8 @@ allowed_sexes = list(MALE) allowed_races = RACES_PLAYER_ZALADIN is_recognized = TRUE + honorary = "Emir" + honorary_f = "Amirah" jobstats = list( STATKEY_INT = 1, @@ -47,10 +49,6 @@ /datum/job/migrant/zalad_migration/emir/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - spawned.real_name = "Emir [prev_real_name]" - spawned.name = "Emir [prev_name]" if(spawned.dna?.species) if(spawned.dna.species.id == SPEC_ID_HUMEN) @@ -102,6 +100,10 @@ STATKEY_END = 2, ) + honorary = "Emir" + honorary_f = "Amirah" + + skills = list( /datum/skill/misc/swimming = 2, /datum/skill/misc/climbing = 2, @@ -133,12 +135,6 @@ /datum/job/migrant/zalad_migration/amirah/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - - spawned.real_name = "Amirah [prev_real_name]" - spawned.name = "Amirah [prev_name]" - if(spawned.dna?.species) if(spawned.dna.species.id == SPEC_ID_HUMEN) spawned.dna.species.native_language = "Zalad" diff --git a/code/game/objects/structures/fake_machines/titan.dm b/code/game/objects/structures/fake_machines/titan.dm index a131ff881cc..e36963e1858 100644 --- a/code/game/objects/structures/fake_machines/titan.dm +++ b/code/game/objects/structures/fake_machines/titan.dm @@ -428,7 +428,7 @@ GLOBAL_LIST_EMPTY(roundstart_court_agents) possible_positions += GLOB.apprentices_positions possible_positions += GLOB.youngfolk_positions possible_positions += GLOB.allmig_positions - possible_positions -= list("Monarch", "Innkeepers Son") + possible_positions -= list("Monarch", "Innkeepers Son", "Wretch", "Bandit", ) var/new_pos = input(user, "Select their new position", src, null) as anything in possible_positions if(isnull(victim)) return @@ -442,6 +442,7 @@ GLOBAL_LIST_EMPTY(roundstart_court_agents) if(victim.mind?.assigned_role) new_pos = victim.mind.assigned_role.get_informed_title(victim) + victim.mind.assigned_role.assign_honorary_titles(victim) if(!SScommunications.can_announce(user)) return diff --git a/code/game/say.dm b/code/game/say.dm index 5f57d087600..d2377d07593 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -20,12 +20,13 @@ return TRUE /atom/movable/proc/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language = null, list/message_mods = list(), original_message) - var/rendered = compose_message(src, message_language, message, , spans, message_mods) + var/rendered = compose_message(src, message_language, message, null, spans, message_mods, TRUE) for(var/atom/movable/hearing_movable as anything in get_hearers_in_view(range, source)) if(!hearing_movable) // theoretically this should use as anything because it shouldnt be able to get nulls but there are reports that it does. stack_trace("somehow there's a null returned from get_hearers_in_view() in send_speech!") continue hearing_movable.Hear(rendered, src, message_language, message, , spans, message_mods, original_message) + /atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), face_name = FALSE) //This proc uses text() because it is faster than appending strings. Thanks BYOND. //Basic span @@ -42,7 +43,7 @@ if(ishuman(speaker)) var/mob/living/carbon/human/H = speaker if(face_name) - namepart = "[H.get_face_name()]" //So "fake" speaking like in hallucinations does not give the speaker away if disguised + namepart = "[H.get_visible_name()]" //So "fake" speaking like in hallucinations does not give the speaker away if disguised if(H.voice_color) colorpart = "" if(speaker.voicecolor_override) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7f75eb1b960..d577db7258f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1119,8 +1119,10 @@ priest_job?.remove_spells(HL) GLOB.excommunicated_players |= HL.real_name HL.cleric?.excommunicate() + HL.honorary = null priest_job?.add_spells(M) + priest_job?.assign_honorary_titles(M) M.mind.set_assigned_role(/datum/job/priest) M.job = "Priest" M.set_patron(/datum/patron/divine/astrata) diff --git a/code/modules/antagonists/villain/harlequinn/enhanced_mimicry.dm b/code/modules/antagonists/villain/harlequinn/enhanced_mimicry.dm index 966088e428f..26c09b240b7 100644 --- a/code/modules/antagonists/villain/harlequinn/enhanced_mimicry.dm +++ b/code/modules/antagonists/villain/harlequinn/enhanced_mimicry.dm @@ -25,6 +25,8 @@ var/old_gender var/old_voice var/transformed = FALSE + var/old_honorary + var/old_honorary_s var/transformation_stability = 100 // Decreases over time @@ -47,6 +49,8 @@ old_facial_hair_color = transformer.get_facial_hair_color() old_facial_hair = facial?.accessory_type old_gender = transformer.gender + old_honorary = transformer.honorary + old_honorary_s = transformer.honorary_suffix /datum/action/cooldown/spell/enhanced_mimicry/is_valid_target(atom/cast_on) . = ..() @@ -79,6 +83,9 @@ transformer.real_name = target.dna.real_name transformer.name = target.get_visible_name() transformer.gender = target.gender + transformer.honorary = target.honorary + transformer.honorary_suffix = target.honorary_suffix + // Copy physical features with high accuracy var/datum/bodypart_feature/hair/target_feature = target.get_bodypart_feature_of_slot(BODYPART_FEATURE_HAIR) @@ -135,6 +142,8 @@ transformer.real_name = old_dna.real_name transformer.name = transformer.get_visible_name() transformer.gender = old_gender + transformer.honorary = old_honorary + transformer.honorary_suffix = old_honorary_s var/obj/item/organ/eyes/eyes = transformer.getorganslot(ORGAN_SLOT_EYES) eyes.eye_color = old_eye_color diff --git a/code/modules/antagonists/villain/neu_vampires/covens/coven_powers/obfuscate.dm b/code/modules/antagonists/villain/neu_vampires/covens/coven_powers/obfuscate.dm index e5a8dd203a1..66ccff84605 100644 --- a/code/modules/antagonists/villain/neu_vampires/covens/coven_powers/obfuscate.dm +++ b/code/modules/antagonists/villain/neu_vampires/covens/coven_powers/obfuscate.dm @@ -140,6 +140,8 @@ var/old_gender var/old_voice var/transformed = FALSE + var/old_honorary + var/old_honorary_s var/mob/living/carbon/human/current_target // this shit isnt even remotely good, we need a better system for transferring identities and storing them than this @@ -157,6 +159,9 @@ old_facial_hair_color = transformer.get_facial_hair_color() old_facial_hair = facial?.accessory_type old_gender = transformer.gender + old_honorary = transformer.honorary + old_honorary_s = transformer.honorary_suffix + /datum/coven_power/obfuscate/mask_of_a_thousand_faces/activate() . = ..() @@ -194,6 +199,9 @@ user.real_name = target.dna.real_name user.name = target.get_visible_name() user.gender = target.gender + user.honorary = target.honorary + user.honorary_suffix = target.honorary_suffix + // Copy physical features with high accuracy var/datum/bodypart_feature/hair/target_feature = target.get_bodypart_feature_of_slot(BODYPART_FEATURE_HAIR) @@ -230,6 +238,10 @@ user.real_name = old_dna.real_name user.name = user.get_visible_name() user.gender = old_gender + user.honorary = old_honorary + user.honorary_suffix = old_honorary_s + + user.set_eye_color(old_eye_color, old_second_color, FALSE) user.set_facial_hair_color(old_facial_hair_color, FALSE) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index cb77cd17c50..19571ded818 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -186,6 +186,13 @@ /// Do we get passive income every day from our noble estates? var/noble_income = FALSE + /// Honorary titles appended to names. Based off pronouns + var/honorary + var/honorary_f + /// Same as above, but for suffixes. See Khan + var/honorary_suffix + var/honorary_suffix_f + /// Antagonist role to grant with this job var/datum/antagonist/antag_role @@ -344,6 +351,7 @@ if(voicepack_f) spawned.dna?.species.soundpack_f = new voicepack_f() + assign_honorary_titles(spawned) /// WHY WAS THIS ON OUTFIT??? It shouldn't be HERE either if(spawned.familytree_pref != FAMILY_NONE && !spawned.family_datum) SSfamilytree.AddLocal(spawned, spawned.familytree_pref) @@ -601,6 +609,16 @@ return title +/datum/job/proc/assign_honorary_titles(mob/living/carbon/grantee) + if(honorary) + grantee.honorary = honorary + if(honorary_f && grantee.pronouns == SHE_HER) + grantee.honorary = honorary_f + if(honorary_suffix) + grantee.honorary_suffix = honorary_suffix + if(honorary_suffix_f && grantee.pronouns == SHE_HER) + grantee.honorary_suffix = honorary_suffix_f + /datum/job/proc/set_spawn_and_total_positions(count) return spawn_positions diff --git a/code/modules/jobs/job_types/adventurer/types/combat/dredge.dm b/code/modules/jobs/job_types/adventurer/types/combat/dredge.dm index 843f0c6d2bc..f5b95ca8d92 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/dredge.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/dredge.dm @@ -204,11 +204,7 @@ spawned.change_stat(STATKEY_STR, 2) spawned.change_stat(STATKEY_END, 2) spawned.change_stat(STATKEY_SPD, -5) - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Black Knight" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" + spawned.honorary = "Black Knight" to_chat(spawned,span_info("\ Forgive me majesty for intruding unannounced. Todae I tilted with a Black Knight from a far land, and unseated him roundly with my lances' blow. I take no credit, because I was sneakily attacked by his ally, and soon dumped in the dirt myself.") ) diff --git a/code/modules/jobs/job_types/adventurer/types/combat/rare/assassin.dm b/code/modules/jobs/job_types/adventurer/types/combat/rare/assassin.dm index cd200b01571..9ceac4f74be 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/rare/assassin.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/rare/assassin.dm @@ -259,13 +259,7 @@ /datum/job_pack/assassin/assassin_noble/pick_pack(mob/living/carbon/human/picker) . = ..() - var/prev_real_name = picker.real_name - var/prev_name = picker.name - var/honorary = "Lord" - if(picker.pronouns == SHE_HER) - honorary = "Lady" - picker.real_name = "[honorary] [prev_real_name]" - picker.name = "[honorary] [prev_name]" + picker.honorary = picker.pronouns == SHE_HER ? "Lady" : "Lord" if(picker.gender == MALE) picker.adjust_skillrank(/datum/skill/combat/swords, 1, TRUE) diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/noble.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/noble.dm index f70022f1a2d..e65cf89b808 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/noble.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/noble.dm @@ -12,6 +12,8 @@ spells = list( /datum/action/cooldown/spell/undirected/call_bird = 1, ) + honorary = "Lord" + honorary_f = "Lady" jobstats = list( STATKEY_INT = 1, @@ -37,13 +39,6 @@ /datum/job/advclass/pilgrim/noble/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() spawned.adjust_skillrank(/datum/skill/misc/music, pick(1, 2), TRUE) - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Lord" - if(spawned.pronouns == SHE_HER) - honorary = "Lady" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" var/static/list/selectable = list( \ "Dagger" = /obj/item/weapon/knife/dagger/silver, \ diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm index 54b92ffeb41..c3d94fcc681 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm @@ -7,6 +7,8 @@ total_positions = 1 is_recognized = TRUE cmode_music = 'sound/music/cmode/combat_grenzelhoft.ogg' + honorary = "Count" + honorary_f = "Countess" jobstats = list( STATKEY_INT = 1, @@ -45,14 +47,6 @@ /datum/job/advclass/pilgrim/rare/grenzelhoft/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Count" - if(spawned.pronouns == SHE_HER) - honorary = "Countess" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(spawned.dna?.species.id == SPEC_ID_HUMEN) spawned.dna.species.native_language = "Old Psydonic" diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/zalad.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/zalad.dm index c4b6a7dbadd..1612108db87 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/zalad.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/zalad.dm @@ -7,6 +7,8 @@ total_positions = 1 cmode_music = 'sound/music/cmode/adventurer/CombatOutlander.ogg' is_recognized = TRUE + honorary = "Emir" + honorary_f = "Amirah" jobstats = list( STATKEY_INT = 1, @@ -40,14 +42,6 @@ /datum/job/advclass/pilgrim/rare/zaladin/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Emir" - if(spawned.pronouns == SHE_HER) - honorary = "Amirah" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(spawned.dna?.species) if(spawned.dna.species.id == SPEC_ID_HUMEN) spawned.dna.species.native_language = "Zalad" diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/antiquarian.dm b/code/modules/jobs/job_types/adventurer/types/wretch/antiquarian.dm index 941c3945d24..2f151d65125 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/antiquarian.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/antiquarian.dm @@ -53,7 +53,43 @@ ///datum/action/cooldown/spell/aoe/snuff, /datum/action/cooldown/spell/undirected/conjure_item/calling_card ) - + honoraries = list( + "Acquisitions Expert" = 0, + "the Cleptologist" = 1, + "the One Who Walks" = 1, + "of Deadly Shadows" = 1, + "the Prince of Shadows" = 1, + "the Recovery Specialist" = 1, + "the Acquirer" = 1, + "the Antiquarian" = 1, + "the Art Critic" = 1, + "the Collector" = 1, + "the Courier" = 1, + "the Crow" = 1, + "the Fence" = 1, + "the Filcher" = 1, + "the Ghost" = 1, + "the Grifter" = 1, + "the Infiltrator" = 1, + "the Intruder" = 1, + "the Invisible" = 1, + "the Keeper" = 1, + "the Locksmith" = 1, + "the Lurker" = 1, + "the Magpie" = 1, + "the Mask" = 1, + "the Master Thief" = 1, + "the Night Watch" = 1, + "the Phantom" = 1, + "the Raven" = 1, + "the Respectable Citizen" = 1, + "the Shadow" = 1, + "the Skeleton Key" = 1, + "the Specialist" = 1, + "the Stalker" = 1, + "the Trickster" = 1, + "the Watcher" = 1, + ) /datum/outfit/wretch/antiquarian/pre_equip(mob/living/carbon/human/H) ..() @@ -76,15 +112,7 @@ /obj/item/reagent_containers/glass/bottle/stronghealthpot = 1, ) + /datum/job/advclass/wretch/antiquarian/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - if(alert("Do you wish for a random title? You will not receive one if you click No.", "", "Yes", "No") == "Yes") - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/title - var/list/titles = list("The Keeper", "The Phantom", "The Crow", "The Raven", "The Magpie", "The Courier", "The Mask", "The Shadow", "The Ghost", "The Fence", "The Intruder", "The Infiltrator", "The Filcher", "The Grifter", "He Who Walks", "The Invisible", "The Watcher", "The Master Thief", "The Dark Project", "The Lurker", "Prince of Shadows", "The Night Watch", "The Antiquarian", "Acquisitions Expert", "Cleptologist", "The Specialist", "The Stalker", "Of Deadly Shadows", "The Trickster", "The Respectable Citizen", "The Locksmith", "The Acquirer", "The Collector", "The Skeleton Key", "The Art Critic", "Recovery Specialist" ) //Dude, Trust. - title = pick(titles) - spawned.real_name = "[prev_real_name], [title]" - spawned.name = "[prev_name], [title]" - wretch_select_bounty(spawned) diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/bloodsucker.dm b/code/modules/jobs/job_types/adventurer/types/wretch/bloodsucker.dm index 895f0bb8c5e..8108e8d2a18 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/bloodsucker.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/bloodsucker.dm @@ -87,14 +87,6 @@ /datum/job_pack/bloodsucker_noble/pick_pack(mob/living/carbon/human/picker) . = ..() - var/prev_real_name = picker.real_name - var/prev_name = picker.name - var/honorary = "Lord" - if(picker.pronouns == SHE_HER) - honorary = "Lady" - picker.real_name = "[honorary] [prev_real_name]" - picker.name = "[honorary] [prev_name]" - picker.adjust_skillrank(/datum/skill/misc/music, pick(1,2), TRUE) if(picker.gender == FEMALE) @@ -186,13 +178,6 @@ /datum/job_pack/bloodsucker_count/pick_pack(mob/living/carbon/human/picker) . = ..() - var/prev_real_name = picker.real_name - var/prev_name = picker.name - var/honorary = "Count" - if(picker.pronouns == SHE_HER) - honorary = "Countess" - picker.real_name = "[honorary] [prev_real_name]" - picker.name = "[honorary] [prev_name]" if(!picker.has_language(/datum/language/oldpsydonic)) picker.grant_language(/datum/language/oldpsydonic) diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/deserter.dm b/code/modules/jobs/job_types/adventurer/types/wretch/deserter.dm index ef43fa660d9..a729fd7a134 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/deserter.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/deserter.dm @@ -45,14 +45,6 @@ /datum/job/advclass/wretch/disgraced/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - if(alert("Do you wish to be recognized as a non-foreigner?", "", "Yes", "No") == "Yes") REMOVE_TRAIT(spawned, TRAIT_FOREIGNER, TRAIT_GENERIC) diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/reject.dm b/code/modules/jobs/job_types/adventurer/types/wretch/reject.dm index 9bc95bf66bf..7e3411bfd4a 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/reject.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/reject.dm @@ -65,6 +65,7 @@ if(alert("Do you wish to be recognized as a non-foreigner?", "", "Yes", "No") == "Yes") REMOVE_TRAIT(spawned, TRAIT_FOREIGNER, TRAIT_GENERIC) + spawned.honorary = spawned.pronouns == SHE_HER ? "Rejected Princess" : "Rejected Prince" wretch_select_bounty(spawned) diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/vigilante.dm b/code/modules/jobs/job_types/adventurer/types/wretch/vigilante.dm index 27c718e006d..cc792456055 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/vigilante.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/vigilante.dm @@ -43,17 +43,46 @@ /datum/action/cooldown/spell/undirected/conjure_item/puffer ) + honoraries = list( + "Big Iron" = 0, + "Bodystacker" = 1, + "Corpsestacker" = 1, + "Dead or Alive" = 0, + "Guns Blazing" = 0, + "Heaven's Smile" = 0, + "High Noon" = 0, + "Last Sight" = 0, + "Lethal Shot" = 0, + "Mammon Shot" = 0, + "Mattarella" = 0, + "Freyja's-Dae Nite" = 0, + "Number One" = 0, + "of No Paradise" = 1, + "of the Gallows" = 1, + "Flintlock Chirurgeon" = 0, + "Subterra-Walker" = 1, + "the Cleaner" = 1, + "the Courier" = 1, + "the Desperado" = 1, + "the Equalizer" = 1, + "the First Murderer" = 1, + "the Gunslinger" = 1, + "the Hanged Man" = 1, + "the Hitman" = 1, + "the Killer Seven" = 1, + "the Lifestealer" = 1, + "the Mammon-Taker" = 1, + "the One Who Sold Creation" = 1, + "the Opposition" = 1, + "the Power-Monger" = 1, + "the Renegade" = 1, + "the Showoff" = 1, + "the Son of a Bitch" = 1, + "the Wanted Man" = 1, + ) + /datum/job/advclass/wretch/vigilante/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - if(alert("Do you wish for a random title? You will not receive one if you click No.", "", "Yes", "No") == "Yes") - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/title - var/list/titles = list("The Showoff", "The Gunslinger", "Mammon Shot", "The Desperado", "Last Sight", "The Courier", "Lethal Shot", "Guns Blazing", "Punished Shade", "The One Who Sold Creation", "V1", "V2", "The Opposition", "Mattarella", "High Noon", "Subterra-Walker", "Big Iron", "The Hanged Man", "The Equalizer", "Bodystacker", "Schotgonne Surgeon", "Of The Gallows", "The Renegade", "The Wanted Man", "Dead or Alive", "The Killer Seven", "The Cleaner", "The Son of a Bitch", "Mister Fridae Nite", "Heaven's Smile", "Of No Paradise", "Number One", "The Hitman", "Corpsestacker", "The First Murderer", "The Mammon-Taker", "The Lifestealer", "The Power-Monger") - title = pick(titles) - spawned.real_name = "[prev_real_name], [title]" - spawned.name = "[prev_name], [title]" - wretch_select_bounty(spawned) /datum/outfit/wretch/vigilante diff --git a/code/modules/jobs/job_types/adventurer/wretch.dm b/code/modules/jobs/job_types/adventurer/wretch.dm index 56baf540967..60949fc7d1d 100644 --- a/code/modules/jobs/job_types/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/adventurer/wretch.dm @@ -40,6 +40,20 @@ spawn_with_torch = TRUE department_flag = OUTSIDERS + /// An associative list of honorary titles to choose from. + /// The key is the title, the value indicates whether it is a prefix (0) or a suffix (1) + var/list/honoraries = list() + +/datum/job/advclass/wretch/after_spawn(mob/living/carbon/human/spawned, client/player_client) + . = ..() + if(length(honoraries) && alert("Do you wish for a random title? You will not receive one if you click No.", "", "Yes", "No") == "Yes") + var/honorary = pick(honoraries) + if(honoraries[honorary]) + spawned.honorary_suffix = honorary + else + spawned.honorary = honorary + + /datum/job/advclass/wretch/proc/wretch_select_bounty(mob/living/carbon/human/H) var/bounty_poster = browser_input_list(H, "Who placed a bounty on you?", "Filthy Criminal", list("The Divine Pantheon", "Kingsfield Expanse")) if(bounty_poster == "Kingsfield Expanse") diff --git a/code/modules/jobs/job_types/apprentices/prince.dm b/code/modules/jobs/job_types/apprentices/prince.dm index 97459817349..2f802871c72 100644 --- a/code/modules/jobs/job_types/apprentices/prince.dm +++ b/code/modules/jobs/job_types/apprentices/prince.dm @@ -22,6 +22,9 @@ allowed_races = RACES_PLAYER_ROYALTY allowed_ages = list(AGE_ADULT, AGE_CHILD) advclass_cat_rolls = list(CTAG_HEIR = 20) + honorary = "Prince" + honorary_f = "Princess" + outfit = /datum/outfit/heir diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 2e06eb66d7e..f00a34547f6 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -26,6 +26,7 @@ EXP_TYPE_CHURCH = 900, EXP_TYPE_COMBAT = 900 ) + honorary = "Grandmaster" jobstats = list( STATKEY_STR = 2, diff --git a/code/modules/jobs/job_types/church/monk.dm b/code/modules/jobs/job_types/church/monk.dm index 0c933e197ce..1cdc356ad69 100644 --- a/code/modules/jobs/job_types/church/monk.dm +++ b/code/modules/jobs/job_types/church/monk.dm @@ -27,6 +27,7 @@ STATKEY_PER = -1 ) + skills = list( /datum/skill/craft/sewing = 2, /datum/skill/misc/medicine = 3, diff --git a/code/modules/jobs/job_types/church/priest.dm b/code/modules/jobs/job_types/church/priest.dm index a7cf2c4deea..fd8cf851cbd 100644 --- a/code/modules/jobs/job_types/church/priest.dm +++ b/code/modules/jobs/job_types/church/priest.dm @@ -25,6 +25,7 @@ /datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling, /datum/action/cooldown/spell/undirected/call_bird/priest, ) + honorary = "Vicar" exp_type = list(EXP_TYPE_CHURCH) exp_types_granted = list(EXP_TYPE_CHURCH, EXP_TYPE_CLERIC, EXP_TYPE_LEADERSHIP) @@ -143,6 +144,7 @@ if(HL.job == "Monarch") HL.job = "Ex-Monarch" lord_job?.remove_spells(HL) + HL.honorary = "Former [lord_job.honorary]" if(HL.job == "Consort") HL.job = "Ex-Consort" consort_job?.remove_spells(HL) diff --git a/code/modules/jobs/job_types/garrison/forestwarden.dm b/code/modules/jobs/job_types/garrison/forestwarden.dm index 8d57a555759..0c58afa0c12 100644 --- a/code/modules/jobs/job_types/garrison/forestwarden.dm +++ b/code/modules/jobs/job_types/garrison/forestwarden.dm @@ -30,6 +30,7 @@ cmode_music = 'sound/music/cmode/garrison/CombatForestGarrison.ogg' job_bitflag = BITFLAG_GARRISON + honorary = "Warden" jobstats = list( STATKEY_STR = 2, @@ -66,14 +67,6 @@ /datum/job/forestwarden/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - add_verb(spawned, /mob/proc/haltyell) /datum/outfit/forestwarden diff --git a/code/modules/jobs/job_types/garrison/royal_knight.dm b/code/modules/jobs/job_types/garrison/royal_knight.dm index 889d597701a..96946f8d42c 100644 --- a/code/modules/jobs/job_types/garrison/royal_knight.dm +++ b/code/modules/jobs/job_types/garrison/royal_knight.dm @@ -29,6 +29,9 @@ EXP_TYPE_COMBAT = 1200 ) + honorary = "Sir" + honorary_f = "Dame" + jobstats = list( STATKEY_STR = 3, STATKEY_PER = 2, @@ -69,14 +72,6 @@ if(spawned.dna?.species?.id == SPEC_ID_HUMEN && spawned.gender == MALE) spawned.dna.species.soundpack_m = new /datum/voicepack/male/knight() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - /datum/job/advclass/royalknight inherit_parent_title = TRUE should_reset_stats = FALSE diff --git a/code/modules/jobs/job_types/garrison/town_elder.dm b/code/modules/jobs/job_types/garrison/town_elder.dm index f6a9a31428b..ea491b5699e 100644 --- a/code/modules/jobs/job_types/garrison/town_elder.dm +++ b/code/modules/jobs/job_types/garrison/town_elder.dm @@ -11,6 +11,7 @@ total_positions = 1 spawn_positions = 1 bypass_lastclass = TRUE + honorary = "Elder" allowed_ages = list(AGE_MIDDLEAGED, AGE_OLD, AGE_IMMORTAL) allowed_races = RACES_PLAYER_NONHERETICAL @@ -92,6 +93,7 @@ /datum/action/cooldown/spell/vicious_mockery, // /datum/action/cooldown/spell/bardic_inspiration ) + honorary = "Mayor" jobstats = list( STATKEY_STR = -1, @@ -159,6 +161,7 @@ STATKEY_END = 2, STATKEY_INT = 2 ) + honorary = "Foreman" skills = list( /datum/skill/misc/reading = 1, @@ -235,6 +238,7 @@ outfit = /datum/outfit/town_elder/hearth_acolyte category_tags = list(CTAG_TOWN_ELDER) allowed_patrons = ALL_TEMPLE_PATRONS + //honorary = "STUPID DUMB CLASS WHICH I HATE" jobstats = list( STATKEY_STR = 2, diff --git a/code/modules/jobs/job_types/garrison/watchlieutenant.dm b/code/modules/jobs/job_types/garrison/watchlieutenant.dm index 5fecbe2e307..54f35ade8d3 100644 --- a/code/modules/jobs/job_types/garrison/watchlieutenant.dm +++ b/code/modules/jobs/job_types/garrison/watchlieutenant.dm @@ -25,6 +25,7 @@ exp_type = list(EXP_TYPE_GARRISON) exp_types_granted = list(EXP_TYPE_COMBAT, EXP_TYPE_GARRISON, EXP_TYPE_LEADERSHIP) exp_requirements = list(EXP_TYPE_GARRISON = 900) + honorary = "Lieutenant" jobstats = list( STATKEY_STR = 2, diff --git a/code/modules/jobs/job_types/inquistion/inquisitor.dm b/code/modules/jobs/job_types/inquistion/inquisitor.dm index 7236943a0b4..e322c38d4b9 100644 --- a/code/modules/jobs/job_types/inquistion/inquisitor.dm +++ b/code/modules/jobs/job_types/inquistion/inquisitor.dm @@ -1,5 +1,6 @@ /datum/job/inquisitor title = "Herr Prafekt" + f_title = "Frau Prafekt" department_flag = INQUISITION faction = "Station" total_positions = 1 @@ -10,6 +11,8 @@ SPEC_ID_HUMEN,\ SPEC_ID_DWARF,\ ) + honorary = "Herr Prafekt" + honorary_f = "Frau Prafekt" //You MUST have a Psydonite character to start. Just so people don't get japed into Oops Suddenly Psydon! allowed_patrons = list(/datum/patron/psydon) // you have to keep the official church stance, no way an extremist psydonite could become inquisitor tutorial = "This is the week. All your lessons have led to this moment. Your students follow you with eager steps and breathless anticipation. You’re to observe their hunt, and see if they can banish the evils haunting Psydonia, and rise up to become true inquisitors. A guide to them, a monster to others. You are the thing that goes bump in the night." @@ -56,14 +59,6 @@ spawned.hud_used?.bloodpool?.desc = "Devotion: [spawned.bloodpool]/[spawned.maxbloodpool]" spawned.maxbloodpool = 1000 - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Herr Prafekt" - if(spawned.pronouns == SHE_HER) - honorary = "Frau Prafekt" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - var/datum/species/species = spawned.dna?.species if(!species) return diff --git a/code/modules/jobs/job_types/nobility/archivist.dm b/code/modules/jobs/job_types/nobility/archivist.dm index 5968bc7891e..4396f1c021b 100644 --- a/code/modules/jobs/job_types/nobility/archivist.dm +++ b/code/modules/jobs/job_types/nobility/archivist.dm @@ -27,6 +27,9 @@ EXP_TYPE_LIVING = 300 ) + honorary = "Lord" + honorary_f = "Lady" + languages = list( /datum/language/elvish, /datum/language/dwarvish, diff --git a/code/modules/jobs/job_types/nobility/captain.dm b/code/modules/jobs/job_types/nobility/captain.dm index 0abeaed339b..f637e94a894 100644 --- a/code/modules/jobs/job_types/nobility/captain.dm +++ b/code/modules/jobs/job_types/nobility/captain.dm @@ -10,6 +10,7 @@ total_positions = 1 spawn_positions = 1 bypass_lastclass = TRUE + honorary = "Captain" allowed_races = RACES_PLAYER_NONDISCRIMINATED blacklisted_species = list(SPEC_ID_HALFLING) @@ -67,14 +68,6 @@ /datum/job/captain/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Sir" - if(spawned.pronouns == SHE_HER) - honorary = "Dame" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - add_verb(spawned, /mob/proc/haltyell) if(spawned.dna?.species?.id == SPEC_ID_HUMEN) diff --git a/code/modules/jobs/job_types/nobility/consort.dm b/code/modules/jobs/job_types/nobility/consort.dm index 566515d9667..3e4758e60a5 100644 --- a/code/modules/jobs/job_types/nobility/consort.dm +++ b/code/modules/jobs/job_types/nobility/consort.dm @@ -20,6 +20,8 @@ cmode_music = 'sound/music/cmode/nobility/combat_noble.ogg' noble_income = 22 + honorary = "Consort" + job_bitflag = BITFLAG_ROYALTY exp_type = list(EXP_TYPE_LIVING, EXP_TYPE_NOBLE) @@ -37,6 +39,13 @@ TRAIT_NUTCRACKER ) +/datum/job/consort/New() + . = ..() + if(SSmapping.config?.monarch_title) + honorary = "[SSmapping.config.monarch_title] Consort" + honorary_f = "[SSmapping.config.monarch_title] Consort" //in case we dont have a female title and they share + if(SSmapping.config?.monarch_title_f) + honorary_f = "[SSmapping.config.monarch_title_f] Consort" /datum/job/consort/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() diff --git a/code/modules/jobs/job_types/nobility/courtphys.dm b/code/modules/jobs/job_types/nobility/courtphys.dm index b29ea23d1d8..635cfa67d14 100644 --- a/code/modules/jobs/job_types/nobility/courtphys.dm +++ b/code/modules/jobs/job_types/nobility/courtphys.dm @@ -27,6 +27,10 @@ STATKEY_CON = -1 ) + honorary = "Lord" + honorary_f = "Lady" + + skills = list( /datum/skill/misc/reading = 5, /datum/skill/craft/crafting = 2, diff --git a/code/modules/jobs/job_types/nobility/hand.dm b/code/modules/jobs/job_types/nobility/hand.dm index 6b308faede8..b8e9902dba7 100644 --- a/code/modules/jobs/job_types/nobility/hand.dm +++ b/code/modules/jobs/job_types/nobility/hand.dm @@ -27,6 +27,9 @@ EXP_TYPE_NOBLE = 300, ) + honorary = "Lord" + honorary_f = "Lady" + mind_traits = list( TRAIT_KNOW_KEEP_DOORS ) @@ -67,7 +70,7 @@ /datum/job/advclass/hand/hand title = "Hand" - tutorial = " You have played blademaster and strategist to the Noble-Family for so long that you are a master tactician, something you exploit with potent conviction. Let no man ever forget whose ear you whisper into. You've killed more men with swords than any spymaster could ever claim to." + tutorial = "You have played blademaster and strategist to the Noble-Family for so long that you are a master tactician, something you exploit with potent conviction. Let no man ever forget whose ear you whisper into. You've killed more men with swords than any spymaster could ever claim to." outfit = /datum/outfit/hand/handclassic category_tags = list(CTAG_HAND) cmode_music = 'sound/music/cmode/nobility/combat_noble.ogg' @@ -93,6 +96,7 @@ /datum/skill/misc/riding = 2, /datum/skill/labor/mathematics = 3 ) + honorary = "General" traits = list( TRAIT_HEAVYARMOR @@ -128,6 +132,7 @@ STATKEY_SPD = 4, STATKEY_INT = 2 ) + honorary = "Spymaster" skills = list( /datum/skill/combat/axesmaces = 2, @@ -194,6 +199,7 @@ STATKEY_INT = 4, STATKEY_PER = 3 ) + honorary = "Councilor" skills = list( /datum/skill/combat/crossbows = 3, diff --git a/code/modules/jobs/job_types/nobility/lord.dm b/code/modules/jobs/job_types/nobility/lord.dm index e45b13e6be4..8486d00aa1d 100644 --- a/code/modules/jobs/job_types/nobility/lord.dm +++ b/code/modules/jobs/job_types/nobility/lord.dm @@ -35,6 +35,10 @@ GLOBAL_LIST_EMPTY(lord_titles) EXP_TYPE_LEADERSHIP = 300 ) + //These change on map load + honorary = "Lord" + honorary_f = "Lady" + jobstats = list( STATKEY_STR = 1, STATKEY_INT = 3, @@ -73,6 +77,14 @@ GLOBAL_LIST_EMPTY(lord_titles) voicepack_m = /datum/voicepack/male/evil +/datum/job/lord/New() + . = ..() + if(SSmapping.config?.monarch_title) + honorary = SSmapping.config.monarch_title + honorary_f = SSmapping.config.monarch_title //in case we dont have a female title and they share + if(SSmapping.config?.monarch_title_f) + honorary_f = SSmapping.config.monarch_title_f + /datum/job/lord/get_informed_title(mob/mob, ignore_pronouns, change_title = FALSE, new_title) if(change_title) ruler_title = new_title @@ -158,16 +170,14 @@ GLOBAL_LIST_EMPTY(lord_titles) total_positions = 0 spawn_positions = 0 display_order = JDO_LORD + honorary = "Former Lord" + honorary_f = "Former Lady" + +/datum/job/exlord/New() + . = ..() + if(SSmapping.config?.monarch_title) + honorary = "Former [SSmapping.config.monarch_title]" + honorary_f = "Former [SSmapping.config.monarch_title]" //in case we dont have a female title and they share + if(SSmapping.config?.monarch_title_f) + honorary_f = "Former [SSmapping.config.monarch_title_f]" -/proc/give_lord_surname(mob/living/carbon/human/family_guy, preserve_original = FALSE) - if(!GLOB.lordsurname) - return - if(preserve_original) - family_guy.fully_replace_character_name(family_guy.real_name, family_guy.real_name + " " + GLOB.lordsurname) - return family_guy.real_name - var/list/chopped_name = splittext(family_guy.real_name, " ") - if(length(chopped_name) > 1) - family_guy.fully_replace_character_name(family_guy.real_name, chopped_name[1] + " " + GLOB.lordsurname) - else - family_guy.fully_replace_character_name(family_guy.real_name, family_guy.real_name + " " + GLOB.lordsurname) - return family_guy.real_name diff --git a/code/modules/jobs/job_types/nobility/minor_noble.dm b/code/modules/jobs/job_types/nobility/minor_noble.dm index edf532b99c2..ee6e0443934 100644 --- a/code/modules/jobs/job_types/nobility/minor_noble.dm +++ b/code/modules/jobs/job_types/nobility/minor_noble.dm @@ -19,6 +19,9 @@ spells = list(/datum/action/cooldown/spell/undirected/call_bird) job_bitflag = BITFLAG_ROYALTY + honorary = "Lord" + honorary_f = "Lady" + exp_types_granted = list(EXP_TYPE_NOBLE) jobstats = list( @@ -45,14 +48,6 @@ /datum/job/minor_noble/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Lord" - if(spawned.pronouns == SHE_HER) - honorary = "Lady" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - spawned.adjust_skillrank(/datum/skill/misc/music, pick(1,2)) if(istype(spawned.patron, /datum/patron/inhumen/baotha)) diff --git a/code/modules/jobs/job_types/nobility/steward.dm b/code/modules/jobs/job_types/nobility/steward.dm index 712c872d4bf..2df6d61be35 100644 --- a/code/modules/jobs/job_types/nobility/steward.dm +++ b/code/modules/jobs/job_types/nobility/steward.dm @@ -24,6 +24,9 @@ EXP_TYPE_LIVING = 300 ) + honorary = "Lord" + honorary_f = "Lady" + jobstats = list( STATKEY_STR = -2, STATKEY_INT = 5, diff --git a/code/modules/jobs/job_types/other/folkheroes/paladin.dm b/code/modules/jobs/job_types/other/folkheroes/paladin.dm index bb1ebd5ddeb..cb5b4decac4 100644 --- a/code/modules/jobs/job_types/other/folkheroes/paladin.dm +++ b/code/modules/jobs/job_types/other/folkheroes/paladin.dm @@ -23,6 +23,8 @@ /datum/skill/labor/mathematics = 3, ) + honorary = "Paladin" + jobstats = list( STATKEY_STR = 2, STATKEY_PER = 2, diff --git a/code/modules/jobs/job_types/other/folkheroes/swordmaster.dm b/code/modules/jobs/job_types/other/folkheroes/swordmaster.dm index cfa8cc44703..b2151fed666 100644 --- a/code/modules/jobs/job_types/other/folkheroes/swordmaster.dm +++ b/code/modules/jobs/job_types/other/folkheroes/swordmaster.dm @@ -7,6 +7,8 @@ total_positions = 1 category_tags = list(CTAG_FOLKHEROES) cmode_music = 'sound/music/cmode/combat_grenzelhoft.ogg' + honorary = "Ritter" + honorary_f = "Ritterin" skills = list( /datum/skill/combat/wrestling = 2, @@ -32,14 +34,6 @@ /datum/job/advclass/combat/swordmaster/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/prev_real_name = spawned.real_name - var/prev_name = spawned.name - var/honorary = "Ritter" - if(spawned.pronouns == SHE_HER) - honorary = "Ritterin" - spawned.real_name = "[honorary] [prev_real_name]" - spawned.name = "[honorary] [prev_name]" - var/datum/species/species = spawned.dna?.species if(species && species.id == SPEC_ID_HUMEN) species.native_language = "Old Psydonic" diff --git a/code/modules/jobs/job_types/serfs/matron.dm b/code/modules/jobs/job_types/serfs/matron.dm index 353b582be70..92f5a304d37 100644 --- a/code/modules/jobs/job_types/serfs/matron.dm +++ b/code/modules/jobs/job_types/serfs/matron.dm @@ -20,6 +20,7 @@ give_bank_account = 35 can_have_apprentices = TRUE cmode_music = 'sound/music/cmode/nobility/CombatSpymaster.ogg' + honorary = "Miss" spells = list( /datum/action/cooldown/spell/undirected/hag_call, diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index cce7351e5e0..8fd60e6b3e8 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -67,7 +67,7 @@ if(!(client?.prefs.toggles_maptext & DISABLE_RUNECHAT) && (client.prefs.see_chat_non_mob || ismob(speaker))) create_chat_message(speaker, message_language, raw_message, spans) // Recompose the message, because it's scrambled by default - message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods) + message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods, TRUE) if(IsAdminGhost(src)) to_chat(src, "[link] [message]") else diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index fca2d70739b..68cf57d1e68 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -31,6 +31,10 @@ var/obj/item/clothing/gloves = null //only used by humans var/obj/item/clothing/shoes = null //only used by humans. + var/name_override //For temporary visible name changes + var/honorary // A title prepended to the beginning of the name + var/honorary_suffix // A title appended to the end of the name + var/datum/dna/dna = null//Carbon var/datum/mind/last_mind = null //last mind to control this mob, for blood-based cloning diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 82e9e93658b..f311075ba75 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -123,7 +123,7 @@ var/appendage_to_name if(race_name) // race name - appendage_to_name += " [race_name]" + appendage_to_name += race_name // job name, don't show job of foreigners. if(used_title && !HAS_TRAIT(src, TRAIT_FACELESS) && (!HAS_TRAIT(src, TRAIT_FOREIGNER) || HAS_TRAIT(src, TRAIT_RECRUITED) || HAS_TRAIT(src, TRAIT_RECOGNIZED))) @@ -153,15 +153,18 @@ . += span_info("[capitalize(m2)] [skin_tone_wording] is [skin_tone_seen].") if(culture) - if(!person_known || istype(culture, /datum/culture/universal/ambiguous)) - if(!self_inspect) - . += span_info("[capitalize(t_He)] could be from anywhere.") - else + var/same_culture = FALSE + if(ishuman(user)) + var/mob/living/carbon/human/cultured = user + same_culture == istype(culture, cultured.culture.type) + if((person_known || same_culture) && !istype(culture, /datum/culture/universal/ambiguous)) var/pre_string = "[capitalize(m1)]" if(!self_inspect) pre_string = "I believe [m1]" . += span_info("[pre_string] from [culture.examined_string(src, user)].") + else if(!self_inspect) + . += span_info("[capitalize(t_He)] could be from anywhere.") if(ishuman(user)) var/mob/living/carbon/human/stranger = user diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4eaf7d18aff..d5da86a1447 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -641,13 +641,16 @@ //would be better to change their title directly, but that's not possible since the title comes from the job datum if(HL.job == "Monarch") HL.job = "Ex-Monarch" + HL.honorary = null lord_job?.remove_spells(HL) if(HL.job == "Consort") HL.job = "Ex-Consort" + HL.honorary = null consort_job?.remove_spells(HL) var/new_title = (coronated.gender == MALE) ? SSmapping.config.monarch_title : SSmapping.config.monarch_title_f coronated.mind.set_assigned_role(/datum/job/lord) + lord_job?.assign_honorary_titles(coronated) lord_job?.get_informed_title(coronated, FALSE, TRUE, new_title) coronated.job = "Monarch" //Monarch is used when checking if the ruler is alive, not "King" or "Queen". Can also pass it on and have the title change properly later. lord_job?.add_spells(coronated) @@ -860,6 +863,8 @@ has_stubble = target.has_stubble headshot_link = target.headshot_link flavortext = target.flavortext + honorary = target.honorary + honorary = target.honorary_suffix set_bloodpool(target.bloodpool) var/obj/item/bodypart/head/target_head = target.get_bodypart(BODY_ZONE_HEAD) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 6e89f94b873..a56def6530f 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -66,8 +66,6 @@ var/special_voice = "" // For changing our voice. Used by a symptom. - var/name_override //For temporary visible name changes - var/datum/physiology/physiology var/list/datum/bioware = list() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 10c8196d1be..98a7a23f300 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -29,7 +29,7 @@ return if_no_id //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere -/mob/living/carbon/human/get_visible_name() +/mob/living/carbon/get_visible_name() var/face_name = get_face_name("") var/id_name = get_id_name("") if(name_override) @@ -43,17 +43,24 @@ return "Unknown" //Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable -/mob/living/carbon/human/proc/get_face_name(if_no_face = "Unknown") +/mob/living/carbon/proc/get_face_name(if_no_face = "Unknown") if(!is_human_part_visible(src, HIDEFACE)) return if_no_face var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD) if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || !real_name || O.skeletonized ) //disfigured. use id-name if possible return if_no_face - return real_name + /// This sure does suck + if(SSticker.regent_mob == src) + . += "Regent " + if(honorary) + . += "[honorary] " + . += real_name + if(honorary_suffix) + . += " [honorary_suffix]" //gets name from ID or PDA itself, ID inside PDA doesn't matter //Useful when player is being seen by other mobs -/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown") +/mob/living/carbon/proc/get_id_name(if_no_id = "Unknown") . = if_no_id //to prevent null-names making the mob unclickable return diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 4e254f1ea27..a542f14f9e2 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -232,7 +232,7 @@ if(can_see_runechat(speaker) && can_hear()) create_chat_message(speaker, message_language, raw_message, spans) // Recompose message for AI hrefs, language incomprehension. - message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods) + message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods, TRUE) // voice muffling if(stat == UNCONSCIOUS) message = "... You can almost hear something ..." @@ -315,7 +315,7 @@ eavesdropping = stars(message) eavesrendered = compose_message(src, message_language, eavesdropping, null, spans, message_mods) - var/rendered = compose_message(src, message_language, message, null, spans, message_mods) + var/rendered = compose_message(src, message_language, message, null, spans, message_mods, TRUE) for(var/atom/movable/hearing_movable as anything in listening) if(!hearing_movable) diff --git a/code/modules/spells/spell_types/pointed/mimicry.dm b/code/modules/spells/spell_types/pointed/mimicry.dm index e8900c69a0e..b9b15b36106 100644 --- a/code/modules/spells/spell_types/pointed/mimicry.dm +++ b/code/modules/spells/spell_types/pointed/mimicry.dm @@ -21,6 +21,9 @@ var/old_facial_hair var/old_facial_hair_color var/old_gender + var/old_honorary + var/old_honorary_s + var/transformed = FALSE @@ -43,6 +46,9 @@ old_facial_hair_color = user.get_facial_hair_color() old_facial_hair = facial?.accessory_type old_gender = user.gender + old_honorary = user.honorary + old_honorary_s = user.honorary_suffix + /datum/action/cooldown/spell/mimicry/Remove(mob/living/carbon/human/remove_from) . = ..() @@ -74,6 +80,9 @@ user.real_name = cast_on.dna.real_name user.name = cast_on.get_visible_name() user.gender = cast_on.gender + user.honorary = cast_on.honorary + user.honorary_suffix = cast_on.honorary_suffix + var/datum/bodypart_feature/hair/cast_on_feature = cast_on.get_bodypart_feature_of_slot(BODYPART_FEATURE_HAIR) var/datum/bodypart_feature/hair/cast_on_facial = cast_on.get_bodypart_feature_of_slot(BODYPART_FEATURE_FACIAL_HAIR) @@ -126,6 +135,9 @@ user.real_name = old_dna.real_name user.name = user.get_visible_name() user.gender = old_gender + user.honorary = old_honorary + user.honorary_suffix = old_honorary_s + var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) eyes.eye_color = old_eye_color user.set_facial_hair_color(old_facial_hair_color, FALSE) diff --git a/code/modules/spells/spell_types/undirected/list_target/convert_role/serjeant.dm b/code/modules/spells/spell_types/undirected/list_target/convert_role/serjeant.dm index 87df042308a..15984cc2b84 100644 --- a/code/modules/spells/spell_types/undirected/list_target/convert_role/serjeant.dm +++ b/code/modules/spells/spell_types/undirected/list_target/convert_role/serjeant.dm @@ -21,6 +21,8 @@ /datum/action/cooldown/spell/undirected/list_target/convert_role/serjeant/on_conversion(mob/living/carbon/human/cast_on) . = ..() + cast_on.honorary = "Serjeant" + cast_on.honorary_suffix = null cast_on.apply_status_effect(/datum/status_effect/buff/promoted_serjeant) var/mob/living/living_owner = owner living_owner.remove_spell(src) diff --git a/code/modules/spells/spell_types/undirected/list_target/grant_nobility.dm b/code/modules/spells/spell_types/undirected/list_target/grant_nobility.dm index fe15d9ac2db..306276ed0e8 100644 --- a/code/modules/spells/spell_types/undirected/list_target/grant_nobility.dm +++ b/code/modules/spells/spell_types/undirected/list_target/grant_nobility.dm @@ -33,6 +33,8 @@ if(answer == CHOICE_CONFIRM) owner.say("I HEREBY STRIP YOU, [uppertext(cast_on.name)], OF NOBILITY!") REMOVE_TRAIT(cast_on, TRAIT_NOBLE_POWER, TRAIT_GENERIC) + cast_on.honorary = null + cast_on.honorary_suffix = null else reset_spell_cooldown() return . | SPELL_CANCEL_CAST @@ -41,3 +43,4 @@ . = ..() owner.say("I HEREBY GRANT YOU, [uppertext(cast_on.name)], NOBILITY!") ADD_TRAIT(cast_on, TRAIT_NOBLE_POWER, TRAIT_GENERIC) + cast_on.honorary = cast_on.pronouns == SHE_HER ? "Lady" : "Lord"