[t_He] [t_is] limp and unresponsive; there are no signs of life"
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index dce38bd664..0e45246a20 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -28,7 +28,7 @@
//Holopad
if(istype(ai.current, /obj/machinery/holopad))
var/obj/machinery/holopad/H = ai.current
- H.move_hologram(ai)
+ H.move_hologram(ai, T)
/mob/camera/aiEye/Move()
return 0
@@ -106,4 +106,4 @@
/mob/camera/aiEye/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
if(relay_speech && speaker && ai && !radio_freq && speaker != ai && near_camera(speaker))
- ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans)
+ ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index 7cd6567ecb..1507c43912 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -108,6 +108,7 @@
speak_emote = list("clanks", "clinks", "clunks", "clangs")
verb_ask = "requests"
verb_exclaim = "proclaims"
+ verb_whisper = "imparts"
verb_yell = "harangues"
bubble_icon = "clock"
initial_languages = list(/datum/language/common, /datum/language/ratvar)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index d822a05886..ec76c2176f 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -401,7 +401,7 @@ Difficulty: Very Hard
to_chat(user, observer_desc)
to_chat(user, "It is activated by [activation_method].")
-/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans)
+/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode)
..()
if(isliving(speaker))
ActivationReaction(speaker, ACTIVATE_SPEECH)
diff --git a/code/modules/mob/living/simple_animal/slime/say.dm b/code/modules/mob/living/simple_animal/slime/say.dm
index ae7c14068f..60a25f90b7 100644
--- a/code/modules/mob/living/simple_animal/slime/say.dm
+++ b/code/modules/mob/living/simple_animal/slime/say.dm
@@ -1,4 +1,4 @@
-/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans)
+/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode)
if(speaker != src && !radio_freq && !stat)
if (speaker in Friends)
speech_buffer = list()
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index dfbf3fe50b..9fe043a4a0 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -28,11 +28,12 @@
/obj/machinery/power/generator/Initialize(mapload)
- . = ..()
+ . = ..()
var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator
cold_circ = locate(circpath) in get_step(src, cold_dir)
hot_circ = locate(circpath) in get_step(src, hot_dir)
connect_to_network()
+ SSair.atmos_machinery += src
if(cold_circ)
switch(cold_dir)
@@ -55,6 +56,9 @@
update_icon()
+/obj/machinery/power/generator/Destroy()
+ SSair.atmos_machinery -= src
+ return ..()
/obj/machinery/power/generator/update_icon()
@@ -63,21 +67,20 @@
else
cut_overlays()
- if(lastgenlev != 0)
- add_overlay("teg-op[lastgenlev]")
+ var/L = min(round(lastgenlev/100000),11)
+ if(L != 0)
+ add_overlay(image('icons/obj/power.dmi', "teg-op[L]"))
- add_overlay("teg-oc[lastcirc]")
+ add_overlay("teg-oc[lastcirc]")
#define GENRATE 800 // generator output coefficient from Q
-/obj/machinery/power/generator/process()
+/obj/machinery/power/generator/process_atmos()
if(!cold_circ || !hot_circ)
return
- lastgen = 0
-
if(powernet)
//to_chat(world, "cold_circ and hot_circ pass")
@@ -104,7 +107,7 @@
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
var/heat = energy_transfer*(1-efficiency)
- lastgen = energy_transfer*efficiency
+ lastgen += energy_transfer*efficiency
//to_chat(world, "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];")
@@ -113,7 +116,7 @@
//to_chat(world, "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]")
- add_avail(lastgen)
+ //add_avail(lastgen) This is done in process now
// update icon overlays only if displayed level has changed
if(hot_air)
@@ -124,15 +127,23 @@
var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1
cold_circ_air1.merge(cold_air)
- var/genlev = max(0, min( round(11*lastgen / 100000), 11))
+ update_icon()
+
var/circ = "[cold_circ && cold_circ.last_pressure_delta > 0 ? "1" : "0"][hot_circ && hot_circ.last_pressure_delta > 0 ? "1" : "0"]"
- if((genlev != lastgenlev) || (circ != lastcirc))
- lastgenlev = genlev
+ if(circ != lastcirc)
lastcirc = circ
update_icon()
src.updateDialog()
+/obj/machinery/power/generator/process()
+ //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math**
+ var/power_output = round(lastgen / 10)
+ add_avail(power_output)
+ lastgenlev = power_output
+ lastgen -= power_output
+ ..()
+
/obj/machinery/power/generator/attack_hand(mob/user)
if(..())
user << browse(null, "window=teg")
@@ -151,7 +162,13 @@
t += ""
- t += "Output: [round(lastgen)] W"
+ var/displaygen = lastgenlev
+ if(displaygen < 1000000) //less than a MW
+ displaygen /= 1000
+ t += "Output: [round(displaygen,0.01)] kW"
+ else
+ displaygen /= 1000000
+ t += "Output: [round(displaygen,0.01)] MW"
t += "
"
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 9deebdfe10..7d0d4fdbb5 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -26,8 +26,8 @@
grav_pull = 10
consume_range = 12 //How many tiles out do we eat
-/obj/singularity/narsie/large/New()
- ..()
+/obj/singularity/narsie/large/Initialize()
+ . = ..()
send_to_playing_players("NAR-SIE HAS RISEN")
send_to_playing_players(pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg'))
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 3b0bc3087b..1a308ed471 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -29,12 +29,12 @@
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
dangerous_possession = TRUE
-/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0)
+/obj/singularity/Initialize(mapload, starting_energy = 50)
//CARN: admin-alert for chuckle-fuckery.
admin_investigate_setup()
src.energy = starting_energy
- ..()
+ . = ..()
START_PROCESSING(SSobj, src)
GLOB.poi_list |= src
GLOB.singularities |= src
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 4b48d19857..a580b63e55 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -129,6 +129,7 @@
/obj/machinery/power/supermatter_shard/Initialize()
. = ..()
+ SSair.atmos_machinery += src
countdown = new(src)
countdown.start()
GLOB.poi_list |= src
@@ -139,6 +140,7 @@
/obj/machinery/power/supermatter_shard/Destroy()
investigate_log("has been destroyed.", "supermatter")
+ SSair.atmos_machinery -= src
QDEL_NULL(radio)
GLOB.poi_list -= src
QDEL_NULL(countdown)
@@ -181,7 +183,7 @@
E.energy = power
qdel(src)
-/obj/machinery/power/supermatter_shard/process()
+/obj/machinery/power/supermatter_shard/process_atmos()
var/turf/T = loc
if(isnull(T)) // We have a null turf...something is wrong, stop processing this entity.
@@ -296,6 +298,7 @@
if(produces_gas)
env.merge(removed)
+ air_update_turf()
for(var/mob/living/carbon/human/l in view(src, HALLUCINATION_RANGE(power))) // If they can see it without mesons on. Bad on them.
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index fbb82cb36a..f23b58b1ab 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -40,6 +40,11 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp
var/energy_to_raise = 32
var/energy_to_lower = -20
+/obj/singularity/energy_ball/Initialize(mapload, starting_energy = 50, is_miniball = FALSE)
+ . = ..()
+ if(!is_miniball)
+ set_light(10, 7, "#EEEEFF")
+
/obj/singularity/energy_ball/ex_act(severity, target)
return
@@ -117,7 +122,7 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp
/obj/singularity/energy_ball/proc/new_mini_ball()
if(!loc)
return
- var/obj/singularity/energy_ball/EB = new(loc)
+ var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE)
EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7)
var/icon/I = icon(icon,icon_state,dir)
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 2dbc0ff1c2..a8ab8fd426 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -38,7 +38,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/oat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/rice = list("rice" = -5),
- /obj/item/weapon/reagent_containers/food/snacks/donut/New = list("sprinkles" = -2, "sugar" = 1),
+ /obj/item/weapon/reagent_containers/food/snacks/donut = list("sprinkles" = -2, "sugar" = 1),
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/egg = list("eggyolk" = -5),
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 500147d233..e91c35b974 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -347,10 +347,9 @@
/datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
if(method in list(INGEST, VAPOR, INJECT))
- M.Stun(4)
- M.Weaken(4)
+ M.nutrition -= 5
if(show_message)
- to_chat(M, "Your stomach agonizingly cramps!")
+ to_chat(M, "Your stomach feels empty and cramps!")
else
var/mob/living/carbon/C = M
for(var/s in C.surgeries)
diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm
index 7ebafe6e24..052c1f1162 100644
--- a/code/modules/spells/spell_types/mind_transfer.dm
+++ b/code/modules/spells/spell_types/mind_transfer.dm
@@ -62,29 +62,14 @@ Also, you never added distance checking after target is selected. I've went ahea
var/mob/caster = user//The wizard/whomever doing the body transferring.
//MIND TRANSFER BEGIN
- if(caster.mind.special_verbs.len)//If the caster had any special verbs, remove them from the mob verb list.
- for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot.
- caster.verbs -= V//But a safety nontheless.
-
- if(victim.mind.special_verbs.len)//Now remove all of the victim's verbs.
- for(var/V in victim.mind.special_verbs)
- victim.verbs -= V
-
var/mob/dead/observer/ghost = victim.ghostize(0)
caster.mind.transfer_to(victim)
- if(victim.mind.special_verbs.len)//To add all the special verbs for the original caster.
- for(var/V in caster.mind.special_verbs)//Not too important but could come into play.
- caster.verbs += V
-
ghost.mind.transfer_to(caster)
if(ghost.key)
caster.key = ghost.key //have to transfer the key since the mind was not active
qdel(ghost)
- if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here.
- for(var/V in caster.mind.special_verbs)
- caster.verbs += V
//MIND TRANSFER END
//Here we paralyze both mobs and knock them out for a time.
diff --git a/html/changelogs/AutoChangeLog-pr-698.yml b/html/changelogs/AutoChangeLog-pr-698.yml
new file mode 100644
index 0000000000..40e55644b5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-698.yml
@@ -0,0 +1,4 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - rscadd: "You can now make holocalls! Simply stand on a pad, bring up the menu, and select the holopad you wish to call. Remain still until someone answers. When they do, you'll be able to act just like an AI hologram until the call ends"
diff --git a/html/changelogs/AutoChangeLog-pr-701.yml b/html/changelogs/AutoChangeLog-pr-701.yml
new file mode 100644
index 0000000000..8848bcb450
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-701.yml
@@ -0,0 +1,7 @@
+author: "ninjanomnom"
+delete-after: True
+changes:
+ - tweak: "TEG displays power in kw or MW now"
+ - tweak: "TEG power bar only maxes over 1MW now"
+ - experiment: "Moves TEG to SSair"
+ - experiment: "Moves SM to SSair"
diff --git a/html/changelogs/AutoChangeLog-pr-708.yml b/html/changelogs/AutoChangeLog-pr-708.yml
new file mode 100644
index 0000000000..6cb7c07312
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-708.yml
@@ -0,0 +1,4 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - bugfix: "Squishy plants will now affect walls and other turfs they get squished on"
diff --git a/html/changelogs/AutoChangeLog-pr-714.yml b/html/changelogs/AutoChangeLog-pr-714.yml
new file mode 100644
index 0000000000..d5e4582f40
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-714.yml
@@ -0,0 +1,4 @@
+author: "XDTM"
+delete-after: True
+changes:
+ - tweak: "Blood Cult's talisman of Horrors now works at range. It will still give no warning to the victim."
diff --git a/html/changelogs/AutoChangeLog-pr-717.yml b/html/changelogs/AutoChangeLog-pr-717.yml
new file mode 100644
index 0000000000..fbb98e0039
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-717.yml
@@ -0,0 +1,5 @@
+author: "coiax"
+delete-after: True
+changes:
+ - rscadd: "When talking on the alien hivemind, a person will be identified by
+their real name, rather than who they are disguised as."
diff --git a/html/changelogs/AutoChangeLog-pr-745.yml b/html/changelogs/AutoChangeLog-pr-745.yml
new file mode 100644
index 0000000000..b9aa3fddd2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-745.yml
@@ -0,0 +1,4 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - bugfix: "revenants now properly resurrect from ectoplasm, as opposed to ectoplasm merely spawning a new grief ghost"
diff --git a/html/changelogs/AutoChangeLog-pr-746.yml b/html/changelogs/AutoChangeLog-pr-746.yml
new file mode 100644
index 0000000000..ddeea1d732
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-746.yml
@@ -0,0 +1,4 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - bugfix: "Turrets can no longer see invisible things, such as unrevealed revenants"
diff --git a/html/changelogs/AutoChangeLog-pr-747.yml b/html/changelogs/AutoChangeLog-pr-747.yml
new file mode 100644
index 0000000000..583f6b5e56
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-747.yml
@@ -0,0 +1,4 @@
+author: "QualityVan"
+delete-after: True
+changes:
+ - rscadd: "Point flashlights at mouths to see what's inside them"
diff --git a/html/changelogs/AutoChangeLog-pr-771.yml b/html/changelogs/AutoChangeLog-pr-771.yml
new file mode 100644
index 0000000000..031ec64151
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-771.yml
@@ -0,0 +1,4 @@
+author: "BeeSting12"
+delete-after: True
+changes:
+ - bugfix: "Pubbystation no longer has two airlocks stacked on top of each other leading into xenobiology's kill room."
diff --git a/html/changelogs/AutoChangeLog-pr-781.yml b/html/changelogs/AutoChangeLog-pr-781.yml
new file mode 100644
index 0000000000..08a5c148ff
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-781.yml
@@ -0,0 +1,4 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - tweak: "Teslas now give off light"
diff --git a/html/changelogs/AutoChangeLog-pr-805.yml b/html/changelogs/AutoChangeLog-pr-805.yml
new file mode 100644
index 0000000000..be4a17ddf7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-805.yml
@@ -0,0 +1,5 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - rscadd: "Reduction to nutrition when consuming Miner's salve."
+ - rscdel: "Stun/weaken that bypasses bugged chemical protection when consuming Miner's salve."
diff --git a/config/admin_nicknames.txt b/strings/admin_nicknames.txt
similarity index 100%
rename from config/admin_nicknames.txt
rename to strings/admin_nicknames.txt
diff --git a/config/sillytips.txt b/strings/sillytips.txt
similarity index 100%
rename from config/sillytips.txt
rename to strings/sillytips.txt
diff --git a/config/tips.txt b/strings/tips.txt
similarity index 100%
rename from config/tips.txt
rename to strings/tips.txt
diff --git a/tgstation.dme b/tgstation.dme
index 1f3ef27802..bff0d9a902 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -244,6 +244,7 @@
#include "code\datums\dog_fashion.dm"
#include "code\datums\emotes.dm"
#include "code\datums\forced_movement.dm"
+#include "code\datums\holocall.dm"
#include "code\datums\hud.dm"
#include "code\datums\map_config.dm"
#include "code\datums\martial.dm"