From 02328c74d8eb297dfddc29512c02bd093d379c8c Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Sun, 1 Dec 2024 19:49:12 +0300
Subject: [PATCH 1/9] =?UTF-8?q?=D0=BB=D0=B0=D0=B4=D0=BD=D0=BE=20=D0=BF?=
=?UTF-8?q?=D0=BE=D1=85=D1=83=D0=B9=20=D1=83=D0=B6=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/__DEFINES/is_helpers.dm | 4 +
code/datums/datacore.dm | 2 +
code/datums/mind.dm | 2 +-
code/datums/voice.dm | 120 ++++++++++++++++++
code/modules/mob/hear_say.dm | 18 ++-
.../mob/living/carbon/human/examine.dm | 3 +-
code/modules/mob/living/carbon/human/human.dm | 10 +-
code/modules/mob/living/carbon/human/life.dm | 5 +-
code/modules/mob/living/carbon/life.dm | 6 +
code/modules/mob/living/silicon/silicon.dm | 3 +
code/modules/mob/mob.dm | 7 +
code/modules/mob/mob_defines.dm | 2 +
paradise.dme | 9 +-
13 files changed, 170 insertions(+), 21 deletions(-)
create mode 100644 code/datums/voice.dm
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 65a3903b03f..8a7b9e65910 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -52,6 +52,10 @@
#define isitem(A) (istype(A, /obj/item))
+#define isIdCard(A) (istype(A, /obj/item/card/id))
+
+#define isWallet(A) (istype(A, /obj/item/storage/wallet))
+
#define isstack(A) (istype(A, /obj/item/stack))
#define isstorage(A) (istype(A, /obj/item/storage))
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index ccb7c665b23..bbdfc97f573 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -146,11 +146,13 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
var/id = num2hex(GLOB.record_id_num++, 6)
+ //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало
//General Record
var/datum/data/record/G = new()
G.fields["id"] = id
G.fields["name"] = H.real_name
G.fields["real_rank"] = H.mind.assigned_role
+ G.fields["voice"] = H.GetVoice()
G.fields["rank"] = assignment
G.fields["age"] = H.age
G.fields["fingerprint"] = md5(H.dna.uni_identity)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index a6de1c0034c..98339829044 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -36,7 +36,7 @@
var/assigned_role //assigned role is what job you're assigned to when you join the station.
var/playtime_role //if set, overrides your assigned_role for the purpose of playtime awards. Set by IDcomputer when your ID is changed.
- var/special_role //special roles are typically reserved for antags or roles like ERT. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal.
+ var/special_role //special roles are typically reserved for antags or roles like ERP. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal.
var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets
var/list/restricted_roles = list()
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
new file mode 100644
index 00000000000..2a3648f87db
--- /dev/null
+++ b/code/datums/voice.dm
@@ -0,0 +1,120 @@
+#define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный")
+
+//Новая система голоса
+/datum/voice_model
+ var/tts_seed_string = "Arthas"
+ var/voice_gender = MALE
+ var/voice_name = "Неизвестный"
+ var/real_voice_name = "Неизвестный"
+
+ var/list/famous_voices = list()
+ //var/list/famous_faces = list()
+
+/datum/voice_model/proc/CreateVoiceModel(var/atom/owner_voice)
+ var/datum/voice_model/result = new()
+
+ result.real_voice_name = owner_voice.GetVoice()
+ result.voice_name = owner_voice.GetVoice()
+ result.voice_gender = owner_voice.gender
+ result.famous_voices[voice_name] = owner_voice.name
+ result.tts_seed_string = owner_voice.tts_seed
+
+ return result
+
+/datum/voice_model/proc/VoiceUpdate(var/atom/owner_voice)
+ voice_name = owner_voice.GetVoice() //:badguy:
+
+/datum/voice_model/proc/get_gender_unknown_name(gender_string)
+ var/result = (GENDER_NAME_UNKNOW)?[gender_string]
+ if(result)
+ return result
+ return "Неизвестный"
+
+/datum/voice_model/proc/CopyInVoice(datum/voice_model/voice_to_copy)
+ tts_seed_string = voice_to_copy.tts_seed_string
+ voice_gender = voice_to_copy.voice_gender
+ voice_name = voice_to_copy.voice_name
+
+/datum/voice_model/proc/FullCopyInVoice(datum/voice_model/voice_to_copy)
+ CopyInVoice(voice_to_copy)
+ real_voice_name = voice_to_copy.real_voice_name
+ famous_voices = voice_to_copy.famous_voices
+
+//было две бутылки, словарь или два прока. Я сел на вторую
+/datum/voice_model/proc/GetManifestKnowVoice()
+ for(var/datum/data/record/t in GLOB.data_core.general)
+ if(t)
+ if(t.fields["voice"] == voice_name)
+ return t.fields["name"]
+ return "IDENTIFICATION VOICE ERROR"
+//Технически name это представление твоего ебала
+/* BYOND...
+/datum/voice_model/proc/GetManifestKnowFace(mob/face_target)
+ for(var/datum/data/record/t in GLOB.data_core.general)
+ if(t)
+ if(t.fields["name"] == face_target.name)
+ return t.fields["name"]
+ return "IDENTIFICATION FACE ERROR"
+*/
+
+/datum/voice_model/proc/TryStore(mob/target)
+ if(src == target.adv_voice)
+ return TRUE
+ . = FALSE
+ if(!ishuman(target)) //Нахуя мне знать как зовут мышей :badguy:
+ return target.name
+ var/mob/living/carbon/human/target_H = target
+ var/obj/item/card/id/prov_wear_id = null
+
+ if(isIdCard(target_H.wear_id)) //Fuck
+ prov_wear_id = target_H.wear_id
+ if(isWallet(target_H.wear_id)) //Мфпмфпф
+ var/obj/item/storage/wallet/prom = target_H.wear_id
+ prov_wear_id = prom.front_id
+
+ if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id)
+
+ //famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND
+ famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name
+ . = TRUE
+ else if(prov_wear_id)
+ famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name
+ . = TRUE
+ return
+
+//For examie
+/* FUCKING BYOND
+/datum/voice_model/proc/TryRecollectFace(mob/target)
+ if(src == target.adv_voice)
+ return target.name
+ if(!ishuman(target)) //:Roflcat: Чтобы имена мышей знать сразу
+ return target.name
+ var/mob/living/carbon/human/target_H = target
+
+ if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)))
+ . = famous_faces?[target_H.name]
+
+ if(.)
+ return
+
+ if((target_H.wear_suit?.flags_inv & HIDEJUMPSUIT) && (target_H.head?.flags_inv & HIDENAME))
+ . = get_gender_unknown_name(NEUTER)
+ else
+ . = get_gender_unknown_name(target_H.gender)
+ return
+*/
+//For hear
+/datum/voice_model/proc/TryRecollectVoice(mob/target)
+ if(src == target.adv_voice)
+ return target.adv_voice.voice_name
+ if(!ishuman(target))
+ return target.adv_voice.voice_name
+ var/mob/living/carbon/human/target_H = target
+
+ . = famous_voices?[target_H.name]
+ if(.)
+ return
+
+ return get_gender_unknown_name(target_H.adv_voice.voice_gender)
+
+#undef GENDER_NAME_UNKNOW
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 9afe767d2e9..be55ac09005 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -138,7 +138,7 @@
if(italics)
message = "[message]"
-
+ speaker_name = adv_voice.TryRecollectVoice(speaker)
var/track = null
if(isobserver(src))
if(speaker_name != speaker.real_name && speaker.real_name)
@@ -245,17 +245,15 @@
INVOKE_ASYNC(GLOBAL_PROC, /proc/tts_cast, src, src, message_tts, speaker.tts_seed, FALSE, effect, null, null, 'sound/effects/radio_chatter.ogg')
/mob/proc/handle_speaker_name(mob/speaker = null, vname, hard_to_hear)
- var/speaker_name = "unknown"
- if(speaker)
- speaker_name = speaker.name
-
- if(vname)
- speaker_name = vname
-
+ var/speaker_name = "Неизвестный"
if(hard_to_hear)
- speaker_name = "unknown"
+ return speaker_name
+ if(!(speaker))
+ return vname
+ if(!ishuman(speaker))
+ return speaker.adv_voice.voice_name
- return speaker_name
+ return adv_voice.TryRecollectVoice(speaker)
/mob/proc/handle_track(message, verb = "says", mob/speaker = null, speaker_name, atom/follow_target, hard_to_hear)
return
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 6152cecfe17..5065f44e66b 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -29,7 +29,8 @@
skipears |= wear_mask.flags_inv & HIDEHEADSETS
var/msg = "This is "
-
+ if(!user.adv_voice.TryStore(src))
+ to_chat(user, "Кажется вам не за что зацепится взглядом...")
if(!(skipjumpsuit && skipface) && icon) //big suits/masks/helmets make it hard to tell their gender
msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
msg += "[name]"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 63f34de85cc..5120eeb3125 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1,3 +1,6 @@
+#define ASK_VERB "!"
+#define
+
/mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human)
icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor.
create_dna()
@@ -391,9 +394,9 @@
if(name_override)
return name_override
if(wear_mask && (wear_mask.flags_inv & HIDENAME)) //Wearing a mask which hides our face, use id-name if possible
- return get_id_name("Unknown")
+ return get_id_name(adv_voice.get_gender_unknown_name(gender))
if(head && (head.flags_inv & HIDENAME))
- return get_id_name("Unknown") //Likewise for hats
+ return get_id_name(adv_voice.get_gender_unknown_name(gender)) //Likewise for hats
var/face_name = get_face_name()
var/id_name = get_id_name("")
if(add_id_name && id_name && (id_name != face_name))
@@ -404,7 +407,7 @@
/mob/living/carbon/human/proc/get_face_name()
var/obj/item/organ/external/head_organ = get_organ(BODY_ZONE_HEAD)
if(!head_organ || head_organ.is_disfigured() || cloneloss > 50 || !real_name || HAS_TRAIT(src, TRAIT_HUSK)) //disfigured. use id-name if possible
- return "Unknown"
+ return adv_voice.get_gender_unknown_name(gender)
return real_name
@@ -413,6 +416,7 @@
* Useful when player is being seen by other mobs.
*/
/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown")
+ if_no_id = adv_voice.get_gender_unknown_name(gender)
var/obj/item/card/id/id = wear_id?.GetID()
if(istype(id))
return id.registered_name
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 3f08ff83a94..66770ca55e7 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -11,8 +11,9 @@
life_tick++
- voice = GetVoice()
- tts_seed = GetTTSVoice()
+ //Теперь это этажом ниже
+ //voice = GetVoice()
+ //tts_seed = GetTTSVoice()
if(.) //not dead
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 3d8ab5a1387..4c8fcea0edd 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -1,6 +1,12 @@
/mob/living/carbon/Life(seconds, times_fired)
set invisibility = 0
+ //:roflcat:
+ adv_voice.voice_gender = gender
+ adv_voice.voice_name = GetVoice()
+ adv_voice.tts_seed_string = GetTTSVoice()
+ tts_seed = adv_voice.tts_seed_string
+ voice_name = adv_voice.voice_name
if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM))
return
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 06714b5a316..dfee50ffa16 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -59,6 +59,9 @@
/mob/living/silicon/med_hud_set_status()
return diag_hud_set_status() //we use a different hud
+/mob/living/silicon/handle_speaker_name(mob/speaker = null, vname, hard_to_hear)
+ return speaker.adv_voice.GetManifestKnowVoice()
+
/mob/living/silicon/Destroy()
UnregisterSignal(SSalarm, list(
COMSIG_TRIGGERED_ALARM,
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d1020156e82..b2da523bce1 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -26,6 +26,13 @@
/mob/Initialize(mapload)
GLOB.mob_list += src
+
+ adv_voice = new /datum/voice_model()
+ adv_voice.real_voice_name = name
+ adv_voice.tts_seed_string = GetTTSVoice()
+ adv_voice.voice_gender = gender
+ adv_voice.voice_name = GetVoice()
+
if(stat == DEAD)
GLOB.dead_mob_list += src
else
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index a76ad7796fa..e817066d7cf 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -154,7 +154,9 @@
//see: setup.dm for list of mutations
+ var/liberated_name = "Неизвестный" //Долой гнет бульена!!
var/voice_name = "неизвестный голос"
+ var/datum/voice_model/adv_voice = null
var/list/faction = list("neutral") //Used for checking whether hostile simple animals will attack you, possibly more stuff later
diff --git a/paradise.dme b/paradise.dme
index 30b22704ec1..9306314b226 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -39,7 +39,6 @@
#include "code\__DEFINES\blob.dm"
#include "code\__DEFINES\borer.dm"
#include "code\__DEFINES\bots.dm"
-#include "code\__DEFINES\rituals.dm"
#include "code\__DEFINES\byond_tracy.dm"
#include "code\__DEFINES\callbacks.dm"
#include "code\__DEFINES\cargo_quests.dm"
@@ -115,6 +114,7 @@
#include "code\__DEFINES\RCD.dm"
#include "code\__DEFINES\reagents.dm"
#include "code\__DEFINES\request.dm"
+#include "code\__DEFINES\rituals.dm"
#include "code\__DEFINES\role_preferences.dm"
#include "code\__DEFINES\rolebans.dm"
#include "code\__DEFINES\rust_g.dm"
@@ -368,7 +368,6 @@
#include "code\controllers\subsystem\tickets\mentor_tickets.dm"
#include "code\controllers\subsystem\tickets\tickets.dm"
#include "code\datums\action.dm"
-#include "code\datums\rituals.dm"
#include "code\datums\ai_law_sets.dm"
#include "code\datums\ai_laws.dm"
#include "code\datums\armor.dm"
@@ -404,6 +403,7 @@
#include "code\datums\radio.dm"
#include "code\datums\recipe.dm"
#include "code\datums\revision.dm"
+#include "code\datums\rituals.dm"
#include "code\datums\ruins.dm"
#include "code\datums\shuttles.dm"
#include "code\datums\snake_fashion.dm"
@@ -416,6 +416,7 @@
#include "code\datums\uplink_item.dm"
#include "code\datums\verb_callback.dm"
#include "code\datums\vision_override.dm"
+#include "code\datums\voice.dm"
#include "code\datums\weakrefs.dm"
#include "code\datums\cache\air_alarm.dm"
#include "code\datums\cache\apc.dm"
@@ -446,7 +447,6 @@
#include "code\datums\components\conveyor_movement.dm"
#include "code\datums\components\cross_shock.dm"
#include "code\datums\components\decal.dm"
-#include "code\datums\components\ritual_object.dm"
#include "code\datums\components\defibrillator.dm"
#include "code\datums\components\drift.dm"
#include "code\datums\components\ducttape.dm"
@@ -465,6 +465,7 @@
#include "code\datums\components\persistent_overlay.dm"
#include "code\datums\components\proximity_monitor.dm"
#include "code\datums\components\radioactivity.dm"
+#include "code\datums\components\ritual_object.dm"
#include "code\datums\components\shielded.dm"
#include "code\datums\components\slippery.dm"
#include "code\datums\components\spawner.dm"
@@ -3140,7 +3141,6 @@
#include "code\modules\tgui\plugins\modal.dm"
#include "code\modules\tgui\states\admin.dm"
#include "code\modules\tgui\states\always.dm"
-#include "code\modules\tgui\states\range.dm"
#include "code\modules\tgui\states\conscious.dm"
#include "code\modules\tgui\states\contained.dm"
#include "code\modules\tgui\states\deep_inventory.dm"
@@ -3152,6 +3152,7 @@
#include "code\modules\tgui\states\notcontained.dm"
#include "code\modules\tgui\states\observer.dm"
#include "code\modules\tgui\states\physical.dm"
+#include "code\modules\tgui\states\range.dm"
#include "code\modules\tgui\states\self.dm"
#include "code\modules\tgui\states\strippable_state.dm"
#include "code\modules\tgui\states\zlevel.dm"
From 1c44ae72ad3da1557f6c476651871642fe25bb85 Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Sun, 8 Dec 2024 18:36:03 +0300
Subject: [PATCH 2/9] =?UTF-8?q?=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D1=84=D0=B8?=
=?UTF-8?q?=D0=BA=D1=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/modules/mob/living/carbon/human/human.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 5120eeb3125..eedbf49d343 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1,5 +1,3 @@
-#define ASK_VERB "!"
-#define
/mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human)
icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor.
From a18ef9fff115d327b652cd36c60e1587f7b9e9eb Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Sun, 8 Dec 2024 22:52:37 +0300
Subject: [PATCH 3/9] =?UTF-8?q?=D1=83=D0=BC=D0=B5=D1=80=20=D0=BE=D1=82=20?=
=?UTF-8?q?=D0=BA=D1=80=D0=B8=D0=BD=D0=B6=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/game/gamemodes/game_mode.dm | 31 +++++++++++++++++++++++---
code/modules/mob/living/carbon/life.dm | 10 ++++-----
code/modules/mob/mob.dm | 3 ++-
3 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 6796065e042..b32dbe8485d 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -85,9 +85,35 @@
/**
* Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things.
- */
+ */
/datum/game_mode/proc/post_setup()
-
+ //Cringe zone start
+ //Data format JOB = list(Voice_name = name)
+ var/list/communist_manifest = list()
+ var/list/capitalist_pig = list()
+ var/list/head_pigs = list() //capitan
+ for(var/mob/living/carbon/human/target)
+ var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]"
+ if(!dep_flag)
+ continue
+ if(target.job in GLOB.command_positions)
+ capitalist_pig[target.GetVoice()] = target.name
+ if(target.job == JOB_TITLE_CAPTAIN)
+ head_pigs[target.GetVoice()] = target.name
+ if(communist_manifest?[dep_flag])
+ communist_manifest[dep_flag][target.GetVoice()] = target.name
+ else
+ communist_manifest[dep_flag] = list(target.GetVoice() = target.name)
+ for(var/mob/living/carbon/human/target)
+ var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]"
+ if(!dep_flag)
+ continue
+ if(communist_manifest?["[SSjobs.GetJob(target.job)?.department_flag]"])
+ if(target.job in GLOB.command_positions)
+ target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + capitalist_pig) - target.GetVoice()
+ else
+ target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + head_pigs) - target.GetVoice()
+ //Cringe zone stop
spawn(ROUNDSTART_LOGOUT_REPORT_TIME)
display_roundstart_logout_report()
@@ -99,7 +125,6 @@
GLOB.start_state.count()
return TRUE
-
/datum/game_mode/proc/set_mode_in_db() // I wonder what this could do guessing by the name
if(SSticker?.mode && SSdbcore.IsConnected())
var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery("UPDATE round SET game_mode=:gm WHERE id=:rid", list(
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 4c8fcea0edd..ece5a6dc68c 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -1,12 +1,12 @@
/mob/living/carbon/Life(seconds, times_fired)
set invisibility = 0
//:roflcat:
- adv_voice.voice_gender = gender
- adv_voice.voice_name = GetVoice()
- adv_voice.tts_seed_string = GetTTSVoice()
+ voice_name = GetVoice()
+ tts_seed = GetTTSVoice()
- tts_seed = adv_voice.tts_seed_string
- voice_name = adv_voice.voice_name
+ adv_voice.voice_gender = gender
+ adv_voice.voice_name = voice_name
+ adv_voice.tts_seed_string = tts_seed
if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM))
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index b2da523bce1..21cba049359 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -26,12 +26,13 @@
/mob/Initialize(mapload)
GLOB.mob_list += src
+ voice_name = GetVoice()
adv_voice = new /datum/voice_model()
adv_voice.real_voice_name = name
adv_voice.tts_seed_string = GetTTSVoice()
adv_voice.voice_gender = gender
- adv_voice.voice_name = GetVoice()
+ adv_voice.voice_name = voice_name
if(stat == DEAD)
GLOB.dead_mob_list += src
From e64f2c78eac1bfb0b0a93837ca25919d9afe6e2d Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Sun, 8 Dec 2024 23:07:29 +0300
Subject: [PATCH 4/9] =?UTF-8?q?=D0=BA=D0=BE=D1=81=D1=82=D1=8B=D0=BB=D1=8C?=
=?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B8=D0=BA=D1=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/game/gamemodes/game_mode.dm | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index b32dbe8485d..565602d09dd 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -92,8 +92,16 @@
var/list/communist_manifest = list()
var/list/capitalist_pig = list()
var/list/head_pigs = list() //capitan
+ /*
+ var/list/god_ai_list = list() //for AI
+ for(var/mob/living/silicon/ai)
+ if(ai.job = JOB_TITLE_AI && ai.loc.z == STATION_LEVEL)
+ god_ai_list[ai.voice_name] = ai.name
+ */
for(var/mob/living/carbon/human/target)
- var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]"
+ var/datum/job/prom_job = SSjobs.GetJob(target.job)
+ var/dep_flag = "[prom_job?.department_flag]"
+
if(!dep_flag)
continue
if(target.job in GLOB.command_positions)
@@ -105,14 +113,15 @@
else
communist_manifest[dep_flag] = list(target.GetVoice() = target.name)
for(var/mob/living/carbon/human/target)
- var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]"
+ var/datum/job/prom_job = SSjobs.GetJob(target.job)
+ var/dep_flag = "[prom_job?.department_flag]"
if(!dep_flag)
continue
- if(communist_manifest?["[SSjobs.GetJob(target.job)?.department_flag]"])
+ if(communist_manifest?[dep_flag])
if(target.job in GLOB.command_positions)
- target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + capitalist_pig) - target.GetVoice()
+ target.adv_voice.famous_voices = (communist_manifest[dep_flag] + capitalist_pig) - target.GetVoice()
else
- target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + head_pigs) - target.GetVoice()
+ target.adv_voice.famous_voices = (communist_manifest[dep_flag] + head_pigs) - target.GetVoice()
//Cringe zone stop
spawn(ROUNDSTART_LOGOUT_REPORT_TIME)
display_roundstart_logout_report()
From 6116f776a6a1b0359dab21e735bcb0161390f32d Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Mon, 6 Jan 2025 03:26:25 +0300
Subject: [PATCH 5/9] =?UTF-8?q?=D1=83=D1=83=20=D0=B1=D0=BB=D1=8F=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/__DEFINES/dcs/signals.dm | 6 ++
.../_onclick/hud/plane_master/render_plate.dm | 2 +-
code/datums/datacore.dm | 26 ++++++-
code/datums/voice.dm | 69 ++++++++++++++-----
code/game/atoms.dm | 5 ++
code/game/gamemodes/game_mode.dm | 5 ++
code/game/objects/items/devices/megaphone.dm | 1 +
code/modules/economy/Job_Departments.dm | 1 +
.../mob/living/carbon/brain/brain_say.dm | 1 +
code/modules/mob/living/carbon/human/npcs.dm | 13 ++--
code/modules/mob/living/living_say.dm | 1 +
code/modules/mob/living/silicon/silicon.dm | 4 ++
code/modules/mob/mob.dm | 8 +--
code/modules/mob/mob_defines.dm | 2 +-
code/modules/mob/mob_helpers.dm | 10 +--
code/modules/mob/mob_say.dm | 1 +
code/modules/mob/new_player/new_player.dm | 4 +-
code/modules/mob/transform_procs.dm | 3 +-
18 files changed, 120 insertions(+), 42 deletions(-)
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index aa521e47314..effe19748b5 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -74,6 +74,12 @@
#define COMSIG_ATOM_NO_LONGER_PULLED "movable_no_longer_pulled"
///signal sent out by an atom when it is no longer pulling something : (atom/pulling)
#define COMSIG_ATOM_NO_LONGER_PULLING "movable_no_longer_pulling"
+//signal for mass roundstart store voice (very english)
+#define COMSIG_SPECIAL_MASS_STORE_VOICE "store_voice"
+
+#define COMSIG_JUST_LIST_ADD_VOICE "list_add_voice"
+//signal for human store ebalo
+//#define COMSIG_STORE_FACE "store_face"
///from base of atom/attackby(): (/obj/item, /mob/living, params)
#define COMSIG_PARENT_ATTACKBY "atom_attackby"
diff --git a/code/_onclick/hud/plane_master/render_plate.dm b/code/_onclick/hud/plane_master/render_plate.dm
index 02608d44716..73b3eb35846 100644
--- a/code/_onclick/hud/plane_master/render_plate.dm
+++ b/code/_onclick/hud/plane_master/render_plate.dm
@@ -54,7 +54,7 @@
/atom/movable/screen/plane_master/rendering_plate/master/hide_from(mob/oldmob)
. = ..()
if(offset == 0)
- return
+ return
var/datum/hud/hud = home.our_hud
if(hud)
UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change))
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index bbdfc97f573..3929ece7325 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -1,3 +1,6 @@
+
+GLOBAL_LIST_EMPTY(capitalist_manifest)
+
/datum/datacore
var/list/medical = list()
var/list/general = list()
@@ -111,6 +114,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest)
/datum/datacore/proc/manifest()
for(var/mob/living/carbon/human/H in GLOB.player_list)
manifest_inject(H)
+ SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest)
/datum/datacore/proc/manifest_modify(name, rank, assignment)
if(GLOB.PDA_Manifest.len)
@@ -142,10 +146,26 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
assignment = H.job
else
assignment = "Unassigned"
-
+
var/id = num2hex(GLOB.record_id_num++, 6)
-
-
+ H.adv_voice.RegSignals()
+ H.UpdateVoice() //при иницилизации все куклы ноунеймы, имена и прочее подгружается потом. Где это потом я искать не хочу, терпите карлики
+ var/prom_voice = H.adv_voice.voice_name
+
+ var/datum/job/prom_job = SSjobs.GetJob(H.job)
+ var/dep_flag = prom_job.department
+
+ if(GLOB.capitalist_manifest?["AbsolutePomny"] && (prom_job.title in GLOB.command_positions))
+ GLOB.capitalist_manifest["AbsolutePomny"][prom_voice] = H.real_name
+ else if(prom_job.title in GLOB.command_positions)
+ GLOB.capitalist_manifest["AbsolutePomny"] = list((prom_voice) = H.real_name)
+
+ if(GLOB.capitalist_manifest?[dep_flag] && dep_flag)
+ GLOB.capitalist_manifest?[dep_flag][prom_voice] = H.real_name
+ else if(dep_flag)
+ GLOB.capitalist_manifest?[dep_flag] = list((prom_voice) = H.real_name)
+
+ //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest)
//При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало
//General Record
var/datum/data/record/G = new()
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
index 2a3648f87db..891f9439599 100644
--- a/code/datums/voice.dm
+++ b/code/datums/voice.dm
@@ -1,35 +1,63 @@
#define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный")
-
//Новая система голоса
/datum/voice_model
+ var/mob/host = null //Носитель этой хуеты
var/tts_seed_string = "Arthas"
var/voice_gender = MALE
var/voice_name = "Неизвестный"
var/real_voice_name = "Неизвестный"
+ var/list/lust_debug = list()
+
var/list/famous_voices = list()
//var/list/famous_faces = list()
-/datum/voice_model/proc/CreateVoiceModel(var/atom/owner_voice)
- var/datum/voice_model/result = new()
-
- result.real_voice_name = owner_voice.GetVoice()
- result.voice_name = owner_voice.GetVoice()
- result.voice_gender = owner_voice.gender
- result.famous_voices[voice_name] = owner_voice.name
- result.tts_seed_string = owner_voice.tts_seed
+/proc/isZlevel(var/mob/analiz)
+ var/result = analiz?.loc?.z
+ return (result == 3)
+
+
+/datum/voice_model/New(var/mob/owner_voice)
+ if(owner_voice != null)
+ host = owner_voice
+ real_voice_name = owner_voice.GetVoice()
+ voice_name = owner_voice.GetVoice()
+ voice_gender = owner_voice.gender
+ famous_voices[voice_name] = owner_voice.name
+ tts_seed_string = owner_voice.tts_seed
+
+/datum/voice_model/proc/RegSignals()
+ to_chat(world, "Успешно регистрирую сигнал [host.name]")
+ RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice))
+
+//Специфическая функция которая добавляет что нужно короче
+/datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice)
+ SIGNAL_HANDLER
+ lust_debug = list_voice
+ to_chat(world, "Глобальный сигнал!!")
+
+ var/list/prom_fuck = list_voice?[SSjobs.GetJob(host.job).department]
+ if(list_voice?["AbsolutePomny"])
+ famous_voices |= list_voice["AbsolutePomny"]
+
+ if(prom_fuck)
+ famous_voices |= prom_fuck
- return result
+/datum/voice_model/proc/JustListAddVoice(list_voice)
+ SIGNAL_HANDLER
+ famous_voices |= list_voice
-/datum/voice_model/proc/VoiceUpdate(var/atom/owner_voice)
- voice_name = owner_voice.GetVoice() //:badguy:
+/datum/voice_model/proc/VoiceUpdate()
+ voice_name = host.GetVoice() //:badguy:
+ voice_gender = host.gender
+ tts_seed_string = host.tts_seed
/datum/voice_model/proc/get_gender_unknown_name(gender_string)
var/result = (GENDER_NAME_UNKNOW)?[gender_string]
if(result)
return result
return "Неизвестный"
-
+/* Not used
/datum/voice_model/proc/CopyInVoice(datum/voice_model/voice_to_copy)
tts_seed_string = voice_to_copy.tts_seed_string
voice_gender = voice_to_copy.voice_gender
@@ -39,14 +67,14 @@
CopyInVoice(voice_to_copy)
real_voice_name = voice_to_copy.real_voice_name
famous_voices = voice_to_copy.famous_voices
-
+*/
//было две бутылки, словарь или два прока. Я сел на вторую
/datum/voice_model/proc/GetManifestKnowVoice()
for(var/datum/data/record/t in GLOB.data_core.general)
if(t)
if(t.fields["voice"] == voice_name)
return t.fields["name"]
- return "IDENTIFICATION VOICE ERROR"
+ return "IDENTIFICATION ERROR"
//Технически name это представление твоего ебала
/* BYOND...
/datum/voice_model/proc/GetManifestKnowFace(mob/face_target)
@@ -109,12 +137,17 @@
return target.adv_voice.voice_name
if(!ishuman(target))
return target.adv_voice.voice_name
- var/mob/living/carbon/human/target_H = target
- . = famous_voices?[target_H.name]
+ . = famous_voices?[target.adv_voice.voice_name]
if(.)
return
- return get_gender_unknown_name(target_H.adv_voice.voice_gender)
+ return get_gender_unknown_name(target.adv_voice.voice_gender)
+
+/datum/voice_model/proc/I_do_remember(mob/target)
+ . = famous_voices?[target.adv_voice.voice_name]
+ if(.)
+ return TRUE
+ return FALSE
#undef GENDER_NAME_UNKNOW
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 755a19232bb..4bc6f823150 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1678,6 +1678,11 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
/atom/proc/GetTTSVoice()
return tts_seed
+/mob/proc/UpdateVoice()
+ voice_name = GetVoice()
+ tts_seed = GetTTSVoice()
+ adv_voice.VoiceUpdate()
+
/// Passes Stat Browser Panel clicks to the game and calls client click on an atom
/atom/Topic(href, list/href_list)
. = ..()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 565602d09dd..56d7beedb44 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -87,6 +87,7 @@
* Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things.
*/
/datum/game_mode/proc/post_setup()
+ /*
//Cringe zone start
//Data format JOB = list(Voice_name = name)
var/list/communist_manifest = list()
@@ -123,15 +124,19 @@
else
target.adv_voice.famous_voices = (communist_manifest[dep_flag] + head_pigs) - target.GetVoice()
//Cringe zone stop
+ */
+
spawn(ROUNDSTART_LOGOUT_REPORT_TIME)
display_roundstart_logout_report()
+
INVOKE_ASYNC(src, PROC_REF(set_mode_in_db)) // Async query, dont bother slowing roundstart
SScargo_quests.roll_start_quests()
generate_station_goals()
GLOB.start_state = new /datum/station_state()
GLOB.start_state.count()
+ //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest)
return TRUE
/datum/game_mode/proc/set_mode_in_db() // I wonder what this could do guessing by the name
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 42de0b94b54..e2ab095cd24 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -66,6 +66,7 @@
spamcheck = 0
/obj/item/megaphone/proc/saymsg(mob/living/user, message)
+ user.UpdateVoice()
add_say_logs(user, message, language = "Megaphone")
var/message_tts = message
message = replace_characters(message, list("+"))
diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm
index 97950816208..d3efbdcb570 100644
--- a/code/modules/economy/Job_Departments.dm
+++ b/code/modules/economy/Job_Departments.dm
@@ -1,6 +1,7 @@
GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian"))
// The department the job belongs to.
+// fuck you cib
/datum/job/var/department = null
// Whether this is a head position
diff --git a/code/modules/mob/living/carbon/brain/brain_say.dm b/code/modules/mob/living/carbon/brain/brain_say.dm
index 5527c61def1..5f2d26dc631 100644
--- a/code/modules/mob/living/carbon/brain/brain_say.dm
+++ b/code/modules/mob/living/carbon/brain/brain_say.dm
@@ -1,5 +1,6 @@
//TODO: Convert this over for languages.
/mob/living/carbon/brain/say(message, datum/language/speaking = null)
+
if(stat == DEAD)
return ..()
if(!can_speak(warning = TRUE))
diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm
index ca2c22d05e5..484d0ccf745 100644
--- a/code/modules/mob/living/carbon/human/npcs.dm
+++ b/code/modules/mob/living/carbon/human/npcs.dm
@@ -9,15 +9,16 @@
. = ..()
name = "Pun Pun"
real_name = name
+ job = "Bartender"
+ tts_seed = "Chen"
var/obj/item/clothing/under/punpun/prom = new(src)
- var/obj/item/clothing/accessory/petcollar/prom_collar = new(src)
- var/obj/item/card/id/punpun/punpun_id = new(prom_collar)
- prom_collar.access_id = punpun_id
- prom_collar.on_attached(prom, src)
+ //var/obj/item/clothing/accessory/petcollar/prom_collar = new(src)
+ var/obj/item/card/id/punpun/punpun_id = new(src)
+ //prom_collar.access_id = punpun_id
+ //prom_collar.on_attached(prom, src)
equip_to_slot_if_possible(prom, ITEM_SLOT_CLOTH_INNER)
-
- tts_seed = "Chen"
+ equip_to_slot_if_possible(punpun_id, ITEM_SLOT_ID)
/mob/living/carbon/human/lesser/monkey/punpun/can_use_machinery(obj/machinery/mas)
. = ..()
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index be1a0129fd8..7c570d592cd 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -200,6 +200,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key)
/mob/living/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE)
+ ..()
if(client)
client.check_say_flood(5)
if(check_mute(client.ckey, MUTE_IC))
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index dfee50ffa16..da172c443f5 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -60,6 +60,10 @@
return diag_hud_set_status() //we use a different hud
/mob/living/silicon/handle_speaker_name(mob/speaker = null, vname, hard_to_hear)
+ if(speaker.adv_voice == adv_voice) //HeLLO Is I
+ return speaker.name
+ if(adv_voice.I_do_remember(speaker))
+ return adv_voice.TryRecollectVoice(speaker)
return speaker.adv_voice.GetManifestKnowVoice()
/mob/living/silicon/Destroy()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 21cba049359..b76593ff234 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -27,12 +27,8 @@
/mob/Initialize(mapload)
GLOB.mob_list += src
voice_name = GetVoice()
-
- adv_voice = new /datum/voice_model()
- adv_voice.real_voice_name = name
- adv_voice.tts_seed_string = GetTTSVoice()
- adv_voice.voice_gender = gender
- adv_voice.voice_name = voice_name
+
+ adv_voice = new(src)
if(stat == DEAD)
GLOB.dead_mob_list += src
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index e817066d7cf..062ea149e37 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -154,7 +154,7 @@
//see: setup.dm for list of mutations
- var/liberated_name = "Неизвестный" //Долой гнет бульена!!
+ var/examie_name = "Неизвестный" //Долой гнет бульена!!
var/voice_name = "неизвестный голос"
var/datum/voice_model/adv_voice = null
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 075c44d9ffd..71f9c9880a1 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM
check_eye(src)
return TRUE
-/mob/proc/rename_character(oldname, newname)
+/mob/proc/rename_character(oldname, newname, mass_update = FALSE)
if(!newname)
return 0
real_name = newname
@@ -577,9 +577,12 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM
length = length_char(oldname)
pos = findtextEx_char(objective.explanation_text, oldname)
objective.explanation_text = copytext_char(objective.explanation_text, 1, pos)+newname+copytext_char(objective.explanation_text, pos+length)
+ UpdateVoice()
+ if(mass_update)
+ SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, list("AbsolutePomny" = (list((adv_voice.voice_name) = name))))
return 1
-/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE)
+/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, var/mass_update = FALSE)
spawn(0)
var/oldname = real_name
@@ -608,8 +611,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM
if(!newname) //we'll stick with the oldname then
return
-
- rename_character(oldname, newname)
+ rename_character(oldname, newname, mass_update)
/proc/cultslur(n) // Inflicted on victims of a stun talisman
var/phrase = html_decode(n)
diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm
index 34adbed0045..54e21a72674 100644
--- a/code/modules/mob/mob_say.dm
+++ b/code/modules/mob/mob_say.dm
@@ -3,6 +3,7 @@
"\[" = "", "]" = "", "{" = "", "}" = "")
/mob/proc/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE)
+ UpdateVoice()
return
/mob/verb/whisper(message as text)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index f68feabe24c..f1d18c7790c 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -619,10 +619,10 @@
mind.active = 0 //we wish to transfer the key manually
if(mind.assigned_role == JOB_TITLE_CLOWN) //give them a clownname if they are a clown
new_character.real_name = pick(GLOB.clown_names) //I hate this being here of all places but unfortunately dna is based on real_name!
- new_character.rename_self(JOB_TITLE_CLOWN)
+ new_character.rename_self(JOB_TITLE_CLOWN, mass_update = TRUE)
else if(mind.assigned_role == JOB_TITLE_MIME)
new_character.real_name = pick(GLOB.mime_names)
- new_character.rename_self(JOB_TITLE_MIME)
+ new_character.rename_self(JOB_TITLE_MIME, mass_update = TRUE)
mind.set_original_mob(new_character)
mind.transfer_to(new_character) //won't transfer key since the mind is not active
GLOB.human_names_list += new_character.real_name
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 3da7a445057..393109922ec 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -32,6 +32,7 @@
client?.tgui_panel?.stop_music()
var/mob/living/silicon/ai/O = new (loc,,,1)//No MMI but safety is in effect.
+ O.adv_voice.RegSignals()
O.invisibility = 0
O.aiRestorePowerRoutine = 0
@@ -44,7 +45,7 @@
O.on_mob_init()
O.add_ai_verbs()
-
+
O.rename_self(JOB_TITLE_AI,1)
O.tts_seed = tts_seed
From c4a3473902a59726553c3b4798e676055b6b479f Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Wed, 8 Jan 2025 01:24:53 +0300
Subject: [PATCH 6/9] =?UTF-8?q?=D0=B1=D1=83=D1=8D=D1=8D=D1=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/datums/datacore.dm | 18 +++++------
code/datums/mind.dm | 1 +
code/datums/voice.dm | 30 ++++++++-----------
code/game/gamemodes/clockwork/clockwork.dm | 1 +
code/game/gamemodes/cult/cult.dm | 1 +
code/game/gamemodes/cult/runes.dm | 3 +-
code/game/jobs/job/central.dm | 2 ++
code/game/jobs/job/engineering.dm | 4 +++
code/game/jobs/job/job.dm | 8 +++++
code/game/jobs/job/medical.dm | 3 ++
code/game/jobs/job/science.dm | 4 ++-
code/game/jobs/job/security.dm | 3 ++
code/game/jobs/job/silicon.dm | 5 ++++
code/game/jobs/job/supervisor.dm | 6 ++++
code/game/jobs/job/support.dm | 3 ++
code/game/jobs/job/syndicate.dm | 1 +
.../antagonists/_common/antag_datum.dm | 2 ++
code/modules/economy/Job_Departments.dm | 1 +
.../modules/mob/living/silicon/robot/robot.dm | 1 +
code/modules/mob/mob_defines.dm | 2 --
20 files changed, 66 insertions(+), 33 deletions(-)
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 3929ece7325..9d4784cb69b 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -149,21 +149,17 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
var/id = num2hex(GLOB.record_id_num++, 6)
H.adv_voice.RegSignals()
- H.UpdateVoice() //при иницилизации все куклы ноунеймы, имена и прочее подгружается потом. Где это потом я искать не хочу, терпите карлики
+ H.UpdateVoice() //На всякий
var/prom_voice = H.adv_voice.voice_name
var/datum/job/prom_job = SSjobs.GetJob(H.job)
- var/dep_flag = prom_job.department
- if(GLOB.capitalist_manifest?["AbsolutePomny"] && (prom_job.title in GLOB.command_positions))
- GLOB.capitalist_manifest["AbsolutePomny"][prom_voice] = H.real_name
- else if(prom_job.title in GLOB.command_positions)
- GLOB.capitalist_manifest["AbsolutePomny"] = list((prom_voice) = H.real_name)
-
- if(GLOB.capitalist_manifest?[dep_flag] && dep_flag)
- GLOB.capitalist_manifest?[dep_flag][prom_voice] = H.real_name
- else if(dep_flag)
- GLOB.capitalist_manifest?[dep_flag] = list((prom_voice) = H.real_name)
+ for(var/dep_flag in prom_job.college_department) //:catsmile:
+ if(!isnull(GLOB.capitalist_manifest?[dep_flag]))
+ to_chat(world, "[dep_flag] [prom_job] [H.real_name]")
+ GLOB.capitalist_manifest[dep_flag][prom_voice] = H.real_name
+ else
+ GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name))
//SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest)
//При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 98339829044..ac91d3c7114 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -37,6 +37,7 @@
var/assigned_role //assigned role is what job you're assigned to when you join the station.
var/playtime_role //if set, overrides your assigned_role for the purpose of playtime awards. Set by IDcomputer when your ID is changed.
var/special_role //special roles are typically reserved for antags or roles like ERP. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal.
+ var/special_role_meta_know = FALSE //Если TRUE то ты всегда будешь знать тех у кого такая-же спец роль
var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets
var/list/restricted_roles = list()
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
index 891f9439599..9cbe6a74c86 100644
--- a/code/datums/voice.dm
+++ b/code/datums/voice.dm
@@ -7,16 +7,9 @@
var/voice_name = "Неизвестный"
var/real_voice_name = "Неизвестный"
- var/list/lust_debug = list()
-
var/list/famous_voices = list()
//var/list/famous_faces = list()
-/proc/isZlevel(var/mob/analiz)
- var/result = analiz?.loc?.z
- return (result == 3)
-
-
/datum/voice_model/New(var/mob/owner_voice)
if(owner_voice != null)
host = owner_voice
@@ -27,21 +20,18 @@
tts_seed_string = owner_voice.tts_seed
/datum/voice_model/proc/RegSignals()
- to_chat(world, "Успешно регистрирую сигнал [host.name]")
- RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice))
+ RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice))
//Специфическая функция которая добавляет что нужно короче
/datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice)
SIGNAL_HANDLER
- lust_debug = list_voice
- to_chat(world, "Глобальный сигнал!!")
-
- var/list/prom_fuck = list_voice?[SSjobs.GetJob(host.job).department]
+ var/datum/job/prom_job = SSjobs.GetJob(host.job) //Нужно чтобы небыло предупеждений
+ var/list/prom_data = list_voice?[prom_job.department]
if(list_voice?["AbsolutePomny"])
famous_voices |= list_voice["AbsolutePomny"]
- if(prom_fuck)
- famous_voices |= prom_fuck
+ if(prom_data)
+ famous_voices |= prom_data
/datum/voice_model/proc/JustListAddVoice(list_voice)
SIGNAL_HANDLER
@@ -89,7 +79,7 @@
if(src == target.adv_voice)
return TRUE
. = FALSE
- if(!ishuman(target)) //Нахуя мне знать как зовут мышей :badguy:
+ if(!ishuman(target)) //Зачем мне знать как зовут мышей :badguy:
return target.name
var/mob/living/carbon/human/target_H = target
var/obj/item/card/id/prov_wear_id = null
@@ -133,10 +123,14 @@
*/
//For hear
/datum/voice_model/proc/TryRecollectVoice(mob/target)
+ if(!ishuman(host)) //Мышки мышки знают все....
+ return target.name
+ if(host.mind.special_role_meta_know && (target.mind.special_role == host.mind.special_role))
+ return target.name
if(src == target.adv_voice)
- return target.adv_voice.voice_name
+ return target.name
if(!ishuman(target))
- return target.adv_voice.voice_name
+ return target.name
. = famous_voices?[target.adv_voice.voice_name]
if(.)
diff --git a/code/game/gamemodes/clockwork/clockwork.dm b/code/game/gamemodes/clockwork/clockwork.dm
index b3e52e47ca1..17e10303251 100644
--- a/code/game/gamemodes/clockwork/clockwork.dm
+++ b/code/game/gamemodes/clockwork/clockwork.dm
@@ -190,6 +190,7 @@ GLOBAL_LIST_EMPTY(all_clockers)
clockwork_cult += clock_mind
clock_mind.current.faction |= "clockwork_cult"
clock_mind.special_role = SPECIAL_ROLE_CLOCKER
+ clock_mind.special_role_meta_know = TRUE
if(clock_mind.assigned_role == JOB_TITLE_CLOWN)
to_chat(clock_mind.current, "A dark power has allowed you to overcome your clownish nature, letting you wield weapons without harming yourself.")
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index a6254bc7d85..fa440f4e411 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -187,6 +187,7 @@ GLOBAL_LIST_EMPTY(all_cults)
cult += cult_mind
cult_mind.current.faction |= "cult"
cult_mind.special_role = SPECIAL_ROLE_CULTIST
+ cult_mind.special_role_meta_know = TRUE
ADD_TRAIT(cult_mind.current, TRAIT_HEALS_FROM_CULT_PYLONS, CULT_TRAIT)
if(cult_mind.assigned_role == JOB_TITLE_CLOWN)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index e628ab013cd..aec4b83265a 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -329,7 +329,8 @@ structure_check() searches for nearby cultist structures required for the invoca
convertee.visible_message("[convertee] writhes in pain as the markings below them glow a bloody red!", \
"AAAAAAAAAAAAAA-")
SSticker.mode.add_cultist(convertee.mind)
- convertee.mind.special_role = "Cultist"
+ convertee.mind.special_role = "Cultist" //wtf
+ //convertee.mind.special_role_meta_know = TRUE
to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
and something evil takes root.")
to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [SSticker.cultdat.entity_title3] above all else. Bring it back.\
diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm
index ba29114705e..c9598a15867 100644
--- a/code/game/jobs/job/central.dm
+++ b/code/game/jobs/job/central.dm
@@ -13,6 +13,8 @@
admin_only = 1
outfit = /datum/outfit/job/ntnavyofficer
+ department = "Sedali"
+
/datum/job/ntnavyofficer/get_access()
return get_centcom_access(title)
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index bfe04726e2b..246b8a89b54 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -1,3 +1,4 @@
+#define PRIMITIVE_STATION_DEPARTMENTS list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian")
/datum/job/chief_engineer
title = JOB_TITLE_CHIEF
flag = JOB_FLAG_CHIEF
@@ -28,6 +29,9 @@
min_start_money = 400
max_start_money = 700
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/outfit/job/chief_engineer
name = "Chief Engineer"
jobtype = /datum/job/chief_engineer
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index ed8fe897cae..73bd697528c 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -81,7 +81,15 @@
var/insurance = INSURANCE_STANDART
var/insurance_type = INSURANCE_TYPE_STANDART
+ var/defoult_dep = TRUE
+ var/list/college_department = list() //Указаные отделы будут знать тебя. По умолчанию тебя знает твой отдел
+
//Only override this proc
+/datum/job/New()
+ if(department && defoult_dep)
+ college_department.Add(department)
+
+
/datum/job/proc/after_spawn(mob/living/carbon/human/H)
/datum/job/proc/announce(mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 06879c0c751..7f9a89f1b2c 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -26,6 +26,9 @@
min_start_money = 400
max_start_money = 700
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/outfit/job/cmo
name = JOB_TITLE_CMO
jobtype = /datum/job/cmo
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 9529e98f49a..8b1117dd787 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -31,7 +31,9 @@
salary = 300
min_start_money = 400
max_start_money = 700
-
+
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
/datum/outfit/job/rd
name = "Research Director"
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index d377bf1a6c0..4d5d69df6d0 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -30,6 +30,9 @@
min_start_money = 400
max_start_money = 700
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/outfit/job/hos
name = "Head of Security"
jobtype = /datum/job/hos
diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm
index be71c5ee5da..e5079638c36 100644
--- a/code/game/jobs/job/silicon.dm
+++ b/code/game/jobs/job/silicon.dm
@@ -13,6 +13,8 @@
exp_type = EXP_TYPE_SILICON
insurance_type = INSURANCE_TYPE_NONE
+ college_department = list() //Синтам не нужны коллеги, ибо у них имена потом идут
+
/datum/job/ai/equip(mob/living/carbon/human/H)
if(!H)
return 0
@@ -36,6 +38,9 @@
alt_titles = list("Robot")
insurance_type = INSURANCE_TYPE_NONE
+ defoult_dep = FALSE
+ college_department = list()
+
/datum/job/cyborg/equip(mob/living/carbon/human/H)
if(!H)
return FALSE
diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm
index 824b8276251..c652b24431d 100644
--- a/code/game/jobs/job/supervisor.dm
+++ b/code/game/jobs/job/supervisor.dm
@@ -25,6 +25,9 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca
min_start_money = 600
max_start_money = 1200
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/job/captain/get_access()
return get_all_accesses()
@@ -96,6 +99,9 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca
min_start_money = 400
max_start_money = 700
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/outfit/job/hop
name = "Head of Personnel"
jobtype = /datum/job/hop
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 16a34ff3a41..dc50427493a 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -23,6 +23,9 @@
min_start_money = 400
max_start_money = 700
+ defoult_dep = FALSE
+ college_department = PRIMITIVE_STATION_DEPARTMENTS
+
/datum/outfit/job/qm
name = "Quartermaster"
jobtype = /datum/job/qm
diff --git a/code/game/jobs/job/syndicate.dm b/code/game/jobs/job/syndicate.dm
index 97ed2ea9c05..eebeb30175e 100644
--- a/code/game/jobs/job/syndicate.dm
+++ b/code/game/jobs/job/syndicate.dm
@@ -12,6 +12,7 @@
syndicate_command = 1
outfit = /datum/outfit/job/syndicateofficer
insurance_type = INSURANCE_TYPE_NONE
+ department = "SyndiCat"
/datum/job/syndicateofficer/get_access()
return get_syndicate_access(title)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index 2b137da292e..f0f63106223 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -43,6 +43,8 @@ GLOBAL_LIST_EMPTY(antagonists)
var/russian_wiki_name
/// Show antag in ghost orbit
var/show_in_orbit = TRUE
+ //for voice.dm :catsmile:
+ var/meta_acquaintances = FALSE
/datum/antagonist/New()
GLOB.antagonists += src
diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm
index d3efbdcb570..f7d95c7d7b7 100644
--- a/code/modules/economy/Job_Departments.dm
+++ b/code/modules/economy/Job_Departments.dm
@@ -1,4 +1,5 @@
GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian"))
+//Это нужно поскольку GLOB.station_departments определяется во время выполнения
// The department the job belongs to.
// fuck you cib
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index dbe4d67f6b1..05f018c52c7 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -202,6 +202,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
/mob/living/silicon/robot/proc/init(alien, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+ adv_voice.RegSignals()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
make_laws()
additional_law_channels["Binary"] = get_language_prefix(LANGUAGE_BINARY)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 062ea149e37..397c4385d9e 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -153,8 +153,6 @@
var/radiation = 0 //Carbon
//see: setup.dm for list of mutations
-
- var/examie_name = "Неизвестный" //Долой гнет бульена!!
var/voice_name = "неизвестный голос"
var/datum/voice_model/adv_voice = null
From a39ddcd5c4e8cd4b9dcfe21ce6f27fc12d5a169c Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Wed, 8 Jan 2025 02:28:36 +0300
Subject: [PATCH 7/9] bugfix
---
code/datums/voice.dm | 24 ++++++++++----
code/game/jobs/job/job.dm | 2 +-
code/game/jobs/job/medical.dm | 2 ++
code/game/jobs/job/security.dm | 2 ++
code/game/jobs/job/silicon.dm | 3 --
code/game/jobs/job/supervisor.dm | 2 ++
code/modules/economy/Job_Departments.dm | 31 +++++++++++++++++--
code/modules/mob/living/carbon/human/human.dm | 4 +--
.../mob/living/carbon/human/human_say.dm | 9 ++++++
code/modules/mob/mob_helpers.dm | 8 ++---
code/modules/mob/new_player/new_player.dm | 5 ++-
11 files changed, 71 insertions(+), 21 deletions(-)
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
index 9cbe6a74c86..6b216a680e8 100644
--- a/code/datums/voice.dm
+++ b/code/datums/voice.dm
@@ -1,4 +1,5 @@
#define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный")
+#define FACE_MOD_SWITCH TRUE
//Новая система голоса
/datum/voice_model
var/mob/host = null //Носитель этой хуеты
@@ -8,7 +9,7 @@
var/real_voice_name = "Неизвестный"
var/list/famous_voices = list()
- //var/list/famous_faces = list()
+ var/list/famous_faces = list()
/datum/voice_model/New(var/mob/owner_voice)
if(owner_voice != null)
@@ -66,14 +67,14 @@
return t.fields["name"]
return "IDENTIFICATION ERROR"
//Технически name это представление твоего ебала
-/* BYOND...
+
/datum/voice_model/proc/GetManifestKnowFace(mob/face_target)
for(var/datum/data/record/t in GLOB.data_core.general)
if(t)
if(t.fields["name"] == face_target.name)
return t.fields["name"]
return "IDENTIFICATION FACE ERROR"
-*/
+
/datum/voice_model/proc/TryStore(mob/target)
if(src == target.adv_voice)
@@ -92,7 +93,8 @@
if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id)
- //famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND
+ if(FACE_MOD_SWITCH)
+ famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND
famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name
. = TRUE
else if(prov_wear_id)
@@ -101,7 +103,7 @@
return
//For examie
-/* FUCKING BYOND
+// FUCKING BYOND
/datum/voice_model/proc/TryRecollectFace(mob/target)
if(src == target.adv_voice)
return target.name
@@ -120,7 +122,7 @@
else
. = get_gender_unknown_name(target_H.gender)
return
-*/
+
//For hear
/datum/voice_model/proc/TryRecollectVoice(mob/target)
if(!ishuman(host)) //Мышки мышки знают все....
@@ -144,4 +146,14 @@
return TRUE
return FALSE
+//HELPERS
+
+/proc/GenDepartamentVoiceTree(mob/target, list/departments)
+ var/list/result = list()
+
+ for(var/dep_flag in departments) //:catsmile:
+ result[dep_flag] = list(target.adv_voice.voice_name = target.name)
+
+ return result
+
#undef GENDER_NAME_UNKNOW
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index bf84c9c8e5b..d8ba8006c74 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -1,5 +1,5 @@
/datum/job
-
+ //ПРЕДУПРЕЖДЕНИЕ ВСЕМ И ВСЯ, НЕ ЗАБЫВАЙТЕ ПРОПИСЫВАТЬ ДЕПОРТАМЕНТ В Job_Departamenst.dm ИНАЧЕ НАХУЙ ВСЕ СЛОМАЕТСЯ
//The name of the job
var/title = "NOPE"
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 7f9a89f1b2c..0d79c46db5a 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -264,6 +264,8 @@
min_start_money = 200
max_start_money = 400
+ college_department = list("Medical", "Science")
+
/datum/outfit/job/geneticist
name = "Geneticist"
jobtype = /datum/job/geneticist
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 8f9cab1050f..230e73b2e89 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -274,6 +274,8 @@
min_start_money = 200
max_start_money = 550
+ college_department = list("Security", "Medical") //:catsmile:
+
/datum/outfit/job/brigdoc
name = "Brig Physician"
jobtype = /datum/job/brigdoc
diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm
index e5079638c36..bcb45e9ed33 100644
--- a/code/game/jobs/job/silicon.dm
+++ b/code/game/jobs/job/silicon.dm
@@ -13,8 +13,6 @@
exp_type = EXP_TYPE_SILICON
insurance_type = INSURANCE_TYPE_NONE
- college_department = list() //Синтам не нужны коллеги, ибо у них имена потом идут
-
/datum/job/ai/equip(mob/living/carbon/human/H)
if(!H)
return 0
@@ -39,7 +37,6 @@
insurance_type = INSURANCE_TYPE_NONE
defoult_dep = FALSE
- college_department = list()
/datum/job/cyborg/equip(mob/living/carbon/human/H)
if(!H)
diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm
index 23f5989d43a..9c8c240d8c9 100644
--- a/code/game/jobs/job/supervisor.dm
+++ b/code/game/jobs/job/supervisor.dm
@@ -208,6 +208,8 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca
min_start_money = 400
max_start_money = 700
+ college_department = list("Command", "Security")
+
/datum/outfit/job/blueshield
name = "Blueshield"
jobtype = /datum/job/blueshield
diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm
index f7d95c7d7b7..0b4781a0e43 100644
--- a/code/modules/economy/Job_Departments.dm
+++ b/code/modules/economy/Job_Departments.dm
@@ -11,6 +11,10 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering",
/datum/job/captain/department = "Command"
/datum/job/captain/head_position = 1
+/datum/job/nanotrasenrep/department = "Command"
+
+/datum/job/blueshield/department = "Command"
+
/datum/job/hop/department = "Support"
/datum/job/hop/head_position = 1
@@ -22,26 +26,34 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering",
/datum/job/hydro/department = "Support"
-/datum/job/mining/department = "Support"
-
/datum/job/janitor/department = "Support"
+/datum/job/clown/department = "Support"
+
+/datum/job/mime/department = "Support"
+
/datum/job/librarian/department = "Support"
/datum/job/lawyer/department = "Support"
/datum/job/chaplain/department = "Support"
+/datum/job/explorer/department = "Support"
+
/datum/job/qm/department = "Cargo"
/datum/job/qm/head_position = 1
/datum/job/cargo_tech/department = "Cargo"
+/datum/job/mining/department = "Cargo"
+
/datum/job/chief_engineer/department = "Engineering"
/datum/job/chief_engineer/head_position = 1
/datum/job/engineer/department = "Engineering"
+/datum/job/mechanic/department = "Engineering"
+
/datum/job/atmos/department = "Engineering"
/datum/job/engineer/trainee/department = "Engineering"
@@ -51,10 +63,16 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering",
/datum/job/doctor/department = "Medical"
+/datum/job/coroner/department = "Medical"
+
/datum/job/chemist/department = "Medical"
+/datum/job/virologist/department = "Medical"
+
/datum/job/geneticist/department = "Medical"
+/datum/job/paramedic/department = "Medical"
+
/datum/job/psychiatrist/department = "Medical"
/datum/job/doctor/intern/department = "Medical"
@@ -77,3 +95,12 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering",
/datum/job/officer/department = "Security"
+/datum/job/brigdoc/department = "Security"
+
+/datum/job/pilot/department = "Security"
+
+/datum/job/judge/department = "Security"
+
+/datum/job/lawyer/department = "Security"
+
+
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 6538ad24030..65c003ec848 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1964,7 +1964,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
if(istype(potential_spine))
carrydelay *= potential_spine.athletics_boost_multiplier
*/
-
if(carrydelay <= 3 SECONDS)
skills_space = " very quickly"
else if(carrydelay <= 4 SECONDS)
@@ -1980,5 +1979,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
if(!can_be_firemanned(target) || incapacitated(INC_IGNORE_GRABBED) || target.buckled)
visible_message(span_warning("[src] fails to fireman carry [target]!"))
return
-
+
return buckle_mob(target, TRUE, FALSE, CARRIER_NEEDS_ARM) //checkloc is false because we usually grab people from nearest tile
+//НЕ ВНОСИТЬ ИЗМЕНЕНИЯ, ЮБИЛЕЙНОЕ ЧИСЛО СТРОК
diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm
index bcc9abbb6b4..7e244316cc5 100644
--- a/code/modules/mob/living/carbon/human/human_say.dm
+++ b/code/modules/mob/living/carbon/human/human_say.dm
@@ -8,6 +8,15 @@
return " (as [get_id_name("Unknown")])"
return ..()
+/mob/living/carbon/human/proc/GetDescription()
+ var/datum/species/prom_spec = dna.species
+ if(age < 24)
+ return "Young [prom_spec.name] [gender]"
+ if(age < 45)
+ return "Mature [prom_spec.name] [gender]"
+ if(age < 60)
+ return "Old [prom_spec.name] [gender]"
+ return "Ancient [prom_spec.name] [gender]"
/mob/living/carbon/human/say_understands(mob/other, datum/language/speaking = null)
if(dna?.species?.can_understand(other))
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 887fdae83a2..3befd346abf 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM
check_eye(src)
return TRUE
-/mob/proc/rename_character(oldname, newname, mass_update = FALSE)
+/mob/proc/rename_character(oldname, newname, list/mass_update = list())
if(!newname)
return 0
real_name = newname
@@ -578,11 +578,11 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM
pos = findtextEx_char(objective.explanation_text, oldname)
objective.explanation_text = copytext_char(objective.explanation_text, 1, pos)+newname+copytext_char(objective.explanation_text, pos+length)
UpdateVoice()
- if(mass_update)
- SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, list("AbsolutePomny" = (list((adv_voice.voice_name) = name))))
+ if(LAZYLEN(mass_update) != 0)
+ SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GenDepartamentVoiceTree(src, mass_update))
return 1
-/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, var/mass_update = FALSE)
+/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, list/mass_update = list())
spawn(0)
var/oldname = real_name
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 90ba383859d..a3290052804 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -614,15 +614,14 @@
// stop_sound_channel(CHANNEL_LOBBYMUSIC)
client?.tgui_panel?.stop_music()
-
if(mind)
mind.active = 0 //we wish to transfer the key manually
if(mind.assigned_role == JOB_TITLE_CLOWN) //give them a clownname if they are a clown
new_character.real_name = pick(GLOB.clown_names) //I hate this being here of all places but unfortunately dna is based on real_name!
- new_character.rename_self(JOB_TITLE_CLOWN, mass_update = TRUE)
+ new_character.rename_self(JOB_TITLE_CLOWN, mass_update = list("Support"))
else if(mind.assigned_role == JOB_TITLE_MIME)
new_character.real_name = pick(GLOB.mime_names)
- new_character.rename_self(JOB_TITLE_MIME, mass_update = TRUE)
+ new_character.rename_self(JOB_TITLE_MIME, mass_update = list("Support"))
mind.set_original_mob(new_character)
mind.transfer_to(new_character) //won't transfer key since the mind is not active
GLOB.human_names_list += new_character.real_name
From 9b42ae5f05b6682a98b96c5f131e627b5ff3d671 Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Wed, 8 Jan 2025 02:37:29 +0300
Subject: [PATCH 8/9] nanofix
---
code/datums/datacore.dm | 1 -
code/datums/voice.dm | 4 ++--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 61b7637e358..a2fb31406c0 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -156,7 +156,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
for(var/dep_flag in prom_job.college_department) //:catsmile:
if(!isnull(GLOB.capitalist_manifest?[dep_flag]))
- to_chat(world, "[dep_flag] [prom_job] [H.real_name]")
GLOB.capitalist_manifest[dep_flag][prom_voice] = H.real_name
else
GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name))
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
index 6b216a680e8..62e4532a3e0 100644
--- a/code/datums/voice.dm
+++ b/code/datums/voice.dm
@@ -93,8 +93,8 @@
if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id)
- if(FACE_MOD_SWITCH)
- famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND
+ //if(FACE_MOD_SWITCH)
+ // famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND
famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name
. = TRUE
else if(prov_wear_id)
From ae87b0165ed942845d11b6c006db4dd9dfbaf171 Mon Sep 17 00:00:00 2001
From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com>
Date: Wed, 8 Jan 2025 15:48:20 +0300
Subject: [PATCH 9/9] =?UTF-8?q?=D0=BF=D0=B5=D0=BD=D0=B4=D0=BE=D1=81=D0=B8?=
=?UTF-8?q?=D1=8F=20=D0=B0=D0=BF=D0=B4=D0=B5=D0=B9=D1=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/__DEFINES/dcs/signals.dm | 1 -
code/datums/datacore.dm | 4 +---
code/datums/voice.dm | 18 +++++++-----------
3 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 91edf847e41..ac0bd476ae2 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -77,7 +77,6 @@
//signal for mass roundstart store voice (very english)
#define COMSIG_SPECIAL_MASS_STORE_VOICE "store_voice"
-#define COMSIG_JUST_LIST_ADD_VOICE "list_add_voice"
//signal for human store ebalo
//#define COMSIG_STORE_FACE "store_face"
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index a2fb31406c0..36c3a11bd70 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -149,7 +149,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
var/id = num2hex(GLOB.record_id_num++, 6)
H.adv_voice.RegSignals()
- H.UpdateVoice() //На всякий
+ H.UpdateVoice()
var/prom_voice = H.adv_voice.voice_name
var/datum/job/prom_job = SSjobs.GetJob(H.job)
@@ -160,8 +160,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
else
GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name))
- //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest)
- //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало
//General Record
var/datum/data/record/G = new()
G.fields["id"] = id
diff --git a/code/datums/voice.dm b/code/datums/voice.dm
index 62e4532a3e0..0e1b75f016b 100644
--- a/code/datums/voice.dm
+++ b/code/datums/voice.dm
@@ -2,7 +2,7 @@
#define FACE_MOD_SWITCH TRUE
//Новая система голоса
/datum/voice_model
- var/mob/host = null //Носитель этой хуеты
+ var/mob/host = null
var/tts_seed_string = "Arthas"
var/voice_gender = MALE
var/voice_name = "Неизвестный"
@@ -23,13 +23,10 @@
/datum/voice_model/proc/RegSignals()
RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice))
-//Специфическая функция которая добавляет что нужно короче
/datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice)
SIGNAL_HANDLER
- var/datum/job/prom_job = SSjobs.GetJob(host.job) //Нужно чтобы небыло предупеждений
+ var/datum/job/prom_job = SSjobs.GetJob(host.job) //WARNING. Fuking byond
var/list/prom_data = list_voice?[prom_job.department]
- if(list_voice?["AbsolutePomny"])
- famous_voices |= list_voice["AbsolutePomny"]
if(prom_data)
famous_voices |= prom_data
@@ -59,14 +56,13 @@
real_voice_name = voice_to_copy.real_voice_name
famous_voices = voice_to_copy.famous_voices
*/
-//было две бутылки, словарь или два прока. Я сел на вторую
+
/datum/voice_model/proc/GetManifestKnowVoice()
for(var/datum/data/record/t in GLOB.data_core.general)
if(t)
if(t.fields["voice"] == voice_name)
return t.fields["name"]
return "IDENTIFICATION ERROR"
-//Технически name это представление твоего ебала
/datum/voice_model/proc/GetManifestKnowFace(mob/face_target)
for(var/datum/data/record/t in GLOB.data_core.general)
@@ -75,12 +71,11 @@
return t.fields["name"]
return "IDENTIFICATION FACE ERROR"
-
/datum/voice_model/proc/TryStore(mob/target)
if(src == target.adv_voice)
return TRUE
. = FALSE
- if(!ishuman(target)) //Зачем мне знать как зовут мышей :badguy:
+ if(!ishuman(target))
return target.name
var/mob/living/carbon/human/target_H = target
var/obj/item/card/id/prov_wear_id = null
@@ -104,10 +99,11 @@
//For examie
// FUCKING BYOND
+/* NOT USED
/datum/voice_model/proc/TryRecollectFace(mob/target)
if(src == target.adv_voice)
return target.name
- if(!ishuman(target)) //:Roflcat: Чтобы имена мышей знать сразу
+ if(!ishuman(target)) //:Roflcat:
return target.name
var/mob/living/carbon/human/target_H = target
@@ -122,7 +118,7 @@
else
. = get_gender_unknown_name(target_H.gender)
return
-
+*/
//For hear
/datum/voice_model/proc/TryRecollectVoice(mob/target)
if(!ishuman(host)) //Мышки мышки знают все....