From 1c326a38e1477ed830bdb6d94a9e44d8717840ed Mon Sep 17 00:00:00 2001
From: Guti <32563288+TheCaramelion@users.noreply.github.com>
Date: Tue, 17 Jun 2025 20:29:06 +0200
Subject: [PATCH 01/47] Viruses now spawn with random names (#17882)
* Disease descriptions
* Random names
---
code/datums/diseases/advance/advance.dm | 108 +++++++++++++++++-
.../datums/diseases/advance/disease_preset.dm | 9 +-
.../diseases/advance/symptoms/blobspores.dm | 3 +
.../diseases/advance/symptoms/choking.dm | 3 +
.../diseases/advance/symptoms/cockroach.dm | 3 +
.../diseases/advance/symptoms/confusion.dm | 3 +
.../datums/diseases/advance/symptoms/cough.dm | 2 +
.../diseases/advance/symptoms/deafness.dm | 3 +
.../datums/diseases/advance/symptoms/fever.dm | 5 +
code/datums/diseases/advance/symptoms/fire.dm | 4 +
.../diseases/advance/symptoms/flesh_eating.dm | 3 +
code/datums/diseases/advance/symptoms/flip.dm | 3 +
code/datums/diseases/advance/symptoms/hair.dm | 2 +
.../diseases/advance/symptoms/hallucigen.dm | 3 +
.../diseases/advance/symptoms/headache.dm | 2 +
code/datums/diseases/advance/symptoms/heal.dm | 8 ++
.../diseases/advance/symptoms/itching.dm | 3 +
.../diseases/advance/symptoms/language.dm | 3 +
.../datums/diseases/advance/symptoms/light.dm | 3 +
.../diseases/advance/symptoms/macrophage.dm | 3 +
code/datums/diseases/advance/symptoms/mlem.dm | 3 +
.../diseases/advance/symptoms/radiation.dm | 5 +
.../diseases/advance/symptoms/shivering.dm | 3 +
code/datums/diseases/advance/symptoms/size.dm | 4 +
.../diseases/advance/symptoms/sneeze.dm | 6 +
code/datums/diseases/advance/symptoms/spin.dm | 3 +
.../diseases/advance/symptoms/stimulant.dm | 5 +
.../diseases/advance/symptoms/symptoms.dm | 7 ++
.../datums/diseases/advance/symptoms/viral.dm | 6 +
.../diseases/advance/symptoms/vision.dm | 4 +
.../datums/diseases/advance/symptoms/vomit.dm | 4 +
.../diseases/advance/symptoms/weakness.dm | 2 +
.../diseases/advance/symptoms/weight.dm | 2 +
.../datums/diseases/advance/symptoms/youth.dm | 3 +
code/datums/diseases/anxiety.dm | 1 +
code/datums/diseases/appendicitis.dm | 1 +
code/datums/diseases/beesease.dm | 1 +
code/datums/diseases/brainrot.dm | 3 +-
code/datums/diseases/choreomania.dm | 1 +
code/datums/diseases/cold.dm | 1 +
code/datums/diseases/fake_gbs.dm | 3 +-
code/datums/diseases/flu.dm | 1 +
code/datums/diseases/food_poisoning.dm | 1 +
code/datums/diseases/gbs.dm | 4 +
code/datums/diseases/lycancoughy.dm | 1 +
code/datums/diseases/magnitis.dm | 1 +
.../effects/decals/Cleanable/humans.dm | 2 +-
.../subtypes/animal/passive/mouse.dm | 4 +-
.../reagents/reagent_containers/syringes.dm | 2 +-
49 files changed, 249 insertions(+), 11 deletions(-)
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 0b088cb74f4..2cf2d6dc256 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
))
/datum/disease/advance
- name = "Unknown"
+ name = DEVELOPER_WARNING_NAME
desc = "An engineered disease which can contain a multitude of symptoms."
form = "Advance Disease"
agent = "advance microbes"
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
else
var/datum/disease/advance/A = GLOB.archive_diseases[GetDiseaseID()]
var/actual_name = A.name
- if(actual_name != "Unknown")
+ if(actual_name != DEVELOPER_WARNING_NAME)
name = actual_name
@@ -266,8 +266,10 @@ GLOBAL_LIST_INIT(advance_cures, list(
severity = DISEASE_HARMFUL
if(4)
severity = DISEASE_DANGEROUS
- if(5 to INFINITY)
+ if(5)
severity = DISEASE_BIOHAZARD
+ if(6 to INFINITY)
+ severity = DISEASE_PANDEMIC
else
severity = "Unknown"
@@ -477,3 +479,103 @@ GLOBAL_LIST_INIT(advance_cures, list(
GLOB.active_diseases += A
log_admin("[key_name(src)] has contracted the virus \"[A]\"")
+
+/*
+* Generates a random name for a disease, depending on where it comes from
+*/
+/datum/disease/advance/proc/random_disease_name(var/atom/diseasesource)
+
+ if(length(symptoms) == 1)
+ var/datum/symptom/main_symptom = symptoms[1]
+ if(istype(main_symptom) && length(main_symptom.name))
+ return main_symptom.name
+
+ // Prefixes. These need a space right after.
+ var/list/prefixes = list("Spacer's ", "Space ", "Infectious ","Viral ", "The ", "[capitalize(prob(50) ? pick(first_names_male) : pick(first_names_female))]'s ", "[capitalize(pick(last_names))]'s ", "Acute ")
+ var/list/bodies = list(pick("[capitalize(prob(50) ? pick(first_names_male) : pick(first_names_female))]", "[pick(last_names)]"), "Space", "Disease", "Noun", "Cold", "Germ", "Virus")
+ // These might need some space before the word, depends on what you want to add.
+ var/list/suffixes = list("ism", "itis", "osis", "itosis", " #[rand(1,10000)]", "-[rand(1,100)]", "s", "y", " Virus", " Bug", " Infection", " Disease", " Complex", " Syndrome", " Sickness")
+
+ if(stealth >=2)
+ prefixes += "Crypto "
+ switch(max(resistance - (symptoms.len / 2), 1))
+ if(1)
+ suffixes += "-alpha"
+ if(2)
+ suffixes += "-beta"
+ if(3)
+ suffixes += "-gamma"
+ if(4)
+ suffixes += "-delta"
+ if(5)
+ suffixes += "-epsilon"
+ if(6)
+ suffixes += pick("-zeta", "-eta", "-theta", "-iota")
+ if(7)
+ suffixes += pick("-kappa", "-lambda")
+ if(8)
+ suffixes += pick("-mu", "-nu", "-xi", "-omicron")
+ if(9)
+ suffixes += pick("-pi", "-rho", "-sigma", "-tau")
+ if(10)
+ suffixes += pick("-upsilon", "-phi", "-chi", "-psi")
+ if(11 to INFINITY)
+ suffixes += "-omega"
+ prefixes += "Robust "
+ switch(transmission - symptoms.len)
+ if(-INFINITY to 2)
+ prefixes += "Bloodborne "
+ if(3)
+ prefixes += list("Mucous ", "Kissing ")
+ if(4)
+ prefixes += "Contact "
+ suffixes += " Flu"
+ if(5 to INFINITY)
+ prefixes += "Airborne "
+ suffixes += " Plague"
+ switch(severity)
+ if(-INFINITY to 0)
+ prefixes += "Altruistic "
+ if(1 to 2)
+ prefixes += "Benign "
+ if(3 to 4)
+ prefixes += "Malignant "
+ if(5)
+ prefixes += "Deadly "
+ bodies += "Death"
+ if(6 to INFINITY)
+ prefixes += "Morbid "
+ bodies += "Death"
+ if(diseasesource)
+ if(ishuman(diseasesource))
+ var/mob/living/carbon/human/H = diseasesource
+ prefixes += pick("[H.name]'s ", "[H.job]'s ", "[H.get_species()]'s ")
+ bodies += pick("[H.name]", "[H.job]", "[H.get_species()]")
+ if(H.get_species() == SPECIES_UNATHI || H.get_species() == SPECIES_TAJARAN)
+ prefixes += list("Vermin ", "Zoo", "Maintenance ")
+ bodies += list("Rat", "Maint")
+ if(ismouse(diseasesource) && !istype(diseasesource, /mob/living/simple_mob/animal/passive/mouse/white/virology))
+ prefixes += list("Vermin ", "Zoo", "Maintenance ")
+ bodies += list("Rat", "Maint")
+ else switch(diseasesource.type)
+ if(/mob/living/simple_mob/animal/passive/mouse/white/virology)
+ prefixes += list("Fleming's ", "Standard ")
+ bodies += list("Freebie")
+ if(/obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/vomit/old)
+ prefixes += list("Bloody ", "Maintenance ")
+ bodies += list("Maint")
+ if(/obj/item/reagent_containers/syringe/old)
+ prefixes += list("Junkie ", "Maintenance ")
+ bodies += list("Needle", "Maint")
+ for(var/datum/symptom/S in symptoms)
+ if(!S.neutered)
+ prefixes += S.prefixes
+ bodies += S.bodies
+ suffixes += S.suffixes
+ switch(rand(1, 3))
+ if(1)
+ return "[pick(prefixes)][pick(bodies)]"
+ if(2)
+ return "[pick(prefixes)][pick(bodies)][pick(suffixes)]"
+ if(3)
+ return "[pick(bodies)][pick(suffixes)]"
diff --git a/code/datums/diseases/advance/disease_preset.dm b/code/datums/diseases/advance/disease_preset.dm
index 6ee6b15ce3e..6a23220cb6c 100644
--- a/code/datums/diseases/advance/disease_preset.dm
+++ b/code/datums/diseases/advance/disease_preset.dm
@@ -6,7 +6,7 @@
/datum/disease/advance/random/minor
max_symptoms_override = 4
-/datum/disease/advance/random/New(max_symptoms, max_level = 6, min_level = 1, list/guaranteed_symptoms = setsymptom)
+/datum/disease/advance/random/New(max_symptoms, max_level = 6, min_level = 1, list/guaranteed_symptoms = setsymptom, var/atom/infected)
if(!max_symptoms)
max_symptoms = (2 + rand(1, (VIRUS_SYMPTOM_LIMIT - 2)))
if(max_symptoms_override)
@@ -35,6 +35,11 @@
symptoms += new guaranteed_symptom
Finalize()
+ if(randomname)
+ var/randname = random_disease_name(infected)
+ AssignName(randname)
+ name = randname
+
/mob/living/carbon/human/proc/give_random_dormant_disease(biohazard = 25, min_symptoms = 2, max_symptoms = 4, min_level = 4, max_level = 9, list/guaranteed_symptoms = list())
. = FALSE
var/sickrisk = 1
@@ -53,7 +58,7 @@
if(prob(min(100, (biohazard * sickrisk))))
var/symptom_amt = rand(min_symptoms, max_symptoms)
- var/datum/disease/advance/dormant_disease = new /datum/disease/advance/random(symptom_amt, max_level, min_level, guaranteed_symptoms)
+ var/datum/disease/advance/dormant_disease = new /datum/disease/advance/random(symptom_amt, max_level, min_level, guaranteed_symptoms, infected = src)
dormant_disease.virus_modifiers |= DORMANT
dormant_disease.spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
dormant_disease.spread_text = "None"
diff --git a/code/datums/diseases/advance/symptoms/blobspores.dm b/code/datums/diseases/advance/symptoms/blobspores.dm
index 29887dfc1e4..734b372c34c 100644
--- a/code/datums/diseases/advance/symptoms/blobspores.dm
+++ b/code/datums/diseases/advance/symptoms/blobspores.dm
@@ -37,6 +37,9 @@ BONUS
var/strong_blob
var/node_blob
+ prefixes = list("Xeno", "Sporing ")
+ bodies = list("Blob")
+
/datum/symptom/blobspores/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 14)
diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm
index eb3b492e494..8ee41282966 100644
--- a/code/datums/diseases/advance/symptoms/choking.dm
+++ b/code/datums/diseases/advance/symptoms/choking.dm
@@ -35,6 +35,9 @@ Bonus
"Transmission 8" = "Doubles the damage caused by the symptom."
)
+ bodies = list("Lung")
+ suffixes = list(" Tuberculosis")
+
/datum/symptom/choking/severityset(datum/disease/advance/A)
. = ..()
if(A.transmission >= 8)
diff --git a/code/datums/diseases/advance/symptoms/cockroach.dm b/code/datums/diseases/advance/symptoms/cockroach.dm
index da7481a9f0d..5638479eac8 100644
--- a/code/datums/diseases/advance/symptoms/cockroach.dm
+++ b/code/datums/diseases/advance/symptoms/cockroach.dm
@@ -17,6 +17,9 @@
"Transmission 8" = "When the host dies, more roaches spawn."
)
+ prefixes = list("Blatto")
+ bodies = list("Roach")
+
/datum/symptom/cockroach/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm
index 1ba1d0ad74e..29911dd7b27 100644
--- a/code/datums/diseases/advance/symptoms/confusion.dm
+++ b/code/datums/diseases/advance/symptoms/confusion.dm
@@ -33,6 +33,9 @@ Bonus
"Stealth 4" = "The symptom remains hidden until active."
)
+ prefixes = list("Dizzy ")
+ bodies = list("Ditz")
+
/datum/symptom/confusion/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 6)
diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm
index e0ef528eefe..2625530dab3 100644
--- a/code/datums/diseases/advance/symptoms/cough.dm
+++ b/code/datums/diseases/advance/symptoms/cough.dm
@@ -38,6 +38,8 @@ BONUS
"Transmission 11" = "The hosts coughing will occasionally spread the virus."
)
+ bodies = list("Cough")
+
/datum/symptom/cough/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 3)
diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm
index d32bef5f04a..cd4d7bd59da 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/advance/symptoms/deafness.dm
@@ -33,6 +33,9 @@ Bonus
"Stealth 4" = "The symptom remains hidden until active."
)
+ prefixes = list("Aural ")
+ bodies = list("Ear")
+
/datum/symptom/deafness/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 9)
diff --git a/code/datums/diseases/advance/symptoms/fever.dm b/code/datums/diseases/advance/symptoms/fever.dm
index bd3698eb54b..57554fefe33 100644
--- a/code/datums/diseases/advance/symptoms/fever.dm
+++ b/code/datums/diseases/advance/symptoms/fever.dm
@@ -35,12 +35,17 @@ Bonus
"Resistance 10" = "Further increases fever intensity."
)
+ bodies = list("Fever")
+ suffixes = list(" Fever")
+
/datum/symptom/fever/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 5)
severity += 1
+ prefixes = list("Desert")
if(A.resistance >= 10)
severity += 1
+ prefixes = list("Volcanic")
/datum/symptom/fever/Start(datum/disease/advance/A)
if(!..())
diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm
index 0896422a90f..037e6cdec12 100644
--- a/code/datums/diseases/advance/symptoms/fire.dm
+++ b/code/datums/diseases/advance/symptoms/fire.dm
@@ -38,6 +38,10 @@ Bonus
"Stealth 4" = "The symptom remains hidden until active."
)
+ prefixes = list("Burning ")
+ bodies = list("Combustion")
+ suffixes = list(" Combustion")
+
/datum/symptom/fire/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm
index 2e181a7bafb..919102b57de 100644
--- a/code/datums/diseases/advance/symptoms/flesh_eating.dm
+++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm
@@ -36,6 +36,9 @@ Bonus
"Transmission 8" = "The host will bleed far more violently, loosing even more blood, and spraying infected blood everywhere."
)
+ prefixes = list("Bloody ", "Hemo")
+ bodies = list("Hemophilia")
+
/datum/symptom/flesh_eating/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/flip.dm b/code/datums/diseases/advance/symptoms/flip.dm
index 48c01bc1f47..04ab992e2c3 100644
--- a/code/datums/diseases/advance/symptoms/flip.dm
+++ b/code/datums/diseases/advance/symptoms/flip.dm
@@ -27,6 +27,9 @@ BONUS
level = 1
severity = 0
+ prefixes = list("Acrobat's ", "Flippin' ")
+ bodies = list("Flip")
+
/datum/symptom/flip/Activate(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/hair.dm b/code/datums/diseases/advance/symptoms/hair.dm
index fc41c3207c8..8df7cab0f9a 100644
--- a/code/datums/diseases/advance/symptoms/hair.dm
+++ b/code/datums/diseases/advance/symptoms/hair.dm
@@ -28,6 +28,8 @@ BONUS
symptom_delay_min = 45
symptom_delay_max = 90
+ bodies = list("Bald", "Scalp")
+
/datum/symptom/shedding/Activate(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm
index 4db05f1878d..be1cb384730 100644
--- a/code/datums/diseases/advance/symptoms/hallucigen.dm
+++ b/code/datums/diseases/advance/symptoms/hallucigen.dm
@@ -30,6 +30,9 @@ Bonus
var/fake_healthy = FALSE
+ prefixes = list("Narcotic ", "Narco", "Psycho-")
+ suffixes = list(" Psychosis")
+
threshold_descs = list(
"Stage Speed 7" = "Increases the amount of hallucinations.",
"Stealth 2" = "The virus mimics positive symptoms"
diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm
index 94cc4bccc2d..5ed93588f32 100644
--- a/code/datums/diseases/advance/symptoms/headache.dm
+++ b/code/datums/diseases/advance/symptoms/headache.dm
@@ -34,6 +34,8 @@ BONUS
"Stealth 4" = "Reduces headache frequency until later stages."
)
+ bodies = list("Skull", "Migraine")
+
/datum/symptom/headache/severityset(datum/disease/advance/A)
. = ..()
if(A.stage_rate >= 6)
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 78f23343f30..72ee41c65ea 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -58,6 +58,8 @@
"Stage Speed 6" = "Consumed chemicals nourish the host."
)
+ prefixes = list("Toxo")
+
/datum/symptom/heal/chem/Start(datum/disease/advance/A)
if(!..())
return
@@ -98,6 +100,9 @@
"Stage Speed 12" = "The disease heals brute damage incredibly fast, but deteriorates cell health and causes tumors to become more advanced. The disease will also regenerate lost limbs."
)
+ prefixes = list("Blood ", "Meat ", "Flesh ")
+ bodies = list("Giant")
+
/datum/symptom/growth/Start(datum/disease/advance/A)
if(!..())
return
@@ -165,6 +170,9 @@
"Stage Speed 10" = "Chemical metabolization is tripled instead of doubled."
)
+ prefixes = list("Metabolic ", "Junkie's ", "Chemical ")
+ bodies = list("Hunger")
+
/datum/symptom/heal/metabolism/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm
index 5eeada1d924..058cfb77f29 100644
--- a/code/datums/diseases/advance/symptoms/itching.dm
+++ b/code/datums/diseases/advance/symptoms/itching.dm
@@ -34,6 +34,9 @@ BONUS
"Stage Speed 7" = "The host will scratch itself when itchin, causing superficial damage."
)
+ prefixes = list("Irritant ")
+ bodies = list("Itch")
+
/datum/symptom/itching/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/language.dm b/code/datums/diseases/advance/symptoms/language.dm
index 7d3f95e83af..0bae1cd95ed 100644
--- a/code/datums/diseases/advance/symptoms/language.dm
+++ b/code/datums/diseases/advance/symptoms/language.dm
@@ -33,6 +33,9 @@ Bonus
"Resistance 5" = "The host might end up speaking a completely made up language."
)
+ prefixes = list("Babel's ", "Tongue-Twisting ")
+ bodies = list("Tongue", "Language")
+
/datum/symptom/language/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/light.dm b/code/datums/diseases/advance/symptoms/light.dm
index 0d3e5b697d3..71cb680b699 100644
--- a/code/datums/diseases/advance/symptoms/light.dm
+++ b/code/datums/diseases/advance/symptoms/light.dm
@@ -12,6 +12,9 @@
"Stealth 3" = "The virus causes a wider disparity between light and dark."
)
+ prefixes = list("Photo", "Light ")
+ bodies = list("Cramp")
+
/datum/symptom/light/severityset(datum/disease/advance/A)
. = ..()
if(A.stealth >= 3)
diff --git a/code/datums/diseases/advance/symptoms/macrophage.dm b/code/datums/diseases/advance/symptoms/macrophage.dm
index f5ea92b790f..80cd6426ee6 100644
--- a/code/datums/diseases/advance/symptoms/macrophage.dm
+++ b/code/datums/diseases/advance/symptoms/macrophage.dm
@@ -38,6 +38,9 @@ BONUS
"Transmission 12" = "Phages will carry all diseases within the host, instead of only containing their own."
)
+ prefixes = list("Ambulant ", "Macro")
+ bodies = list("Phage")
+
/datum/symptom/macrophage/severityset(datum/disease/advance/A)
. = ..()
if(A.transmission >= 10)
diff --git a/code/datums/diseases/advance/symptoms/mlem.dm b/code/datums/diseases/advance/symptoms/mlem.dm
index ebd3c79eb4a..80f8836d4df 100644
--- a/code/datums/diseases/advance/symptoms/mlem.dm
+++ b/code/datums/diseases/advance/symptoms/mlem.dm
@@ -32,6 +32,9 @@ BONUS
"Transmission 8" = "The host will spread the virus through saliva when mlemming."
)
+ prefixes = list("Mlemington's ", "Licking-")
+ bodies = list("Mlem", "Lick")
+
/datum/symptom/mlem/severityset(datum/disease/advance/A)
. = ..()
if(A.transmission >= 8)
diff --git a/code/datums/diseases/advance/symptoms/radiation.dm b/code/datums/diseases/advance/symptoms/radiation.dm
index 0c926c1749d..9b4a44ca015 100644
--- a/code/datums/diseases/advance/symptoms/radiation.dm
+++ b/code/datums/diseases/advance/symptoms/radiation.dm
@@ -13,6 +13,9 @@
"Speed 8" = "Host takes radiation damage faster."
)
+ prefixes = list("Gamma ")
+ bodies = list("Radiation")
+
/datum/symptom/radiation/severityset(datum/disease/advance/A)
. = ..()
if(A.stage_rate >= 8)
@@ -65,6 +68,8 @@
"Resistance 12" = "The disease also kills off genetically damaged cells, coverting Genetic damage to Burn damage, an inefficient rate."
)
+ suffixes = list(" Aptosis")
+
/datum/symptom/radconversion/severityset(datum/disease/advance/A)
. = ..()
if(A.stage_rate >= 6)
diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/advance/symptoms/shivering.dm
index ec556abef70..14f6ce18ee6 100644
--- a/code/datums/diseases/advance/symptoms/shivering.dm
+++ b/code/datums/diseases/advance/symptoms/shivering.dm
@@ -34,6 +34,9 @@ Bonus
"Stage Speed 10" = "Further increases cooling speed."
)
+ bodies = list("Shiver")
+ suffixes = list(" Shivers")
+
/datum/symptom/shivering/severityset(datum/disease/advance/A)
. = ..()
if(A.stage_rate >= 5)
diff --git a/code/datums/diseases/advance/symptoms/size.dm b/code/datums/diseases/advance/symptoms/size.dm
index b01336d9997..19c0c8bd574 100644
--- a/code/datums/diseases/advance/symptoms/size.dm
+++ b/code/datums/diseases/advance/symptoms/size.dm
@@ -43,7 +43,11 @@ BONUS
min_size = RESIZE_NORMAL
max_size = RESIZE_MAXIMUM
+ prefixes = list("Growing ", "Gigantic ")
+
/datum/symptom/size/shrink
name = "Dwindling Malady"
min_size = RESIZE_MINIMUM
max_size = RESIZE_NORMAL
+
+ prefixes = list("Shrinking ", "Micro-")
diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm
index 2ab63957c97..1d94f0d6464 100644
--- a/code/datums/diseases/advance/symptoms/sneeze.dm
+++ b/code/datums/diseases/advance/symptoms/sneeze.dm
@@ -35,6 +35,9 @@ Bonus
"Trasmission 12" = "The host may spread the disease through sneezing."
)
+ prefixes = list("Nasal ")
+ bodies = list("Cold")
+
/datum/symptom/sneeze/Start(datum/disease/advance/A)
if(!..())
return
@@ -86,6 +89,9 @@ Bonus
level = 4
severity = 3
+ prefixes = list("Nasal ", "Displacing ")
+ bodies = list("Cold", "Bluespace")
+
/datum/symptom/bsneeze/Activate(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/spin.dm b/code/datums/diseases/advance/symptoms/spin.dm
index 95ef7569b68..319929009bb 100644
--- a/code/datums/diseases/advance/symptoms/spin.dm
+++ b/code/datums/diseases/advance/symptoms/spin.dm
@@ -31,6 +31,9 @@ BONUS
var/bigspin = FALSE
+ prefixes = list("Spinning ", "Rotatory ")
+ bodies = list("Rotato")
+
/datum/symptom/spyndrome/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/stimulant.dm b/code/datums/diseases/advance/symptoms/stimulant.dm
index 9378221e191..08be2e05b77 100644
--- a/code/datums/diseases/advance/symptoms/stimulant.dm
+++ b/code/datums/diseases/advance/symptoms/stimulant.dm
@@ -34,12 +34,17 @@ Bonus
"Stage 8" = "The virus causes extreme nervousness and paranoia, resulting in occasional hallucinations, and extreme restlessness, but great overall energy."
)
+ prefixes = list("Gray ", "Amped ", "Nervous ")
+ bodies = list("Hyper")
+
/datum/symptom/stimulant/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 8)
severity -= 1
if(A.stage_rate >= 8)
severity -= 1
+ prefixes = list("Gray ", "Amped ", "Paranoid ")
+ suffixes = list(" Madness", " Insanity")
/datum/symptom/stimulant/Start(datum/disease/advance/A)
if(!..())
diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm
index c7322cbb31b..33442444bd7 100644
--- a/code/datums/diseases/advance/symptoms/symptoms.dm
+++ b/code/datums/diseases/advance/symptoms/symptoms.dm
@@ -29,6 +29,10 @@ GLOBAL_LIST_INIT(list_symptoms, subtypesof(/datum/symptom))
var/neutered = FALSE
var/stopped = FALSE // Used for Viral Suspended Animaton, stops a symptom but doesn't neuter it.
+ var/list/prefixes = list()
+ var/list/bodies = list()
+ var/list/suffixes = list()
+
/datum/symptom/New()
var/list/S = GLOB.list_symptoms
for(var/i = 1; i <= length(S); i++)
@@ -53,6 +57,9 @@ GLOBAL_LIST_INIT(list_symptoms, subtypesof(/datum/symptom))
/datum/symptom/proc/severityset(datum/disease/advance/A)
severity = initial(severity)
+ prefixes = initial(prefixes)
+ bodies = initial(bodies)
+ suffixes = initial(suffixes)
// Called when the advance disease is going to be deleted or when the advance disease stops processing.
/datum/symptom/proc/End(datum/disease/advance/A)
diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/advance/symptoms/viral.dm
index d8ad1fb2c37..bbd723f3ee6 100644
--- a/code/datums/diseases/advance/symptoms/viral.dm
+++ b/code/datums/diseases/advance/symptoms/viral.dm
@@ -23,6 +23,8 @@ BONUS
level = 4
severity = 0
+ prefixes = list("Chronic ")
+
/*
//////////////////////////////////////
Viral evolution
@@ -47,6 +49,8 @@ BONUS
transmission = 3
level = 4
+ prefixes = list("Unstable ")
+
/datum/symptom/viralpower
name = "Viral Power Multiplier"
desc = "The vrus has more powerful symptoms. May have unpredictable effects."
@@ -116,6 +120,8 @@ BONUS
var/time_to_cure
+ prefixes = list("Spontaneous ")
+
/datum/symptom/viralreverse/Activate(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm
index 62da7032a88..5dfa8bf23ef 100644
--- a/code/datums/diseases/advance/symptoms/vision.dm
+++ b/code/datums/diseases/advance/symptoms/vision.dm
@@ -35,6 +35,10 @@ Bonus
"Stealth 4" = "The symptom remains hidden until active."
)
+ prefixes = list("Eye ")
+ bodies = list("Blind")
+ suffixes = list(" Blindness")
+
/datum/symptom/visionloss/severityset(datum/disease/advance/A)
. = ..()
if(A.resistance >= 12)
diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm
index 99dc0332bd3..181d2c0b839 100644
--- a/code/datums/diseases/advance/symptoms/vomit.dm
+++ b/code/datums/diseases/advance/symptoms/vomit.dm
@@ -37,6 +37,10 @@ Bonus
"Stealth 4" = "The symptom remans hidden until active."
)
+ prefixes = list("Digestive ")
+ bodies = list("Vomit")
+ suffixes = list(" Emission")
+
/datum/symptom/vomit/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/weakness.dm b/code/datums/diseases/advance/symptoms/weakness.dm
index 219eff1481f..3b436c6920d 100644
--- a/code/datums/diseases/advance/symptoms/weakness.dm
+++ b/code/datums/diseases/advance/symptoms/weakness.dm
@@ -26,6 +26,8 @@ Bonus
level = 3
severity = 3
+ prefixes = list("Weakening ", "Weak's ")
+
/datum/symptom/weakness/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/advance/symptoms/weight.dm
index 88eba6323b9..94ee0b6a696 100644
--- a/code/datums/diseases/advance/symptoms/weight.dm
+++ b/code/datums/diseases/advance/symptoms/weight.dm
@@ -35,6 +35,8 @@ Bonus
"Stealth 2" = "The symptom is less noticeable, and does not cause starvation."
)
+ prefixes = list("Hungry ")
+
/datum/symptom/weight_loss/severityset(datum/disease/advance/A)
. = ..()
if(A.stealth >= 2)
diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/advance/symptoms/youth.dm
index 6597a0ad375..66b176c91a2 100644
--- a/code/datums/diseases/advance/symptoms/youth.dm
+++ b/code/datums/diseases/advance/symptoms/youth.dm
@@ -11,6 +11,9 @@
symptom_delay_min = 25 SECONDS
symptom_delay_max = 50 SECONDS
+ prefixes = list("Eternal ")
+ bodies = list("Immortal", "Elixir")
+
/datum/symptom/youth/Activate(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm
index 19afe869243..be986e4a5fc 100644
--- a/code/datums/diseases/anxiety.dm
+++ b/code/datums/diseases/anxiety.dm
@@ -1,5 +1,6 @@
/datum/disease/anxiety
name = "Severe Anxiety"
+ medical_name = "Lepidopteric Hyperemesis"
form = "Infection"
max_stages = 4
spread_text = "On contact"
diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm
index 66e467e9614..1e6b329de03 100644
--- a/code/datums/diseases/appendicitis.dm
+++ b/code/datums/diseases/appendicitis.dm
@@ -1,6 +1,7 @@
/datum/disease/appendicitis
form = "Condition"
name = "Appendicitis"
+ medical_name = "Appendicitis"
max_stages = 3
spread_text = "Non-contagious"
disease_flags = CAN_CARRY|CAN_RESIST|CAN_NOT_POPULATE
diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm
index 716bd3eac1d..9764e12a24a 100644
--- a/code/datums/diseases/beesease.dm
+++ b/code/datums/diseases/beesease.dm
@@ -1,5 +1,6 @@
/datum/disease/beesease
name = "Beesease"
+ medical_name = "Apidaemia"
form = "Infection"
max_stages = 4
spread_text = "On contact"
diff --git a/code/datums/diseases/brainrot.dm b/code/datums/diseases/brainrot.dm
index 452b4cb238c..13bc9092091 100644
--- a/code/datums/diseases/brainrot.dm
+++ b/code/datums/diseases/brainrot.dm
@@ -1,5 +1,6 @@
/datum/disease/brainrot
name = "Brainrot"
+ medical_name = "Encephalonecrosis"
max_stages = 4
spread_text = "On contact"
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS | DISEASE_SPREAD_CONTACT
@@ -8,7 +9,7 @@
agent = "Cryptococcus Cosmosis"
viable_mobtypes = list(/mob/living/carbon/human)
cure_chance = 15
- desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
+ desc = "Destroys the braincells, causing brain fever, brain necrosis and general intoxication."
required_organs = list(/obj/item/organ/internal/brain)
danger = DISEASE_HARMFUL
diff --git a/code/datums/diseases/choreomania.dm b/code/datums/diseases/choreomania.dm
index 835b2296800..ad6de995418 100644
--- a/code/datums/diseases/choreomania.dm
+++ b/code/datums/diseases/choreomania.dm
@@ -1,5 +1,6 @@
/datum/disease/choreomania
name = "Choreomania"
+ medical_name = "Choreatic Hyperkinesia"
max_stages = 3
spread_text = "Airborne"
spread_flags = DISEASE_SPREAD_AIRBORNE | DISEASE_SPREAD_CONTACT | DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS
diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm
index f88ba69bc22..1f4c3216af7 100644
--- a/code/datums/diseases/cold.dm
+++ b/code/datums/diseases/cold.dm
@@ -1,5 +1,6 @@
/datum/disease/cold
name = "The Cold"
+ medical_name = "Common Cold"
max_stages = 3
spread_text = "Airborne"
spread_flags = DISEASE_SPREAD_AIRBORNE
diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm
index 3f8b49bd772..9be83bc691f 100644
--- a/code/datums/diseases/fake_gbs.dm
+++ b/code/datums/diseases/fake_gbs.dm
@@ -1,5 +1,6 @@
/datum/disease/fake_gbs
name = "GBS"
+ medical_name = "Neutered Guillain-Barré Syndrome"
max_stages = 5
spread_text = "On contact"
spread_flags = DISEASE_SPREAD_CONTACT | DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS
@@ -7,7 +8,7 @@
cures = list(REAGENT_ID_ADRANOL, REAGENT_ID_SULFUR)
agent = "Gravitokinetic Bipotential SADS-"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
- desc = "if left untreated death will occur."
+ desc = "If left untreated death will occur."
danger = DISEASE_BIOHAZARD // Mimics real GBS
/datum/disease/fake_gbs/stage_act()
diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm
index da6b7033380..5aa39dbe924 100644
--- a/code/datums/diseases/flu.dm
+++ b/code/datums/diseases/flu.dm
@@ -1,5 +1,6 @@
/datum/disease/flu
name = "The Flu"
+ medical_name = "Influenza"
max_stages = 3
spread_text = "Airborne"
cure_text = REAGENT_SPACEACILLIN
diff --git a/code/datums/diseases/food_poisoning.dm b/code/datums/diseases/food_poisoning.dm
index 529a5e07dc3..a3805f8d2e3 100644
--- a/code/datums/diseases/food_poisoning.dm
+++ b/code/datums/diseases/food_poisoning.dm
@@ -1,5 +1,6 @@
/datum/disease/food_poisoning
name = "Food Poisoning"
+ medical_name = "Gastroenteritis"
max_stages = 3
stage_prob = 5
spread_text = "Non-Contagious"
diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm
index cd97f6fac8f..b024aa919bd 100644
--- a/code/datums/diseases/gbs.dm
+++ b/code/datums/diseases/gbs.dm
@@ -1,5 +1,7 @@
/datum/disease/gbs
name = "GBS"
+ medical_name = "Guillain-Barré Syndrome"
+ desc = "If left untreated death will occur."
max_stages = 5
spread_text = "On contact"
spread_flags = DISEASE_SPREAD_CONTACT | DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS
@@ -40,6 +42,8 @@
/datum/disease/gbs/curable
name = "Non-Contagious GBS"
+ medical_name = "Non-Contagious Guillain-Barré Syndrome"
+ desc = "If left untreated death will occur."
stage_prob = 5
spread_text = "Non-contagious"
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
diff --git a/code/datums/diseases/lycancoughy.dm b/code/datums/diseases/lycancoughy.dm
index 9172db1e119..e18f48378d5 100644
--- a/code/datums/diseases/lycancoughy.dm
+++ b/code/datums/diseases/lycancoughy.dm
@@ -1,5 +1,6 @@
/datum/disease/lycan
name = "Lycancoughy"
+ medical_name = "Lycanthropic Hyperemesis"
form = "Infection"
max_stages = 4
spread_text = "On contact"
diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm
index e0a80afe1d5..ecb2111664f 100644
--- a/code/datums/diseases/magnitis.dm
+++ b/code/datums/diseases/magnitis.dm
@@ -1,5 +1,6 @@
/datum/disease/magnitis
name = "Magnitis"
+ medical_name = "Acquired Magnetotaxis Disorder"
max_stages = 4
spread_text = "Airbone"
cure_text = REAGENT_IRON
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 3d2e7e63b32..83d286937c2 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -269,7 +269,7 @@ var/global/list/image/splatter_cache=list()
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
/obj/effect/decal/cleanable/mucus/mapped/Initialize(mapload)
. = ..()
- viruses |= new /datum/disease/advance
+ viruses |= new /datum/disease/advance/random(rand(3, 6), 9, 4, infected = src)
/obj/effect/decal/cleanable/mucus/mapped/Destroy()
viruses.Cut()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
index 6ab7143359a..5391f2d7900 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
@@ -79,7 +79,7 @@
if(prob(40))
LAZYINITLIST(rat_diseases)
- rat_diseases += new /datum/disease/advance/random(rand(1, 5), 9, 1)
+ rat_diseases += new /datum/disease/advance/random(rand(1, 5), 9, 1, infected = src)
/mob/living/simple_mob/animal/passive/mouse/extrapolator_act(mob/living/user, obj/item/extrapolator/extrapolator, dry_run = FALSE)
. = ..()
@@ -209,7 +209,7 @@
..()
name = initial(name)
desc = initial(desc)
- rat_diseases += new /datum/disease/advance/random(2, 2, 1)
+ rat_diseases += new /datum/disease/advance/random(2, 2, 1, infected = src)
/mob/living/simple_mob/animal/passive/mouse/white/virology/Crossed(atom/movable/AM)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a8f1751db58..2b5f3fe0e4e 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -489,7 +489,7 @@
/obj/item/reagent_containers/syringe/old/Initialize(mapload)
. = ..()
if(prob(75))
- var/datum/disease/advance/new_disease = new /datum/disease/advance/random(rand(1, 3), rand(7, 9), 2)
+ var/datum/disease/advance/new_disease = new /datum/disease/advance/random(rand(1, 3), rand(7, 9), 2, infected = src)
src.viruses += new_disease
#undef SYRINGE_DRAW
From 920d741836dd14f1bbbc98c6911b7a2c75d99975 Mon Sep 17 00:00:00 2001
From: "vorestation-ci[bot]"
<199609141+vorestation-ci[bot]@users.noreply.github.com>
Date: Tue, 17 Jun 2025 18:29:42 +0000
Subject: [PATCH 02/47] Automatic changelog for PR #17882 [ci skip]
---
html/changelogs/AutoChangeLog-pr-17882.yml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-17882.yml
diff --git a/html/changelogs/AutoChangeLog-pr-17882.yml b/html/changelogs/AutoChangeLog-pr-17882.yml
new file mode 100644
index 00000000000..2789259af2e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-17882.yml
@@ -0,0 +1,5 @@
+author: "TheCaramelion"
+delete-after: True
+changes:
+ - rscadd: "Viruses now spawn with random names, depending on the symptoms, source, and random factors."
+ - rscadd: "Added medical names to all the common diseases"
\ No newline at end of file
From f07192feaa234b4e3959b2258927e6dc3b206c71 Mon Sep 17 00:00:00 2001
From: Kashargul <144968721+Kashargul@users.noreply.github.com>
Date: Wed, 18 Jun 2025 02:11:49 +0200
Subject: [PATCH 03/47] tgui core 4.3.1 (#17874)
* tgui core 4.2.3
* small panel update
* sort it
* some minor things
* also that
* 4.3.0
* .
* .
* 4.3.1
---
.../vorepanel_vore_subdata.dm | 9 +-
code/modules/vore/eating/vorepanel_vr.dm | 4 +-
tgui/packages/tgui-bench/package.json | 2 +-
tgui/packages/tgui-panel/package.json | 2 +-
tgui/packages/tgui-say/package.json | 2 +-
.../VorePanelElements/VorePanelEditColor.tsx | 6 +-
.../VorePanelEditDropdown.tsx | 6 +-
.../VorePanelElements/VorePanelEditNumber.tsx | 4 +-
.../VorePanelElements/VorePanelEditSwitch.tsx | 4 +-
.../VoreBellySelectionAndCustomization.tsx | 42 ++++-
.../VoreSelectedBellyLiquidOptions.tsx | 149 ++++++++++--------
.../VoreUserPreferencesMechanical.tsx | 2 +-
.../VoreUserPreferencesSoulcatcher.tsx | 2 +-
.../tgui/interfaces/VorePanel/index.tsx | 4 +
.../tgui/interfaces/VorePanel/types.ts | 6 +
tgui/packages/tgui/package.json | 2 +-
tgui/yarn.lock | 58 ++++---
17 files changed, 197 insertions(+), 107 deletions(-)
diff --git a/code/modules/vore/eating/panel_databackend/vorepanel_vore_subdata.dm b/code/modules/vore/eating/panel_databackend/vorepanel_vore_subdata.dm
index 0408e115abf..712d50eafc7 100644
--- a/code/modules/vore/eating/panel_databackend/vorepanel_vore_subdata.dm
+++ b/code/modules/vore/eating/panel_databackend/vorepanel_vore_subdata.dm
@@ -686,7 +686,14 @@
return autotransfer_data
/datum/vore_look/proc/compile_liquid_interact_data(obj/belly/selected)
- var/list/liq_interacts = list()
+ var/list/liquid_composition = list()
+ for(var/datum/reagent/reagent in selected.reagents.reagent_list)
+ UNTYPED_LIST_ADD(liquid_composition, list("name" = reagent.name, "volume" = reagent.volume))
+
+ var/list/liq_interacts = list(
+ "current_reagents" = liquid_composition,
+ "total_volume" = selected.reagents.total_volume
+ )
if(selected.show_liquids)
var/list/liquid_addon_list = list()
for(var/flag_name in selected.reagent_mode_flag_list)
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 224b7cb7036..8fbbd619f8b 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -115,6 +115,8 @@
"%hot" = GLOB.vore_words_hot,
"%snake" = GLOB.vore_words_snake,
)
+ data["min_belly_name"] = BELLIES_NAME_MIN
+ data["max_belly_name"] = BELLIES_NAME_MAX
return data
@@ -245,7 +247,7 @@
if(host.vore_organs.len >= BELLIES_MAX)
return FALSE
- var/new_name = html_encode(tgui_input_text(ui.user,"New belly's name:","New Belly"))
+ var/new_name = sanitize(params["val"], BELLIES_NAME_MAX, FALSE, TRUE, FALSE)
if(!new_name)
return FALSE
diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json
index 172befcaeeb..9bce3a31533 100644
--- a/tgui/packages/tgui-bench/package.json
+++ b/tgui/packages/tgui-bench/package.json
@@ -11,7 +11,7 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"tgui": "workspace:*",
- "tgui-core": "^4.0.3"
+ "tgui-core": "^4.3.1"
},
"devDependencies": {
"@types/react": "^19.1.0",
diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json
index 55e41a34e6a..afbe1ad2603 100644
--- a/tgui/packages/tgui-panel/package.json
+++ b/tgui/packages/tgui-panel/package.json
@@ -8,7 +8,7 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"tgui": "workspace:*",
- "tgui-core": "^4.0.3",
+ "tgui-core": "^4.3.1",
"tgui-dev-server": "workspace:*"
},
"devDependencies": {
diff --git a/tgui/packages/tgui-say/package.json b/tgui/packages/tgui-say/package.json
index ac308cbba5a..020f7e27fc9 100644
--- a/tgui/packages/tgui-say/package.json
+++ b/tgui/packages/tgui-say/package.json
@@ -7,7 +7,7 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"tgui": "workspace:*",
- "tgui-core": "^4.0.3"
+ "tgui-core": "^4.3.1"
},
"devDependencies": {
"@types/react": "^19.1.0",
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
index 4b10510f53b..6a0eabb9754 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
@@ -9,15 +9,15 @@ import { VorePanelEditNumber } from './VorePanelEditNumber';
export const VorePanelEditColor = (props: {
/** Switch between Element editing and display */
editMode: boolean;
- /** Our backend action on text area blur */
+ /** Our backend action on click */
action: string;
- /** Our secondary backend action on text area blur */
+ /** Our secondary backend action on click */
subAction?: string;
/** Our color value sent to byond */
value_of: BooleanLike | string;
/** The displayed color of the color box */
back_color: string;
- /** A number representing the alpha value for alpha inouts */
+ /** A number representing the alpha value for alpha inputs */
alpha?: number;
/** Optional label to show before the color box */
name_of?: string;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditDropdown.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditDropdown.tsx
index 1d78dda1cef..3445521cfed 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditDropdown.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditDropdown.tsx
@@ -14,11 +14,11 @@ import type { DropdownEntry } from '../types';
export const VorePanelEditDropdown = (props: {
/** Switch between Element editing and display */
editMode: boolean;
- /** Our backend action on text area blur */
+ /** Our backend action on selection */
action: string;
- /** Our secondary backend action on text area blur */
+ /** Our secondary backend action on selection */
subAction?: string;
- /** Our dropdown inouts and actions */
+ /** Our dropdown inputs and actions */
options: (string | DropdownEntry)[];
/** The currently shown selection */
entry: string;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditNumber.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditNumber.tsx
index f07bc61d3f7..4fdfb2a7287 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditNumber.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditNumber.tsx
@@ -12,9 +12,9 @@ import { round, toFixed } from 'tgui-core/math';
export const VorePanelEditNumber = (props: {
/** Switch between Element editing and display */
editMode: boolean;
- /** Our backend action on text area blur */
+ /** Our backend action on number change */
action: string;
- /** Our secondary backend action on text area blur */
+ /** Our secondary backend action on number change */
subAction?: string;
/** The current displayed number */
value: number;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditSwitch.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditSwitch.tsx
index 54de874ef61..bbdcf98fb7f 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditSwitch.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditSwitch.tsx
@@ -5,9 +5,9 @@ import { Box, Button, type Floating } from 'tgui-core/components';
export const VorePanelEditSwitch = (props: {
/** Switch between Element editing and display */
editMode: boolean;
- /** Our backend action on text area blur */
+ /** Our backend action on click*/
action: string;
- /** Our secondary backend action on text area blur */
+ /** Our secondary backend action on click */
subAction?: string;
/** Is the button currently active / selected */
active?: boolean;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx
index 7f460e637a5..37539ce6dc9 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx
@@ -29,6 +29,8 @@ export const VoreBellySelectionAndCustomization = (props: {
toggleEditMode: React.Dispatch" + title + "
" + content + "
" //Red, malicious antag-related text
- target.stat_panel.send_message("update_examine", list("EX" = examine_update, "UPD" = target.prefs.examine_text_mode == EXAMINE_MODE_SWITCH_TO_PANEL))
+ var/update_panel = FALSE
+ if(target.prefs?.read_preference(/datum/preference/choiced/examine_mode) == EXAMINE_MODE_SWITCH_TO_PANEL)
+ update_panel = TRUE
+
+ target.stat_panel.send_message("update_examine", list("EX" = examine_update, "UPD" = update_panel))
/datum/controller/subsystem/statpanels/proc/set_tickets_tab(client/target)
var/list/tickets = list()
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index fd3a3d5e53f..dca25e937f8 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -199,9 +199,6 @@
var/examine_text = replacetext(get_examine_desc(), "||", "")
var/list/output = list("[icon2html(src,user.client)] That's [f_name] [suffix]", examine_text)
- if(user.client?.prefs.examine_text_mode == EXAMINE_MODE_INCLUDE_USAGE)
- output += description_info
-
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, output)
return output
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index c91bef0635e..a72c66b60fd 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -120,9 +120,6 @@ var/list/preferences_datums = list()
var/lastnews // Hash of last seen lobby news content.
var/lastlorenews //ID of last seen lore news article.
- var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
- var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
-
// THIS IS NOT SAVED
// WE JUST HAVE NOWHERE ELSE TO STORE IT
var/list/action_button_screen_locs
diff --git a/code/modules/client/preferences/types/game/chat.dm b/code/modules/client/preferences/types/game/chat.dm
index ddeff834fb0..63f4814d5fd 100644
--- a/code/modules/client/preferences/types/game/chat.dm
+++ b/code/modules/client/preferences/types/game/chat.dm
@@ -61,3 +61,25 @@
savefile_key = "PAIN_FREQUENCY"
default_value = FALSE
savefile_identifier = PREFERENCE_PLAYER
+
+/datum/preference/choiced/examine_mode
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_key = "EXAMINE_MODE"
+ savefile_identifier = PREFERENCE_PLAYER
+
+/datum/preference/choiced/examine_mode/init_possible_values()
+ return list(EXAMINE_MODE_SLIM,EXAMINE_MODE_VERBOSE,EXAMINE_MODE_SWITCH_TO_PANEL)
+
+/datum/preference/choiced/examine_mode/create_default_value()
+ return EXAMINE_MODE_VERBOSE
+
+/datum/preference/choiced/multilingual_mode
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_identifier = PREFERENCE_PLAYER
+ savefile_key = "MULTI_LANGUAGE_YAP_MODE"
+
+/datum/preference/choiced/multilingual_mode/init_possible_values()
+ return list(MULTILINGUAL_DEFAULT,MULTILINGUAL_SPACE,MULTILINGUAL_DOUBLE_DELIMITER, MULTILINGUAL_OFF)
+
+/datum/preference/choiced/multilingual_mode/create_default_value()
+ return MULTILINGUAL_DEFAULT
diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm
index 841b8110dcc..5b0c5e6b20e 100644
--- a/code/modules/client/preferences_toggle_procs.dm
+++ b/code/modules/client/preferences_toggle_procs.dm
@@ -13,38 +13,3 @@
to_chat(src,"You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible).")
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-// Not attached to a pref datum because those are strict binary toggles
-/client/verb/toggle_examine_mode()
- set name = "Toggle Examine Mode"
- set category = "Preferences.Game"
- set desc = "Toggle the additional behaviour of examining things."
-
- prefs.examine_text_mode++
- prefs.examine_text_mode %= EXAMINE_MODE_MAX // This cycles through them because if you're already specifically being routed to the examine panel, you probably don't need to have the extra text printed to chat
- switch(prefs.examine_text_mode) // ... And I only wanted to add one verb
- if(EXAMINE_MODE_DEFAULT)
- to_chat(src, span_filter_system("Examining things will only output the base examine text, and you will not be redirected to the examine panel automatically."))
-
- if(EXAMINE_MODE_INCLUDE_USAGE)
- to_chat(src, span_filter_system("Examining things will also print any extra usage information normally included in the examine panel to the chat."))
-
- if(EXAMINE_MODE_SWITCH_TO_PANEL)
- to_chat(src, span_filter_system("Examining things will direct you to the examine panel, where you can view extended information about the thing."))
-
-/client/verb/toggle_multilingual_mode()
- set name = "Toggle Multilingual Mode"
- set category = "Preferences.Character"
- set desc = "Toggle the behaviour of multilingual speech parsing."
-
- prefs.multilingual_mode++
- prefs.multilingual_mode %= MULTILINGUAL_MODE_MAX // Cycles through the various options
- switch(prefs.multilingual_mode)
- if(MULTILINGUAL_DEFAULT)
- to_chat(src, span_filter_system("Multilingual parsing will only check for the delimiter-key combination (,0galcom-2tradeband)."))
- if(MULTILINGUAL_SPACE)
- to_chat(src, span_filter_system("Multilingual parsing will enforce a space after the delimiter-key combination (,0 galcom -2still galcom). The extra space will be consumed by the pattern-matching."))
- if(MULTILINGUAL_DOUBLE_DELIMITER)
- to_chat(src, span_filter_system("Multilingual parsing will enforce the a language delimiter after the delimiter-key combination (,0,galcom -2 still galcom). The extra delimiter will be consumed by the pattern-matching."))
- if(MULTILINGUAL_OFF)
- to_chat(src, span_filter_system("Multilingual parsing is now disabled. Entire messages will be in the language specified at the start of the message."))
diff --git a/code/modules/examine/descriptions/items.dm b/code/modules/examine/descriptions/items.dm
index b6f44cc213c..0ed0581118d 100644
--- a/code/modules/examine/descriptions/items.dm
+++ b/code/modules/examine/descriptions/items.dm
@@ -76,16 +76,30 @@
return "an average attack speed"
/obj/item/get_description_info()
- var/weapon_stats = description_info + "\
-
"
+ var/list/weapon_stats = list()
+
+ if(description_info)
+ weapon_stats += description_info
if(force)
- weapon_stats += "\nIf used in melee, it deals [describe_power()] [sharp ? "sharp" : "blunt"] damage, [describe_penetration()], and has [describe_speed()]."
+ weapon_stats += "If used in melee, it deals [describe_power()] [sharp ? "sharp" : "blunt"] damage, [describe_penetration()], and has [describe_speed()]."
if(throwforce)
- weapon_stats += "\nIf thrown, it would deal [describe_throwpower()] [sharp ? "sharp" : "blunt"] damage."
+ weapon_stats += "If thrown, it would deal [describe_throwpower()] [sharp ? "sharp" : "blunt"] damage."
if(can_cleave)
- weapon_stats += "\nIt is capable of hitting multiple targets with a single swing."
+ weapon_stats += "It is capable of hitting multiple targets with a single swing."
if(reach > 1)
- weapon_stats += "\nIt can attack targets up to [reach] tiles away, and can attack over certain objects."
+ weapon_stats += "It can attack targets up to [reach] tiles away, and can attack over certain objects."
- return weapon_stats
+ if(weapon_stats.len < 1)
+ return ""
+
+ var/assembled_string = ""
+ for(var/index in 1 to weapon_stats.len)
+ var/msg = weapon_stats[index]
+ if(index != weapon_stats.len)
+ msg += "\n"
+ assembled_string += msg
+ if(msg == description_info) //keeping the formatting as identical as I can
+ assembled_string += "
"
+
+ return assembled_string
diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm
index 9c5ff9042f6..9926a15f609 100644
--- a/code/modules/examine/examine.dm
+++ b/code/modules/examine/examine.dm
@@ -77,12 +77,46 @@
var/list/results = A.examine(src)
if(!results || !results.len)
results = list("You were unable to examine that. Tell a developer!")
+
+ results += embedded_info(A)
+
var/final_string = span_infoplain("[jointext(results, "
")]")
- if(ismob(A)) // mob descriptions matter more than others
+ if(ismob(A) || client?.prefs?.read_preference(/datum/preference/choiced/examine_mode) == EXAMINE_MODE_VERBOSE) // mob descriptions matter more than others, & it looks weird to have dropdowns outside the box.
final_string = examine_block(final_string)
to_chat(src, final_string)
update_examine_panel(A)
+/mob/proc/embedded_info(var/atom/A)
+ . = ""
+ if(!(client?.prefs?.read_preference(/datum/preference/choiced/examine_mode) == EXAMINE_MODE_VERBOSE))
+ return
+ if(!client?.prefs?.read_preference(/datum/preference/toggle/vchat_enable))
+ return //sorry oldchat
+
+ //do pref check here
+ var/desc_info_temp = A.get_description_info()
+ if(desc_info_temp)
+ . += span_details("ℹ️ | Information",desc_info_temp)
+ var/fluff_info_temp = A.get_description_fluff()
+ if(fluff_info_temp && fluff_info_temp != "")
+ var/title = "🪐 | Flavor Information"
+ if(isliving(A)) //ehhh
+ var/mob/living/B = A
+ if(B.flavor_text)
+ title = "🔍 | Flavor Text"
+
+ . += span_details(title,fluff_info_temp)
+ var/is_antagish = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds
+ var/antag_info_temp = A.get_description_antag()
+ if(is_antagish && antag_info_temp)
+ . += span_details("🏴☠️ | Antag Information",antag_info_temp)
+ var/list/interaction_info = A.get_description_interaction()
+ if(interaction_info.len > 0)
+ var/temp = ""
+ for(var/a in interaction_info)
+ temp += a + "\n"
+ . += span_details("🛠️ | Interaction Information",temp)
+
/mob/proc/update_examine_panel(var/atom/A)
if(client)
var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds
@@ -90,6 +124,7 @@
SSstatpanels.set_examine_tab(client)
+
/mob/verb/mob_examine()
set name = "Mob Examine"
set desc = "Allows one to examine mobs they can see, even from inside of bellies and objects."
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 451e738ffda..a40d9ccc5ba 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -179,6 +179,7 @@
// The first character in the selection will always be the prefix (if this is a valid language invocation)
var/prefix = copytext(selection, 1, 2)
var/language_key = copytext(selection, 2, 3)
+ var/multilingual_mode = client?.prefs?.read_preference(/datum/preference/choiced/multilingual_mode)
if(is_language_prefix(prefix))
// Okay, we're definitely now trying to invoke a language (probably)
// This "[]" is probably unnecessary but BYOND will runtime if a number is used
@@ -187,14 +188,14 @@
L = language_keys[language_key]
// MULTILINGUAL_SPACE enforces a space after the language key
- if(client && (client.prefs.multilingual_mode == MULTILINGUAL_SPACE) && (text2ascii(copytext(selection, 3, 4)) != 32)) // If we're looking for a space and we don't find one
+ if(client && (multilingual_mode == MULTILINGUAL_SPACE) && (text2ascii(copytext(selection, 3, 4)) != 32)) // If we're looking for a space and we don't find one
continue
// MULTILINGUAL_DOUBLE_DELIMITER enforces a delimiter (valid prefix) after the language key
- if(client && (client.prefs.multilingual_mode == MULTILINGUAL_DOUBLE_DELIMITER) && !is_language_prefix(copytext(selection, 3, 4)))
+ if(client && (multilingual_mode == MULTILINGUAL_DOUBLE_DELIMITER) && !is_language_prefix(copytext(selection, 3, 4)))
continue
- if(client && (client.prefs.multilingual_mode in list(MULTILINGUAL_DEFAULT)))
+ if(client && (multilingual_mode in list(MULTILINGUAL_DEFAULT)))
selection = copytext(selection, 1, 3) // These modes only use two characters, not three
// It's kinda silly that we have to check L != null and this isn't done for us by can_speak (it runtimes instead), but w/e
@@ -211,7 +212,7 @@
prefixes[++prefixes.len] = list(get_default_language(), i, i)
// If multilingualism is disabled, then after the first pass we're guaranteed to have either found a language key at the start, or else there isn't one and we're using the default for the whole message
- if(client && (client.prefs.multilingual_mode == MULTILINGUAL_OFF))
+ if(client && (multilingual_mode == MULTILINGUAL_OFF))
break
return prefixes
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index 73386ab9b45..d29fa79546c 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -1486,3 +1486,50 @@ $border-width-px: $border-width * 1px;
.nif {
color: hsla(180, 100%, 50%, 0.801);
}
+
+details {
+ width: 80%;
+ background: hsl(220, 5%, 11%);
+ margin-bottom: 0.5rem;
+ box-shadow: 0 0.1rem 1rem -0.5rem rgba(0, 0, 0, 0.4);
+ border-radius: 5px;
+ overflow: hidden;
+ border-color: #343b3d;
+ border: 1px solid hsl(214, 38%, 74%);
+}
+
+summary {
+ padding: 1rem;
+ display: block;
+
+ background: hsl(220, 5%, 11%);
+ padding-left: 2.2rem;
+ position: relative;
+ cursor: pointer;
+ user-select: none;
+}
+
+summary:before {
+ content: '';
+ border-width: 0.4rem;
+ border-style: solid;
+ border-color: transparent transparent transparent hsl(214, 38%, 74%);
+ position: absolute;
+ top: 1.3rem;
+ left: 1rem;
+ transform: rotate(0);
+ transform-origin: 0.2rem 50%;
+ transition: 0.25s transform ease;
+}
+details[open] > summary:before {
+ transform: rotate(90deg);
+}
+
+details summary::-webkit-details-marker {
+ display: none;
+}
+
+details > ul {
+ padding-bottom: 1rem;
+ margin-bottom: 0;
+}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index 0da8dcfbebb..43d3676148d 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -1508,3 +1508,49 @@ $border-width-px: $border-width * 1px;
.nif {
color: hsl(180, 100%, 27%);
}
+
+details {
+ width: 80%;
+ background: hsl(202, 44%, 96%);
+ margin-bottom: 0.5rem;
+ box-shadow: 0 0.1rem 1rem -0.5rem rgba(0, 0, 0, 0.4);
+ border-radius: 5px;
+ overflow: hidden;
+ border-color: #343b3d;
+ border: 1px solid hsl(215, 39%, 11%);
+}
+
+summary {
+ padding: 1rem;
+ display: block;
+ background: hsl(202, 44%, 96%);
+ padding-left: 2.2rem;
+ position: relative;
+ cursor: pointer;
+ user-select: none;
+}
+
+summary:before {
+ content: '';
+ border-width: 0.4rem;
+ border-style: solid;
+ border-color: transparent transparent transparent hsl(215, 39%, 11%);
+ position: absolute;
+ top: 1.3rem;
+ left: 1rem;
+ transform: rotate(0);
+ transform-origin: 0.2rem 50%;
+ transition: 0.25s transform ease;
+}
+details[open] > summary:before {
+ transform: rotate(90deg);
+}
+
+details summary::-webkit-details-marker {
+ display: none;
+}
+
+details > ul {
+ padding-bottom: 1rem;
+ margin-bottom: 0;
+}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
index 674d8013ff0..d131f209f1c 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss
@@ -1483,3 +1483,49 @@ $border-width-px: $border-width * 1px;
background-color: inherit;
color: inherit;
}
+
+details {
+ width: 80%;
+ background: hsl(220, 5%, 11%);
+ margin-bottom: 0.5rem;
+ box-shadow: 0 0.1rem 1rem -0.5rem rgba(0, 0, 0, 0.4);
+ border-radius: 5px;
+ overflow: hidden;
+ border-color: #343b3d;
+ border: 1px solid hsl(214, 38%, 74%);
+}
+
+summary {
+ padding: 1rem;
+ display: block;
+ background: hsl(220, 5%, 11%);
+ padding-left: 2.2rem;
+ position: relative;
+ cursor: pointer;
+ user-select: none;
+}
+
+summary:before {
+ content: '';
+ border-width: 0.4rem;
+ border-style: solid;
+ border-color: transparent transparent transparent hsl(214, 38%, 74%);
+ position: absolute;
+ top: 1.3rem;
+ left: 1rem;
+ transform: rotate(0);
+ transform-origin: 0.2rem 50%;
+ transition: 0.25s transform ease;
+}
+details[open] > summary:before {
+ transform: rotate(90deg);
+}
+
+details summary::-webkit-details-marker {
+ display: none;
+}
+
+details > ul {
+ padding-bottom: 1rem;
+ margin-bottom: 0;
+}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
index 340c25d2649..0f901de4bb9 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss
@@ -1502,3 +1502,49 @@ $border-width-px: $border-width * 1px;
background-color: inherit;
color: inherit;
}
+
+details {
+ width: 80%;
+ background: hsl(202, 44%, 96%);
+ margin-bottom: 0.5rem;
+ box-shadow: 0 0.1rem 1rem -0.5rem rgba(0, 0, 0, 0.4);
+ border-radius: 5px;
+ overflow: hidden;
+ border-color: #343b3d;
+ border: 1px solid hsl(215, 39%, 11%);
+}
+
+summary {
+ padding: 1rem;
+ display: block;
+ background: hsl(202, 44%, 96%);
+ padding-left: 2.2rem;
+ position: relative;
+ cursor: pointer;
+ user-select: none;
+}
+
+summary:before {
+ content: '';
+ border-width: 0.4rem;
+ border-style: solid;
+ border-color: transparent transparent transparent hsl(215, 39%, 11%);
+ position: absolute;
+ top: 1.3rem;
+ left: 1rem;
+ transform: rotate(0);
+ transform-origin: 0.2rem 50%;
+ transition: 0.25s transform ease;
+}
+details[open] > summary:before {
+ transform: rotate(90deg);
+}
+
+details summary::-webkit-details-marker {
+ display: none;
+}
+
+details > ul {
+ padding-bottom: 1rem;
+ margin-bottom: 0;
+}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/chat.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/chat.tsx
index e7af497841e..7e5bb62ae78 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/chat.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/chat.tsx
@@ -1,4 +1,9 @@
-import { CheckboxInput, type FeatureToggle } from '../base';
+import {
+ CheckboxInput,
+ type FeatureChoiced,
+ type FeatureToggle,
+} from '../base';
+import { FeatureDropdownInput } from '../dropdowns';
export const CHAT_SHOWICONS: FeatureToggle = {
name: 'Chat Tags',
@@ -71,3 +76,23 @@ export const PAIN_FREQUENCY: FeatureToggle = {
'When enabled, reduces the amount of pain messages for minor wounds that you see.',
component: CheckboxInput,
};
+
+export const EXAMINE_MODE: FeatureChoiced = {
+ name: 'Examine Mode',
+ category: 'CHAT',
+ description:
+ 'Choose how you want to examine items. "Verbose" will include all information found in the examine panel as foldable groups, "Switch To Panel" will switch you to the examine panel upon examining, and "Slim" will do neither. ',
+ component: FeatureDropdownInput,
+};
+
+export const MULTI_LANGUAGE_YAP_MODE: FeatureChoiced = {
+ name: 'Multilingual Speech Parsing Mode',
+ category: 'CHAT',
+ description: `
+ Default: Multilingual parsing will only check for the delimiter-key combination (e.g., ,0galcom-2tradeband).\n
+ Space: Multilingual parsing will enforce a space after the delimiter-key combination (,0 galcom -2still galcom). The extra space will be consumed by the pattern-matching.\n
+ Double Delimiter: Multilingual parsing will enforce the language delimiter after the delimiter-key combination (,0,galcom -2 still galcom). The extra delimiter will be consumed by the pattern-matching.\n
+ Off: Multilingual parsing is now disabled. Entire messages will be in the language specified at the start of the message.
+ `,
+ component: FeatureDropdownInput,
+};
From 9af610edd2de486939f50ecfac866e6576c2eb84 Mon Sep 17 00:00:00 2001
From: "vorestation-ci[bot]"
<199609141+vorestation-ci[bot]@users.noreply.github.com>
Date: Wed, 18 Jun 2025 05:53:25 +0000
Subject: [PATCH 11/47] Automatic changelog for PR #17863 [ci skip]
---
html/changelogs/AutoChangeLog-pr-17863.yml | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-17863.yml
diff --git a/html/changelogs/AutoChangeLog-pr-17863.yml b/html/changelogs/AutoChangeLog-pr-17863.yml
new file mode 100644
index 00000000000..4a0a995cd83
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-17863.yml
@@ -0,0 +1,6 @@
+author: "TeleTubby2"
+delete-after: True
+changes:
+ - rscadd: "Examines now embed extra information that used to be examine tab exclusive. This is a preference, so can be configured to remain as the old behavior."
+ - rscdel: "Removed the old verb for setting examine mode"
+ - refactor: "Examine Mode is now a TG preference"
\ No newline at end of file
From 686105efb53a03e83551689b8baed905480fb5ac Mon Sep 17 00:00:00 2001
From: eghughguhhhhhh %
zD0}-exGj9TQ*Q_fvO=tR)`wnui98q^V1MGql#?Xn?D$58&`mS)DXr>@tkllnsjunf
zggrr$gFNlO&6Uk`k9?s>zFMnvOujdzu2)MR(tcDPl5wL5BjM!V<|)HR&CEF}^Bpxh
zUWCbq2KDG$GF_}%xXLhXmW4;QZi}`qI)0{>Wyz!ScYD|wv$ATDv)k|k=6w)93UaNN
z5YrnD&K)<>T$0bxtN@!0iCFTIeojaQb2&Os4-An11si_E^nDyKUcdc39g`SmIHk2=
zPf9fi`8&n4w&a00V*4)D?$T}Fn}!(-4p8;hl
"
+ var/dat = ""
if(!autolink)
dat += {"
Frequency: [frequency]
@@ -263,8 +263,9 @@
dat += "Moving: [moving ? "Enabled":"Disabled"]"
- user << browse("[dat]", "window=magnet;size=400x500")
- onclose(user, "magnet")
+ var/datum/browser/popup = new(user, "magnet", "Magnetic Control Console", 400, 500)
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/magnetic_controller/Topic(href, href_list)
if(stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm
index 51a09f49a5c..57ba629d6c1 100644
--- a/code/game/machinery/robot_fabricator.dm
+++ b/code/game/machinery/robot_fabricator.dm
@@ -56,9 +56,10 @@ Please wait until completion...
Robot Frame (75,000 cc metal).
"}
- user << browse("
\"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"
"
dat += temptext
- user << browse("[dat]", "window=syndbeacon")
- onclose(user, "syndbeacon")
+
+ var/datum/browser/popup = new(user, "syndbeacon", "Ominous Beacon")
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/syndicate_beacon/Topic(href, href_list)
if(..())
diff --git a/code/game/machinery/syndicatebeacon_vr.dm b/code/game/machinery/syndicatebeacon_vr.dm
index 356ba99d6d7..c35454278ea 100644
--- a/code/game/machinery/syndicatebeacon_vr.dm
+++ b/code/game/machinery/syndicatebeacon_vr.dm
@@ -16,8 +16,10 @@
if(!selfdestructing)
dat += "
\"[pick("Send me some supplies!", "Transfer supplies.")]\"
"
dat += temptext
- user << browse("[dat]", "window=syndbeacon")
- onclose(user, "syndbeacon")
+
+ var/datum/browser/popup = new(user, "syndbeacon", "Ominous Beacon")
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/syndicate_beacon/virgo/Topic(href, href_list)
if(href_list["betraitor"])
diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm
index 0f5bf2fbc83..1fc0bbd0c25 100644
--- a/code/game/objects/items/weapons/implants/implantchair.dm
+++ b/code/game/objects/items/weapons/implants/implantchair.dm
@@ -42,9 +42,10 @@
if(src.occupant)
dat += "[src.ready ? "Implant" : "Recharging"]
"
user.set_machine(src)
- user << browse("[dat]", "window=implant")
- onclose(user, "implant")
+ var/datum/browser/popup = new(user, "implant", "Implant")
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/implantchair/Topic(href, href_list)
if((get_dist(src, usr) <= 1) || isAI(usr))
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index f4d89526d90..309e66f503b 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -26,9 +26,10 @@
dat += span_bold("Four uses use them wisely:") + "
"
dat += "Teleport
"
dat += "Kind regards,
Wizards Federation
P.S. Don't forget to bring your gear, you'll need it to cast most spells.
"
- user << browse("[dat]", "window=scroll")
- onclose(user, "scroll")
- return
+
+ var/datum/browser/popup = new(user, "scroll", "Scroll")
+ popup.set_content(dat)
+ popup.open()
/obj/item/teleportation_scroll/Topic(href, href_list)
..()
diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm
index 0fe48d12636..90393cb1220 100644
--- a/code/modules/admin/DB ban/functions.dm
+++ b/code/modules/admin/DB ban/functions.dm
@@ -486,4 +486,6 @@
output += ""
qdel(select_query)
- usr << browse("[output]","window=lookupbans;size=900x700")
+ var/datum/browser/popup = new(owner, "lookupbans", "Lookup Bans", 900, 700)
+ popup.set_content(output)
+ popup.open()
diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm
index 98761987fe2..6053bcaceae 100644
--- a/code/modules/admin/NewBan.dm
+++ b/code/modules/admin/NewBan.dm
@@ -190,7 +190,10 @@ var/savefile/Banlist
dat += ""
dat = "
" + span_bold("Bans:") + " " + span_blue("(U) = Unban , (E) = Edit Ban") + " - " + span_green("([count] Bans)") + "[dat]"
- usr << browse("[dat]", "window=unbanp;size=875x400")
+
+ var/datum/browser/popup = new(owner, "unbanp", "Unban", 875, 400)
+ popup.set_content(dat)
+ popup.open()
//////////////////////////////////// DEBUG ////////////////////////////////////
diff --git a/code/modules/admin/ToRban.dm b/code/modules/admin/ToRban.dm
index 79cf5e5fe7a..2152fa97596 100644
--- a/code/modules/admin/ToRban.dm
+++ b/code/modules/admin/ToRban.dm
@@ -67,7 +67,11 @@
dat = "
"
- usr << browse("[dat]", "window=ban;size=400x400")
+
+ var/datum/browser/popup = new(owner, "ban", "Job Bans", 400, 400)
+ popup.add_head_content("[dat]
"
else
dat = "No addresses in list."
- src << browse("[dat]","window=ToRban_show")
+
+ var/datum/browser/popup = new(src, "ToRban_show", "Torban")
+ popup.set_content(dat)
+ popup.open()
+
if("remove")
var/savefile/F = new(TORFILE)
var/choice = tgui_input_list(src,"Please select an IP address to remove from the ToR banlist:","Remove ToR ban", F.dir)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 57e0d4ccfb2..c7b857595e9 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -53,8 +53,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
to_chat(usr, "Error: you are not an admin!")
return
- var/body = "
-
- "}
+ body += {"
"}
+
+ var/datum/browser/popup = new(owner, "adminplayeropts", "Edit Player", 550, 515)
+ popup.add_head_content("Admin Newscaster Unit
")
+ dat = text("Admin Newscaster Unit
")
switch(admincaster_screen)
if(0)
@@ -547,10 +548,11 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
//to_world("Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]")
//to_world("Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]")
- usr << browse("[dat]", "window=admincaster_main;size=400x600")
- onclose(usr, "admincaster_main")
-
+ var/datum/browser/popup = new(owner, "admincaster_main", "Admin Newscaster", 400, 600)
+ popup.add_head_content(" ")
dat += "[t] (unban)
\n
+
\n
Change Game Mode
"}
if(GLOB.master_mode == "secret")
@@ -582,11 +588,12 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
Create Mob
Edit Airflow Settings
Edit Phoron Settings
- Choose a default ZAS setting
+ Choose a default ZAS setting
"}
- usr << browse(dat, "window=admin2;size=210x280")
- return
+ var/datum/browser/popup = new(owner, "admin2", "Game Panel", 210, 280)
+ popup.set_content(dat)
+ popup.open()
/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null)
if(!check_rights(0)) return
@@ -1255,7 +1262,9 @@ var/datum/announcement/minor/admin_min_announcer = new
out += " None."
out += " \[+\]
"
- usr << browse("[out]", "window=edit_mode[src]")
+ var/datum/browser/popup = new(owner, "edit_mode[src]", "Edit Game Mode")
+ popup.set_content(out)
+ popup.open()
feedback_add_details("admin_verb","SGM")
diff --git a/code/modules/admin/admin_report.dm b/code/modules/admin/admin_report.dm
index 0aca9bb87e6..2bc01ad38b8 100644
--- a/code/modules/admin/admin_report.dm
+++ b/code/modules/admin/admin_report.dm
@@ -115,8 +115,9 @@ world/New()
else
output += "Whoops, no reports!"
- usr << browse("[output]", "window=news;size=600x400")
-
+ var/datum/browser/popup = new(src, "news", "News", 600, 400)
+ popup.set_content(output)
+ popup.open()
/client/proc/Report(mob/M as mob in world)
set category = "Admin.Moderation"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 6c76e569dde..017da87b67a 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -719,8 +719,10 @@ ADMIN_VERB(removetickets, R_ADMIN, "Security Tickets", "Allows one to remove tic
dat += ""
qdel(query)
- usr << browse("[dat]", "window=library")
- onclose(usr, "library")
+
+ var/datum/browser/popup = new(src, "library", "Delete Book")
+ popup.set_content(dat)
+ popup.open()
/client/proc/toggle_spawning_with_recolour()
set name = "Toggle Simple/Robot recolour verb"
diff --git a/code/modules/admin/newbanjob.dm b/code/modules/admin/newbanjob.dm
index 70a029a71a0..477567c2d7b 100644
--- a/code/modules/admin/newbanjob.dm
+++ b/code/modules/admin/newbanjob.dm
@@ -232,7 +232,10 @@ var/savefile/Banlistjob
dat += ""
dat = "
" + span_bold("Bans:") + " " span_blue("(U) = Unban , ") + " - " + span_green("([count] Bans)") + "[dat]"
- usr << browse("[dat]", "window=unbanp;size=875x400")
+
+ var/datum/browser/popup = new(owner, "unbanjob", "Unban Job", 875, 400)
+ popup.set_content(dat)
+ popup.open()
/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job))
diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm
index 0ab9fe01ba3..6dd91e1e401 100644
--- a/code/modules/admin/permissionedit.dm
+++ b/code/modules/admin/permissionedit.dm
@@ -133,7 +133,10 @@
output += "
"
if(QDELETED(usr))
return
- usr << browse("[jointext(output, "")]","window=editrights;size=1000x650")
+
+ var/datum/browser/popup = new(owner, "editrights", "Edit Rights", 1000, 650)
+ popup.set_content(jointext(output, ""))
+ popup.open()
/datum/admins/proc/edit_rights_topic(list/href_list)
if(!check_rights(R_PERMISSIONS))
diff --git a/code/modules/admin/secrets/admin_secrets/bombing_list.dm b/code/modules/admin/secrets/admin_secrets/bombing_list.dm
index 1fb1fac6778..95f59c2bb16 100644
--- a/code/modules/admin/secrets/admin_secrets/bombing_list.dm
+++ b/code/modules/admin/secrets/admin_secrets/bombing_list.dm
@@ -9,4 +9,7 @@
var/dat = span_bold("Bombing List")
for(var/l in GLOB.bombers)
dat += text("[l]
")
- user << browse("[dat]", "window=bombers")
+
+ var/datum/browser/popup = new(user, "bombers", "Bombers")
+ popup.set_content(dat)
+ popup.open()
diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm
index a4caf27b1d0..36bea6515ae 100644
--- a/code/modules/admin/secrets/admin_secrets/list_dna.dm
+++ b/code/modules/admin/secrets/admin_secrets/list_dna.dm
@@ -11,4 +11,7 @@
if(H.dna && H.ckey)
dat += "
" dat += "" - user << browse("[dat]", "window=DNA;size=440x410") + + var/datum/browser/popup = new(user, "DNA", "DNA", 440, 410) + popup.set_content(dat) + popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm index ad86324de95..f38929c929d 100644 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm @@ -16,4 +16,7 @@ else if(!H.dna) dat += "
" dat += "" - user << browse("[dat]", "window=fingerprints;size=440x410") + + var/datum/browser/popup = new(user, "fingerprints", "Fingerprints", 440, 410) + popup.set_content(dat) + popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm index 9e35bc40e38..b3ac22031ce 100644 --- a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm +++ b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm @@ -9,4 +9,6 @@ dat += "
" dat += GLOB.data_core.get_manifest() - user << browse("[dat]", "window=manifest;size=370x420;can_close=1") + var/datum/browser/popup = new(user, "manifest", "Manifest", 370, 420) + popup.set_content(dat) + popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm index 27c6330f07b..f72d796f4b6 100644 --- a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm +++ b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm @@ -12,4 +12,7 @@ var/dat = span_bold("Showing last [length(GLOB.lawchanges)] law changes.") + "
"
for(var/sig in GLOB.lawchanges)
dat += "[sig]
"
- user << browse("[dat]", "window=GLOB.lawchanges;size=800x500")
+
+ var/datum/browser/popup = new(user, "lawchanges", "Lawcahnges", 800, 500)
+ popup.set_content(dat)
+ popup.open()
diff --git a/code/modules/admin/secrets/admin_secrets/show_signalers.dm b/code/modules/admin/secrets/admin_secrets/show_signalers.dm
index b96200996a2..e6663d6f62c 100644
--- a/code/modules/admin/secrets/admin_secrets/show_signalers.dm
+++ b/code/modules/admin/secrets/admin_secrets/show_signalers.dm
@@ -12,4 +12,7 @@
var/dat = span_bold("Showing last [length(GLOB.lastsignalers)] signalers.") + "
"
for(var/sig in GLOB.lastsignalers)
dat += "[sig]
"
- user << browse("[dat]", "window=lastsignalers;size=800x500")
+
+ var/datum/browser/popup = new(user, "lastsignalers", "Last Signallers", 800, 500)
+ popup.set_content(dat)
+ popup.open()
diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm
index 2be186df2c2..5a2493a6145 100644
--- a/code/modules/admin/verbs/check_customitem_activity.dm
+++ b/code/modules/admin/verbs/check_customitem_activity.dm
@@ -21,7 +21,9 @@ var/inactive_keys = "None
"
else
dat += "Populate list (requires an active database connection)
"
- usr << browse("[dat]", "window=inactive_customitems;size=600x480")
+ var/datum/browser/popup = new(src, "inactive_customitems", "Inactive Custom Items", 600, 480)
+ popup.set_content(dat)
+ popup.open()
/proc/populate_inactive_customitems_list(var/client/C)
set background = 1
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index 819d72cd0f4..f8be0fb79aa 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -23,7 +23,7 @@
else
inactive_on_main_station++
- var/output = {"AIR SYSTEMS REPORT
+ var/output = {"AIR SYSTEMS REPORT
Cycle: [SSair.current_cycle]
Groups: [SSair.zones.len]
@@ -36,10 +36,12 @@
Hotspot Processing: [hotspots]
Geometry Processing Data
- Tile Update: [SSair.tiles_to_update.len]
+ Tile Update: [SSair.tiles_to_update.len]
"}
- usr << browse(output,"window=airreport")
+ var/datum/browser/popup = new(src, "airreport", "Airreport")
+ popup.set_content(output)
+ popup.open()
/client/proc/fix_next_move()
set category = "Debug.Game"
@@ -95,7 +97,9 @@
else
output += " [device]
"
- usr << browse("[output]","window=radioreport")
+ var/datum/browser/popup = new(src, "radioreport", "Radioreport")
+ popup.set_content(output)
+ popup.open()
feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/reload_admins()
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 9db6d3042cb..70d4216a34b 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -78,7 +78,7 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
for(var/obj/machinery/camera/C in cameranet.cameras)
CL += C
- var/output = {""} + span_bold("CAMERA ANNOMALITIES REPORT") + {"
+ var/output = span_bold("CAMERA ANNOMALITIES REPORT") + {"
"} + span_bold("The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.") + {"
"
- usr << browse("[output]","window=airreport;size=1000x500")
+
+ var/datum/browser/popup = new(src, "airreport", "Airreport", 1000, 500)
+ popup.set_content(output)
+ popup.open()
feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/intercom_view()
diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm
index d2003d34b09..b7b531c2cc4 100644
--- a/code/modules/awaymissions/bluespaceartillery.dm
+++ b/code/modules/awaymissions/bluespaceartillery.dm
@@ -27,9 +27,10 @@
dat += span_bold("Charge progress: [reload]/180:") + "
"
dat += "Open Fire
"
dat += "Deployment of weapon authorized by
[using_map.company_name] Naval Command
Remember, friendly fire is grounds for termination of your contract and life.
"
- user << browse("[dat]", "window=scroll")
- onclose(user, "scroll")
- return
+
+ var/datum/browser/popup = new(user, "artillery", "Artillery")
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/artillerycontrol/Topic(href, href_list)
..()
diff --git a/code/modules/economy/money_bag.dm b/code/modules/economy/money_bag.dm
index d515a1249bd..aff6d6ca7fe 100644
--- a/code/modules/economy/money_bag.dm
+++ b/code/modules/economy/money_bag.dm
@@ -43,7 +43,10 @@
dat += text("Phoron coins: [amt_phoron] Remove one
")
if (amt_uranium)
dat += text("Uranium coins: [amt_uranium] Remove one
")
- user << browse("[dat]", "window=moneybag")
+
+ var/datum/browser/popup = new(user, "moneybag", "Moneybag")
+ popup.set_content(dat)
+ popup.open()
/obj/item/moneybag/attackby(obj/item/W, mob/user)
..()
diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm
index 35c6f4baa88..02914c1cfbb 100644
--- a/code/modules/economy/retail_scanner.dm
+++ b/code/modules/economy/retail_scanner.dm
@@ -88,11 +88,10 @@
dat += "
"
dat += "Device ID: [machine_id]"
- dat = "