diff --git a/aurorastation.dme b/aurorastation.dme
index 85a359ef9be..7ada5eb5b47 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -393,7 +393,6 @@
#include "code\datums\observation\instruments.dm"
#include "code\datums\observation\moved.dm"
#include "code\datums\observation\observation.dm"
-#include "code\datums\observation\see_in_dark_set.dm"
#include "code\datums\observation\see_invisible_set.dm"
#include "code\datums\observation\set_invisibility.dm"
#include "code\datums\observation\shuttle_moved.dm"
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index bfd23621af2..141b155bef8 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -32,8 +32,6 @@
#define SEE_INVISIBLE_OBSERVER 61
#define SEE_INVISIBLE_SYSTEM 99
-#define SEE_IN_DARK_DEFAULT 2
-
#define SEE_INVISIBLE_MINIMUM 5
#define INVISIBILITY_MAXIMUM 100
#define INVISIBILITY_ABSTRACT 101 // Special invis value that can never be seen by see_invisible.
diff --git a/code/datums/observation/see_in_dark_set.dm b/code/datums/observation/see_in_dark_set.dm
deleted file mode 100644
index 31f62e6e233..00000000000
--- a/code/datums/observation/see_in_dark_set.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-// Observer Pattern Implementation: See In Dark Set
-// Registration type: /mob
-//
-// Raised when: A mob's see_in_dark value changes.
-//
-// Arguments that the called proc should expect:
-// /mob/sightee: The mob that had its see_in_dark set
-// /old_see_in_dark: see_in_dark before the change
-// /new_see_in_dark: see_in_dark after the change
-
-var/singleton/observ/see_in_dark_set/see_in_dark_set_event = new()
-
-/singleton/observ/see_in_dark_set
- name = "See In Dark Set"
- expected_type = /mob
-
-/***************************
-* See In Dark Set Handling *
-***************************/
-
-/mob/proc/set_see_in_dark(var/new_see_in_dark)
- var/old_see_in_dark = sight
- if(old_see_in_dark != new_see_in_dark)
- see_in_dark = new_see_in_dark
- see_in_dark_set_event.raise_event(src, old_see_in_dark, new_see_in_dark)
diff --git a/code/game/gamemodes/changeling/implements/hivemind.dm b/code/game/gamemodes/changeling/implements/hivemind.dm
index bbf9c1920ea..6ab4df8b210 100644
--- a/code/game/gamemodes/changeling/implements/hivemind.dm
+++ b/code/game/gamemodes/changeling/implements/hivemind.dm
@@ -1,6 +1,5 @@
/mob/abstract/hivemind
name = "internal hivemind"
- see_in_dark = 2
see_invisible = SEE_INVISIBLE_LIVING
var/mob/living/carbon/human/changeling_mob // the head honcho
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 3f8637d16b7..20f5db97fe0 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -79,7 +79,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
//AI laws
for(var/mob/living/silicon/ai/M in living_mob_list)
- if(M.stat != 2 && M.see_in_dark != 0)
+ if(M.stat != 2)
var/who2 = pick("ALIENS", "BEARS", "CLOWNS", "XENOS", "PETES", "BOMBS", "FETISHES", "WIZARDS", "SYNDICATE AGENTS", "CENTCOM OFFICERS", "SPACE PIRATES", "TRAITORS", "MONKEYS", "BEES", "CARP", "CRABS", "EELS", "BANDITS", "LIGHTS")
var/what2 = pick("BOLTERS", "STAVES", "DICE", "SINGULARITIES", "TOOLBOXES", "NETTLES", "AIRLOCKS", "CLOTHES", "WEAPONS", "MEDKITS", "BOMBS", "CANISTERS", "CHAIRS", "BBQ GRILLS", "ID CARDS", "CAPTAINS")
var/what2pref = pick("SOFT", "WARM", "WET", "COLD", "ICY", "SEXY", "UGLY", "CUBAN")
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 396a736d7f4..2f234e6cb5e 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -40,8 +40,6 @@ AI MODULES
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
to_chat(usr, "Upload failed. No signal is being detected from the AI.")
- else if (comp.current.see_in_dark == 0)
- to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
else
src.transmitInstructions(comp.current, usr)
to_chat(comp.current, "These are your laws now:")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 67289a24e50..a2195753ea5 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -508,8 +508,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
for(var/mob/living/silicon/ai/M in mob_list)
if (M.stat == 2)
to_chat(usr, "Upload failed. No signal is being detected from the AI.")
- else if (M.see_in_dark == 0)
- to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
else
M.add_ion_law(input)
for(var/mob/living/silicon/ai/O in mob_list)
diff --git a/code/modules/mob/abstract/freelook/eye.dm b/code/modules/mob/abstract/freelook/eye.dm
index 9bed8fd720d..e7d4ce0e832 100644
--- a/code/modules/mob/abstract/freelook/eye.dm
+++ b/code/modules/mob/abstract/freelook/eye.dm
@@ -16,7 +16,6 @@
var/acceleration = 1
var/owner_follows_eye = 0
- see_in_dark = 7
status_flags = GODMODE
invisibility = INVISIBILITY_EYE
diff --git a/code/modules/mob/abstract/observer/observer.dm b/code/modules/mob/abstract/observer/observer.dm
index 6e290ffbb1d..b7b3f2fb9b1 100644
--- a/code/modules/mob/abstract/observer/observer.dm
+++ b/code/modules/mob/abstract/observer/observer.dm
@@ -42,7 +42,6 @@
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER
- see_in_dark = 100
add_verb(src, /mob/abstract/observer/proc/dead_tele)
set_stat(DEAD)
@@ -873,12 +872,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(on_restricted_level())
//On the restricted level they have the same sight as the mob
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(2)
set_see_invisible(SEE_INVISIBLE_OBSERVER)
else
//Outside of the restrcited level, they have enhanced vision
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(100)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
if (!seedarkness)
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index 7eb56567d8a..e90730184e8 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -73,7 +73,6 @@
layer = MOB_LAYER
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
drop_r_hand()
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index fe034fe5604..60321cb0aff 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -190,22 +190,65 @@
SHOULD_NOT_SLEEP(TRUE)
return TRUE
-// Language handling.
-/mob/proc/add_language(var/language)
+/**
+ * Adds a language to the known ones for the mob, returns `TRUE` if added successfully, `FALSE` otherwise
+ *
+ * Does NOT make it the default language
+ *
+ * * language - The language to add, can either be a `/datum/language` or a string, see the LANGUAGE_* defines in `code\__defines\species_languages.dm` for the strings
+ */
+/mob/proc/add_language(language)
+ SHOULD_NOT_SLEEP(TRUE)
+
var/datum/language/new_language
if(istype(language, /datum/language))
new_language = language
else
new_language = all_languages[language]
- if (!istype(new_language) || !new_language)
- CRASH("ERROR: Language [language] not found in list of all languages. The language you're looking for may have been moved, renamed, or removed. Please recheck the spelling of the name.")
+ if(!istype(new_language) || !new_language)
+ crash_with("ERROR: Language [language] not found in list of all languages. The language you're looking for may have been moved, renamed, or removed. Please recheck the spelling of the name.")
if(new_language in languages)
- return 0
+ return FALSE
languages.Add(new_language)
- return 1
+ return TRUE
+
+/**
+ * Set default language for a `/mob/living`, return `TRUE` if set successfully, `FALSE` otherwise
+ *
+ * * language - The language to set as default, can either be a `/datum/language`, a string as per `LANGUAGE_*` defines in `code\__defines\species_languages.dm`,
+ * or `null` to remove the default language
+ */
+/mob/living/proc/set_default_language(language)
+ SHOULD_NOT_SLEEP(TRUE)
+
+ var/datum/language/new_default_language
+ if(istype(language, /datum/language))
+ new_default_language = language
+ else
+ new_default_language = all_languages[language]
+
+ if(!isnull(new_default_language) && !istype(new_default_language))
+ stack_trace("ERROR: Language [language] not found in list of all languages. The language you're looking for may have been moved, renamed, or removed. Please recheck the spelling of the name.")
+ return FALSE
+
+ if(!isnull(new_default_language) && !(new_default_language in languages))
+ stack_trace("Trying to set a default language that is not known by the mob! The language must first be added for it to be set as default!")
+ return FALSE
+
+ default_language = new_default_language
+ return TRUE
+
+//Silicons can only speak languages listed in the `speech_synthesizer_langs`, even if they can understand more
+/mob/living/silicon/set_default_language(language)
+
+ //Return FALSE if they can't speak this language
+ if(!(language in speech_synthesizer_langs))
+ return FALSE
+
+ . = ..()
/mob/proc/remove_language(var/rem_language)
var/datum/language/L = all_languages[rem_language]
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index 3c769d00f96..888f8954805 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -318,7 +318,9 @@
/datum/language/bug/check_speech_restrict(var/mob/speaker)
var/mob/living/carbon/human/H = speaker
var/obj/item/organ/internal/vaurca/neuralsocket/S = H.internal_organs_by_name[BP_NEURAL_SOCKET]
- if(S.muted || S.disrupted)
+
+ //Black k'ois zombies don't have neural sockets but need to talk, hence check if the socket exists, or it will runtime for them
+ if(S && (S.muted || S.disrupted))
to_chat(speaker, SPAN_WARNING("You have been muted over the Hivenet!"))
return FALSE
else
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 29834a96694..007c6450c64 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -96,14 +96,12 @@
if(stat == DEAD || HAS_FLAG(mutations, XRAY))
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
else if(stat != DEAD && is_ventcrawling == FALSE)
if(species && species.vision_flags)
sight = species.vision_flags
else
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(2)
set_see_invisible(SEE_INVISIBLE_LIVING)
if (healths)
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index 95145ad47b6..237c1304f4b 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -167,11 +167,9 @@
/mob/living/carbon/brain/handle_regular_hud_updates()
if(stat == DEAD || HAS_FLAG(mutations, XRAY))
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
else if(stat != DEAD)
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(2)
set_see_invisible(SEE_INVISIBLE_LIVING)
if (healths)
@@ -196,11 +194,9 @@
if(stat == DEAD || HAS_FLAG(mutations, XRAY))
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
else if(stat != DEAD)
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(2)
set_see_invisible(SEE_INVISIBLE_LIVING)
if (client)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 49847e35fb3..f8310ebe3bb 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -548,7 +548,6 @@
return 1
if(!H.druggy)
- H.set_see_in_dark((H.sight == (SEE_TURFS|SEE_MOBS|SEE_OBJS)) ? 8 : min(darksight + H.equipment_darkness_modifier, 8))
if(H.seer)
var/obj/effect/rune/R = locate(/obj/effect/rune) in get_turf(H)
if(R && R.type == /datum/rune/see_invisible)
diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm
index 5b04fb38c75..a0e1cf20b83 100644
--- a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm
+++ b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm
@@ -30,7 +30,7 @@
meat_type = /obj/item/reagent_containers/food/snacks/meat/bug
rarity_value = 4
slowdown = 1
- darksight = 8 //USELESS
+ darksight = 8 //Allows you to see through black k'ois if the night vision is on
eyes = "vaurca_eyes" //makes it so that eye colour is not changed when skin colour is.
eyes_are_impermeable = TRUE
diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm
index faecdd3634e..e4a10ac2ac9 100644
--- a/code/modules/mob/living/carbon/slime/slime.dm
+++ b/code/modules/mob/living/carbon/slime/slime.dm
@@ -17,7 +17,6 @@
nutrition = 700
max_nutrition = 1200
- see_in_dark = 8
update_slimes = 0
// canstun and canweaken don't affect slimes because they ignore stun and weakened variables
diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm
index 49cedff0fa6..541f641c587 100644
--- a/code/modules/mob/living/default_language.dm
+++ b/code/modules/mob/living/default_language.dm
@@ -1,26 +1,27 @@
/mob/living
var/datum/language/default_language
-/mob/living/verb/set_default_language()
+/mob/living/verb/set_default_language_verb()
set name = "Set Default Language"
set category = "IC"
var/datum/language/language = input(src, "Choose a language.", "Set Default Language") as null|anything in languages
- if(language)
- to_chat(src, "You will now speak [language] if you do not specify a language when speaking.")
- else
- to_chat(src, "You will now speak whatever your standard default language is if you do not specify one when speaking.")
- default_language = language
+ if(!language)
+ to_chat(src, SPAN_NOTICE("You will keep speaking your current default language, by default."))
+ return
-// Silicons can't neccessarily speak everything in their languages list
-/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs)
- ..()
+ var/set_result = set_default_language(language)
+
+ if(set_result)
+ to_chat(src, SPAN_NOTICE("You will now speak [language] if you do not specify a language when speaking."))
+ else
+ to_chat(src, SPAN_NOTICE("You are unable to speak [language], choose another one or keep using [default_language]."))
/mob/living/verb/check_default_language()
set name = "Check Default Language"
set category = "IC"
if(default_language)
- to_chat(src, "You are currently speaking [default_language] by default.")
+ to_chat(src, SPAN_NOTICE("You are currently speaking [default_language] by default."))
else
- to_chat(src, "Your current default language is your species or mob type default.")
+ to_chat(src, SPAN_NOTICE("Your current default language is your species or mob type default."))
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index a667ad51409..708f7d47838 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -162,7 +162,6 @@
/mob/living/proc/update_sight()
set_sight(0)
- set_see_in_dark(0)
if(stat == DEAD || eyeobj)
update_dead_sight()
else
@@ -180,12 +179,10 @@
set_sight_flags &= ~BLIND
set_sight(set_sight_flags)
- set_see_in_dark(initial(see_in_dark))
set_see_invisible(initial(see_invisible))
/mob/living/proc/update_dead_sight()
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
/mob/living/proc/handle_hud_icons()
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index d5daded159e..4c99b36b6e3 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -1,5 +1,4 @@
/mob/living
- see_in_dark = 2
see_invisible = SEE_INVISIBLE_LIVING
//Health and life related vars
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 98851eba16c..8724c2c3ce8 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -148,13 +148,11 @@
update_icon()
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(0)
set_see_invisible(SEE_INVISIBLE_LIVING)
else if(stat == DEAD)
update_dead_sight()
else
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LIVING)
/mob/living/silicon/ai/is_blind()
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index fb8779c9db6..f369e0b66bd 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -149,26 +149,20 @@
..()
if(stat == DEAD || HAS_FLAG(mutations, XRAY) || (sight_mode & BORGXRAY))
set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
else if((sight_mode & BORGMESON) && (sight_mode & BORGTHERM))
set_sight(sight|SEE_TURFS|SEE_MOBS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_NOLIGHTING)
else if(sight_mode & BORGMESON)
set_sight(sight|SEE_TURFS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_NOLIGHTING)
else if(sight_mode & BORGMATERIAL)
set_sight(sight|SEE_OBJS)
- set_see_in_dark(8)
else if(sight_mode & BORGTHERM)
set_sight(sight|SEE_MOBS)
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LEVEL_TWO)
else if(stat != DEAD)
set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS))
- set_see_in_dark(8)
set_see_invisible(SEE_INVISIBLE_LIVING)
switch(sensor_mode)
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm b/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm
index c38b5f70fd7..5c193d470d3 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm
@@ -27,7 +27,6 @@
show_stat_health = TRUE
faction = "cult"
supernatural = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_LEVEL_ONE
blood_type = "#000000"
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs/harvester.dm b/code/modules/mob/living/simple_animal/constructs/constructs/harvester.dm
index 5a978f1f019..3880a00b1ec 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs/harvester.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs/harvester.dm
@@ -14,7 +14,6 @@
organ_names = list("core", "harvesting array")
speed = -1
environment_smash = 1
- see_in_dark = 7
attack_sound = 'sound/weapons/pierce.ogg'
can_repair = TRUE
construct_spells = list(
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs/wraith.dm b/code/modules/mob/living/simple_animal/constructs/constructs/wraith.dm
index 959afb0c0e1..b42581091ca 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs/wraith.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs/wraith.dm
@@ -13,7 +13,6 @@
organ_names = list("core", "right arm", "left arm")
speed = -1
environment_smash = TRUE
- see_in_dark = 7
attack_sound = 'sound/weapons/rapidslice.ogg'
construct_spells = list(/spell/targeted/ethereal_jaunt/shift)
diff --git a/code/modules/mob/living/simple_animal/friendly/adhomai.dm b/code/modules/mob/living/simple_animal/friendly/adhomai.dm
index cb5c47e253c..fea5911fd6e 100644
--- a/code/modules/mob/living/simple_animal/friendly/adhomai.dm
+++ b/code/modules/mob/living/simple_animal/friendly/adhomai.dm
@@ -77,7 +77,6 @@
emote_see = list("shakes its head")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_amount = 30
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
response_help = "pets"
@@ -262,7 +261,6 @@
emote_see = list("shakes its head", "stomps its feet")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
response_help = "pets"
@@ -331,7 +329,6 @@
emote_see = list("shakes its head")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_amount = 50
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
response_help = "pets"
diff --git a/code/modules/mob/living/simple_animal/friendly/carp.dm b/code/modules/mob/living/simple_animal/friendly/carp.dm
index 23b1a305d93..f2f5497d6f8 100644
--- a/code/modules/mob/living/simple_animal/friendly/carp.dm
+++ b/code/modules/mob/living/simple_animal/friendly/carp.dm
@@ -15,7 +15,6 @@
emote_see = list("floats steadily", "inflates its gills")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/fish/carpmeat
organ_names = list("head", "chest", "tail", "left flipper", "right flipper")
response_help = "brushes"
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index cad97e1c3d8..aa1cfd807f6 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -16,7 +16,6 @@
emote_see = list("shakes their head", "shivers")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/meat
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
response_help = "pets"
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 6bc59061c08..ea57ffd8764 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -19,7 +19,6 @@
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
- see_in_dark = 5
mob_size = 3.5
max_nutrition = 70 //Dogs are insatiable eating monsters. This scales with their mob size too
stomach_size_mult = 8
diff --git a/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm b/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm
index b9644c67e21..6d95768cbc1 100644
--- a/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm
@@ -31,7 +31,6 @@
minbodytemp = 0
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
/mob/living/simple_animal/cosmozoan/Initialize()
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 61e328774ce..d46fbfc6936 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -12,7 +12,6 @@
emote_see = list("shakes its head", "stamps a foot", "glares around")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/meat
meat_amount = 6
mob_size = 4.5//weight based on Chanthangi goats
@@ -89,7 +88,6 @@
emote_see = list("shakes its head")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/meat
meat_amount = 40 //Cows are huge, should be worth a lot of meat
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
@@ -134,7 +132,6 @@
emote_see = list("sways its tail")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/meat/pig
meat_amount = 20
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
diff --git a/code/modules/mob/living/simple_animal/friendly/fish.dm b/code/modules/mob/living/simple_animal/friendly/fish.dm
index 1a3a511c821..aa230df4dae 100644
--- a/code/modules/mob/living/simple_animal/friendly/fish.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fish.dm
@@ -6,7 +6,6 @@
emote_hear = list("glubs","glibs")
emote_see = list("flops around", "inflates its gills")
speak_chance = 1
- see_in_dark = 6
density = FALSE
mob_size = MOB_SMALL
item_state = "fish"
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index a69c9b777d1..09dc451a797 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -13,7 +13,6 @@
emote_see = list("shakes its head", "shivers")
speak_chance = 1
turns_per_move = 5
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/meat
meat_amount = 3
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
diff --git a/code/modules/mob/living/simple_animal/friendly/rat.dm b/code/modules/mob/living/simple_animal/friendly/rat.dm
index 699852badf3..eb19e17c2f8 100644
--- a/code/modules/mob/living/simple_animal/friendly/rat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/rat.dm
@@ -26,7 +26,6 @@
pass_flags = PASSTABLE
speak_chance = 3
turns_per_move = 5
- see_in_dark = 6
maxHealth = 5
health = 5
meat_type = /obj/item/reagent_containers/food/snacks/meat/rat
diff --git a/code/modules/mob/living/simple_animal/friendly/ratking.dm b/code/modules/mob/living/simple_animal/friendly/ratking.dm
index 5ef119bdd84..d21d9600555 100644
--- a/code/modules/mob/living/simple_animal/friendly/ratking.dm
+++ b/code/modules/mob/living/simple_animal/friendly/ratking.dm
@@ -21,7 +21,6 @@
icon_dead = "rat_gray_dead"
icon_rest = "rat_gray_sleep"
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
var/swarm_name = "peasentry"
diff --git a/code/modules/mob/living/simple_animal/hostile/adhomai.dm b/code/modules/mob/living/simple_animal/hostile/adhomai.dm
index 49dec00d672..07126157a24 100644
--- a/code/modules/mob/living/simple_animal/hostile/adhomai.dm
+++ b/code/modules/mob/living/simple_animal/hostile/adhomai.dm
@@ -101,7 +101,6 @@
environment_smash = 1
attack_emote = "wiggles toward"
- see_in_dark = 10
see_invisible = SEE_INVISIBLE_NOLIGHTING
blood_type = "#281C2D"
@@ -132,7 +131,6 @@
mob_size = 5
attack_emote = "hums at"
- see_in_dark = 10
see_invisible = SEE_INVISIBLE_NOLIGHTING
smart_ranged = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index a4d464731d1..c6c955b4d4f 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -15,7 +15,6 @@
emote_see = list("stares ferociously", "stomps")
speak_chance = 10
turns_per_move = 10
- see_in_dark = 6
meat_type = /obj/item/reagent_containers/food/snacks/bearmeat
meat_amount = 5
organ_names = list("chest", "lower body", "left arm", "right arm", "left leg", "right leg", "head")
diff --git a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
index dc39167b5d6..283c2506964 100644
--- a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
+++ b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
@@ -31,7 +31,6 @@
attacktext = "mangled"
attack_sound = 'sound/weapons/bloodyslice.ogg'
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
pixel_x = -16
speed = -1
diff --git a/code/modules/mob/living/simple_animal/hostile/changeling.dm b/code/modules/mob/living/simple_animal/hostile/changeling.dm
index 8d35d49789d..f6ada972b01 100644
--- a/code/modules/mob/living/simple_animal/hostile/changeling.dm
+++ b/code/modules/mob/living/simple_animal/hostile/changeling.dm
@@ -37,7 +37,6 @@
attack_sound = 'sound/weapons/bloodyslice.ogg'
emote_sounds = list('sound/effects/creatures/bear_loud_1.ogg', 'sound/effects/creatures/bear_loud_2.ogg', 'sound/effects/creatures/bear_loud_3.ogg', 'sound/effects/creatures/bear_loud_4.ogg')
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
minbodytemp = 0
@@ -167,7 +166,6 @@
attacktext = "mangled"
attack_sound = 'sound/weapons/bloodyslice.ogg'
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
pass_flags = PASSTABLE
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
index b51670bc3fb..e09c43c8e90 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
@@ -16,7 +16,6 @@
speak_chance = 1
turns_per_move = 7
- see_in_dark = 6
speak = list("Woof!", "Bark!", "AUUUUUU!","AwooOOOoo!")
speak_emote = list("barks", "woofs")
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm b/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm
index 8135b879246..83ca6e81d92 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm
@@ -20,7 +20,6 @@
speak_chance = 1
turns_per_move = 7
- see_in_dark = 6
speak = list("Rawr!", "Gawrgle!", "Bizzbop!", "Bweeewoooo!")
speak_emote = list("roars pitifully", "squeals out a mechanical attempt at a growl")
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 7da9e4f49e7..26ad2fa9f09 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -19,7 +19,6 @@
emote_hear = list("chitters")
speak_chance = 5
turns_per_move = 5
- see_in_dark = 10
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/xenomeat
organ_names = list("thorax", "legs", "head")
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
index 81b45ace41a..f291400a5c6 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
@@ -31,7 +31,6 @@
tameable = FALSE
flying = TRUE
smart_melee = FALSE
- see_in_dark = 8
pass_flags = PASSTABLE|PASSRAILING
emote_hear = list("emits a harsh noise")
emote_sounds = list(
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm
index 767a01be86c..602a0709f93 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm
@@ -33,7 +33,6 @@
max_n2 = 0
minbodytemp = 0
speed = -10
- see_in_dark = 8
destroy_surroundings = 0
var/bot_type
var/bot_amt = 160 //Number of total bots that are spawned before the beacon disappears completely.
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm
index f3ae47cd03b..fdc5a1e6100 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm
@@ -30,7 +30,6 @@
tameable = FALSE
flying = 1
mob_size = MOB_LARGE
- see_in_dark = 8
pass_flags = PASSTABLE|PASSRAILING
attack_emote = "focuses on"
var/mob/living/simple_animal/hostile/hivebotbeacon/linked_parent = null
diff --git a/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm b/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm
index a1cfcf88e52..54a5523e4e5 100644
--- a/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm
@@ -56,7 +56,6 @@
tameable = FALSE
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
psi_pingable = FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/krampus.dm b/code/modules/mob/living/simple_animal/hostile/krampus.dm
index 380566ccdc6..c7f4443d0d3 100644
--- a/code/modules/mob/living/simple_animal/hostile/krampus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/krampus.dm
@@ -30,7 +30,6 @@
attacktext = "punished"
attack_sound = 'sound/weapons/bladeslice.ogg'
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/morph.dm b/code/modules/mob/living/simple_animal/hostile/morph.dm
index 697c8d1192d..e5a859d4cbf 100644
--- a/code/modules/mob/living/simple_animal/hostile/morph.dm
+++ b/code/modules/mob/living/simple_animal/hostile/morph.dm
@@ -32,7 +32,6 @@
melee_damage_lower = 12
melee_damage_upper = 16
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
stop_sight_update = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
index 66f9eb6a0d9..850d27e5386 100644
--- a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
+++ b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
@@ -31,7 +31,6 @@
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
mob_push_flags = ALLMOBS
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/pra.dm b/code/modules/mob/living/simple_animal/hostile/pra.dm
index 298edd6903b..6ed340c5782 100644
--- a/code/modules/mob/living/simple_animal/hostile/pra.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pra.dm
@@ -194,7 +194,6 @@
tameable = FALSE
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
emote_sounds = list('sound/effects/creatures/PRA_drone.ogg')
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
index 2600da8aad5..bf00ecb5072 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
@@ -37,7 +37,6 @@
name = "carnivorous aquatic creature"
desc = "A threatening-looking aquatic creature with a mouth full of densely-packed, razor sharp teeth."
emote_see = list("swishes around elegantly", "floats threateningly")
- see_in_dark = 6
mob_size = MOB_LARGE
icon_state = "thresher"
icon_living = "thresher"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
index 766efda93cf..bfd37eb863e 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
@@ -45,7 +45,6 @@
faction = "cavern"
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
/mob/living/simple_animal/hostile/retaliate/cavern_dweller/Allow_Spacemove(var/check_drift = 0)
@@ -110,7 +109,6 @@
minbodytemp = 0
light_range = 10
light_wedge = LIGHT_WIDE
- see_in_dark = 8
psi_pingable = FALSE
faction = "sol"
diff --git a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
index d207d48f54c..d9fd68986bf 100644
--- a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
+++ b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
@@ -92,7 +92,6 @@
desc = "The gaping maw opens and closes eternally, insatiably... Rumours however tell that those who can sate it are rewarded."
icon = 'icons/mob/npc/cavern.dmi'
icon_state = "sarlacc"
- see_in_dark = 8
health = 100
maxHealth = 100
gender = NEUTER
@@ -313,7 +312,6 @@
desc = "This pulsating brain seems somehow connected to all the other orifices in this room..."
icon = 'icons/mob/npc/cavern.dmi'
icon_state = "sarlaccbrain"
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
universal_speak = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
index 09394fdda5c..d1c3a5a6819 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
@@ -48,7 +48,6 @@
attack_emote = "nashes at"
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
/mob/living/simple_animal/hostile/carp/update_icon()
@@ -291,5 +290,4 @@
attack_emote = "nashes at"
flying = TRUE
- see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
diff --git a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
index 921ac9eca16..ac9801b9023 100644
--- a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
+++ b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
@@ -13,7 +13,6 @@
emote_hear = list("chitters")
speak_chance = 5
turns_per_move = 5
- see_in_dark = 10
see_invisible = SEE_INVISIBLE_NOLIGHTING
meat_type = /obj/item/reagent_containers/food/snacks/xenomeat
organ_names = list("thorax", "legs", "head")
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 49dd4d3799d..871a8a8b743 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -6,6 +6,10 @@
sight = DEFAULT_SIGHT
var/datum/mind/mind
+ // we never want to hide a turf because it's not lit
+ // We can rely on the lighting plane to handle that for us
+ see_in_dark = 1e6
+
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
can_be_buckled = TRUE
diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm
index 9cedb4dce6e..bc4778c48e1 100644
--- a/code/modules/organs/subtypes/parasite.dm
+++ b/code/modules/organs/subtypes/parasite.dm
@@ -230,8 +230,12 @@
owner.remove_language(L.name)
owner.add_language(LANGUAGE_VAURCA)
owner.add_language(LANGUAGE_LIIDRA)
+ owner.set_default_language(LANGUAGE_LIIDRA)
removed_langs = TRUE
+ owner.set_see_invisible(SEE_INVISIBLE_NOLIGHTING)
+ owner.add_client_color(/datum/client_color/vaurca)
+
if(prob(10))
if(owner.can_feel_pain())
to_chat(owner, SPAN_WARNING("You feel an unbearable pain in your mind!"))
diff --git a/html/changelogs/fluffyghost-fixliidrazombies.yml b/html/changelogs/fluffyghost-fixliidrazombies.yml
new file mode 100644
index 00000000000..b67c0d93511
--- /dev/null
+++ b/html/changelogs/fluffyghost-fixliidrazombies.yml
@@ -0,0 +1,47 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: FluffyGhost
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Liidra zombies now speak Liidraic by default."
+ - bugfix: "Fixed a runtime that prevented the Liidra zombies from speaking in the hivenet."
+ - rscadd: "Liidra zombies now see in the dark, like their Vaurca counterparts."
+ - backend: "Refactored set_default_language into a proc, updated the verbs that interact with it."
+ - backend: "Minor refactor of the set default language verb."
+ - backend: "DMDoc'd add_language and minor refactor of it."
+ - backend: "Removed see_in_dark related things, set it as per TG, we rely on the lighting plane only now."