From 1e49ce76d3470be6d07bac87140619addb5db7d4 Mon Sep 17 00:00:00 2001
From: Ghommie <42542238+Ghommie@users.noreply.github.com>
Date: Sun, 10 Nov 2019 20:48:30 +0100
Subject: [PATCH 01/15] Dreamchecker compatibility changes, part 1.
---
code/__DEFINES/misc.dm | 2 ++
code/__DEFINES/procpath.dm | 24 +++++++++++++++++++
code/__DEFINES/spaceman_dmm.dm | 13 ++++++++++
code/__DEFINES/traits.dm | 3 +--
code/__HELPERS/_lists.dm | 3 +++
code/__HELPERS/_logging.dm | 2 +-
code/_onclick/adjacent.dm | 5 ++--
.../configuration/configuration.dm | 2 +-
code/datums/browser.dm | 2 +-
code/datums/components/mood.dm | 2 +-
.../components/storage/concrete/special.dm | 4 ++--
code/datums/datum.dm | 2 +-
code/datums/martial/wrestling.dm | 2 +-
code/datums/status_effects/buffs.dm | 4 ++--
code/datums/verbs.dm | 4 ++--
code/game/atoms.dm | 4 ++--
.../game/gamemodes/clown_ops/clown_weapons.dm | 2 +-
code/game/gamemodes/game_mode.dm | 2 +-
code/game/machinery/cloning.dm | 2 --
.../machinery/computer/telecrystalconsoles.dm | 1 -
code/game/machinery/cryopod.dm | 1 -
code/game/objects/items/body_egg.dm | 2 +-
code/game/objects/items/devices/PDA/cart.dm | 4 ++--
code/game/objects/items/devices/scanners.dm | 2 +-
code/game/objects/items/storage/toolbox.dm | 1 -
code/game/objects/items/stunbaton.dm | 2 +-
code/game/turfs/simulated/floor/plating.dm | 2 +-
code/modules/admin/admin_verbs.dm | 24 +++++++++----------
code/modules/admin/sql_message_system.dm | 4 ++--
code/modules/admin/verbs/diagnostics.dm | 2 +-
code/modules/admin/verbs/mapping.dm | 2 +-
.../antagonists/abductor/equipment/gland.dm | 6 ++---
.../devil/true_devil/_true_devil.dm | 2 +-
.../antagonists/slaughter/slaughter.dm | 2 +-
.../traitor/IAA/internal_affairs.dm | 2 --
.../traitor/equipment/Malf_Modules.dm | 4 ++--
code/modules/assembly/infrared.dm | 2 +-
.../components/unary_devices/cryo.dm | 2 --
code/modules/awaymissions/corpse.dm | 4 ++--
code/modules/bsql/core/library.dm | 2 +-
code/modules/cargo/centcom_podlauncher.dm | 20 ++++++++--------
code/modules/cargo/gondolapod.dm | 4 ++--
code/modules/client/client_procs.dm | 2 +-
code/modules/client/preferences.dm | 7 +++---
code/modules/clothing/clothing.dm | 1 -
code/modules/flufftext/Hallucination.dm | 2 +-
code/modules/holodeck/area_copy.dm | 1 +
code/modules/hydroponics/growninedible.dm | 2 +-
.../core/special_pins/list_pin.dm | 1 -
.../subtypes/atmospherics.dm | 1 -
.../integrated_electronics/subtypes/smart.dm | 8 +++----
code/modules/mining/machine_silo.dm | 2 +-
code/modules/mob/living/brain/brain_item.dm | 2 +-
.../modules/mob/living/carbon/alien/organs.dm | 6 ++---
.../mob/living/carbon/human/species.dm | 2 +-
.../human/species_types/shadowpeople.dm | 4 ++--
code/modules/mob/living/silicon/ai/ai.dm | 2 +-
code/modules/mob/living/silicon/ai/say.dm | 2 +-
.../mob/living/simple_animal/bot/mulebot.dm | 2 +-
.../hostile/megafauna/colossus.dm | 4 ++--
code/modules/paperwork/contract.dm | 2 +-
code/modules/projectiles/projectile/magic.dm | 2 +-
.../chemistry/machinery/chem_dispenser.dm | 1 -
.../chemistry/machinery/smoke_machine.dm | 2 +-
.../spells/spell_types/area_teleport.dm | 2 +-
.../spells/spell_types/inflict_handler.dm | 2 +-
code/modules/surgery/organs/appendix.dm | 2 +-
code/modules/surgery/organs/augments_chest.dm | 2 +-
code/modules/surgery/organs/heart.dm | 2 +-
code/modules/surgery/organs/tongue.dm | 2 +-
code/modules/surgery/organs/vocal_cords.dm | 4 ++--
code/modules/zombie/organs.dm | 2 +-
interface/menu.dm | 4 ++--
.../code/game/gamemodes/gangs/gangtool.dm | 2 +-
.../code/modules/mentor/mentor_verbs.dm | 2 +-
tgstation.dme | 2 ++
76 files changed, 149 insertions(+), 118 deletions(-)
create mode 100644 code/__DEFINES/procpath.dm
create mode 100644 code/__DEFINES/spaceman_dmm.dm
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 4b76f41c61..ee64cc6feb 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -513,3 +513,5 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
//Misc text define. Does 4 spaces. Used as a makeshift tabulator.
#define FOURSPACES " "
+
+#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
diff --git a/code/__DEFINES/procpath.dm b/code/__DEFINES/procpath.dm
new file mode 100644
index 0000000000..1180058358
--- /dev/null
+++ b/code/__DEFINES/procpath.dm
@@ -0,0 +1,24 @@
+/// Represents a proc or verb path.
+///
+/// Despite having no DM-defined static type, proc paths have some variables,
+/// listed below. These are not modifiable, but for a given procpath P,
+/// `new P(null, "Name", "Desc")` can be used to create a new procpath with the
+/// same code but new `name` and `desc` values. The other variables cannot be
+/// changed in this way.
+///
+/// This type exists only to act as an annotation, providing reasonable static
+/// typing for procpaths. Previously, types like `/atom/verb` were used, with
+/// the `name` and `desc` vars of `/atom` thus being accessible. Proc and verb
+/// paths will fail `istype` and `ispath` checks against `/procpath`.
+/procpath
+ // Although these variables are effectively const, if they are marked const
+ // below, their accesses are optimized away.
+
+ /// A text string of the verb's name.
+ var/name as text
+ /// The verb's help text or description.
+ var/desc as text
+ /// The category or tab the verb will appear in.
+ var/category as text
+ /// Only clients/mobs with `see_invisibility` higher can use the verb.
+ var/invisibility as num
diff --git a/code/__DEFINES/spaceman_dmm.dm b/code/__DEFINES/spaceman_dmm.dm
new file mode 100644
index 0000000000..e590a30ff9
--- /dev/null
+++ b/code/__DEFINES/spaceman_dmm.dm
@@ -0,0 +1,13 @@
+// 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)
+#else
+ #define RETURN_TYPE(X)
+ #define SHOULD_CALL_PARENT(X)
+ #define UNLINT(X) X
+#endif
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 1f37556d1d..fe7cf57cb3 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -192,7 +192,6 @@
#define STASIS_MUTE "stasis"
#define GENETICS_SPELL "genetics_spell"
#define EYES_COVERED "eyes_covered"
-#define CULT_TRAIT "cult"
#define CLOWN_NUKE_TRAIT "clown-nuke"
#define STICKY_MOUSTACHE_TRAIT "sticky-moustache"
#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy"
@@ -213,4 +212,4 @@
#define LOCKED_HELMET_TRAIT "locked-helmet"
#define NINJA_SUIT_TRAIT "ninja-suit"
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
-#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
\ No newline at end of file
+#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index 917615d095..7ea845720d 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -124,6 +124,7 @@
//returns a new list with only atoms that are in typecache L
/proc/typecache_filter_list(list/atoms, list/typecache)
+ RETURN_TYPE(/list)
. = list()
for(var/thing in atoms)
var/atom/A = thing
@@ -131,6 +132,7 @@
. += A
/proc/typecache_filter_list_reverse(list/atoms, list/typecache)
+ RETURN_TYPE(/list)
. = list()
for(var/thing in atoms)
var/atom/A = thing
@@ -257,6 +259,7 @@
//Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
+ RETURN_TYPE(L[_].type)
if(L.len)
var/picked = rand(1,L.len)
. = L[picked]
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index c19a7a64b0..c259831f94 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -7,7 +7,7 @@
#define WRITE_LOG(log, text) rustg_log_write(log, text)
//print a warning message to world.log
-#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
+#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].")
/proc/warning(msg)
msg = "## WARNING: [msg]"
log_world(msg)
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index ddff0b6bd3..9485ea3374 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -68,9 +68,10 @@
/atom/movable/Adjacent(var/atom/neighbor)
if(neighbor == loc)
return TRUE
- if(!isturf(loc))
+ var/turf/T = loc
+ if(!istype(T))
return FALSE
- if(loc.Adjacent(neighbor,target = neighbor, mover = src))
+ if(T.Adjacent(neighbor, neighbor, src))
return TRUE
return FALSE
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index ea2919f342..a5d27819b8 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -34,7 +34,7 @@
if(_directory)
directory = _directory
if(entries)
- CRASH("[THIS_PROC_TYPE_WEIRD] called more than once!")
+ CRASH("/datum/controller/configuration/Load() called more than once!")
InitEntries()
LoadModes()
if(fexists("[directory]/config.txt") && LoadEntries("config.txt") <= 1)
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 4c501a3e7f..60434d2766 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -194,7 +194,7 @@
.=..()
opentime = 0
-/datum/browser/modal/open()
+/datum/browser/modal/open(use_onclose = 1)
set waitfor = 0
opentime = world.time
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 8c6013aeab..a3a9d96a55 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -8,7 +8,7 @@
var/mood_level = 5 //To track what stage of moodies they're on
var/sanity_level = 5 //To track what stage of sanity they're on
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
- var/datum/mood_event/list/mood_events = list()
+ var/list/datum/mood_event/mood_events = list()
var/insanity_effect = 0 //is the owner being punished for low mood? If so, how much?
var/obj/screen/mood/screen_obj
diff --git a/code/datums/components/storage/concrete/special.dm b/code/datums/components/storage/concrete/special.dm
index 556e9e9fc9..9f2c435642 100644
--- a/code/datums/components/storage/concrete/special.dm
+++ b/code/datums/components/storage/concrete/special.dm
@@ -1,5 +1,5 @@
-/datum/component/storage/concrete/secret_satchel/can_be_inserted(I,msg,user)
+/datum/component/storage/concrete/secret_satchel/can_be_inserted(obj/item/I, stop_messages = FALSE, mob/M)
if(SSpersistence.spawned_objects[I])
- to_chat(user, "[I] is unstable after its journey through space and time, it wouldn't survive another trip.")
+ to_chat(M, "[I] is unstable after its journey through space and time, it wouldn't survive another trip.")
return FALSE
return ..()
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index cdb195dd82..8737cd8feb 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -4,7 +4,7 @@
var/list/datum_components //for /datum/components
var/list/status_traits
var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register
- var/list/signal_procs
+ var/list/list/datum/callback/signal_procs
var/signal_enabled = FALSE
var/datum_flags = NONE
var/datum/weakref/weak_reference
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index e07fa27ef5..81ec0bf977 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -192,7 +192,7 @@
if (T && isturf(T))
if (!D.stat)
D.emote("scream")
- D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human/.Knockdown, 20))
+ D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/Knockdown, 20))
log_combat(A, D, "has thrown with wrestling")
return 0
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 563d06ca57..5c4fc61827 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -170,7 +170,7 @@
tick_interval = 4
alert_type = /obj/screen/alert/status_effect/his_grace
var/bloodlust = 0
-
+
/obj/screen/alert/status_effect/his_grace
name = "His Grace"
desc = "His Grace hungers, and you must feed Him."
@@ -356,7 +356,7 @@
var/new_staminaloss = owner.getStaminaLoss()
if(new_staminaloss < last_staminaloss)
var/heal_amount = -5 // CIT CHANGE - makes blood drunk status effect not exhaust you
- owner.adjustStaminaLoss(heal_amount, updating_health = FALSE)
+ owner.adjustStaminaLoss(heal_amount, FALSE)
new_staminaloss = owner.getStaminaLoss()
needs_health_update = TRUE
last_staminaloss = new_staminaloss
diff --git a/code/datums/verbs.dm b/code/datums/verbs.dm
index 79fe256bb4..d8d7ee7433 100644
--- a/code/datums/verbs.dm
+++ b/code/datums/verbs.dm
@@ -11,7 +11,7 @@
//do things for each entry in Generate_list
//return value sets Generate_list[verbpath]
-/datum/verbs/proc/HandleVerb(list/entry, atom/verb/verbpath, ...)
+/datum/verbs/proc/HandleVerb(list/entry, procpath/verbpath, ...)
return entry
/datum/verbs/New()
@@ -82,7 +82,7 @@
. += childlist
for (var/thing in verblist)
- var/atom/verb/verbpath = thing
+ var/procpath/verbpath = thing
if (!verbpath)
stack_trace("Bad VERB in [type] verblist: [english_list(verblist)]")
var/list/entry = list()
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 68f22242e1..64ff2437d3 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -266,7 +266,7 @@
if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED)
should_override = TRUE
-
+
if(blood_DNA && !istype(src, /obj/effect/decal))
override[EXAMINE_POSITION_BEFORE] = " blood-stained "
should_override = TRUE
@@ -563,7 +563,7 @@
//Hook for running code when a dir change occurs
-/atom/proc/setDir(newdir)
+/atom/proc/setDir(newdir, ismousemovement=FALSE)
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 79890e4cdd..ee96d1fa10 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -138,7 +138,7 @@
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
slipper.signal_enabled = active
-/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1)
+/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
if(active)
if(iscarbon(thrower))
var/mob/living/carbon/C = thrower
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 17e26e66af..4d7b346241 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -31,7 +31,7 @@
var/recommended_enemies = 0
var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag
var/mob/living/living_antag_player = null
- var/list/datum/game_mode/replacementmode = null
+ var/datum/game_mode/replacementmode = null
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
var/reroll_friendly //During mode conversion only these are in the running
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 89c5e56b71..f6655acfc4 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -474,8 +474,6 @@
flesh_number = unattached_flesh.len
-#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
-
/obj/machinery/clonepod/update_icon()
cut_overlays()
diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm
index 67407d220e..75e4a866f0 100644
--- a/code/game/machinery/computer/telecrystalconsoles.dm
+++ b/code/game/machinery/computer/telecrystalconsoles.dm
@@ -148,7 +148,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
virgin = 0
/obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population.
- ..()
var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
var/danger = GLOB.joined_player_list.len - nukeops.len
danger = CEILING(danger, 10)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 4d252f1a46..3ff515f4f5 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -307,7 +307,6 @@
//Handle Borg stuff first
if(iscyborg(mob_occupant))
var/mob/living/silicon/robot/R = mob_occupant
- if(!istype(R)) return ..()
R.contents -= R.mmi
qdel(R.mmi)
diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm
index f0d20afbbd..59a5c50bf6 100644
--- a/code/game/objects/items/body_egg.dm
+++ b/code/game/objects/items/body_egg.dm
@@ -14,7 +14,7 @@
src.Insert(loc)
return ..()
-/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0)
+/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
ADD_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC)
owner.med_hud_set_status()
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 3885a1f4d9..8be18a5f61 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -697,7 +697,7 @@ Code:
if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work.
- active_bot.bot_control(command= href_list["mule"], user= usr, pda= 1)
+ active_bot.bot_control(href_list["mule"], usr, TRUE)
if(!host_pda)
return
@@ -772,4 +772,4 @@ Code:
return ""
//This is called for special abilities of cartridges
-/obj/item/cartridge/proc/special(mov/living/user, list/params)
+/obj/item/cartridge/proc/special(mob/living/user, list/params)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5ad5b41e95..d6737b94e9 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -651,7 +651,7 @@ SLIME SCANNER
/proc/atmosanalyzer_scan(mixture, mob/living/user, atom/target = src)
var/icon = target
- user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(src))] [target].", "You use the analyzer on [icon2html(icon, user)] [target].")
+ user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(user))] [target].", "You use the analyzer on [icon2html(icon, user)] [target].")
to_chat(user, "Results of analysis of [icon2html(icon, user)] [target].")
var/list/airs = islist(mixture) ? mixture : list(mixture)
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 251703f907..ca7f7fe31a 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -288,7 +288,6 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
generate_rubber_toolbox_icon()
icon = GLOB.rubber_toolbox_icons[icon_state]
AddComponent(/datum/component/bouncy)
- . = ..()
/obj/item/storage/toolbox/proc/generate_rubber_toolbox_icon()
var/icon/new_icon = icon(icon, icon_state)
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index ee126971a7..47d9af2795 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -191,7 +191,7 @@
L.Knockdown(stunpwr)
- L.adjustStaminaLoss(stunpwr*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
+ L.adjustStaminaLoss(stunpwr*0.1)//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
L.apply_effect(EFFECT_STUTTER, stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
if(user)
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 036f54c710..191d9b0242 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -144,5 +144,5 @@
..()
ScrapeAway()
-/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/tool/I, tool_type)
+/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type)
return
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 626fa7f66f..cb5b33ae08 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -1,7 +1,7 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
//the procs are cause you can't put the comments in the GLOB var define
-GLOBAL_PROTECT(admin_verbs_default)
GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
+GLOBAL_PROTECT(admin_verbs_default)
/world/proc/AVerbsDefault()
return list(
/client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/
@@ -13,8 +13,8 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
/client/proc/toggleprayers,
/client/proc/toggleadminhelpsound
)
-GLOBAL_PROTECT(admin_verbs_admin)
GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
+GLOBAL_PROTECT(admin_verbs_admin)
/world/proc/AVerbsAdmin()
return list(
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
@@ -78,11 +78,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/datum/admins/proc/open_borgopanel
)
-GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel))
-GLOBAL_PROTECT(admin_verbs_sounds)
+GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/set_round_end_sound))
-GLOBAL_PROTECT(admin_verbs_fun)
+GLOBAL_PROTECT(admin_verbs_sounds)
GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
@@ -108,9 +107,9 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/admin_away,
/client/proc/roll_dices //CIT CHANGE - Adds dice verb
))
-GLOBAL_PROTECT(admin_verbs_spawn)
+GLOBAL_PROTECT(admin_verbs_fun)
GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
-GLOBAL_PROTECT(admin_verbs_server)
+GLOBAL_PROTECT(admin_verbs_spawn)
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/world/proc/AVerbsServer()
return list(
@@ -129,7 +128,7 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/client/proc/adminchangemap,
/client/proc/toggle_hub
)
-GLOBAL_PROTECT(admin_verbs_debug)
+GLOBAL_PROTECT(admin_verbs_server)
GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
/world/proc/AVerbsDebug()
return list(
@@ -171,15 +170,15 @@ GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
/datum/admins/proc/create_or_modify_area,
/client/proc/generate_wikichem_list //DO NOT PRESS UNLESS YOU WANT SUPERLAG
)
-GLOBAL_PROTECT(admin_verbs_possess)
+GLOBAL_PROTECT(admin_verbs_debug)
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
-GLOBAL_PROTECT(admin_verbs_permissions)
+GLOBAL_PROTECT(admin_verbs_possess)
GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions))
-GLOBAL_PROTECT(admin_verbs_poll)
+GLOBAL_PROTECT(admin_verbs_permissions)
GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/create_poll))
//verbs which can be hidden - needs work
-GLOBAL_PROTECT(admin_verbs_hideable)
+GLOBAL_PROTECT(admin_verbs_poll)
GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/set_ooc,
/client/proc/reset_ooc,
@@ -247,6 +246,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/cmd_admin_man_up, //CIT CHANGE - adds man up verb
/client/proc/cmd_admin_man_up_global //CIT CHANGE - ditto
))
+GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/add_admin_verbs()
if(holder)
diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm
index 72ec3da8f9..7b59e72403 100644
--- a/code/modules/admin/sql_message_system.dm
+++ b/code/modules/admin/sql_message_system.dm
@@ -504,7 +504,7 @@
output += ruler
var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500)
var/datum/asset/notes_assets = get_asset_datum(/datum/asset/simple/notes)
- notes_assets.send(src)
+ notes_assets.send(usr.client)
browser.set_content(jointext(output, ""))
browser.open()
@@ -556,7 +556,7 @@
/proc/convert_notes_sql(ckey)
if(!fexists(NOTESFILE))
return
-
+
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile)
log_game("Error: Cannot access [NOTESFILE]")
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index b19b2a91d8..072fbaa123 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -61,7 +61,7 @@
var/output = "Radio Report
"
for (var/fq in SSradio.frequencies)
output += "Freq: [fq]
"
- var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
+ var/datum/radio_frequency/fqs = SSradio.frequencies[fq]
if (!fqs)
output += " ERROR
"
continue
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 8559a3235e..2b8d365e15 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -19,7 +19,6 @@
//- Identify how hard it is to break into the area and where the weak points are
//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
-GLOBAL_PROTECT(admin_verbs_debug_mapping)
GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
/client/proc/camera_view, //-errorage
/client/proc/sec_camera_report, //-errorage
@@ -50,6 +49,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
/client/proc/debug_z_levels,
/client/proc/place_ruin
))
+GLOBAL_PROTECT(admin_verbs_debug_mapping)
/obj/effect/debugging/mapfix_marker
name = "map fix marker"
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index a35cbbf0e4..e9a815ac38 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -73,7 +73,7 @@
clear_mind_control()
..()
-/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(special != 2 && uses) // Special 2 means abductor surgery
Start()
@@ -124,7 +124,7 @@
mind_control_uses = 1
mind_control_duration = 2400
-/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
owner.faction |= "slime"
owner.grant_language(/datum/language/slime)
@@ -286,7 +286,7 @@
mind_control_uses = 2
mind_control_duration = 900
-/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index df761ac183..06200073bb 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -106,7 +106,7 @@
/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
return 666
-/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
+/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
if(mind && has_bane(BANE_LIGHT))
mind.disrupt_spells(-500)
return ..() //flashes don't stop devils UNLESS it's their bane.
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index f45555a6ee..f27da5f667 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -94,7 +94,7 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
-/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(M.mind)
M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
index b05750305a..caf2f644df 100644
--- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm
+++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
@@ -223,8 +223,6 @@
special_role = TRAITOR_AGENT_ROLE
syndicate = TRUE
forge_single_objective()
- else
- ..() // Give them standard objectives.
return
/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives()
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index e1d607c34b..56954f8718 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -208,7 +208,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
var/unlock_text = "Hello World!" //Text shown when an ability is unlocked
var/unlock_sound //Sound played when an ability is unlocked
-/datum/AI_Module/proc/upgrade(mob/living/silicon/AI/AI) //Apply upgrades!
+/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades!
return
/datum/AI_Module/large //Big, powerful stuff that can only be used once.
@@ -397,7 +397,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
unlock_text = "You establish a power diversion to your turrets, upgrading their health and damage."
unlock_sound = 'sound/items/rped.ogg'
-/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/AI/AI)
+/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines)
turret.obj_integrity += 30
turret.lethal_projectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR.
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 7405549b3d..caa8418fc9 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -138,7 +138,7 @@
. = ..()
setDir(t)
-/obj/item/assembly/infra/throw_at()
+/obj/item/assembly/infra/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
. = ..()
olddir = dir
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index ccd13d8d4a..5d31e3eaff 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -1,5 +1,3 @@
-#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
-
/obj/machinery/atmospherics/components/unary/cryo_cell
name = "cryo cell"
icon = 'icons/obj/cryogenics.dmi'
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index a0927a2578..34905fe3c7 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -257,7 +257,7 @@
//Non-human spawners
-/obj/effect/mob_spawn/AICorpse/create() //Creates a corrupted AI
+/obj/effect/mob_spawn/AICorpse/create(ckey, name) //Creates a corrupted AI
var/A = locate(/mob/living/silicon/ai) in loc
if(A)
return
@@ -277,7 +277,7 @@
/obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S)
S.colour = mobcolour
-/obj/effect/mob_spawn/human/facehugger/create() //Creates a squashed facehugger
+/obj/effect/mob_spawn/human/facehugger/create(ckey, name) //Creates a squashed facehugger
var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark
O.name = src.name
O.Die() //call the facehugger's death proc
diff --git a/code/modules/bsql/core/library.dm b/code/modules/bsql/core/library.dm
index 1b62cf3b6a..9b58ba314b 100644
--- a/code/modules/bsql/core/library.dm
+++ b/code/modules/bsql/core/library.dm
@@ -1,6 +1,6 @@
/world/proc/_BSQL_Internal_Call(func, ...)
var/list/call_args = args.Copy(2)
- BSQL_Debug("[.....]: [args[1]]([call_args.Join(", ")])")
+ BSQL_Debug("_BSQL_Internal_Call(): [args[1]]([call_args.Join(", ")])")
. = call(_BSQL_Library_Path(), func)(arglist(call_args))
BSQL_Debug("Result: [. == null ? "NULL" : "\"[.]\""]")
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index e482aa00b5..f57374db7c 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -2,7 +2,7 @@
//This was originally created as a way to get adminspawned items to the station in an IC manner. It's evolved to contain a few more
//features such as item removal, smiting, controllable delivery mobs, and more.
-//This works by creating a supplypod (refered to as temp_pod) in a special room in the centcom map.
+//This works by creating a supplypod (refered to as temp_pod) in a special room in the centcom map.
//IMPORTANT: Even though we call it a supplypod for our purposes, it can take on the appearance and function of many other things: Eg. cruise missiles, boxes, or walking, living gondolas.
//When the user launched the pod, items from special "bays" on the centcom map are taken and put into the supplypod
@@ -33,7 +33,7 @@
var/launchCounter = 1 //Used with the "Ordered" launch mode (launchChoice = 1) to see what item is launched
var/specificTarget //Do we want to target a specific mob instead of where we click? Also used for smiting
var/list/orderedArea = list() //Contains an ordered list of turfs in an area (filled in the createOrderedArea() proc), read top-left to bottom-right. Used for the "ordered" launch mode (launchChoice = 1)
- var/list/acceptableTurfs = list() //Contians a list of turfs (in the "bay" area on centcom) that have items that can be launched. Taken from orderedArea
+ var/list/turf/acceptableTurfs = list() //Contians a list of turfs (in the "bay" area on centcom) that have items that can be launched. Taken from orderedArea
var/list/launchList = list() //Contains whatever is going to be put in the supplypod and fired. Taken from acceptableTurfs
var/obj/effect/supplypod_selector/selector = new() //An effect used for keeping track of what item is going to be launched when in "ordered" mode (launchChoice = 1)
var/obj/structure/closet/supplypod/centcompod/temp_pod //The temporary pod that is modified by this datum, then cloned. The buildObject() clone of this pod is what is launched
@@ -69,7 +69,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
data["landingDelay"] = temp_pod.landingDelay //How long the pod takes to land after launching
data["openingDelay"] = temp_pod.openingDelay //How long the pod takes to open after landing
data["departureDelay"] = temp_pod.departureDelay //How long the pod takes to leave after opening (if bluespace=true, it deletes. if reversing=true, it flies back to centcom)
- data["styleChoice"] = temp_pod.style //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
+ data["styleChoice"] = temp_pod.style //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
data["effectStun"] = temp_pod.effectStun //If true, stuns anyone under the pod when it launches until it lands, forcing them to get hit by the pod. Devilish!
data["effectLimb"] = temp_pod.effectLimb //If true, pops off a limb (if applicable) from anyone caught under the pod when it lands
data["effectBluespace"] = temp_pod.bluespace //If true, the pod deletes (in a shower of sparks) after landing
@@ -150,7 +150,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
if("launchRandom") //Pick random turfs from the supplypod bay at centcom to launch
if (launchChoice == 2)
launchChoice = 0
- updateSelector()
+ updateSelector()
return
launchChoice = 2
updateSelector()
@@ -326,7 +326,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
temp_pod.soundVolume = 50
. = TRUE
////////////////////////////STYLE CHANGES//////////////////
- //Style is a value that is used to keep track of what the pod is supposed to look like. It can be used with the POD_STYLES list (in cargo.dm defines)
+ //Style is a value that is used to keep track of what the pod is supposed to look like. It can be used with the POD_STYLES list (in cargo.dm defines)
//as a way to get the proper icon state, name, and description of the pod.
if("styleStandard")
temp_pod.setStyle(STYLE_STANDARD)
@@ -367,7 +367,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
if("refresh") //Refresh the Pod bay. User should press this if they spawn something new in the centcom bay. Automatically called whenever the user launches a pod
refreshBay()
. = TRUE
- if("giveLauncher") //Enters the "Launch Mode". When the launcher is activated, temp_pod is cloned, and the result it filled and launched anywhere the user clicks (unless specificTarget is true)
+ if("giveLauncher") //Enters the "Launch Mode". When the launcher is activated, temp_pod is cloned, and the result it filled and launched anywhere the user clicks (unless specificTarget is true)
launcherActivated = !launcherActivated
updateCursor(launcherActivated) //Update the cursor of the user to a cool looking target icon
. = TRUE
@@ -436,7 +436,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
orderedArea = list()
if (!isemptylist(A.contents)) //Go through the area passed into the proc, and figure out the top left and bottom right corners by calculating max and min values
var/startX = A.contents[1].x //Create the four values (we do it off a.contents[1] so they have some sort of arbitrary initial value. They should be overwritten in a few moments)
- var/endX = A.contents[1].x
+ var/endX = A.contents[1].x
var/startY = A.contents[1].y
var/endY = A.contents[1].y
for (var/turf/T in A) //For each turf in the area, go through and find:
@@ -453,7 +453,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
orderedArea.Add(locate(j,startY - (i - endY),1)) //After gathering the start/end x and y, go through locating each turf from top left to bottom right, like one would read a book
return orderedArea //Return the filled list
-/datum/centcom_podlauncher/proc/preLaunch() //Creates a list of acceptable items,
+/datum/centcom_podlauncher/proc/preLaunch() //Creates a list of acceptable items,
numTurfs = 0 //Counts the number of turfs that can be launched (remember, supplypods either launch all at once or one turf-worth of items at a time)
acceptableTurfs = list()
for (var/turf/T in orderedArea) //Go through the orderedArea list
@@ -478,7 +478,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
//UpdateSelector() is here (instead if the if(1) switch block) because it also moves the selector to nullspace (to hide it) if needed
/datum/centcom_podlauncher/proc/launch(turf/A) //Game time started
- if (isnull(A))
+ if (isnull(A))
return
var/obj/structure/closet/supplypod/centcompod/toLaunch = DuplicateObject(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result
toLaunch.bay = bay //Bay is currently a nonstatic expression, so it cant go into toLaunch using DuplicateObject
@@ -487,7 +487,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
for (var/atom/movable/O in launchList)
DuplicateObject(O).forceMove(toLaunch) //Duplicate each atom/movable in launchList and forceMove them into the supplypod
new /obj/effect/DPtarget(A, toLaunch) //Create the DPTarget, which will eventually forceMove the temp_pod to it's location
- else
+ else
for (var/atom/movable/O in launchList) //If we aren't cloning the objects, just go through the launchList
O.forceMove(toLaunch) //and forceMove any atom/moveable into the supplypod
new /obj/effect/DPtarget(A, toLaunch) //Then, create the DPTarget effect, which will eventually forceMove the temp_pod to it's location
diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm
index f36ff0ce33..b507b617c3 100644
--- a/code/modules/cargo/gondolapod.dm
+++ b/code/modules/cargo/gondolapod.dm
@@ -39,14 +39,14 @@
set name = "Release Contents"
set category = "Gondola"
set desc = "Release any contents stored within your vast belly."
- linked_pod.open(src, manual = TRUE)
+ linked_pod.open(src)
/mob/living/simple_animal/pet/gondola/gondolapod/verb/check()
set name = "Count Contents"
set category = "Gondola"
set desc = "Take a deep look inside youself, and count up what's inside"
var/total = contents.len
- if (total)
+ if (total)
to_chat(src, "You detect [total] object[total > 1 ? "s" : ""] within your incredibly vast belly.")
else
to_chat(src, "A closer look inside yourself reveals... nothing.")
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 5442fcb932..7e466caf8a 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -410,7 +410,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
for (var/child in entries)
winset(src, "[child]", "[entries[child]]")
if (!ispath(child, /datum/verbs/menu))
- var/atom/verb/verbpath = child
+ var/procpath/verbpath = child
if (copytext(verbpath.name,1,2) != "@")
new child(src)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index edec4d74a6..ed8fc234c6 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -2328,9 +2328,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.Digitigrade_Leg_Swap(TRUE)
//let's be sure the character updates
- character.update_body()
- character.update_hair()
- character.update_body_parts()
+ if(icon_updates)
+ character.update_body()
+ character.update_hair()
+ character.update_body_parts()
/datum/preferences/proc/get_default_name(name_id)
switch(name_id)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1793bd8f4b..7e7f8b4285 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -223,7 +223,6 @@ BLIND // can't see anything
if(H.w_uniform == src)
H.update_suit_sensors()
- ..()
/obj/item/clothing/under/CtrlClick(mob/user)
. = ..()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 48704d7623..52293c7042 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -672,7 +672,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
"AI [pick("rogue", "is dead")]!!")
var/list/mob/living/carbon/people = list()
- var/list/mob/living/carbon/person = null
+ var/mob/living/carbon/person = null
var/datum/language/understood_language = target.get_random_understood_language()
for(var/mob/living/carbon/H in view(target))
if(H == target)
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index efe7418e44..5068ce09f5 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -5,6 +5,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
))
/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE)
+ RETURN_TYPE(original.type)
if(!original)
return
var/atom/O
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index c0e3beaf79..19049c8e6c 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -54,7 +54,7 @@
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_throw_impact(src, hit_atom)
-/obj/item/grown/microwave_act(obj/machine/microwave/M)
+/obj/item/grown/microwave_act(obj/machinery/microwave/M)
return
/obj/item/grown/on_grind()
diff --git a/code/modules/integrated_electronics/core/special_pins/list_pin.dm b/code/modules/integrated_electronics/core/special_pins/list_pin.dm
index 9e4731ac36..3532d68d70 100644
--- a/code/modules/integrated_electronics/core/special_pins/list_pin.dm
+++ b/code/modules/integrated_electronics/core/special_pins/list_pin.dm
@@ -7,7 +7,6 @@
interact(user)
/datum/integrated_io/lists/proc/interact(mob/user)
- . = ..()
var/list/my_list = data
var/t = "[src]
"
t += "List length: [my_list.len]
"
diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm
index 230d1ce154..aed99fac24 100644
--- a/code/modules/integrated_electronics/subtypes/atmospherics.dm
+++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm
@@ -2,7 +2,6 @@
#define TARGET_TO_SOURCE 1
#define PUMP_EFFICIENCY 0.6
#define TANK_FAILURE_PRESSURE (ONE_ATMOSPHERE*25)
-#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE*24)
#define PUMP_MAX_VOLUME 100
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index 1959fb55c7..d4c565c49a 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -199,7 +199,6 @@
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
if(installed_brain.brainmob)
installed_brain.brainmob.remote_control = null
- ..()
//Brain changes
@@ -238,7 +237,7 @@
brainholder.do_work(6)
-/mob/living/brain/canUseTopic()
+/mob/living/brain/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
return check_bot_self
/obj/item/integrated_circuit/smart/advanced_pathfinder/proc/hippie_xor_decrypt()
@@ -329,7 +328,6 @@
installed_pai.forceMove(drop_location())
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
installed_pai.pai.remote_control = null
- ..()
//pAI changes
@@ -371,5 +369,5 @@
paiholder.do_work(6)
-/mob/living/silicon/pai/canUseTopic()
- return check_bot_self
\ No newline at end of file
+/mob/living/silicon/pai/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
+ return check_bot_self
diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm
index c42f1b9f4e..d0232fc4f0 100644
--- a/code/modules/mining/machine_silo.dm
+++ b/code/modules/mining/machine_silo.dm
@@ -171,7 +171,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
return
var/datum/ore_silo_log/entry = new(M, action, amount, noun, mats)
- var/list/logs = GLOB.silo_access_logs[REF(src)]
+ var/list/datum/ore_silo_log/logs = GLOB.silo_access_logs[REF(src)]
if(!LAZYLEN(logs))
GLOB.silo_access_logs[REF(src)] = logs = list(entry)
else if(!logs[1].merge(entry))
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 4192c2235b..decf8d24eb 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -24,7 +24,7 @@
var/list/datum/brain_trauma/traumas = list()
-/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE)
+/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE, drop_if_replaced = TRUE)
..()
name = "brain"
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 7b6962794a..e4e8f06cfa 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -14,7 +14,7 @@
QDEL_LIST(alien_powers)
return ..()
-/obj/item/organ/alien/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/alien/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
for(var/obj/effect/proc_holder/alien/P in alien_powers)
M.AddAbility(P)
@@ -94,7 +94,7 @@
else
owner.adjustPlasma(plasma_rate * 0.1)
-/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(isalien(M))
var/mob/living/carbon/alien/A = M
@@ -117,7 +117,7 @@
var/recent_queen_death = 0 //Indicates if the queen died recently, aliens are heavily weakened while this is active.
alien_powers = list(/obj/effect/proc_holder/alien/whisper)
-/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
M.faction |= ROLE_ALIEN
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 8445f340e6..cdbc23d4d6 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
- var/mob/living/list/ignored_by = list() // list of mobs that will ignore this species
+ var/list/mob/living/ignored_by = list() // list of mobs that will ignore this species
//Breathing!
var/obj/item/organ/lungs/mutantlungs = null
var/breathid = "o2"
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 09fc26d04f..90f63467a0 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -78,7 +78,7 @@
icon_state = "brain-x-d"
var/obj/effect/proc_holder/spell/targeted/shadowwalk/shadowwalk
-/obj/item/organ/brain/nightmare/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/brain/nightmare/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(M.dna.species.id != "nightmare")
M.set_species(/datum/species/shadow/nightmare)
@@ -118,7 +118,7 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
Insert(user)
-/obj/item/organ/heart/nightmare/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/nightmare/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(special != HEART_SPECIAL_SHADOWIFY)
blade = new/obj/item/light_eater
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 1b1eb1a805..5cc0d1b2ea 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -783,7 +783,7 @@
/mob/living/silicon/ai/can_buckle()
return 0
-/mob/living/silicon/ai/incapacitated()
+/mob/living/silicon/ai/incapacitated(ignore_restraints, ignore_grab)
if(aiRestorePowerRoutine)
return TRUE
return ..()
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index f757203237..112add367f 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -49,7 +49,7 @@
else
padloc = "(UNKNOWN)"
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
- send_speech(message, 7, T, "robot", message_language = language)
+ send_speech(message, 7, T, "robot", language)
to_chat(src, "Holopad transmitted, [real_name] \"[message]\"")
else
to_chat(src, "No holopad connected.")
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 94283f82da..72f255137d 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -218,7 +218,7 @@
bot_control(action, usr) // Kill this later.
. = TRUE
-/mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, pda = 0)
+/mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, pda = 0, turf/user_turf, list/user_access = list())
if(pda && wires.is_cut(WIRE_RX)) // MULE wireless is controlled by wires.
return
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index c21166276a..f5a532d1eb 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -728,7 +728,7 @@ Difficulty: Very Hard
holder_animal.mind.AddSpell(P)
holder_animal.verbs -= /mob/living/verb/pulled
-/obj/structure/closet/stasis/dump_contents(var/kill = 1)
+/obj/structure/closet/stasis/dump_contents(override = TRUE, kill = 1)
STOP_PROCESSING(SSobj, src)
for(var/mob/living/L in src)
REMOVE_TRAIT(L, TRAIT_MUTE, STASIS_MUTE)
@@ -774,7 +774,7 @@ Difficulty: Very Hard
for(var/i in user)
if(istype(i, /obj/structure/closet/stasis))
var/obj/structure/closet/stasis/S = i
- S.dump_contents(0)
+ S.dump_contents(kill=0)
qdel(S)
break
user.gib()
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index 3009a3ebfd..5f7db07190 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -100,7 +100,7 @@
/obj/item/paper/contract/infernal/suicide_act(mob/user)
if(signed && (user == target.current) && istype(user, /mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
- H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!", forced = "infernal contract suicide")
+ H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!")
H.visible_message("[H] holds up a contract claiming [user.p_their()] soul, then immediately catches fire. It looks like [user.p_theyre()] trying to commit suicide!")
H.adjust_fire_stacks(20)
H.IgniteMob()
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 5b84608fad..6f42b67750 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -221,7 +221,7 @@
new_mob =new hooman(M.loc)
var/datum/preferences/A = new() //Randomize appearance for the human
- A.copy_to(new_mob, icon_updates=0)
+ A.copy_to(new_mob, FALSE)
var/mob/living/carbon/human/H = new_mob
H.update_body()
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index b5bfa06786..1eb75e042b 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -114,7 +114,6 @@
recharge_counter++
/obj/machinery/chem_dispenser/proc/display_beaker()
- ..()
var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker")
b_o.pixel_y = -4
b_o.pixel_x = -7
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index 4d60655488..c0d453de54 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -15,7 +15,7 @@
var/setting = 1 // displayed range is 3 * setting
var/max_range = 3 // displayed max range is 3 * max range
-/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc)
+/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc, silent=FALSE)
amount = setting
carry.copy_to(chemholder, 20)
carry.remove_any(amount * 16 / efficiency)
diff --git a/code/modules/spells/spell_types/area_teleport.dm b/code/modules/spells/spell_types/area_teleport.dm
index 7bede9f8be..747a10e769 100644
--- a/code/modules/spells/spell_types/area_teleport.dm
+++ b/code/modules/spells/spell_types/area_teleport.dm
@@ -83,6 +83,6 @@
else
playsound(user.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
if("whisper")
- user.whisper("[invocation] [uppertext(chosenarea.name)]", forced = "spell")
+ user.whisper("[invocation] [uppertext(chosenarea.name)]")
return
diff --git a/code/modules/spells/spell_types/inflict_handler.dm b/code/modules/spells/spell_types/inflict_handler.dm
index 25bdc7c9d2..3ccc039285 100644
--- a/code/modules/spells/spell_types/inflict_handler.dm
+++ b/code/modules/spells/spell_types/inflict_handler.dm
@@ -46,7 +46,7 @@
if(!amt_knockdown && amt_dam_stam)
target.adjustStaminaLoss(amt_dam_stam)
else
- target.Knockdown(amt_knockdown, override_hardstun = amt_hardstun, amt_dam_stam)
+ target.Knockdown(amt_knockdown, override_hardstun = amt_hardstun, override_stamdmg = amt_dam_stam)
target.Unconscious(amt_unconscious)
target.Stun(amt_stun)
diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm
index 1f3f2fff5b..0a4bd270a8 100644
--- a/code/modules/surgery/organs/appendix.dm
+++ b/code/modules/surgery/organs/appendix.dm
@@ -34,7 +34,7 @@
update_icon()
..()
-/obj/item/organ/appendix/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/appendix/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(inflamed)
M.ForceContractDisease(new /datum/disease/appendicitis(), FALSE, TRUE)
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 8af52abc47..81627104e8 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -128,7 +128,7 @@
var/on = FALSE
var/datum/effect_system/trail_follow/ion/ion_trail
-/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
. = ..()
if(!ion_trail)
ion_trail = new
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 82fbf932e9..a9830f36df 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -135,7 +135,7 @@ obj/item/organ/heart/slime
else
last_pump = world.time //lets be extra fair *sigh*
-/obj/item/organ/heart/cursed/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/cursed/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(owner)
to_chat(owner, "Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!")
diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm
index a9e2b331bb..6b435f282f 100644
--- a/code/modules/surgery/organs/tongue.dm
+++ b/code/modules/surgery/organs/tongue.dm
@@ -62,7 +62,7 @@
to_chat(owner, "Your tongue is really starting to hurt.")
-/obj/item/organ/tongue/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/tongue/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(say_mod && M.dna && M.dna.species)
M.dna.species.say_mod = say_mod
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index a555010567..72925b854e 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -140,7 +140,7 @@
user.say(message, spans = span_list, sanitize = FALSE)
message = lowertext(message)
- var/mob/living/list/listeners = list()
+ var/list/mob/living/listeners = list()
for(var/mob/living/L in get_hearers_in_view(8, user))
if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD)
if(L == user && !include_speaker)
@@ -663,7 +663,7 @@
//FIND THRALLS
message = lowertext(message)
- var/mob/living/list/listeners = list()
+ var/list/mob/living/listeners = list()
for(var/mob/living/L in get_hearers_in_view(8, user))
if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD)
if(L.has_status_effect(/datum/status_effect/chem/enthrall))//Check to see if they have the status
diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm
index 329cc127ab..ccadca56e5 100644
--- a/code/modules/zombie/organs.dm
+++ b/code/modules/zombie/organs.dm
@@ -23,7 +23,7 @@
GLOB.zombie_infection_list -= src
. = ..()
-/obj/item/organ/zombie_infection/Insert(var/mob/living/carbon/M, special = 0)
+/obj/item/organ/zombie_infection/Insert(var/mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/interface/menu.dm b/interface/menu.dm
index eca97d669d..547c2edfc1 100644
--- a/interface/menu.dm
+++ b/interface/menu.dm
@@ -65,10 +65,10 @@ GLOBAL_LIST_EMPTY(menulist)
/datum/verbs/menu/Icon/Load_checked(client/C) //So we can be lazy, we invoke the "checked" menu item on menu load.
- var/atom/verb/verbpath = Get_checked(C)
+ var/procpath/verbpath = Get_checked(C)
if (!verbpath || !(verbpath in typesof("[type]/verb")))
return
-
+
if (copytext(verbpath.name,1,2) == "@")
winset(C, null, list2params(list("command" = copytext(verbpath.name,2))))
else
diff --git a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm b/modular_citadel/code/game/gamemodes/gangs/gangtool.dm
index 9e828a7042..e99455bcd5 100644
--- a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm
+++ b/modular_citadel/code/game/gamemodes/gangs/gangtool.dm
@@ -130,7 +130,7 @@
/obj/item/device/gangtool/proc/ping_gang(mob/user)
if(!can_use(user))
return
- var/message = stripped_input(user,"Discreetly send a gang-wide message.","Send Message") as null|text
+ var/message = stripped_input(user,"Discreetly send a gang-wide message.","Send Message")
if(!message || !can_use(user))
return
if(!is_station_level(user.z))
diff --git a/modular_citadel/code/modules/mentor/mentor_verbs.dm b/modular_citadel/code/modules/mentor/mentor_verbs.dm
index b8797e3ef9..716a484ee2 100644
--- a/modular_citadel/code/modules/mentor/mentor_verbs.dm
+++ b/modular_citadel/code/modules/mentor/mentor_verbs.dm
@@ -1,8 +1,8 @@
-GLOBAL_PROTECT(mentor_verbs)
GLOBAL_LIST_INIT(mentor_verbs, list(
/client/proc/cmd_mentor_say,
/client/proc/show_mentor_memo
))
+GLOBAL_PROTECT(mentor_verbs)
/client/proc/add_mentor_verbs()
if(mentor_datum)
diff --git a/tgstation.dme b/tgstation.dme
index 9e52889df7..fccf801c7e 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -76,6 +76,7 @@
#include "code\__DEFINES\pinpointers.dm"
#include "code\__DEFINES\pipe_construction.dm"
#include "code\__DEFINES\preferences.dm"
+#include "code\__DEFINES\procpath.dm"
#include "code\__DEFINES\profile.dm"
#include "code\__DEFINES\qdel.dm"
#include "code\__DEFINES\radiation.dm"
@@ -92,6 +93,7 @@
#include "code\__DEFINES\shuttles.dm"
#include "code\__DEFINES\sight.dm"
#include "code\__DEFINES\sound.dm"
+#include "code\__DEFINES\spaceman_dmm.dm"
#include "code\__DEFINES\stat.dm"
#include "code\__DEFINES\stat_tracking.dm"
#include "code\__DEFINES\status_effects.dm"
From e50c56150e3afc1b678ea47f5193a2788fa7ee86 Mon Sep 17 00:00:00 2001
From: Ghommie <42542238+Ghommie@users.noreply.github.com>
Date: Mon, 11 Nov 2019 23:10:22 +0100
Subject: [PATCH 02/15] ports "Adds superlube to the clown ruin" and buffs
clown PDAs
---
.../lavaland_biodome_clown_planet.dmm | 100 +++++++++---------
code/__DEFINES/misc.dm | 11 +-
code/__DEFINES/mobs.dm | 2 +
code/datums/components/wet_floor.dm | 5 +-
.../objects/items/devices/PDA/PDA_types.dm | 2 +-
code/game/turfs/open.dm | 13 +--
6 files changed, 70 insertions(+), 63 deletions(-)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
index 9b7ca819cc..226098bfa1 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
@@ -49,7 +49,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"as" = (
@@ -70,7 +70,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"at" = (
@@ -89,7 +89,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"au" = (
@@ -129,7 +129,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ay" = (
@@ -149,7 +149,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"az" = (
@@ -170,7 +170,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aA" = (
@@ -190,7 +190,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aB" = (
@@ -209,7 +209,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aC" = (
@@ -225,7 +225,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aD" = (
@@ -242,7 +242,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aE" = (
@@ -261,7 +261,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aF" = (
@@ -282,7 +282,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aG" = (
@@ -301,7 +301,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aH" = (
@@ -321,7 +321,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aI" = (
@@ -341,7 +341,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aJ" = (
@@ -368,7 +368,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aL" = (
@@ -394,7 +394,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aO" = (
@@ -415,7 +415,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aP" = (
@@ -448,7 +448,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aU" = (
@@ -472,7 +472,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aW" = (
@@ -493,7 +493,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aX" = (
@@ -522,7 +522,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aZ" = (
@@ -542,7 +542,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ba" = (
@@ -559,7 +559,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bb" = (
@@ -588,7 +588,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bd" = (
@@ -631,7 +631,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bg" = (
@@ -732,7 +732,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bt" = (
@@ -758,7 +758,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bx" = (
@@ -775,7 +775,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"by" = (
@@ -792,7 +792,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bz" = (
@@ -817,7 +817,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bB" = (
@@ -825,7 +825,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bC" = (
@@ -846,7 +846,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bD" = (
@@ -872,7 +872,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bH" = (
@@ -881,7 +881,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bI" = (
@@ -899,7 +899,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bK" = (
@@ -918,7 +918,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bL" = (
@@ -942,7 +942,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bP" = (
@@ -989,7 +989,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bY" = (
@@ -999,7 +999,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bZ" = (
@@ -1008,7 +1008,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ca" = (
@@ -1018,7 +1018,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"cc" = (
@@ -1052,7 +1052,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dC" = (
@@ -1075,7 +1075,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dD" = (
@@ -1097,7 +1097,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dE" = (
@@ -1120,7 +1120,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dF" = (
@@ -1175,7 +1175,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dK" = (
@@ -1202,7 +1202,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dO" = (
@@ -1211,7 +1211,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"eX" = (
@@ -1260,7 +1260,7 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"KX" = (
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 4b76f41c61..a18abaaada 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -203,11 +203,12 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
#define LOCKED_SENSORS 2
//Wet floor type flags. Stronger ones should be higher in number.
-#define TURF_DRY 0
-#define TURF_WET_WATER 1
-#define TURF_WET_PERMAFROST 2
-#define TURF_WET_ICE 4
-#define TURF_WET_LUBE 8
+#define TURF_DRY (0)
+#define TURF_WET_WATER (1<<0)
+#define TURF_WET_PERMAFROST (1<<1)
+#define TURF_WET_ICE (1<<2)
+#define TURF_WET_LUBE (1<<3)
+#define TURF_WET_SUPERLUBE (1<<4)
#define IS_WET_OPEN_TURF(O) O.GetComponent(/datum/component/wet_floor)
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 5bd0ee5b3b..8d2913629a 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -201,6 +201,8 @@
#define SLIDE (1<<1)
#define GALOSHES_DONT_HELP (1<<2)
#define SLIDE_ICE (1<<3)
+#define SLIP_WHEN_CRAWLING (1<<4) //clown planet ruin
+#define SLIP_WHEN_JOGGING (1<<5) //slips prevented by walking are also dodged if the mob is not sprinting or fatigued... unless this flag is on.
#define MAX_CHICKENS 50
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index 84b0320375..38b17993d8 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -88,6 +88,9 @@
if(TURF_WET_PERMAFROST)
intensity = 120
lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP
+ if(TURF_WET_SUPERLUBE)
+ intensity = 120
+ lube_flags = SLIDE | GALOSHES_DONT_HELP | SLIP_WHEN_CRAWLING
else
qdel(parent.GetComponent(/datum/component/slippery))
return
@@ -159,7 +162,7 @@
//NB it's possible we get deleted after this, due to inherit
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE)
- var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST)
+ var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST, TURF_WET_SUPERLUBE)
if(duration_minimum <= 0 || !type)
return FALSE
if(type in allowed_types)
diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm
index 54b82d8e07..2da47d481e 100644
--- a/code/game/objects/items/devices/PDA/PDA_types.dm
+++ b/code/game/objects/items/devices/PDA/PDA_types.dm
@@ -10,7 +10,7 @@
/obj/item/pda/clown/Initialize()
. = ..()
- AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, .proc/AfterSlip))
+ AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING|SLIP_WHEN_JOGGING, CALLBACK(src, .proc/AfterSlip))
/obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
if (istype(M) && (M.real_name != owner))
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index bd24e0ff93..f992e27e9a 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -267,14 +267,15 @@
if(!(lube&GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube.
return 0
else
- if(C.lying || !(C.status_flags & CANKNOCKDOWN)) // can't slip unbuckled mob if they're lying or can't fall.
+ if((lube&SLIP_WHEN_CRAWLING) && (!(C.lying || !(C.status_flags & CANKNOCKDOWN))) // can't slip unbuckled mob if they're lying or can't fall.
return 0
- if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING))
- return 0
- if(ishuman(C) && (lube&NO_SLIP_WHEN_WALKING))
- var/mob/living/carbon/human/H = C
- if(!H.sprinting && H.getStaminaLoss() <= 20)
+ if(lube & NO_SLIP_WHEN_WALKING)
+ if(C.m_intent == MOVE_INTENT_WALK)
return 0
+ if(ishuman(C) && !(lube & SLIP_WHEN_JOGGING))
+ var/mob/living/carbon/human/H = C
+ if(!H.sprinting && H.getStaminaLoss() <= 20)
+ return 0
if(!(lube&SLIDE_ICE))
to_chat(C, "You slipped[ O ? " on the [O.name]" : ""]!")
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
From 19a511929d7e610ae496eb547f390622fd95247e Mon Sep 17 00:00:00 2001
From: Ghommie <42542238+Ghommie@users.noreply.github.com>
Date: Mon, 11 Nov 2019 23:39:03 +0100
Subject: [PATCH 03/15] and "Replaces the slime extract in the clown biodome
with a superlube sprayer."
---
.../lavaland_biodome_clown_planet.dmm | 2 +-
code/game/turfs/open.dm | 2 +-
.../chemistry/reagents/other_reagents.dm | 9 ++++++++-
icons/obj/chemical.dmi | Bin 53744 -> 54207 bytes
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
index 226098bfa1..639d63772c 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
@@ -970,8 +970,8 @@
/turf/open/floor/carpet,
/area/ruin/powered/clownplanet)
"bT" = (
-/obj/item/slime_extract/rainbow,
/obj/structure/table/glass,
+/obj/item/reagent_containers/spray/waterflower/superlube,
/turf/open/floor/carpet,
/area/ruin/powered/clownplanet)
"bU" = (
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index f992e27e9a..96c43c4106 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -267,7 +267,7 @@
if(!(lube&GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube.
return 0
else
- if((lube&SLIP_WHEN_CRAWLING) && (!(C.lying || !(C.status_flags & CANKNOCKDOWN))) // can't slip unbuckled mob if they're lying or can't fall.
+ if(!(lube&SLIP_WHEN_CRAWLING) && (C.lying || !(C.status_flags & CANKNOCKDOWN))) // can't slip unbuckled mob if they're lying or can't fall.
return 0
if(lube & NO_SLIP_WHEN_WALKING)
if(C.m_intent == MOVE_INTENT_WALK)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index af6a65ebe1..ecd200f639 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -503,12 +503,19 @@
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
color = "#009CA8" // rgb: 0, 156, 168
taste_description = "cherry" // by popular demand
+ var/lube_kind = TURF_WET_LUBE ///What kind of slipperiness gets added to turfs.
/datum/reagent/lube/reaction_turf(turf/open/T, reac_volume)
if (!istype(T))
return
if(reac_volume >= 1)
- T.MakeSlippery(TURF_WET_LUBE, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
+ T.MakeSlippery(lube_kind, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
+
+///Stronger kind of lube. Applies TURF_WET_SUPERLUBE.
+/datum/reagent/lube/superlube
+ name = "Super Duper Lube"
+ description = "This \[REDACTED\] has been outlawed after the incident on \[DATA EXPUNGED\]."
+ lube_kind = TURF_WET_SUPERLUBE
/datum/reagent/spraytan
name = "Spray Tan"
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 89acf0645e74a75c1628735182668903ff5b0628..701c3a2467e2a494bae61cd4a54851852f2a0e86 100644
GIT binary patch
delta 15170
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
Date: Tue, 12 Nov 2019 00:47:36 +0100
Subject: [PATCH 04/15] The actual waterflower, am I funny yet?
---
code/modules/reagents/reagent_containers/spray.dm | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 424d7b9ed0..b3f9ef8202 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -223,6 +223,15 @@
/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
return
+///Subtype used for the lavaland clown ruin.
+/obj/item/reagent_containers/spray/waterflower/superlube
+ name = "clown flower"
+ desc = "A delightly devilish flower... you got a feeling where this is going."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "clownflower"
+ volume = 30
+ list_reagents = list(/datum/reagent/lube/superlube = 30)
+
/obj/item/reagent_containers/spray/waterflower/cyborg
reagent_flags = NONE
volume = 100
From c784cab060d33a5d7dda35368046d531ac3c8c86 Mon Sep 17 00:00:00 2001
From: Persi
Date: Tue, 12 Nov 2019 05:37:30 -0500
Subject: [PATCH 05/15] Corrects the descriptions of meth and ephedrine to
reflect that their movespeed buffs were previously removed.
---
code/modules/reagents/chemistry/reagents/drug_reagents.dm | 2 +-
code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 15d517a0f5..5b6c798daf 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -162,7 +162,7 @@
/datum/reagent/drug/methamphetamine
name = "Methamphetamine"
id = "methamphetamine"
- description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
+ description = "Reduces stun times by about 300%, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
reagent_state = LIQUID
color = "#FAFAFA"
overdose_threshold = 20
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 592f7bc592..005cf4268f 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -629,7 +629,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/ephedrine
name = "Ephedrine"
id = "ephedrine"
- description = "Increases stun resistance and movement speed. Overdose deals toxin damage and inhibits breathing."
+ description = "Increases stun resistance. Overdose deals toxin damage and inhibits breathing."
reagent_state = LIQUID
color = "#D2FFFA"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
From f0930249676136a63f8105f44521b4accf9f8a27 Mon Sep 17 00:00:00 2001
From: kappa-sama
Date: Tue, 12 Nov 2019 17:04:36 -0500
Subject: [PATCH 06/15] better guns
---
.../projectiles/guns/ballistic/revolver.dm | 1 +
icons/obj/guns/projectile.dmi | Bin 35860 -> 36449 bytes
2 files changed, 1 insertion(+)
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index a5fb8a85aa..25a50f3e03 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -167,6 +167,7 @@
/obj/item/gun/ballistic/revolver/russian
name = "\improper Russian revolver"
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull."
+ icon_state = "russianrevolver"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357
var/spun = FALSE
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 6b2d9e5c0619ff730357bb7fa76c598e3efd98cd..e4d8460417f4f19ca6622075f06ff932116a70c0 100644
GIT binary patch
literal 36449
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