diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml
index 500be06fa6..771e48d2ef 100644
--- a/SpacemanDMM.toml
+++ b/SpacemanDMM.toml
@@ -3,3 +3,6 @@ macro_redefined = "off"
macro_undefined_no_definition = "off"
as_local_var = "off"
tmp_no_effect = "off"
+
+[langserver]
+dreamchecker = true
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 6bd32c762c..39e9e44da2 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -146,7 +146,7 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
// Used when two pipe_networks are combining
-/obj/machinery/atmospherics/proc/return_network_air(datum/network/reference)
+/obj/machinery/atmospherics/proc/return_network_air(datum/pipe_network/reference)
// Return a list of gas_mixture(s) in the object
// associated with reference pipe_network for use in rebuilding the networks gases list
// Is permitted to return null
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index e960d36fa7..8d30c946ca 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -145,7 +145,7 @@
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
- radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
+ radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA)
/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status()
if(!radio_connection)
@@ -165,7 +165,7 @@
"sigtype" = "status"
)
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
+ radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
return 1
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index 54e034dc92..05922103ff 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -121,7 +121,7 @@ Thus, the two variables affect pump operation are set in New():
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
- radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
+ radio_connection = radio_controller.add_object(src, frequency, radio_filter = RADIO_ATMOSIA)
/obj/machinery/atmospherics/binary/pump/proc/broadcast_status()
if(!radio_connection)
@@ -139,7 +139,7 @@ Thus, the two variables affect pump operation are set in New():
"sigtype" = "status"
)
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
+ radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
return 1
diff --git a/code/ATMOSPHERICS/components/shutoff.dm b/code/ATMOSPHERICS/components/shutoff.dm
index d7d8076214..7517cbd7ef 100644
--- a/code/ATMOSPHERICS/components/shutoff.dm
+++ b/code/ATMOSPHERICS/components/shutoff.dm
@@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(shutoff_valves)
// Breadth-first search for any leaking pipes that we can directly see
/obj/machinery/atmospherics/valve/shutoff/proc/find_leaks()
- var/obj/machinery/atmospherics/list/search = list()
+ var/list/obj/machinery/atmospherics/search = list()
// We're the leak!
if(!node1 || !node2)
diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm
index c0d796d45b..7deca38847 100644
--- a/code/ATMOSPHERICS/components/tvalve.dm
+++ b/code/ATMOSPHERICS/components/tvalve.dm
@@ -232,7 +232,7 @@
return 1
-/obj/machinery/atmospherics/tvalve/return_network_air(datum/network/reference)
+/obj/machinery/atmospherics/tvalve/return_network_air(datum/pipe_network/reference)
return null
/obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference)
diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index 3ded7b7388..c890938100 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -201,7 +201,7 @@
return 1
-/obj/machinery/atmospherics/valve/return_network_air(datum/network/reference)
+/obj/machinery/atmospherics/valve/return_network_air(datum/pipe_network/reference)
return null
/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference)
diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm
index ac2b3193c9..e7a0d09477 100644
--- a/code/ATMOSPHERICS/mainspipe.dm
+++ b/code/ATMOSPHERICS/mainspipe.dm
@@ -74,7 +74,6 @@ obj/machinery/atmospherics/mains_pipe
update_icon()
proc/burst()
- ..()
for(var/obj/machinery/atmospherics/pipe/mains_component/pipe in contents)
burst()
diff --git a/code/__defines/spaceman_dmm.dm b/code/__defines/spaceman_dmm.dm
new file mode 100644
index 0000000000..94f1743377
--- /dev/null
+++ b/code/__defines/spaceman_dmm.dm
@@ -0,0 +1,31 @@
+// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter
+// is not in use.
+
+// The SPACEMAN_DMM define is set by the linter and other tooling when it runs.
+#ifdef SPACEMAN_DMM
+ #define RETURN_TYPE(X) set SpacemanDMM_return_type = X
+ #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
+ #define UNLINT(X) SpacemanDMM_unlint(X)
+ #define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X
+ #define SHOULD_NOT_SLEEP(X) set SpacemanDMM_should_not_sleep = X
+ #define SHOULD_BE_PURE(X) set SpacemanDMM_should_be_pure = X
+ #define PRIVATE_PROC(X) set SpacemanDMM_private_proc = X
+ #define PROTECTED_PROC(X) set SpacemanDMM_protected_proc = X
+ #define CAN_BE_REDEFINED(X) set SpacemanDMM_can_be_redefined = X
+ #define VAR_FINAL var/SpacemanDMM_final
+ #define VAR_PRIVATE var/SpacemanDMM_private
+ #define VAR_PROTECTED var/SpacemanDMM_protected
+#else
+ #define RETURN_TYPE(X)
+ #define SHOULD_CALL_PARENT(X)
+ #define UNLINT(X) X
+ #define SHOULD_NOT_OVERRIDE(X)
+ #define SHOULD_NOT_SLEEP(X)
+ #define SHOULD_BE_PURE(X)
+ #define PRIVATE_PROC(X)
+ #define PROTECTED_PROC(X)
+ #define CAN_BE_REDEFINED(X)
+ #define VAR_FINAL var
+ #define VAR_PRIVATE var
+ #define VAR_PROTECTED var
+#endif
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index d24f0bfdd6..cac66f5a11 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -111,7 +111,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
// Macro defining the actual code applying our overlays lists to the BYOND overlays list. (I guess a macro for speed)
// TODO - I don't really like the location of this macro define. Consider it. ~Leshana
#define COMPILE_OVERLAYS(A)\
- if (TRUE) {\
+ do {\
var/list/oo = A.our_overlays;\
var/list/po = A.priority_overlays;\
if(LAZYLEN(po)){\
@@ -129,4 +129,4 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
A.overlays.Cut();\
}\
A.flags &= ~OVERLAY_QUEUED;\
- }
+ } while (FALSE)
diff --git a/code/_global_vars/lists/species.dm b/code/_global_vars/lists/species.dm
index 5b467f573f..f35568b07a 100644
--- a/code/_global_vars/lists/species.dm
+++ b/code/_global_vars/lists/species.dm
@@ -1,6 +1,6 @@
//Languages/species/whitelist.
-GLOBAL_LIST_INIT(all_species, list())
-GLOBAL_LIST_INIT(all_languages, list())
+GLOBAL_LIST_EMPTY_TYPED(all_species, /datum/species)
+GLOBAL_LIST_EMPTY_TYPED(all_languages, /datum/language)
GLOBAL_LIST_INIT(language_name_conflicts, list())
GLOBAL_LIST_INIT(language_keys, list()) // Table of say codes for all languages
GLOBAL_LIST_INIT(language_key_conflicts, list())
diff --git a/code/_helpers/events.dm b/code/_helpers/events.dm
index 2d15bb3aa9..5f2e605512 100644
--- a/code/_helpers/events.dm
+++ b/code/_helpers/events.dm
@@ -10,7 +10,7 @@
// Otherwise add it and all subtypes that exist on the map to our grand list
for(var/areapath in typesof(parentpath))
var/area/A = locate(areapath) // Check if it actually exists
- if(istype(A) && A.z in using_map.player_levels)
+ if(istype(A) && (A.z in using_map.player_levels))
grand_list_of_areas += A
return grand_list_of_areas
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
index 40dbaf49cb..def9934876 100644
--- a/code/_helpers/game.dm
+++ b/code/_helpers/game.dm
@@ -27,6 +27,7 @@
return max_z
/proc/get_area(atom/A)
+ RETURN_TYPE(/area)
if(isarea(A))
return A
var/turf/T = get_turf(A)
diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm
index 3bef9b4f15..ba13bb5b48 100644
--- a/code/_helpers/logging.dm
+++ b/code/_helpers/logging.dm
@@ -126,7 +126,7 @@
WRITE_LOG(diary, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]")
speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]"
- GLOB.round_text_log += "([time_stamp()]) ([src]/[speaker.client]) DEADSAY: - [text]"
+ GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]"
/proc/log_ghostemote(text, mob/speaker)
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index c1f32f45db..5701521ec5 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -19,11 +19,9 @@
if (!( istext(HTMLstring) ))
CRASH("Given non-text argument!")
- return
else
if (length(HTMLstring) != 7)
CRASH("Given non-HTML argument!")
- return
var/textr = copytext(HTMLstring, 2, 4)
var/textg = copytext(HTMLstring, 4, 6)
var/textb = copytext(HTMLstring, 6, 8)
@@ -40,7 +38,6 @@
if (length(textb) < 2)
textr = text("0[]", textb)
return text("#[][][]", textr, textg, textb)
- return
//Returns the middle-most value
/proc/dd_range(var/low, var/high, var/num)
@@ -1130,8 +1127,6 @@ proc/is_hot(obj/item/W as obj)
else
return 0
- return 0
-
//Whether or not the given item counts as sharp in terms of dealing damage
/proc/is_sharp(obj/O as obj)
if(!O)
diff --git a/code/_macros.dm b/code/_macros.dm
index 33bdf30ceb..18a8ddf825 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -11,7 +11,8 @@
#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
// #define to_chat(target, message) target << message Not anymore!
-#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
+//#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat
+#define to_chat __to_chat
#define to_world(message) to_chat(world, message)
#define to_world_log(message) world.log << message
// TODO - Baystation has this log to crazy places. For now lets just world.log, but maybe look into it later.
diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm
index 3fda63b5aa..553c30d128 100644
--- a/code/controllers/subsystems/chat.dm
+++ b/code/controllers/subsystems/chat.dm
@@ -5,7 +5,7 @@ SUBSYSTEM_DEF(chat)
priority = FIRE_PRIORITY_CHAT
init_order = INIT_ORDER_CHAT
- var/list/msg_queue = list()
+ var/list/list/msg_queue = list() //List of lists
/datum/controller/subsystem/chat/Initialize(timeofday)
init_vchat()
diff --git a/code/controllers/subsystems/events.dm b/code/controllers/subsystems/events.dm
index 226c09f492..5b613775e4 100644
--- a/code/controllers/subsystems/events.dm
+++ b/code/controllers/subsystems/events.dm
@@ -38,7 +38,7 @@ SUBSYSTEM_DEF(events)
return
for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
- var/list/datum/event_container/EC = event_containers[i]
+ var/datum/event_container/EC = event_containers[i]
EC.process()
/datum/controller/subsystem/events/stat_entry()
diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm
index 1667aa8320..792bf63893 100644
--- a/code/controllers/subsystems/persistence.dm
+++ b/code/controllers/subsystems/persistence.dm
@@ -32,6 +32,10 @@ SUBSYSTEM_DEF(persistence)
if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT))
return
+// if((!T.z in GLOB.using_map.station_levels) || !initialized)
+ if(!(T.z in using_map.station_levels))
+ return
+
if(!(T.z in using_map.persist_levels))
return
@@ -57,4 +61,4 @@ SUBSYSTEM_DEF(persistence)
dat += ""
var/datum/browser/popup = new(user, "admin_persistence", "Persistence Data")
popup.set_content(jointext(dat, null))
- popup.open()
\ No newline at end of file
+ popup.open()
diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm
index 4cf7222186..d1c2de2410 100644
--- a/code/controllers/subsystems/planets.dm
+++ b/code/controllers/subsystems/planets.dm
@@ -33,7 +33,7 @@ SUBSYSTEM_DEF(planets)
z_to_planet[Z] = NP
// DO NOT CALL THIS DIRECTLY UNLESS IT'S IN INITIALIZE,
-// USE turf/simulated/proc/make_indoors() and\
+// USE turf/simulated/proc/make_indoors() and
// tyrf/simulated/proc/make_outdoors()
/datum/controller/subsystem/planets/proc/addTurf(var/turf/T)
if(z_to_planet.len >= T.z && z_to_planet[T.z])
diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
index 47f35a27a8..31f3755744 100644
--- a/code/controllers/subsystems/ticker.dm
+++ b/code/controllers/subsystems/ticker.dm
@@ -314,7 +314,7 @@ var/global/datum/controller/subsystem/ticker/ticker
switch(M.z)
if(0) //inside a crate or something
var/turf/T = get_turf(M)
- if(T && T.z in using_map.station_levels) //we don't use M.death(0) because it calls a for(/mob) loop and
+ if(T && (T.z in using_map.station_levels)) //we don't use M.death(0) because it calls a for(/mob) loop and
M.health = 0
M.set_stat(DEAD)
if(1) //on a z-level 1 turf.
diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm
index 64a347336a..9c41a0a4ba 100644
--- a/code/controllers/subsystems/timer.dm
+++ b/code/controllers/subsystems/timer.dm
@@ -159,8 +159,7 @@ SUBSYSTEM_DEF(timer)
if (timer.timeToRun < head_offset)
bucket_resolution = null //force bucket recreation
- CRASH("[i] Invalid timer state: Timer in long run queue with a time to run less then head_offset. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]")
-
+ crash_with("[i] Invalid timer state: Timer in long run queue with a time to run less then head_offset. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]")
if (timer.callBack && !timer.spent)
timer.callBack.InvokeAsync()
spent += timer
@@ -171,7 +170,7 @@ SUBSYSTEM_DEF(timer)
if (timer.timeToRun < head_offset + TICKS2DS(practical_offset-1))
bucket_resolution = null //force bucket recreation
- CRASH("[i] Invalid timer state: Timer in long run queue that would require a backtrack to transfer to short run queue. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]")
+ crash_with("[i] Invalid timer state: Timer in long run queue that would require a backtrack to transfer to short run queue. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]")
if (timer.callBack && !timer.spent)
timer.callBack.InvokeAsync()
spent += timer
diff --git a/code/controllers/subsystems/xenoarch.dm b/code/controllers/subsystems/xenoarch.dm
index 2e22213ee6..9851c69278 100644
--- a/code/controllers/subsystems/xenoarch.dm
+++ b/code/controllers/subsystems/xenoarch.dm
@@ -31,7 +31,7 @@ SUBSYSTEM_DEF(xenoarch)
/datum/controller/subsystem/xenoarch/proc/SetupXenoarch()
for(var/turf/simulated/mineral/M in world)
- if(!M.density || M.z in using_map.xenoarch_exempt_levels)
+ if(!M.density || (M.z in using_map.xenoarch_exempt_levels))
continue
if(isnull(M.geologic_data))
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index fc4e696702..7b5b385932 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -194,7 +194,7 @@
-/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3,beam_color = null)
+/atom/proc/Beam(atom/BeamTarget, icon_state="b_beam", icon='icons/effects/beam.dmi', time=50, maxdistance=10, beam_type=/obj/effect/ebeam, beam_sleep_time=3, beam_color = null)
var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time,beam_color)
spawn(0)
newbeam.Start()
diff --git a/code/datums/category.dm b/code/datums/category.dm
index 3bc9640b79..45b2df5996 100644
--- a/code/datums/category.dm
+++ b/code/datums/category.dm
@@ -67,7 +67,7 @@ datum/category_group/dd_SortValue()
*****************/
/datum/category_item
var/name = ""
- var/list/datum/category_group/category // The group this item belongs to
+ var/datum/category_group/category // The group this item belongs to
/datum/category_item/New(var/datum/category_group/cg)
..()
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
index 4ada8af23b..1cb9e0b1c4 100644
--- a/code/datums/components/_component.dm
+++ b/code/datums/components/_component.dm
@@ -333,7 +333,7 @@
* * datum/component/c_type The typepath of the component you want to get a reference to
*/
/datum/proc/GetComponent(datum/component/c_type)
- // RETURN_TYPE(c_type)
+ RETURN_TYPE(c_type)
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
var/list/dc = datum_components
@@ -353,7 +353,7 @@
* * datum/component/c_type The typepath of the component you want to get a reference to
*/
/datum/proc/GetExactComponent(datum/component/c_type)
- // RETURN_TYPE(c_type)
+ RETURN_TYPE(c_type)
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
var/list/dc = datum_components
diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index 9f39990afd..e823199af3 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -357,7 +357,7 @@
container.close_all()
qdel(DL)
-/datum/component/personal_crafting/proc/component_ui_interact(atom/movable/screen/craft/image, location, control, params, user)
+/datum/component/personal_crafting/proc/component_ui_interact(/obj/screen/craft/image, location, control, params, user)
// SIGNAL_HANDLER
if(user == parent)
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index 1f9feeeacf..721beeaf4c 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -8,7 +8,7 @@
var/list/active_timers //for SStimer
var/list/datum_components //for /datum/components
var/list/comp_lookup
- var/list/signal_procs
+ var/list/list/signal_procs // List of lists
var/signal_enabled = FALSE
var/weakref/weakref // Holder of weakref instance pointing to this datum
var/datum_flags = NONE
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index cfd9107898..7b09c83308 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -72,7 +72,7 @@
if(!usr || !result || result == "---Components---" || result == "---Elements---")
return
if(QDELETED(src))
- to_chat(usr, "That thing doesn't exist anymore!", confidential = TRUE)
+ to_chat(usr, "That thing doesn't exist anymore!")
return
var/list/lst = usr.client.get_callproc_args()
if(!lst)
diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm
index caf02b65b9..46a295f90b 100644
--- a/code/datums/elements/_element.dm
+++ b/code/datums/elements/_element.dm
@@ -18,7 +18,7 @@
/// Activates the functionality defined by the element on the given target datum
/datum/element/proc/Attach(datum/target)
- // SHOULD_CALL_PARENT(1)
+ SHOULD_CALL_PARENT(1)
if(type == /datum/element)
return ELEMENT_INCOMPATIBLE
SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src)
@@ -28,7 +28,7 @@
/// Deactivates the functionality defines by the element on the given datum
/datum/element/proc/Detach(datum/source, force)
SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src)
- // SHOULD_CALL_PARENT(1)
+ SHOULD_CALL_PARENT(1)
UnregisterSignal(source, COMSIG_PARENT_QDELETING)
/datum/element/Destroy(force)
diff --git a/code/datums/looping_sounds/sequence.dm b/code/datums/looping_sounds/sequence.dm
index 9399619555..650b3c8d5a 100644
--- a/code/datums/looping_sounds/sequence.dm
+++ b/code/datums/looping_sounds/sequence.dm
@@ -157,7 +157,6 @@
if(!(letter in morse_alphabet))
CRASH("Encountered invalid character in morse sequence \"[letter]\".")
- return
// So I heard you like sequences...
// Play a sequence of sounds while inside the current iteration of the outer sequence.
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index c889751475..de91fd48ab 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -239,8 +239,8 @@
var/mob/def_target = null
var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain)
- if (objective&&(objective.type in objective_list) && objective:target)
- def_target = objective:target.current
+ if (objective&&(objective.type in objective_list) && objective.target)
+ def_target = objective.target.current
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
if (!new_target) return
diff --git a/code/datums/repositories/decls.dm b/code/datums/repositories/decls.dm
index 5217481ad9..c46c8b41bf 100644
--- a/code/datums/repositories/decls.dm
+++ b/code/datums/repositories/decls.dm
@@ -61,11 +61,11 @@ var/repository/decls/decls_repository = new()
fetched_decl_subtypes[decl_prototype] = .
/decl/proc/Initialize()
- //SHOULD_CALL_PARENT(TRUE)
- //SHOULD_NOT_SLEEP(TRUE)
+ SHOULD_CALL_PARENT(TRUE)
+ SHOULD_NOT_SLEEP(TRUE)
return
/decl/Destroy()
- //SHOULD_CALL_PARENT(FALSE)
+ SHOULD_CALL_PARENT(FALSE)
crash_with("Prevented attempt to delete a decl instance: [log_info_line(src)]")
return QDEL_HINT_LETMELIVE // Prevents decl destruction
diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm
index 1aef60bf05..3ce268d375 100644
--- a/code/defines/procs/AStar.dm
+++ b/code/defines/procs/AStar.dm
@@ -39,7 +39,7 @@ length to avoid portals or something i guess?? Not that they're counted right no
PriorityQueue
var/list/queue
- var/proc/comparison_function
+ var/comparison_function
New(compare)
queue = list()
@@ -123,7 +123,7 @@ PathNode
proc/PathWeightCompare(PathNode/a, PathNode/b)
return a.estimated_cost - b.estimated_cost
-proc/AStar(var/start, var/end, var/proc/adjacent, var/proc/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
+proc/AStar(var/start, var/end, var/adjacent, var/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare)
var/list/closed = list()
var/list/path
diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm
index 34b79271f7..2673774d1c 100644
--- a/code/game/antagonist/alien/borer.dm
+++ b/code/game/antagonist/alien/borer.dm
@@ -68,7 +68,7 @@ var/datum/antagonist/borer/borers
/datum/antagonist/borer/proc/get_vents()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
- if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in using_map.station_levels)
+ if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels))
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
return vents
\ No newline at end of file
diff --git a/code/game/antagonist/alien/xenomorph.dm b/code/game/antagonist/alien/xenomorph.dm
index e69db8aee7..493a5ed40c 100644
--- a/code/game/antagonist/alien/xenomorph.dm
+++ b/code/game/antagonist/alien/xenomorph.dm
@@ -32,7 +32,7 @@ var/datum/antagonist/xenos/xenomorphs
/datum/antagonist/xenos/proc/get_vents()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
- if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in using_map.station_levels)
+ if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels))
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
return vents
diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm
index e00a4a99df..8778cef2cc 100644
--- a/code/game/antagonist/antagonist.dm
+++ b/code/game/antagonist/antagonist.dm
@@ -179,7 +179,7 @@
/datum/antagonist/proc/draft_antagonist(var/datum/mind/player)
//Check if the player can join in this antag role, or if the player has already been given an antag role.
- if(!can_become_antag(player) || player.assigned_role in roundstart_restricted)
+ if(!can_become_antag(player) || (player.assigned_role in roundstart_restricted))
log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")
return 0
if(player.special_role)
diff --git a/code/game/antagonist/station/highlander.dm b/code/game/antagonist/station/highlander.dm
index f483b1df3b..708f047a57 100644
--- a/code/game/antagonist/station/highlander.dm
+++ b/code/game/antagonist/station/highlander.dm
@@ -47,7 +47,7 @@ var/datum/antagonist/highlander/highlanders
var/obj/item/weapon/card/id/W = new(player)
W.name = "[player.real_name]'s ID Card"
W.icon_state = "centcom"
- W.access = get_all_station_access().Copy
+ W.access = get_all_station_access().Copy()
W.access |= get_all_centcom_access()
W.assignment = "Highlander"
W.registered_name = player.real_name
diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm
index 2a46cfd0d9..e1b73b064b 100644
--- a/code/game/antagonist/station/rogue_ai.dm
+++ b/code/game/antagonist/station/rogue_ai.dm
@@ -54,7 +54,7 @@ var/datum/antagonist/rogue_ai/malf
if(!istype(A))
error("Non-AI mob designated malf AI! Report this.")
to_world("##ERROR: Non-AI mob designated malf AI! Report this.")
- return 0
+ return
A.setup_for_malf()
A.laws = new /datum/ai_laws/nanotrasen/malfunction
diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm
index e52cd4e6c0..a448131b85 100644
--- a/code/game/dna/genes/gene.dm
+++ b/code/game/dna/genes/gene.dm
@@ -27,7 +27,7 @@
* Is the gene active in this mob's DNA?
*/
/datum/dna/gene/proc/is_active(var/mob/M)
- return M.active_genes && type in M.active_genes
+ return (M.active_genes && (type in M.active_genes))
// Return 1 if we can activate.
// HANDLE MUTCHK_FORCED HERE!
diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm
index 0693ffdd08..efb934e504 100644
--- a/code/game/dna/genes/powers.dm
+++ b/code/game/dna/genes/powers.dm
@@ -164,7 +164,6 @@
return "hulk_[fat]_s"
else
return "hulk_[g]_s"
- return 0
OnMobLife(var/mob/living/carbon/human/M)
if(!istype(M)) return
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 89abedd726..6c499c030c 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -111,7 +111,7 @@ var/hadevent = 0
//world << sound('sound/AI/aliens.ogg')
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
- if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in using_map.station_levels)
+ if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels))
if(temp_vent.network.normal_members.len > 50) // Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent
diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm
index 526164cd58..750de2ebd5 100644
--- a/code/game/gamemodes/events/dust.dm
+++ b/code/game/gamemodes/events/dust.dm
@@ -106,7 +106,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
if(life <= 0)
walk(src,0)
qdel(src)
- return 0
+ return
return
diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm
index 6d9f5a36ff..13e3b15316 100644
--- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm
+++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm
@@ -193,8 +193,13 @@
to_chat(user, "## REACHABLE APC SYSTEMS OVERTAKEN. BYPASSING PRIMARY FIREWALL.")
sleep(300)
// Hack all APCs, including those built during hack sequence.
+<<<<<<< HEAD
for(var/obj/machinery/power/apc/A in GLOB.apcs)
if((!A.hacker || A.hacker != src) && !A.aidisabled && A.z in using_map.station_levels)
+=======
+ for(var/obj/machinery/power/apc/A in machines)
+ if((!A.hacker || A.hacker != src) && !A.aidisabled && (A.z in using_map.station_levels))
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
A.ai_hack(src)
diff --git a/code/game/gamemodes/technomancer/spell_objs_helpers.dm b/code/game/gamemodes/technomancer/spell_objs_helpers.dm
index cf83640775..27984c1b04 100644
--- a/code/game/gamemodes/technomancer/spell_objs_helpers.dm
+++ b/code/game/gamemodes/technomancer/spell_objs_helpers.dm
@@ -53,7 +53,7 @@
continue
if(L.invisibility > owner.see_invisible) // Don't target ourselves or people we can't see.
continue
- if(!L in viewers(owner)) // So we don't shoot at walls if someone is hiding behind one.
+ if(!(L in viewers(owner))) // So we don't shoot at walls if someone is hiding behind one.
continue
if(!L.stat) // Don't want to target dead people or SSDs.
chosen_target = L
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index b49c41f30f..7d0ae60d33 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -103,6 +103,7 @@
/var/list/priv_all_access
/proc/get_all_accesses()
+ RETURN_TYPE(/list)
if(!priv_all_access)
priv_all_access = get_access_ids()
@@ -110,6 +111,7 @@
/var/list/priv_station_access
/proc/get_all_station_access()
+ RETURN_TYPE(/list)
if(!priv_station_access)
priv_station_access = get_access_ids(ACCESS_TYPE_STATION)
@@ -117,6 +119,7 @@
/var/list/priv_centcom_access
/proc/get_all_centcom_access()
+ RETURN_TYPE(/list)
if(!priv_centcom_access)
priv_centcom_access = get_access_ids(ACCESS_TYPE_CENTCOM)
@@ -124,6 +127,7 @@
/var/list/priv_syndicate_access
/proc/get_all_syndicate_access()
+ RETURN_TYPE(/list)
if(!priv_syndicate_access)
priv_syndicate_access = get_access_ids(ACCESS_TYPE_SYNDICATE)
@@ -131,6 +135,7 @@
/var/list/priv_private_access
/proc/get_all_private_access()
+ RETURN_TYPE(/list)
if(!priv_private_access)
priv_private_access = get_access_ids(ACCESS_TYPE_PRIVATE)
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index dde8b545b2..08fe89a308 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -556,7 +556,7 @@
"intdefault"= (info["internal"] == 0),
))
- data["scrubbers"] = list()
+ var/list/scrubbers = list()
for(var/id_tag in alarm_area.air_scrub_names)
var/long_name = alarm_area.air_scrub_names[id_tag]
var/list/info = alarm_area.air_scrub_info[id_tag]
@@ -570,12 +570,13 @@
"panic" = info["panic"],
"filters" = list()
))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Oxygen", "command" = "o2_scrub", "val" = info["filter_o2"]))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Nitrogen", "command" = "n2_scrub", "val" = info["filter_n2"]))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Toxin" , "command" = "tox_scrub","val" = info["filter_phoron"]))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]))
- data["scrubbers"][data["scrubbers"].len]["filters"] += list(list("name" = "Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Oxygen", "command" = "o2_scrub", "val" = info["filter_o2"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Nitrogen", "command" = "n2_scrub", "val" = info["filter_n2"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Toxin" , "command" = "tox_scrub","val" = info["filter_phoron"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]))
+ scrubbers[scrubbers.len]["filters"] += list(list("name" = "Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"]))
+ data["scrubbers"] = scrubbers
var/list/modes = list()
data["mode"] = mode
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index 55523ed079..bfe95bada7 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -33,15 +33,13 @@
ui.open()
/obj/machinery/computer/area_atmos/tgui_data(mob/user)
- var/list/data = list()
-
- data["scrubbers"] = list()
+ var/list/working = list()
for(var/id in connectedscrubbers)
var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = connectedscrubbers[id]
if(!validscrubber(scrubber))
connectedscrubbers -= scrubber
continue
- data["scrubbers"].Add(list(list(
+ working.Add(list(list(
"id" = id,
"name" = scrubber.name,
"on" = scrubber.on,
@@ -50,8 +48,8 @@
"load" = scrubber.last_power_draw,
"area" = get_area(scrubber),
)))
-
- return data
+
+ return list("scrubbers" = working)
/obj/machinery/computer/area_atmos/tgui_act(action, params)
if(..())
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 955ccf596a..68a93322c6 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -70,7 +70,7 @@
/obj/machinery/camera/Destroy()
if(isMotion())
- unsense_proximity(callback = .HasProximity)
+ unsense_proximity(callback = /atom/proc/HasProximity)
deactivate(null, 0) //kick anyone viewing out
if(assembly)
qdel(assembly)
@@ -361,7 +361,6 @@
for(var/obj/machinery/camera/C in oview(4, M))
if(C.can_use()) // check if camera disabled
return C
- break
return null
/proc/near_range_camera(var/mob/M)
@@ -369,7 +368,6 @@
for(var/obj/machinery/camera/C in range(4, M))
if(C.can_use()) // check if camera disabled
return C
- break
return null
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index bb3cdfb4ed..cef3a344bb 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -216,7 +216,7 @@ var/global/list/engineering_networks = list(
assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly))
setPowerUsage()
START_MACHINE_PROCESSING(src)
- sense_proximity(callback = .HasProximity)
+ sense_proximity(callback = /atom/proc/HasProximity)
update_coverage()
/obj/machinery/camera/proc/setPowerUsage()
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index 60541e0fe3..44f50a4644 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -6,7 +6,7 @@
/mob/living/silicon/ai/var/stored_locations[0]
/proc/InvalidPlayerTurf(turf/T as turf)
- return !(T && T.z in using_map.player_levels)
+ return !(T?.z in using_map.player_levels)
/mob/living/silicon/ai/proc/get_camera_list()
if(src.stat == 2)
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 179f8e0e16..77e7e037a9 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -23,6 +23,7 @@
/obj/item/clothing/head/cowboy_hat/small = 2,
/obj/item/toy/stickhorse = 2
)
+ var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something.
/obj/machinery/computer/arcade/Initialize()
. = ..()
@@ -35,17 +36,18 @@
return INITIALIZE_HINT_QDEL
/obj/machinery/computer/arcade/proc/prizevend()
- if(!(contents-circuit).len)
+ if(LAZYLEN(special_prizes)) // Downstream wanted the 'win things inside contents sans circuitboard' feature kept.
+ var/atom/movable/AM = pick_n_take(special_prizes)
+ AM.forceMove(get_turf(src))
+ special_prizes -= AM
+
+ else if(LAZYLEN(prizes))
var/prizeselect = pickweight(prizes)
new prizeselect(src.loc)
if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit
new /obj/item/clothing/head/syndicatefake(src.loc)
- else
- var/atom/movable/prize = pick(contents-circuit)
- prize.loc = src.loc
-
/obj/machinery/computer/arcade/attack_ai(mob/user as mob)
return attack_hand(user)
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 304c254837..24a7d21a5f 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -14,7 +14,7 @@ var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert/New()
..()
- atmosphere_alarm.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
+ atmosphere_alarm.register_alarm(src, /atom/proc/update_icon)
/obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister_alarm(src)
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 430b42591c..87b35e8cd0 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -98,18 +98,19 @@
data["linkedServer"]["active"] = linkedServer.active
data["linkedServer"]["broke"] = linkedServer.stat & (NOPOWER|BROKEN)
- data["linkedServer"]["pda_msgs"] = list()
+ var/list/pda_msgs = list()
for(var/datum/data_pda_msg/pda in linkedServer.pda_msgs)
- data["linkedServer"]["pda_msgs"].Add(list(list(
+ pda_msgs.Add(list(list(
"ref" = "\ref[pda]",
"sender" = pda.sender,
"recipient" = pda.recipient,
"message" = pda.message,
)))
+ data["linkedServer"]["pda_msgs"] = pda_msgs
- data["linkedServer"]["rc_msgs"] = list()
+ var/list/rc_msgs = list()
for(var/datum/data_rc_msg/rc in linkedServer.rc_msgs)
- data["linkedServer"]["rc_msgs"].Add(list(list(
+ rc_msgs.Add(list(list(
"ref" = "\ref[rc]",
"sender" = rc.send_dpt,
"recipient" = rc.rec_dpt,
@@ -118,15 +119,17 @@
"id_auth" = rc.id_auth,
"priority" = rc.priority,
)))
-
+ data["linkedServer"]["rc_msgs"] = rc_msgs
+
var/spamIndex = 0
- data["linkedServer"]["spamFilter"] = list()
+ var/list/spamfilter = list()
for(var/token in linkedServer.spamfilter)
spamIndex++
- data["linkedServer"]["spamFilter"].Add(list(list(
+ spamfilter.Add(list(list(
"index" = spamIndex,
"token" = token,
)))
+ data["linkedServer"]["spamFilter"] = spamfilter
//Get out list of viable PDAs
var/list/obj/item/device/pda/sendPDAs = list()
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index c26d2c5365..fa0a2ebce0 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -30,11 +30,8 @@
ui.open()
/obj/machinery/computer/prisoner/tgui_data(mob/user)
- var/list/data = list()
-
- data["locked"] = !screen
- data["chemImplants"] = list()
- data["trackImplants"] = list()
+ var/list/chemImplants = list()
+ var/list/trackImplants = list()
if(screen)
for(var/obj/item/weapon/implant/chem/C in all_chem_implants)
var/turf/T = get_turf(C)
@@ -42,7 +39,7 @@
continue
if(!C.implanted)
continue
- data["chemImplants"].Add(list(list(
+ chemImplants.Add(list(list(
"host" = C.imp_in,
"units" = C.reagents.total_volume,
"ref" = "\ref[C]"
@@ -59,14 +56,14 @@
loc_display = T.loc
if(track.malfunction)
loc_display = pick(teleportlocs)
- data["trackImplants"].Add(list(list(
+ trackImplants.Add(list(list(
"host" = L,
"ref" = "\ref[track]",
"id" = "[track.id]",
"loc" = "[loc_display]",
)))
- return data
+ return list("locked" = !screen, "chemImplants" = chemImplants, "trackImplants" = trackImplants)
/obj/machinery/computer/prisoner/tgui_act(action, list/params)
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 5cb000484d..051a8e368b 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -19,7 +19,7 @@
/obj/machinery/computer/station_alert/Initialize()
alarm_monitor = new monitor_type(src)
- alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
+ alarm_monitor.register_alarm(src, /atom/proc/update_icon)
. = ..()
/obj/machinery/computer/station_alert/Destroy()
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index dcf32f9caa..c6ede9ac37 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -1,257 +1,6 @@
-//Config stuff
-#define SYNDICATE_ELITE_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves.
-#define SYNDICATE_ELITE_STATION_AREATYPE "/area/shuttle/syndicate_elite/station" //Type of the spec ops shuttle area for station
-#define SYNDICATE_ELITE_DOCK_AREATYPE "/area/shuttle/syndicate_elite/mothership" //Type of the spec ops shuttle area for dock
-
-var/syndicate_elite_shuttle_moving_to_station = 0
-var/syndicate_elite_shuttle_moving_to_mothership = 0
-var/syndicate_elite_shuttle_at_station = 0
-var/syndicate_elite_shuttle_can_send = 1
-var/syndicate_elite_shuttle_time = 0
-var/syndicate_elite_shuttle_timeleft = 0
-
/obj/machinery/computer/syndicate_elite_shuttle
name = "elite syndicate squad shuttle control console"
icon_keyboard = "syndie_key"
icon_screen = "syndishuttle"
light_color = "#00ffff"
- req_access = list(access_cent_specops)
- var/temp = null
- var/hacked = 0
- var/allowedtocall = 0
-
-/proc/syndicate_elite_process()
- var/area/syndicate_mothership/control/syndicate_ship = locate()//To find announcer. This area should exist for this proc to work.
- var/area/syndicate_mothership/elite_squad/elite_squad = locate()//Where is the specops area located?
- var/mob/living/silicon/decoy/announcer = locate() in syndicate_ship//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
-
- var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
- var/message = "THE SYNDICATE ELITE SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown.
- if(announcer)
- announcer.say(message)
- // message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
- // announcer.say(message)
-
- while(syndicate_elite_shuttle_time - world.timeofday > 0)
- var/ticksleft = syndicate_elite_shuttle_time - world.timeofday
-
- if(ticksleft > 1e5)
- syndicate_elite_shuttle_time = world.timeofday // midnight rollover
- syndicate_elite_shuttle_timeleft = (ticksleft / 10)
-
- //All this does is announce the time before launch.
- if(announcer)
- var/rounded_time_left = round(syndicate_elite_shuttle_timeleft)//Round time so that it will report only once, not in fractions.
- if(rounded_time_left in message_tracker)//If that time is in the list for message announce.
- message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN"
- if(rounded_time_left==0)
- message = "ALERT: TAKEOFF"
- announcer.say(message)
- message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
- //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
-
- sleep(5)
-
- syndicate_elite_shuttle_moving_to_station = 0
- syndicate_elite_shuttle_moving_to_mothership = 0
-
- syndicate_elite_shuttle_at_station = 1
- if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
-
- if (!syndicate_elite_can_move())
- to_chat(usr, "The Syndicate Elite shuttle is unable to leave.")
- return
-
- sleep(600)
-/*
- //Begin Marauder launchpad.
- spawn(0)//So it parallel processes it.
- for(var/obj/machinery/door/poddoor/M in elite_squad)
- switch(M.id)
- if("ASSAULT0")
- spawn(10)//1 second delay between each.
- M.open()
- if("ASSAULT1")
- spawn(20)
- M.open()
- if("ASSAULT2")
- spawn(30)
- M.open()
- if("ASSAULT3")
- spawn(40)
- M.open()
-
- sleep(10)
-
- var/spawn_marauder[] = new()
- for(var/obj/effect/landmark/L in landmarks_list)
- if(L.name == "Marauder Entry")
- spawn_marauder.Add(L)
- for(var/obj/effect/landmark/L in landmarks_list)
- if(L.name == "Marauder Exit")
- var/obj/effect/portal/P = new(L.loc)
- P.invisibility = 101//So it is not seen by anyone.
- P.failchance = 0//So it has no fail chance when teleporting.
- P.target = pick(spawn_marauder)//Where the marauder will arrive.
- spawn_marauder.Remove(P.target)
-
- sleep(10)
-
- for(var/obj/machinery/mass_driver/M in elite_squad)
- switch(M.id)
- if("ASSAULT0")
- spawn(10)
- M.drive()
- if("ASSAULT1")
- spawn(20)
- M.drive()
- if("ASSAULT2")
- spawn(30)
- M.drive()
- if("ASSAULT3")
- spawn(40)
- M.drive()
-
- sleep(50)//Doors remain open for 5 seconds.
-
- for(var/obj/machinery/door/poddoor/M in elite_squad)
- switch(M.id)//Doors close at the same time.
- if("ASSAULT0")
- spawn(0)
- M.close()
- if("ASSAULT1")
- spawn(0)
- M.close()
- if("ASSAULT2")
- spawn(0)
- M.close()
- if("ASSAULT3")
- spawn(0)
- M.close()
- */
- elite_squad.readyreset()//Reset firealarm after the team launched.
- //End Marauder launchpad.
-/*
- var/obj/explosionmarker = locate("Syndicate Breach Area")
- if(explosionmarker)
- var/turf/simulated/T = explosionmarker.loc
- if(T)
- explosion(T,4,6,8,10,0)
-
- sleep(40)
-// proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
-
-*/
- var/area/start_location = locate(/area/shuttle/syndicate_elite/mothership)
- var/area/end_location = locate(/area/shuttle/syndicate_elite/station)
-
- var/list/dstturfs = list()
- var/throwy = world.maxy
-
- for(var/turf/T in end_location)
- dstturfs = T
- if(T.y < throwy)
- throwy = T.y
-
- // hey you, get out of the way!
- for(var/turf/T in dstturfs)
- // find the turf to move things to
- var/turf/D = locate(T.x, throwy - 1, 1)
- //var/turf/E = get_step(D, SOUTH)
- for(var/atom/movable/AM as mob|obj in T)
- AM.Move(D)
- if(istype(T, /turf/simulated))
- qdel(T)
-
- for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area...
- bug.gib()
-
- for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug...
- pest.gib()
-
- start_location.move_contents_to(end_location)
-
- for(var/turf/T in get_area_turfs(end_location) )
- var/mob/M = locate(/mob) in T
- to_chat(M, "You have arrived to [station_name()]. Commence operation!")
-
-/proc/syndicate_elite_can_move()
- if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0
- else return 1
-
-/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/syndicate_elite_shuttle/emag_act(var/remaining_charges, var/mob/user)
- to_chat(user, "The electronic systems in this console are far too advanced for your primitive hacking peripherals.")
-
-/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob)
- if(!allowed(user))
- to_chat(user, "Access Denied.")
- return
-
-// if (sent_syndicate_strike_team == 0)
-// to_chat(usr, "The strike team has not yet deployed.")
-// return
-
- if(..())
- return
-
- user.set_machine(src)
- var/dat
- if (temp)
- dat = temp
- else
- dat = {"
Special Operations Shuttle
"
+ for(var/t in typesof(/area))
+ master += text("[]\n", t)
+ //Foreach goto(26)
+ src << browse(master)
+ return
+*/
+
+/mob/verb/memory()
+ set name = "Notes"
+ set category = "IC"
+ if(mind)
+ mind.show_memory(src)
+ else
+ to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/verb/add_memory(msg as message)
+ set name = "Add Note"
+ set category = "IC"
+
+ msg = sanitize(msg)
+
+ if(mind)
+ mind.store_memory(msg)
+ else
+ to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.")
+
+/mob/proc/store_memory(msg as message, popup, sane = 1)
+ msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+
+ if (sane)
+ msg = sanitize(msg)
+
+ if (length(memory) == 0)
+ memory += msg
+ else
+ memory += "
[msg]"
+
+ if (popup)
+ memory()
+
+/mob/proc/update_flavor_text()
+ set src in usr
+ if(usr != src)
+ to_chat(usr, "No.")
+ var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0)
+
+ if(msg != null)
+ flavor_text = msg
+
+/mob/proc/warn_flavor_changed()
+ if(flavor_text && flavor_text != "") // don't spam people that don't use it!
+ to_chat(src, "OOC Warning:
")
+ to_chat(src, "Your flavor text is likely out of date! Change")
+
+/mob/proc/print_flavor_text()
+ if (flavor_text && flavor_text != "")
+ var/msg = replacetext(flavor_text, "\n", " ")
+ if(length(msg) <= 40)
+ return "[msg]"
+ else
+ return "[copytext_preserve_html(msg, 1, 37)]... More..."
+
+/*
+/mob/verb/help()
+ set name = "Help"
+ src << browse('html/help.html', "window=help")
+ return
+*/
+
+/mob/proc/set_respawn_timer(var/time)
+ // Try to figure out what time to use
+
+ // Special cases, can never respawn
+ if(ticker?.mode?.deny_respawn)
+ time = -1
+ else if(!config.abandon_allowed)
+ time = -1
+ else if(!config.respawn)
+ time = -1
+
+ // Special case for observing before game start
+ else if(ticker?.current_state <= GAME_STATE_SETTING_UP)
+ time = 1 MINUTE
+
+ // Wasn't given a time, use the config time
+ else if(!time)
+ time = config.respawn_time
+
+ var/keytouse = ckey
+ // Try harder to find a key to use
+ if(!keytouse && key)
+ keytouse = ckey(key)
+ else if(!keytouse && mind?.key)
+ keytouse = ckey(mind.key)
+
+ GLOB.respawn_timers[keytouse] = world.time + time
+
+/mob/observer/dead/set_respawn_timer()
+ if(config.antag_hud_restricted && has_enabled_antagHUD)
+ ..(-1)
+ else
+ return // Don't set it, no need
+
+/mob/verb/abandon_mob()
+ set name = "Return to Menu"
+ set category = "OOC"
+
+ if(stat != DEAD || !ticker)
+ to_chat(usr, "You must be dead to use this!")
+ return
+
+ // Final chance to abort "respawning"
+ if(mind && timeofdeath) // They had spawned before
+ var/choice = alert(usr, "Returning to the menu will prevent your character from being revived in-round. Are you sure?", "Confirmation", "No, wait", "Yes, leave")
+ if(choice == "No, wait")
+ return
+
+ // Beyond this point, you're going to respawn
+ to_chat(usr, config.respawn_message)
+
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ return
+ client.screen.Cut()
+ client.screen += client.void
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ return
+
+ announce_ghost_joinleave(client, 0)
+
+ var/mob/new_player/M = new /mob/new_player()
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ qdel(M)
+ return
+
+ M.key = key
+ if(M.mind)
+ M.mind.reset()
+ return
+
+/client/verb/changes()
+ set name = "Changelog"
+ set category = "OOC"
+ src << browse('html/changelog.html', "window=changes;size=675x650")
+ if(prefs.lastchangelog != changelog_hash)
+ prefs.lastchangelog = changelog_hash
+ SScharacter_setup.queue_preferences_save(prefs)
+ winset(src, "rpane.changelog", "background-color=none;font-style=;")
+
+/mob/verb/observe()
+ set name = "Observe"
+ set category = "OOC"
+ var/is_admin = 0
+
+ if(client.holder && (client.holder.rights & R_ADMIN|R_EVENT))
+ is_admin = 1
+ else if(stat != DEAD || istype(src, /mob/new_player))
+ to_chat(usr, "You must be observing to use this!")
+ return
+
+ if(is_admin && stat == DEAD)
+ is_admin = 0
+
+ var/list/targets = list()
+
+
+ targets += observe_list_format(nuke_disks)
+ targets += observe_list_format(all_singularities)
+ targets += getmobs()
+ targets += observe_list_format(sortAtom(mechas_list))
+ targets += observe_list_format(SSshuttles.ships)
+
+ client.perspective = EYE_PERSPECTIVE
+
+ var/eye_name = null
+
+ var/ok = "[is_admin ? "Admin Observe" : "Observe"]"
+ eye_name = input("Please, select a player!", ok, null, null) as null|anything in targets
+
+ if (!eye_name)
+ return
+
+ var/mob/mob_eye = targets[eye_name]
+
+ if(client && mob_eye)
+ client.eye = mob_eye
+ if (is_admin)
+ client.adminobs = 1
+ if(mob_eye == client.mob || client.eye == client.mob)
+ client.adminobs = 0
+
+/mob/verb/cancel_camera()
+ set name = "Cancel Camera View"
+ set category = "OOC"
+ unset_machine()
+ reset_view(null)
+
+/mob/Topic(href, href_list)
+ if(href_list["mach_close"])
+ var/t1 = text("window=[href_list["mach_close"]]")
+ unset_machine()
+ src << browse(null, t1)
+
+ if(href_list["flavor_more"])
+ usr << browse(text("[] []", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name))
+ onclose(usr, "[name]")
+ if(href_list["flavor_change"])
+ update_flavor_text()
+// ..()
+ return
+
+
+/mob/proc/pull_damage()
+ return 0
+
+/mob/verb/stop_pulling()
+
+ set name = "Stop Pulling"
+ set category = "IC"
+
+ if(pulling)
+ if(ishuman(pulling))
+ var/mob/living/carbon/human/H = pulling
+ visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H))
+ if(!H.stat)
+ to_chat(H, SPAN_WARNING("\The [src] lets go of you."))
+ pulling.pulledby = null
+ pulling = null
+ if(pullin)
+ pullin.icon_state = "pull0"
+
+/mob/proc/start_pulling(var/atom/movable/AM)
+
+ if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
+ return
+
+ if (AM.anchored)
+ to_chat(src, "It won't budge!")
+ return
+
+ var/mob/M = AM
+ if(ismob(AM))
+
+ if(!can_pull_mobs || !can_pull_size)
+ to_chat(src, "They won't budge!")
+ return
+
+ if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER))
+ to_chat(src, "[M] is too large for you to move!")
+ return
+
+ if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER))
+ to_chat(src, "[M] is too heavy for you to move!")
+ return
+
+ // If your size is larger than theirs and you have some
+ // kind of mob pull value AT ALL, you will be able to pull
+ // them, so don't bother checking that explicitly.
+
+ if(M.grabbed_by.len)
+ // Only start pulling when nobody else has a grab on them
+ . = 1
+ for(var/obj/item/weapon/grab/G in M.grabbed_by)
+ if(G.assailant != usr)
+ . = 0
+ else
+ qdel(G)
+ if(!.)
+ to_chat(src, "Somebody has a grip on them!")
+ return
+
+ if(!iscarbon(src))
+ M.LAssailant = null
+ else
+ M.LAssailant = usr
+
+ else if(isobj(AM))
+ var/obj/I = AM
+ if(!can_pull_size || can_pull_size < I.w_class)
+ to_chat(src, "It won't budge!")
+ return
+
+ if(pulling)
+ var/pulling_old = pulling
+ stop_pulling()
+ // Are we pulling the same thing twice? Just stop pulling.
+ if(pulling_old == AM)
+ return
+
+ src.pulling = AM
+ AM.pulledby = src
+
+ if(pullin)
+ pullin.icon_state = "pull1"
+
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ if(H.lying) // If they're on the ground we're probably dragging their arms to move them
+ visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s arms."), SPAN_NOTICE("You lean down and grip \the [H]'s arms."), exclude_mobs = list(H))
+ if(!H.stat)
+ to_chat(H, SPAN_WARNING("\The [src] leans down and grips your arms."))
+ else //Otherwise we're probably just holding their arm to lead them somewhere
+ visible_message(SPAN_WARNING("\The [src] grips \the [H]'s arm."), SPAN_NOTICE("You grip \the [H]'s arm."), exclude_mobs = list(H))
+ if(!H.stat)
+ to_chat(H, SPAN_WARNING("\The [src] grips your arm."))
+ playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25) //Quieter than hugging/grabbing but we still want some audio feedback
+
+ if(H.pull_damage())
+ to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.")
+
+ //Attempted fix for people flying away through space when cuffed and dragged.
+ if(ismob(AM))
+ var/mob/pulled = AM
+ pulled.inertia_dir = 0
+
+/mob/proc/can_use_hands()
+ return
+
+/mob/proc/is_active()
+ return (0 >= usr.stat)
+
+/mob/proc/is_dead()
+ return stat == DEAD
+
+/mob/proc/is_mechanical()
+ if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI"))
+ return 1
+ return istype(src, /mob/living/silicon) || get_species() == "Machine"
+
+/mob/proc/is_ready()
+ return client && !!mind
+
+/mob/proc/get_gender()
+ return gender
+
+/mob/proc/see(message)
+ if(!is_active())
+ return 0
+ to_chat(src,message)
+ return 1
+
+/mob/proc/show_viewers(message)
+ for(var/mob/M in viewers())
+ M.see(message)
+
+/mob/Stat()
+ ..()
+ . = (is_client_active(10 MINUTES))
+
+ if(.)
+ if(statpanel("Status"))
+ stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)")
+ if(ticker && ticker.current_state != GAME_STATE_PREGAME)
+ stat("Station Time", stationtime2text())
+ stat("Station Date", stationdate2text())
+ stat("Round Duration", roundduration2text())
+
+ if(client.holder)
+ if(statpanel("Status"))
+ stat("Location:", "([x], [y], [z]) [loc]")
+ stat("CPU:","[world.cpu]")
+ stat("Instances:","[world.contents.len]")
+ stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)")
+
+ if(statpanel("MC"))
+ stat("Location:", "([x], [y], [z]) [loc]")
+ stat("CPU:","[world.cpu]")
+ stat("Instances:","[world.contents.len]")
+ stat("World Time:", world.time)
+ stat("Real time of day:", REALTIMEOFDAY)
+ stat(null)
+ if(GLOB)
+ GLOB.stat_entry()
+ else
+ stat("Globals:", "ERROR")
+ if(Master)
+ Master.stat_entry()
+ else
+ stat("Master Controller:", "ERROR")
+ if(Failsafe)
+ Failsafe.stat_entry()
+ else
+ stat("Failsafe Controller:", "ERROR")
+ if(Master)
+ stat(null)
+ for(var/datum/controller/subsystem/SS in Master.subsystems)
+ SS.stat_entry()
+
+ if(statpanel("Tickets"))
+ GLOB.ahelp_tickets.stat_entry()
+
+ if(length(GLOB.sdql2_queries))
+ if(statpanel("SDQL2"))
+ stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj)
+ for(var/i in GLOB.sdql2_queries)
+ var/datum/SDQL2_query/Q = i
+ Q.generate_stat()
+
+ if(listed_turf && client)
+ if(!TurfAdjacent(listed_turf))
+ listed_turf = null
+ else
+ if(statpanel("Turf"))
+ stat(listed_turf)
+ for(var/atom/A in listed_turf)
+ if(!A.mouse_opacity)
+ continue
+ if(A.invisibility > see_invisible)
+ continue
+ if(is_type_in_list(A, shouldnt_see))
+ continue
+ stat(A)
+
+
+// facing verbs
+/mob/proc/canface()
+ if(!canmove) return 0
+ if(stat) return 0
+ if(anchored) return 0
+ if(transforming) return 0
+ return 1
+
+// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet.
+/mob/proc/can_stand_overridden()
+ return 0
+
+//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
+/mob/proc/update_canmove()
+ return canmove
+
+
+/mob/proc/facedir(var/ndir)
+ if(!canface() || (client && (client.moving || !checkMoveCooldown())))
+ return 0
+ set_dir(ndir)
+ if(buckled && buckled.buckle_movable)
+ buckled.set_dir(ndir)
+ setMoveCooldown(movement_delay())
+ return 1
+
+
+/mob/verb/eastface()
+ set hidden = 1
+ return facedir(client.client_dir(EAST))
+
+
+/mob/verb/westface()
+ set hidden = 1
+ return facedir(client.client_dir(WEST))
+
+
+/mob/verb/northface()
+ set hidden = 1
+ return facedir(client.client_dir(NORTH))
+
+
+/mob/verb/southface()
+ set hidden = 1
+ return facedir(client.client_dir(SOUTH))
+
+
+//This might need a rename but it should replace the can this mob use things check
+/mob/proc/IsAdvancedToolUser()
+ return 0
+
+/mob/proc/Stun(amount)
+ if(status_flags & CANSTUN)
+ facing_dir = null
+ stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
+ if(status_flags & CANSTUN)
+ stunned = max(amount,0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/AdjustStunned(amount)
+ if(status_flags & CANSTUN)
+ stunned = max(stunned + amount,0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/Weaken(amount)
+ if(status_flags & CANWEAKEN)
+ facing_dir = null
+ weakened = max(max(weakened,amount),0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/SetWeakened(amount)
+ if(status_flags & CANWEAKEN)
+ weakened = max(amount,0)
+ update_canmove() //can you guess what this does yet?
+ return
+
+/mob/proc/AdjustWeakened(amount)
+ if(status_flags & CANWEAKEN)
+ weakened = max(weakened + amount,0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/Paralyse(amount)
+ if(status_flags & CANPARALYSE)
+ facing_dir = null
+ paralysis = max(max(paralysis,amount),0)
+ return
+
+/mob/proc/SetParalysis(amount)
+ if(status_flags & CANPARALYSE)
+ paralysis = max(amount,0)
+ return
+
+/mob/proc/AdjustParalysis(amount)
+ if(status_flags & CANPARALYSE)
+ paralysis = max(paralysis + amount,0)
+ return
+
+/mob/proc/Sleeping(amount)
+ facing_dir = null
+ sleeping = max(max(sleeping,amount),0)
+ return
+
+/mob/proc/SetSleeping(amount)
+ sleeping = max(amount,0)
+ return
+
+/mob/proc/AdjustSleeping(amount)
+ sleeping = max(sleeping + amount,0)
+ return
+
+/mob/proc/Confuse(amount)
+ confused = max(max(confused,amount),0)
+ return
+
+/mob/proc/SetConfused(amount)
+ confused = max(amount,0)
+ return
+
+/mob/proc/AdjustConfused(amount)
+ confused = max(confused + amount,0)
+ return
+
+/mob/proc/Blind(amount)
+ eye_blind = max(max(eye_blind,amount),0)
+ return
+
+/mob/proc/SetBlinded(amount)
+ eye_blind = max(amount,0)
+ return
+
+/mob/proc/AdjustBlinded(amount)
+ eye_blind = max(eye_blind + amount,0)
+ return
+
+/mob/proc/Resting(amount)
+ facing_dir = null
+ resting = max(max(resting,amount),0)
+ update_canmove()
+ return
+
+/mob/proc/SetResting(amount)
+ resting = max(amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustResting(amount)
+ resting = max(resting + amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustLosebreath(amount)
+ losebreath = CLAMP(losebreath + amount, 0, 25)
+
+/mob/proc/SetLosebreath(amount)
+ losebreath = CLAMP(amount, 0, 25)
+
+/mob/proc/get_species()
+ return ""
+
+/mob/proc/flash_weak_pain()
+ flick("weak_pain",pain)
+
+/mob/proc/get_visible_implants(var/class = 0)
+ var/list/visible_implants = list()
+ for(var/obj/item/O in embedded)
+ if(O.w_class > class)
+ visible_implants += O
+ return visible_implants
+
+/mob/proc/embedded_needs_process()
+ return (embedded.len > 0)
+
+mob/proc/yank_out_object()
+ set category = "Object"
+ set name = "Yank out object"
+ set desc = "Remove an embedded item at the cost of bleeding and pain."
+ set src in view(1)
+
+ if(!isliving(usr) || !usr.checkClickCooldown())
+ return
+ usr.setClickCooldown(20)
+
+ if(usr.stat == 1)
+ to_chat(usr, "You are unconcious and cannot do that!")
+ return
+
+ if(usr.restrained())
+ to_chat(usr, "You are restrained and cannot do that!")
+ return
+
+ var/mob/S = src
+ var/mob/U = usr
+ var/list/valid_objects = list()
+ var/self = null
+
+ if(S == U)
+ self = 1 // Removing object from yourself.
+
+ valid_objects = get_visible_implants(0)
+ if(!valid_objects.len)
+ if(self)
+ to_chat(src, "You have nothing stuck in your body that is large enough to remove.")
+ else
+ to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.")
+ return
+
+ var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
+
+ if(self)
+ to_chat(src, "You attempt to get a good grip on [selection] in your body.")
+ else
+ to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.")
+
+ if(!do_after(U, 30))
+ return
+ if(!selection || !S || !U)
+ return
+
+ if(self)
+ visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.")
+ else
+ visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.")
+ valid_objects = get_visible_implants(0)
+ if(valid_objects.len == 1) //Yanking out last object - removing verb.
+ src.verbs -= /mob/proc/yank_out_object
+ clear_alert("embeddedobject")
+
+ if(ishuman(src))
+ var/mob/living/carbon/human/H = src
+ var/obj/item/organ/external/affected
+
+ for(var/obj/item/organ/external/organ in H.organs) //Grab the organ holding the implant.
+ for(var/obj/item/O in organ.implants)
+ if(O == selection)
+ affected = organ
+
+ affected.implants -= selection
+ H.shock_stage+=20
+ affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction")
+
+ if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-.
+ var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15))
+ affected.wounds += I
+ H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50)
+
+ if (ishuman(U))
+ var/mob/living/carbon/human/human_user = U
+ human_user.bloody_hands(H)
+
+ else if(issilicon(src))
+ var/mob/living/silicon/robot/R = src
+ R.embedded -= selection
+ R.adjustBruteLoss(5)
+ R.adjustFireLoss(10)
+
+ selection.forceMove(get_turf(src))
+ U.put_in_hands(selection)
+
+ for(var/obj/item/weapon/O in pinned)
+ if(O == selection)
+ pinned -= O
+ if(!pinned.len)
+ anchored = 0
+ return 1
+
+//Check for brain worms in head.
+/mob/proc/has_brain_worms()
+
+ for(var/I in contents)
+ if(istype(I,/mob/living/simple_mob/animal/borer))
+ return I
+
+ return 0
+
+/mob/proc/updateicon()
+ return
+
+// Please always use this proc, never just set the var directly.
+/mob/proc/set_stat(var/new_stat)
+ . = (stat != new_stat)
+ stat = new_stat
+
+/mob/verb/face_direction()
+
+ set name = "Face Direction"
+ set category = "IC"
+ set src = usr
+
+ set_face_dir()
+
+ if(!facing_dir)
+ to_chat(usr, "You are now not facing anything.")
+ else
+ to_chat(usr, "You are now facing [dir2text(facing_dir)].")
+
+/mob/proc/set_face_dir(var/newdir)
+ if(newdir == facing_dir)
+ facing_dir = null
+ else if(newdir)
+ set_dir(newdir)
+ facing_dir = newdir
+ else if(facing_dir)
+ facing_dir = null
+ else
+ set_dir(dir)
+ facing_dir = dir
+
+/mob/set_dir()
+ if(facing_dir)
+ if(!canface() || lying || buckled || restrained())
+ facing_dir = null
+ else if(dir != facing_dir)
+ return ..(facing_dir)
+ else
+ return ..()
+
+/mob/verb/northfaceperm()
+ set hidden = 1
+ set_face_dir(client.client_dir(NORTH))
+
+/mob/verb/southfaceperm()
+ set hidden = 1
+ set_face_dir(client.client_dir(SOUTH))
+
+/mob/verb/eastfaceperm()
+ set hidden = 1
+ set_face_dir(client.client_dir(EAST))
+
+/mob/verb/westfaceperm()
+ set hidden = 1
+ set_face_dir(client.client_dir(WEST))
+
+/mob/proc/adjustEarDamage()
+ return
+
+/mob/proc/setEarDamage()
+ return
+
+// Set client view distance (size of client's screen). Returns TRUE if anything changed.
+/mob/proc/set_viewsize(var/new_view = world.view)
+ if (client && new_view != client.view)
+ client.view = new_view
+ return TRUE
+ return FALSE
+
+//Throwing stuff
+
+/mob/proc/toggle_throw_mode()
+ if (src.in_throw_mode)
+ throw_mode_off()
+ else
+ throw_mode_on()
+
+/mob/proc/throw_mode_off()
+ src.in_throw_mode = 0
+ if(src.throw_icon) //in case we don't have the HUD and we use the hotkey
+ src.throw_icon.icon_state = "act_throw_off"
+
+/mob/proc/throw_mode_on()
+ src.in_throw_mode = 1
+ if(src.throw_icon)
+ src.throw_icon.icon_state = "act_throw_on"
+
+/mob/proc/isSynthetic()
+ return 0
+
+/mob/proc/is_muzzled()
+ return 0
+
+//Exploitable Info Update
+
+/mob/proc/amend_exploitable(var/obj/item/I)
+ if(istype(I))
+ exploit_addons |= I
+ var/exploitmsg = html_decode("\n" + "Has " + I.name + ".")
+ exploit_record += exploitmsg
+
+/client/proc/check_has_body_select()
+ return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel)
+
+/client/verb/body_toggle_head()
+ set name = "body-toggle-head"
+ set hidden = 1
+ toggle_zone_sel(list(BP_HEAD, O_EYES, O_MOUTH))
+
+/client/verb/body_r_arm()
+ set name = "body-r-arm"
+ set hidden = 1
+ toggle_zone_sel(list(BP_R_ARM,BP_R_HAND))
+
+/client/verb/body_l_arm()
+ set name = "body-l-arm"
+ set hidden = 1
+ toggle_zone_sel(list(BP_L_ARM,BP_L_HAND))
+
+/client/verb/body_chest()
+ set name = "body-chest"
+ set hidden = 1
+ toggle_zone_sel(list(BP_TORSO))
+
+/client/verb/body_groin()
+ set name = "body-groin"
+ set hidden = 1
+ toggle_zone_sel(list(BP_GROIN))
+
+/client/verb/body_r_leg()
+ set name = "body-r-leg"
+ set hidden = 1
+ toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT))
+
+/client/verb/body_l_leg()
+ set name = "body-l-leg"
+ set hidden = 1
+ toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT))
+
+/client/proc/toggle_zone_sel(list/zones)
+ if(!check_has_body_select())
+ return
+ var/obj/screen/zone_sel/selector = mob.zone_sel
+ selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones))
+
+// This handles setting the client's color variable, which makes everything look a specific color.
+// This proc is here so it can be called without needing to check if the client exists, or if the client relogs.
+// This is for inheritence since /mob/living will serve most cases. If you need ghosts to use this you'll have to implement that yourself.
+/mob/proc/update_client_color()
+ if(client && client.color)
+ animate(client, color = null, time = 10)
+ return
+
+/mob/proc/swap_hand()
+ return
+
+//Throwing stuff
+/mob/proc/throw_item(atom/target)
+ return
+
+/mob/proc/will_show_tooltip()
+ if(alpha <= EFFECTIVE_INVIS)
+ return FALSE
+ return TRUE
+
+/mob/MouseEntered(location, control, params)
+ if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip())
+ openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr))
+
+ ..()
+
+/mob/MouseDown()
+ closeToolTip(usr) //No reason not to, really
+
+ ..()
+
+/mob/MouseExited()
+ closeToolTip(usr) //No reason not to, really
+
+ ..()
+
+// Manages a global list of mobs with clients attached, indexed by z-level.
+/mob/proc/update_client_z(new_z) // +1 to register, null to unregister.
+ if(registered_z != new_z)
+ if(registered_z)
+ GLOB.players_by_zlevel[registered_z] -= src
+ if(client)
+ if(new_z)
+ GLOB.players_by_zlevel[new_z] += src
+ registered_z = new_z
+ else
+ registered_z = null
+
+/mob/onTransitZ(old_z, new_z)
+ ..()
+ update_client_z(new_z)
+
+/mob/cloak()
+ . = ..()
+ if(client && cloaked_selfimage)
+ client.images += cloaked_selfimage
+
+/mob/uncloak()
+ if(client && cloaked_selfimage)
+ client.images -= cloaked_selfimage
+ return ..()
+
+/mob/get_cloaked_selfimage()
+ var/icon/selficon = getCompoundIcon(src)
+ selficon.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White
+ var/image/selfimage = image(selficon)
+ selfimage.color = "#0000FF"
+ selfimage.alpha = 100
+ selfimage.layer = initial(layer)
+ selfimage.plane = initial(plane)
+ selfimage.loc = src
+
+ return selfimage
+
+/mob/proc/GetAltName()
+ return ""
+
+/mob/proc/get_ghost(even_if_they_cant_reenter = 0)
+ if(mind)
+ return mind.get_ghost(even_if_they_cant_reenter)
+
+/mob/proc/grab_ghost(force)
+ if(mind)
+ return mind.grab_ghost(force = force)
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index daf9ab6d89..ecd6604a83 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -170,7 +170,7 @@
var/mob/living/carbon/LAssailant = null
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
- var/spell/list/spell_list = list()
+ var/list/spell/spell_list = list()
//Changlings, but can be used in other modes
// var/obj/effect/proc_holder/changpower/list/power_list = list()
diff --git a/code/modules/mob/mob_planes.dm b/code/modules/mob/mob_planes.dm
index 241840321a..1d557e4e51 100644
--- a/code/modules/mob/mob_planes.dm
+++ b/code/modules/mob/mob_planes.dm
@@ -82,7 +82,7 @@
if(PM.sub_planes)
var/list/subplanes = PM.sub_planes
for(var/SP in subplanes)
- set_vis(which = SP, new_alpha = new_alpha)
+ set_vis(which = SP, state = !!new_alpha)
/datum/plane_holder/proc/set_ao(var/which = null, var/enabled = FALSE)
ASSERT(which)
diff --git a/code/modules/mob/skillset.dm b/code/modules/mob/skillset.dm
index 2877372491..3afb7a97aa 100644
--- a/code/modules/mob/skillset.dm
+++ b/code/modules/mob/skillset.dm
@@ -10,5 +10,3 @@
return 0
else
return fail_chance * 2 ** (factor*(SKILL_BASIC - points))
-
- return FALSE // We don't actually have a skills system, so never fail.
diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm
index 32e2ed9bb7..4a3f14836c 100644
--- a/code/modules/multiz/hoist.dm
+++ b/code/modules/multiz/hoist.dm
@@ -211,7 +211,7 @@
size = O.w_class
user.visible_message(span("notice", "[user] begins to [movtext] \the [hoistee]!"), span("notice", "You begin to [movtext] \the [hoistee]!"), span("notice", "You hear the sound of a crank."))
- if (do_after(user, (1 SECONDS) * size / 4, act_target = src))
+ if (do_after(user, (1 SECONDS) * size / 4, target = src))
move_dir(movedir, 1)
/obj/structure/hoist/proc/collapse_kit()
diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm
index f34cae0065..77885e7ce5 100644
--- a/code/modules/multiz/turf.dm
+++ b/code/modules/multiz/turf.dm
@@ -72,7 +72,7 @@
/turf/simulated/open/proc/update()
plane = OPENSPACE_PLANE + src.z
below = GetBelow(src)
- turf_changed_event.register(below, src, /turf/simulated/open/update_icon)
+ turf_changed_event.register(below, src, /atom/proc/update_icon)
levelupdate()
below.update_icon() // So the 'ceiling-less' overlay gets added.
for(var/atom/movable/A in src)
diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm
new file mode 100644
index 0000000000..89bf16f858
--- /dev/null
+++ b/code/modules/nano/interaction/default.dm
@@ -0,0 +1,91 @@
+/var/global/datum/topic_state/default/default_state = new()
+
+/datum/topic_state/default/href_list(var/mob/user)
+ return list()
+
+/datum/topic_state/default/can_use_topic(var/src_object, var/mob/user)
+ return user.default_can_use_topic(src_object)
+
+/mob/proc/default_can_use_topic(var/src_object)
+ return STATUS_CLOSE // By default no mob can do anything with NanoUI
+
+/mob/observer/dead/default_can_use_topic(var/src_object)
+ if(can_admin_interact())
+ return STATUS_INTERACTIVE // Admins are more equal
+ if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range
+ return STATUS_CLOSE
+ return STATUS_UPDATE // Ghosts can view updates
+
+/mob/living/silicon/pai/default_can_use_topic(var/src_object)
+ if((src_object == src || src_object == radio || src_object == communicator) && !stat)
+ return STATUS_INTERACTIVE
+ else
+ return ..()
+
+/mob/living/silicon/robot/default_can_use_topic(var/src_object)
+ . = shared_nano_interaction()
+ if(. <= STATUS_DISABLED)
+ return
+
+ // robots can interact with things they can see within their view range
+ if((src_object in view(src)) && get_dist(src_object, src) <= src.client.view)
+ return STATUS_INTERACTIVE // interactive (green visibility)
+ return STATUS_DISABLED // no updates, completely disabled (red visibility)
+
+/mob/living/silicon/ai/default_can_use_topic(var/src_object)
+ . = shared_nano_interaction()
+ if(. != STATUS_INTERACTIVE)
+ return
+
+ // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras)
+ // unless it's on the same level as the object it's interacting with.
+ var/turf/T = get_turf(src_object)
+ if(!T || !(z == T.z || (T.z in using_map.player_levels)))
+ return STATUS_CLOSE
+
+ // If an object is in view then we can interact with it
+ if(src_object in view(client.view, src))
+ return STATUS_INTERACTIVE
+
+ // If we're installed in a chassi, rather than transfered to an inteliCard or other container, then check if we have camera view
+ if(is_in_chassis())
+ //stop AIs from leaving windows open and using then after they lose vision
+ if(cameranet && !cameranet.checkTurfVis(get_turf(src_object)))
+ return STATUS_CLOSE
+ return STATUS_INTERACTIVE
+ else if(get_dist(src_object, src) <= client.view) // View does not return what one would expect while installed in an inteliCard
+ return STATUS_INTERACTIVE
+
+ return STATUS_CLOSE
+
+//Some atoms such as vehicles might have special rules for how mobs inside them interact with NanoUI.
+/atom/proc/contents_nano_distance(var/src_object, var/mob/living/user)
+ return user.shared_living_nano_distance(src_object)
+
+/mob/living/proc/shared_living_nano_distance(var/atom/movable/src_object)
+ if (!(src_object in view(4, src))) // If the src object is not in visable, disable updates
+ return STATUS_CLOSE
+
+ var/dist = get_dist(src_object, src)
+ if (dist <= 1)
+ return STATUS_INTERACTIVE // interactive (green visibility)
+ else if (dist <= 2)
+ return STATUS_UPDATE // update only (orange visibility)
+ else if (dist <= 4)
+ return STATUS_DISABLED // no updates, completely disabled (red visibility)
+ return STATUS_CLOSE
+
+/mob/living/default_can_use_topic(var/src_object)
+ . = shared_nano_interaction(src_object)
+ if(. != STATUS_CLOSE)
+ if(loc)
+ . = min(., loc.contents_nano_distance(src_object, src))
+ if(. == STATUS_INTERACTIVE)
+ return STATUS_UPDATE
+
+/mob/living/carbon/human/default_can_use_topic(var/src_object)
+ . = shared_nano_interaction(src_object)
+ if(. != STATUS_CLOSE)
+ . = min(., shared_living_nano_distance(src_object))
+ if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction.
+ return STATUS_INTERACTIVE
diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm
new file mode 100644
index 0000000000..fa22cb1580
--- /dev/null
+++ b/code/modules/nano/nanoexternal.dm
@@ -0,0 +1,44 @@
+ // This file contains all Nano procs/definitions for external classes/objects
+
+ /**
+ * Called when a Nano UI window is closed
+ * This is how Nano handles closed windows
+ * It must be a verb so that it can be called using winset
+ *
+ * @return nothing
+ */
+/client/verb/nanoclose(var/uiref as text)
+ set hidden = 1 // hide this verb from the user's panel
+ set name = "nanoclose"
+
+ var/datum/nanoui/ui = locate(uiref)
+
+ if (istype(ui))
+ ui.close()
+
+ if(ui.ref)
+ var/href = "close=1"
+ src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic()
+ else if (ui.on_close_logic)
+ // no atomref specified (or not found)
+ // so just reset the user mob's machine var
+ if(src && src.mob)
+ src.mob.unset_machine()
+
+ /**
+ * The ui_interact proc is used to open and update Nano UIs
+ * If ui_interact is not used then the UI will not update correctly
+ * ui_interact is currently defined for /atom/movable
+ *
+ * @param user /mob The mob who is interacting with this ui
+ * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
+ * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui
+ * @param force_open boolean Force the UI to (re)open, even if it's already open
+ *
+ * @return nothing
+ */
+/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, master_ui = null, var/datum/topic_state/state = default_state)
+ return
+
+// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob
+/mob/var/list/open_uis = list()
diff --git a/code/modules/organs/internal/robotic/heatsink.dm b/code/modules/organs/internal/robotic/heatsink.dm
index 4db6e41922..2309a9b7c2 100644
--- a/code/modules/organs/internal/robotic/heatsink.dm
+++ b/code/modules/organs/internal/robotic/heatsink.dm
@@ -38,7 +38,8 @@
var/obj/mecha/M = owner.loc
return M.return_temperature()
else if(istype(owner.loc, /obj/machinery/atmospherics/unary/cryo_cell))
- return owner.loc:air_contents.temperature
+ var/obj/machinery/atmospherics/unary/cryo_cell/cc = owner.loc
+ return cc.air_contents.temperature
var/turf/T = get_turf(src)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 6a3323e4d9..abaf66559d 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -581,7 +581,7 @@ This function completely restores a damaged organ to perfect condition.
//external organs handle brokenness a bit differently when it comes to damage. Instead brute_dam is checked inside process()
//this also ensures that an external organ cannot be "broken" without broken_description being set.
/obj/item/organ/external/is_broken()
- return ((status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) && (!splinted || (splinted && splinted in src.contents && prob(30))))
+ return ((status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) && (!splinted || (splinted && (splinted in src.contents) && prob(30))))
//Determines if we even need to process this organ.
/obj/item/organ/external/proc/need_process()
@@ -988,12 +988,12 @@ Note that amputating the affected organ does in fact remove the infection from t
holder = owner
if(!holder)
return
- if (holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
+ if (holder.handcuffed && (body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT)))
holder.visible_message(\
"\The [holder.handcuffed.name] falls off of [holder.name].",\
"\The [holder.handcuffed.name] falls off you.")
holder.drop_from_inventory(holder.handcuffed)
- if (holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
+ if (holder.legcuffed && (body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT)))
holder.visible_message(\
"\The [holder.legcuffed.name] falls off of [holder.name].",\
"\The [holder.legcuffed.name] falls off you.")
diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm
index 6b6367e8a0..3d320e3742 100644
--- a/code/modules/organs/subtypes/diona.dm
+++ b/code/modules/organs/subtypes/diona.dm
@@ -15,7 +15,7 @@
if(D)
if(!D.ckey || !D.client)
D.death()
- return 1
+ return
/obj/item/organ/external/diona
name = "tendril"
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 9f4a183b31..e594b6514f 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -208,16 +208,23 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
adminfaxes += rcvdcopy
//message badmins that a fax has arrived
- if (destination == using_map.boss_name)
+
+ // Sadly, we can't use a switch statement here due to not using a constant value for the current map's centcom name.
+ if(destination == using_map.boss_name)
message_admins(sender, "[uppertext(using_map.boss_short)] FAX", rcvdcopy, "CentComFaxReply", "#006100")
+<<<<<<< HEAD
else if (destination == "Virgo-Prime Governmental Authority") // Vorestation Edit
message_admins(sender, "VIRGO GOVERNMENT FAX", rcvdcopy, "CentComFaxReply", "#1F66A0")
else if (destination == "Supply")
+=======
+ else if(destination == "Sif Governmental Authority")
+ message_admins(sender, "SIF GOVERNMENT FAX", rcvdcopy, "CentComFaxReply", "#1F66A0")
+ else if(destination == "Supply")
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
message_admins(sender, "[uppertext(using_map.boss_short)] SUPPLY FAX", rcvdcopy, "CentComFaxReply", "#5F4519")
else
message_admins(sender, "[uppertext(destination)] FAX", rcvdcopy, "UNKNOWN")
-
sendcooldown = 1800
sleep(50)
visible_message("[src] beeps, \"Message transmitted successfully.\"")
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 3d12e68534..c4fa72a9b5 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -90,16 +90,14 @@
ui.open()
/obj/structure/filingcabinet/tgui_data(mob/user)
- var/list/data = list()
-
- data["contents"] = list()
+ var/list/files = list()
for(var/obj/item/P in src)
- data["contents"].Add(list(list(
+ files.Add(list(list(
"name" = P.name,
"ref" = "\ref[P]",
)))
- return data
+ return list("contents" = files)
/obj/structure/filingcabinet/tgui_act(action, params)
if(..())
@@ -146,7 +144,6 @@
P.name = "Security Record ([G.fields["name"]])"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
- ..()
/obj/structure/filingcabinet/security/attack_hand()
populate()
@@ -184,7 +181,6 @@
P.name = "Medical Record ([G.fields["name"]])"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
- ..()
/obj/structure/filingcabinet/medical/attack_hand()
populate()
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 5d15083229..8667ffc772 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -88,7 +88,7 @@
var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") in show_stamps
- if(user && src in user.contents)
+ if(user && (src in user.contents)) // Er, how necessary is this in attack_self?
var/obj/item/weapon/stamp/chosen_stamp = stamps[capitalize(input_stamp)]
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index cfc8a9de5a..10b9889f89 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -635,7 +635,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
src.use(15)
else
to_chat(usr, "You cannot do that.")
- ..()
/obj/item/stack/cable_coil/cyborg/verb/set_colour()
set name = "Change Colour"
diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm
index 0fb3c63b40..9be55a9ce0 100644
--- a/code/modules/power/fusion/core/core_field.dm
+++ b/code/modules/power/fusion/core/core_field.dm
@@ -531,12 +531,10 @@
if(percent_unstable >= warnpoint) //we're unstable, start warning engineering
global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering")
- stable = 0 //we know we're not stable, so let's not state the safe message.
- sleep(20)
- return
- if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message.
+ stable = FALSE //we know we're not stable, so let's not state the safe message.
+ else if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message.
global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering")
- stable = 1
+ stable = TRUE
return
//Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output.
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index c3927ec2bd..50655315ad 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -18,7 +18,7 @@
/obj/machinery/containment_field/Initialize()
. = ..()
shockdirs = list(turn(dir,90),turn(dir,-90))
- sense_proximity(callback = .HasProximity)
+ sense_proximity(callback = /atom/proc/HasProximity)
/obj/machinery/containment_field/set_dir(new_dir)
. = ..()
@@ -26,7 +26,7 @@
shockdirs = list(turn(dir,90),turn(dir,-90))
/obj/machinery/containment_field/Destroy()
- unsense_proximity(callback = .HasProximity)
+ unsense_proximity(callback = /atom/proc/HasProximity)
if(FG1 && !FG1.clean_up)
FG1.cleanup()
if(FG2 && !FG2.clean_up)
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 08af0c23a5..6d7108fbd6 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -244,7 +244,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
update_state()
update_icon()
return 1
- return 0
@@ -384,4 +383,3 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
update_use_power(USE_POWER_IDLE)
update_icon()
return 1
- return 0
diff --git a/code/modules/projectiles/projectile/hook.dm b/code/modules/projectiles/projectile/hook.dm
index 3e98319ebd..35b39910a0 100644
--- a/code/modules/projectiles/projectile/hook.dm
+++ b/code/modules/projectiles/projectile/hook.dm
@@ -127,7 +127,7 @@
if(!target_mob)
return
- if(Bump(target_mob, forced=1)) //If we hit a turf, try to force an interaction with a mob on the turf.
+ if(Bump(target_mob)) //If we hit a turf, try to force an interaction with a mob on the turf.
done_mob_unique = TRUE
success = TRUE
else if(firer)
diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm
index 98b8f9c841..e2b175fe1f 100644
--- a/code/modules/reagents/reagents/medicine.dm
+++ b/code/modules/reagents/reagents/medicine.dm
@@ -240,7 +240,8 @@
/datum/reagent/carthatoline/overdose(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustHalLoss(2)
var/mob/living/carbon/human/H = M
- H.internal_organs_by_name[O_STOMACH].take_damage(removed * 2) // Causes stomach contractions, makes sense for an overdose to make it much worse.
+ var/obj/item/organ/internal/stomach/st = H.internal_organs_by_name[O_STOMACH]
+ st?.take_damage(removed * 2) // Causes stomach contractions, makes sense for an overdose to make it much worse.
/datum/reagent/dexalin
name = "Dexalin"
@@ -612,7 +613,8 @@
..()
if(prob(5)) // 1 in 20
var/mob/living/carbon/human/H = M
- H.internal_organs_by_name[O_HEART].take_damage(1)
+ var/obj/item/organ/internal/heart/ht = H.internal_organs_by_name[O_HEART]
+ ht?.take_damage(1)
to_chat(M, "Huh... Is this what a heart attack feels like?")
/datum/reagent/alkysine
diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm
index 6055ff244b..0ea989228a 100644
--- a/code/modules/reagents/reagents/toxins.dm
+++ b/code/modules/reagents/reagents/toxins.dm
@@ -246,7 +246,8 @@
..()
if(prob(10)) // 1 in 10. This thing's made with welder fuel and fertilizer, what do you expect?
var/mob/living/carbon/human/H = M
- H.internal_organs_by_name[O_HEART].take_damage(1)
+ var/obj/item/organ/internal/heart/ht = H.internal_organs_by_name[O_HEART]
+ ht?.take_damage(1)
to_chat(M, "Huh... Is this what a heart attack feels like?")
/datum/reagent/toxin/potassium_chloride
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 62c9faec5d..a336d4c0e8 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -23,7 +23,7 @@
ptype = newtype
dir = newdir
// Disposals handle "bent"/"corner" strangely, handle this specially.
- if(ptype == DISPOSAL_PIPE_STRAIGHT && dir in cornerdirs)
+ if(ptype == DISPOSAL_PIPE_STRAIGHT && (dir in cornerdirs))
ptype = DISPOSAL_PIPE_CORNER
switch(dir)
if(NORTHWEST)
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 08d68d8956..1fdf44119d 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -359,6 +359,7 @@
/obj/item/device/destTagger/attack_self(mob/user as mob)
tgui_interact(user)
+<<<<<<< HEAD
/obj/item/device/destTagger/tgui_act(action, params)
if(..())
return TRUE
@@ -370,6 +371,13 @@
return FALSE
currTag = new_tag
. = TRUE
+=======
+ Topic(href, href_list)
+ src.add_fingerprint(usr)
+ if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations))
+ src.currTag = href_list["nextTag"]
+ openwindow(usr)
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
/obj/machinery/disposal/deliveryChute
name = "Delivery chute"
diff --git a/code/modules/scripting/IDE.dm b/code/modules/scripting/IDE.dm
index 3974e2dee4..8adc021c4d 100644
--- a/code/modules/scripting/IDE.dm
+++ b/code/modules/scripting/IDE.dm
@@ -1,7 +1,7 @@
client/verb/tcssave()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || issilicon(mob))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || issilicon(mob))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode != mob)
return
@@ -28,7 +28,7 @@ client/verb/tcssave()
client/verb/tcscompile()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode != mob)
return
@@ -79,7 +79,7 @@ client/verb/tcscompile()
client/verb/tcsrun()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode != mob)
return
@@ -145,7 +145,7 @@ client/verb/tcsrun()
client/verb/exittcs()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode == mob)
Machine.storedcode = "[winget(mob, "tcscode", "text")]"
@@ -157,7 +157,7 @@ client/verb/exittcs()
client/verb/tcsrevert()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode != mob)
return
@@ -186,7 +186,7 @@ client/verb/tcsrevert()
client/verb/tcsclearmem()
set hidden = 1
if(mob.machine || issilicon(mob))
- if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
+ if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && (mob.machine in view(1, mob))) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) ))
var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine
if(Machine.editingcode != mob)
return
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index d76a18045a..35cd71e134 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -40,7 +40,7 @@
if(istype(W, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = W
- if(access_captain in C.access || access_security in C.access || access_engine in C.access)
+ if((access_captain in C.access) || (access_security in C.access) || (access_engine in C.access))
src.locked = !src.locked
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
updateDialog()
@@ -59,7 +59,7 @@
owned_gen.capacitors |= src
owned_gen.updateDialog()
else
- if(owned_gen && src in owned_gen.capacitors)
+ if(owned_gen && (src in owned_gen.capacitors))
owned_gen.capacitors -= src
owned_gen = null
else
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 08d0b8ce86..ee35dd2657 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -60,7 +60,7 @@
/obj/machinery/shield_gen/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = W
- if(access_captain in C.access || access_security in C.access || access_engine in C.access)
+ if((access_captain in C.access) || (access_security in C.access) || (access_engine in C.access))
src.locked = !src.locked
to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]")
updateDialog()
@@ -110,19 +110,18 @@
return ..()
/obj/machinery/shield_gen/tgui_data(mob/user)
- var/list/data = list()
+ var/list/lockedData = list()
- data["locked"] = locked
- data["lockedData"] = list()
if(!locked)
- data["lockedData"]["capacitors"] = list()
+ var/list/caps = list()
for(var/obj/machinery/shield_capacitor/C in capacitors)
- data["lockedData"]["capacitors"].Add(list(list(
+ caps.Add(list(list(
"active" = C.active,
"stored_charge" = C.stored_charge,
"max_charge" = C.max_charge,
"failing" = (C.time_since_fail <= 2),
)))
+<<<<<<< HEAD
data["lockedData"]["active"] = active
data["lockedData"]["failing"] = (time_since_fail <= 2)
@@ -140,6 +139,26 @@
data["lockedData"]["gen_power"] = round(field.len * min(strengthen_rate, target_field_strength - average_field_strength) / energy_conversion_rate)
return data
+=======
+ lockedData["capacitors"] = caps
+
+ lockedData["active"] = active
+ lockedData["failing"] = (time_since_fail <= 2)
+ lockedData["radius"] = field_radius
+ lockedData["max_radius"] = max_field_radius
+ lockedData["z_range"] = z_range
+ lockedData["max_z_range"] = 10
+ lockedData["average_field_strength"] = average_field_strength
+ lockedData["target_field_strength"] = target_field_strength
+ lockedData["max_field_strength"] = max_field_strength
+ lockedData["shields"] = LAZYLEN(field)
+ lockedData["upkeep"] = round(field.len * max(average_field_strength * dissipation_rate, min_dissipation) / energy_conversion_rate)
+ lockedData["strengthen_rate"] = strengthen_rate
+ lockedData["max_strengthen_rate"] = max_strengthen_rate
+ lockedData["gen_power"] = round(field.len * min(strengthen_rate, target_field_strength - average_field_strength) / energy_conversion_rate)
+
+ return list("locked" = locked, "lockedData" = lockedData)
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
/obj/machinery/shield_gen/process()
if (!anchored && active)
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index b1d3efdc0c..6e8a41fd3c 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -60,9 +60,34 @@
"internalTemplateName" = "EscapePodConsole",
)
+<<<<<<< HEAD
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/tgui_act(action, params)
if(..())
return TRUE
+=======
+ ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
+
+ if (!ui)
+ ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Topic(href, href_list)
+ if((. = ..()))
+ return
+
+ if(href_list["manual_arm"])
+ pod.arming_controller.arm()
+ return TOPIC_REFRESH
+ if(href_list["force_launch"])
+ if (pod.can_force())
+ pod.force_launch(src)
+ else if (emergency_shuttle.departed && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves
+ pod.launch(src)
+ return TOPIC_REFRESH
+ return 0
+>>>>>>> fdabe51... Linter Introduction + Cleanup (#8085)
switch(action)
if("manual_arm")
diff --git a/code/modules/shuttles/web_datums.dm b/code/modules/shuttles/web_datums.dm
index bbba42dd58..6e34d3750b 100644
--- a/code/modules/shuttles/web_datums.dm
+++ b/code/modules/shuttles/web_datums.dm
@@ -220,6 +220,7 @@
return current_destination.routes.Copy()
/datum/shuttle_web_master/proc/get_current_destination()
+ RETURN_TYPE(/datum/shuttle_destination)
return current_destination
/datum/shuttle_web_master/proc/get_destination_by_type(var/type_to_get)
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
index f2a85f7bbe..5ab0643450 100644
--- a/code/modules/spells/spell_code.dm
+++ b/code/modules/spells/spell_code.dm
@@ -277,7 +277,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
if(level_max[Sp_TOTAL] <= ( spell_levels[Sp_SPEED] + spell_levels[Sp_POWER] )) //too many levels, can't do it
return 0
- if(upgrade_type && upgrade_type in spell_levels && upgrade_type in level_max)
+ if(upgrade_type && (upgrade_type in spell_levels) && (upgrade_type in level_max))
if(spell_levels[upgrade_type] >= level_max[upgrade_type])
return 0
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 831d44ba2f..b4e5e94b70 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -291,7 +291,7 @@
/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user as mob)
..()
- explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
+ explosion(user.loc, -1, 0, 2, 3, 0)
qdel(src)
/obj/item/weapon/spellbook/oneuse/smoke
diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm
index 085489b26a..93b9de593b 100644
--- a/code/modules/tables/presets.dm
+++ b/code/modules/tables/presets.dm
@@ -129,7 +129,7 @@
verbs -= /obj/structure/table/proc/do_put
..()
-/obj/structure/table/alien/dismantle(obj/item/weapon/wrench/W, mob/user)
+/obj/structure/table/alien/dismantle(obj/item/weapon/tool/wrench/W, mob/user)
to_chat(user, "You cannot dismantle \the [src].")
return
diff --git a/code/modules/tables/rack.dm b/code/modules/tables/rack.dm
index b07aa188b7..c39fb2c59f 100644
--- a/code/modules/tables/rack.dm
+++ b/code/modules/tables/rack.dm
@@ -23,6 +23,6 @@
color = material.icon_colour
return
-/obj/structure/table/rack/holorack/dismantle(obj/item/weapon/wrench/W, mob/user)
+/obj/structure/table/rack/holorack/dismantle(obj/item/weapon/tool/wrench/W, mob/user)
to_chat(user, "You cannot dismantle \the [src].")
return
diff --git a/code/modules/tgui/modules/atmos_control.dm b/code/modules/tgui/modules/atmos_control.dm
index 4fd477a531..6f573ad96c 100644
--- a/code/modules/tgui/modules/atmos_control.dm
+++ b/code/modules/tgui/modules/atmos_control.dm
@@ -13,7 +13,7 @@
if(monitored_alarm_ids)
for(var/obj/machinery/alarm/alarm in machines)
- if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
+ if(alarm.alarm_id && (alarm.alarm_id in monitored_alarm_ids))
monitored_alarms += alarm
// machines may not yet be ordered at this point
monitored_alarms = dd_sortedObjectList(monitored_alarms)
diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm
index 4d300bcfc2..9868188d18 100644
--- a/code/modules/turbolift/turbolift_console.dm
+++ b/code/modules/turbolift/turbolift_console.dm
@@ -158,10 +158,10 @@
data["doors_open"] = lift.doors_are_open()
data["fire_mode"] = lift.fire_mode
- data["floors"] = list()
+ var/list/floors = list()
for(var/i in lift.floors.len to 1 step -1)
var/datum/turbolift_floor/floor = lift.floors[i]
- data["floors"].Add(list(list(
+ floors.Add(list(list(
"id" = i,
"ref" = "\ref[floor]",
"queued" = (floor in lift.queued_floors),
@@ -170,6 +170,7 @@
"label" = floor.label,
"name" = floor.name,
)))
+ data["floors"] = floors
return data
diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm
index f5b6613cdf..f005a8f2f1 100644
--- a/code/modules/vchat/vchat_client.dm
+++ b/code/modules/vchat/vchat_client.dm
@@ -176,7 +176,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
/proc/jsEncode(var/list/message) {
if(!islist(message))
CRASH("Passed a non-list to encode.")
- return; //Necessary?
return url_encode(url_encode(json_encode(message)))
}
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index 9d37b1db29..67d76a8177 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -253,17 +253,18 @@ var/global/list/virusDB = list()
"rate" = stageprob * 10,
"resistance" = resistance,
"species" = jointext(affected_species, ", "),
- "symptoms" = list(),
"ref" = "\ref[src]",
)
-
+
+ var/list/symptoms = list()
for(var/datum/disease2/effectholder/E in effects)
- .["symptoms"].Add(list(list(
+ symptoms.Add(list(list(
"stage" = E.stage,
"name" = E.effect.name,
"strength" = "[E.multiplier >= 3 ? "Severe" : E.multiplier > 1 ? "Above Average" : "Average"]",
"aggressiveness" = E.chance * 15,
)))
+ .["symptoms"] = symptoms
/datum/disease2/disease/proc/addToDB()
if ("[uniqueID]" in virusDB)
diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm
index 2a7f149dfa..69aa73a02f 100644
--- a/code/modules/xenoarcheaology/finds/special.dm
+++ b/code/modules/xenoarcheaology/finds/special.dm
@@ -118,7 +118,7 @@
/obj/item/weapon/vampiric/hear_talk(mob/M, list/message_pieces, verb)
..()
- if(world.time - last_bloodcall >= bloodcall_interval && M in view(7, src))
+ if(world.time - last_bloodcall >= bloodcall_interval && (M in view(7, src)))
bloodcall(M)
/obj/item/weapon/vampiric/proc/bloodcall(var/mob/living/carbon/human/M)
diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm
index 6036b7381a..1e363f35c9 100644
--- a/code/modules/xgm/xgm_gas_mixture.dm
+++ b/code/modules/xgm/xgm_gas_mixture.dm
@@ -446,7 +446,7 @@
//Equalizes a list of gas mixtures. Used for pipe networks.
-/proc/equalize_gases(datum/gas_mixture/list/gases)
+/proc/equalize_gases(list/datum/gas_mixture/gases)
//Calculate totals from individual components
var/total_volume = 0
var/total_thermal_energy = 0
diff --git a/maps/southern_cross/overmap/sectors.dm b/maps/southern_cross/overmap/sectors.dm
index 6bfc3edfa1..36b074235c 100644
--- a/maps/southern_cross/overmap/sectors.dm
+++ b/maps/southern_cross/overmap/sectors.dm
@@ -24,9 +24,10 @@
docking_codes = null
/obj/effect/overmap/visitable/planet/Sif/get_skybox_representation()
- . = ..()
- (.).pixel_x = skybox_offset_x
- (.).pixel_y = skybox_offset_y
+ var/image/tmp = ..()
+ tmp.pixel_x = skybox_offset_x
+ tmp.pixel_y = skybox_offset_y
+ return tmp
/obj/effect/overmap/visitable/Southern_Cross
name = "Southern Cross"
diff --git a/vorestation.dme b/vorestation.dme
index 3d45c71f86..b82e8ef04d 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -80,6 +80,7 @@
#include "code\__defines\shields.dm"
#include "code\__defines\shuttle.dm"
#include "code\__defines\sound.dm"
+#include "code\__defines\spaceman_dmm.dm"
#include "code\__defines\species_languages.dm"
#include "code\__defines\species_languages_vr.dm"
#include "code\__defines\sqlite_defines.dm"