Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29

# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
This commit is contained in:
nevimer
2025-11-29 22:49:21 -05:00
1185 changed files with 39068 additions and 32028 deletions
+39 -12
View File
@@ -61,22 +61,32 @@ DEFINE_BITFIELD(appearance_flags, list(
))
DEFINE_BITFIELD(area_flags, list(
"BLOBS_ALLOWED" = BLOBS_ALLOWED,
"BLOCK_SUICIDE" = BLOCK_SUICIDE,
"CAVES_ALLOWED" = CAVES_ALLOWED,
"CULT_PERMITTED" = CULT_PERMITTED,
"FLORA_ALLOWED" = FLORA_ALLOWED,
"HIDDEN_AREA" = HIDDEN_AREA,
"MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED,
"MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED,
"NOTELEPORT" = NOTELEPORT,
"NO_DEATH_MESSAGE" = NO_DEATH_MESSAGE,
"PERSISTENT_ENGRAVINGS" = PERSISTENT_ENGRAVINGS,
"UNIQUE_AREA" = UNIQUE_AREA,
"VALID_TERRITORY" = VALID_TERRITORY,
"BLOBS_ALLOWED" = BLOBS_ALLOWED,
"NOTELEPORT" = NOTELEPORT,
"HIDDEN_AREA" = HIDDEN_AREA,
"BLOCK_SUICIDE" = BLOCK_SUICIDE,
"XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE,
"CULT_PERMITTED" = CULT_PERMITTED,
"NO_DEATH_MESSAGE" = NO_DEATH_MESSAGE,
"EVENT_PROTECTED" = EVENT_PROTECTED,
"QUIET_LOGS" = QUIET_LOGS,
"BINARY_JAMMING" = BINARY_JAMMING,
"NO_BOH" = NO_BOH,
"UNLIMITED_FISHING" = UNLIMITED_FISHING,
"NO_GRAVITY" = NO_GRAVITY,
"LOCAL_TELEPORT" = LOCAL_TELEPORT,
))
DEFINE_BITFIELD(area_flags_mapping, list(
"UNIQUE_AREA" = UNIQUE_AREA,
"CAVES_ALLOWED" = CAVES_ALLOWED,
"FLORA_ALLOWED" = FLORA_ALLOWED,
"MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED,
"MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED,
"PERSISTENT_ENGRAVINGS" = PERSISTENT_ENGRAVINGS,
"VIRTUAL_AREA" = VIRTUAL_AREA,
"VIRTUAL_SAFE_AREA" = VIRTUAL_SAFE_AREA,
))
DEFINE_BITFIELD(turf_flags, list(
@@ -112,6 +122,7 @@ DEFINE_BITFIELD(clothing_flags, list(
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
"INTERNALS_ADJUST_EXEMPT" = INTERNALS_ADJUST_EXEMPT,
"NO_ZONE_DISABLING" = NO_ZONE_DISABLING,
))
DEFINE_BITFIELD(datum_flags, list(
@@ -511,6 +522,17 @@ DEFINE_BITFIELD(bodypart_flags, list(
"BODYPART_IMPLANTED" = BODYPART_IMPLANTED,
))
DEFINE_BITFIELD(biological_state, list(
"BIO_INORGANIC" = BIO_INORGANIC,
"BIO_BONE" = BIO_BONE,
"BIO_FLESH" = BIO_FLESH,
"BIO_METAL" = BIO_METAL,
"BIO_WOOD" = BIO_WOOD,
"BIO_WIRED" = BIO_WIRED,
"BIO_BLOODED" = BIO_BLOODED,
"BIO_JOINTED" = BIO_JOINTED,
))
DEFINE_BITFIELD(change_exempt_flags, list(
"BP_BLOCK_CHANGE_SPECIES" = BP_BLOCK_CHANGE_SPECIES,
))
@@ -706,3 +728,8 @@ DEFINE_BITFIELD(visible_info, list(
"EMPATH_SEE_COLD" = EMPATH_SEE_COLD,
"EMPATH_SEE_EVIL" = EMPATH_SEE_EVIL,
))
DEFINE_BITFIELD(allow_custom_character, list(
"GHOSTROLE_TAKE_PREFS_SPECIES" = GHOSTROLE_TAKE_PREFS_SPECIES,
"GHOSTROLE_TAKE_PREFS_APPEARANCE" = GHOSTROLE_TAKE_PREFS_APPEARANCE,
))
+4 -4
View File
@@ -13,10 +13,10 @@ GLOBAL_VAR_INIT(ooc_allowed, TRUE) // used with admin verbs to disable ooc - not
GLOBAL_VAR_INIT(dooc_allowed, TRUE)
// Debug is used exactly once (in living.dm) but is commented out in a lot of places. It is not set anywhere and only checked.
// Debug2 is used in conjunction with a lot of admin verbs and therefore is actually legit.
GLOBAL_VAR_INIT(Debug, FALSE) // global debug switch
GLOBAL_VAR_INIT(Debug2, FALSE)
// debugging_enabled is used in conjunction with a lot of admin verbs and therefore is actually legit.
// im not sure why you would ever add behavoir, likely use a define like TESTING or even checking `Debugger?.enabled`
/// global debug switch
GLOBAL_VAR_INIT(debugging_enabled, FALSE)
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
//Protecting these because the proper way to edit them is with the config/secrets
+19 -4
View File
@@ -4,9 +4,12 @@ GLOBAL_LIST_INIT_TYPED(language_datum_instances, /datum/language, init_language_
GLOBAL_LIST_INIT(all_languages, init_all_languages())
/// /List of language prototypes to reference, assoc "name" = typepath
GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name())
/// 1000 element long list containing the 1000 most common words in the English language.
/// ~1400 element long list containing the 1000 most common words in the English language in alphabetical order.
/// Indexed by word, value is the rank of the word in the list. So accessing it is fasta.
GLOBAL_LIST_INIT(most_common_words, init_common_words())
GLOBAL_LIST_INIT(most_common_words_alphabetical, init_common_words_by_alphabetical())
/// ~1000 element long list containing the 1000 most common words in the English language in frequency order.
/// Indexed by word, value is the rank of the word in the list. So accessing it is fasta.
GLOBAL_LIST_INIT(most_common_words_frequency, init_common_words_by_frequency())
/proc/init_language_prototypes()
var/list/lang_list = list()
@@ -33,10 +36,22 @@ GLOBAL_LIST_INIT(most_common_words, init_common_words())
lang_list[initial(lang_type.name)] = lang_type
return lang_list
/proc/init_common_words()
/proc/init_common_words_by_alphabetical()
var/list/word_to_commonness_list = list()
var/i = 1
for(var/word in world.file2list("strings/1000_most_common.txt"))
for(var/word in world.file2list("strings/1400_most_common_alpha.txt"))
word_to_commonness_list[word] = i
i += 1
return word_to_commonness_list
/proc/init_common_words_by_frequency()
var/list/word_to_commonness_list = list()
var/i = 1
for(var/word in world.file2list("strings/1000_most_common_frequency.txt"))
word_to_commonness_list[word] = i
i += 1
// alphabetical list has a few more entries than the frequency list, so
// if there are any words we're missing, add them with a default "commonness" of 500
for(var/word in world.file2list("strings/1400_most_common_alpha.txt"))
word_to_commonness_list[word] ||= 500
return word_to_commonness_list
+2 -19
View File
@@ -8,32 +8,15 @@ GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for
/// List of types of abstract mob which shouldn't usually exist in the world on its own if we're spawning random mobs
GLOBAL_LIST_INIT(abstract_mob_types, list(
/mob/living/basic,
/mob/living/basic/blob_minion,
/mob/living/basic/bot,
/mob/living/basic/construct,
/mob/living/basic/guardian,
/mob/living/basic/heretic_summon,
/mob/living/basic/mimic, // Cannot exist if spawned without being passed an item reference
/mob/living/basic/mining,
/mob/living/basic/pet,
/mob/living/basic/mimic/copy, // Cannot exist if spawned without being passed an item reference
/mob/living/basic/soulscythe, // This is just a way for players to control the soulscythe item
/mob/living/basic/spider,
/mob/living/carbon,
/mob/living/carbon/alien,
/mob/living/carbon/alien/adult,
/mob/living/carbon/human/consistent,
/mob/living/carbon/human/dummy,
/mob/living/carbon/human/dummy/consistent,
/mob/living/carbon/human/species,
/mob/living/silicon,
/mob/living/simple_animal,
/mob/living/simple_animal/bot,
/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/asteroid,
/mob/living/simple_animal/hostile/asteroid/elite,
/mob/living/simple_animal/hostile/megafauna,
))
))
//Since it didn't really belong in any other category, I'm putting this here
+2
View File
@@ -17,6 +17,7 @@
#define POLL_IGNORE_GOLEM "golem"
#define POLL_IGNORE_HERETIC_MONSTER "heretic_monster"
#define POLL_IGNORE_HOLOPARASITE "holoparasite"
#define POLL_IGNORE_HORRIFIC_NECKTIE "horrific_necktie"
#define POLL_IGNORE_IMAGINARYFRIEND "imaginary_friend"
#define POLL_IGNORE_LAVALAND_ELITE "lavaland_elite"
#define POLL_IGNORE_MAID_IN_MIRROR "maid_in_mirror"
@@ -59,6 +60,7 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_GOLEM = "Golems",
POLL_IGNORE_HERETIC_MONSTER = "Heretic Monster",
POLL_IGNORE_HOLOPARASITE = "Holoparasite",
POLL_IGNORE_HORRIFIC_NECKTIE = "Horrific Necktie",
POLL_IGNORE_IMAGINARYFRIEND = "Imaginary Friend",
POLL_IGNORE_LAVALAND_ELITE = "Lavaland elite",
POLL_IGNORE_MAID_IN_MIRROR = "Maid in the Mirror",
+6 -1
View File
@@ -182,7 +182,12 @@ GLOBAL_LIST_INIT(plant_traits, init_plant_traits())
if(!is_type_in_typecache(reaction.type, blacklist))
//Master list of ALL reactions that is used in the UI lookup table. This is expensive to make, and we don't want to lag the server by creating it on UI request, so it's cached to send to UIs instantly.
GLOB.chemical_reactions_results_lookup_list += list(list("name" = product_name, "id" = reaction.type, "bitflags" = bitflags, "reactants" = reagents))
GLOB.chemical_reactions_results_lookup_list += list(list(
"name" = product_name,
"id" = reaction.type,
"bitflags" = bitflags,
"reactants" = reagents,
))
// Create filters based on each reagent id in the required reagents list - this is specifically for finding reactions from product(reagent) ids/typepaths.
for(var/id in product_ids)
+1
View File
@@ -823,6 +823,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_MECHA_DIAGNOSTIC_CREATED" = TRAIT_MECHA_DIAGNOSTIC_CREATED,
),
/turf = list(
"TRAIT_AI_AVOID_TURF" = TRAIT_AI_AVOID_TURF,
"TRAIT_CHASM_STOPPED" = TRAIT_CHASM_STOPPED,
"TRAIT_CONTAINMENT_FIELD" = TRAIT_CONTAINMENT_FIELD,
"TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF,