diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 91fd01f3f024..df3777f2bc0c 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -318,14 +318,6 @@ GLOBAL_LIST_INIT(all_precise_body_zones, list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_
/// Calculates the new armour value after armour penetration. Can return negative values, and those must be caught.
#define PENETRATE_ARMOUR(armour, penetration) (penetration == 100 ? 0 : 100 * (armour - penetration) / (100 - penetration))
-/// Return values used in item/melee/baton/baton_attack.
-/// Does a normal item attack.
-#define BATON_DO_NORMAL_ATTACK 1
-/// The attack has been stopped. Either because the user was clumsy or the attack was blocked.
-#define BATON_ATTACK_DONE 2
-/// The baton attack is still going. baton_effect() is called.
-#define BATON_ATTACKING 3
-
// Defines for combo attack component
/// LMB Attack
#define LEFT_ATTACK "Left Attack"
@@ -360,3 +352,46 @@ GLOBAL_LIST_INIT(all_precise_body_zones, list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_
#define JOULES_PER_DAMAGE (25 KILO JOULES)
/// Calculates the amount of burn force when applying this much energy to a mob via electrocution from an energy source.
#define ELECTROCUTE_DAMAGE(energy) (energy >= 1 KILO JOULES ? clamp(20 + round(energy / JOULES_PER_DAMAGE), 20, 195) + rand(-5,5) : 0)
+
+// Attack chain attack_modifier modifiers
+/// Sets the weapon's base force to this. Use carefully (as multiple overrides may collide). Set via [SET_ATTACK_FORCE]
+#define FORCE_OVERRIDE "force_override"
+/// Flat addition or subtration to the weapon's force. Set via [MODIFY_ATTACK_FORCE]
+#define FORCE_MODIFIER "force_modifier"
+/// Multiplication of the weapon's force. Applied AFTER [FORCE_MODIFIER]. Set via [MODIFY_ATTACK_FORCE_MULTIPLIER]
+#define FORCE_MULTIPLIER "force_multiplier"
+/// If set in modifiers, default messages ("You hit the thing with the thing") are silenced
+#define SILENCE_DEFAULT_MESSAGES "silence_default_messages"
+/// If set in modifiers, default hitsound is silenced
+#define SILENCE_HITSOUND "silence_hitsound"
+
+/// Used in attack chain to set the force of the attack without changing the base force of the item.
+#define SET_ATTACK_FORCE(atk_mods, value) \
+ if(!islist(atk_mods)) { atk_mods = list() }; \
+ atk_mods[FORCE_OVERRIDE] = value;
+
+/// Used in attack chain to add or remove force from the attack without changing the base force of the item.
+#define MODIFY_ATTACK_FORCE(atk_mods, amount) \
+ if(!islist(atk_mods)) { atk_mods = list() }; \
+ atk_mods[FORCE_MODIFIER] += amount;
+
+/// Used in attack chain to multiply the force of the attack without changing the base force of the item.
+#define MODIFY_ATTACK_FORCE_MULTIPLIER(atk_mods, amount) \
+ if(!islist(atk_mods)) { atk_mods = list() }; \
+ if(!(FORCE_MULTIPLIER in atk_mods)) { atk_mods[FORCE_MULTIPLIER] = 1 }; \
+ atk_mods[FORCE_MULTIPLIER] *= amount;
+
+/// Used in attack chain to prevent hitsounds on attack (to allow for custom sounds)
+#define MUTE_ATTACK_HITSOUND(atk_mods) \
+ if(!islist(atk_mods)) { atk_mods = list() }; \
+ atk_mods[SILENCE_HITSOUND] = TRUE;
+
+/// Used in attack chain to prevent default visible messages from being sent (to allow for custom messages)
+#define HIDE_ATTACK_MESSAGES(atk_mods) \
+ if(!islist(atk_mods)) { atk_mods = list() }; \
+ atk_mods[SILENCE_DEFAULT_MESSAGES] = TRUE;
+
+/// Calculates the final force of some item based on atk_mods
+/// Needs to have support for force overrides and multipliers of 0 (hence why we ternaries are used over 'or's)
+#define CALCULATE_FORCE(some_item, atk_mods) \
+ ((((FORCE_OVERRIDE in atk_mods) ? atk_mods[FORCE_OVERRIDE] : some_item.force) + (atk_mods?[FORCE_MODIFIER] || 0)) * ((FORCE_MULTIPLIER in atk_mods) ? atk_mods[FORCE_MULTIPLIER] : 1))
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 5c5c2aefa6c2..3ac9c0886051 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -2,11 +2,11 @@
// When the signal is called: (signal arguments)
// All signals send the source datum of the signal as the first argument
-///from base of atom/attackby(): (/obj/item, /mob/living, params)
+///from base of atom/attackby(): (/obj/item, /mob/living, list/modifiers)
#define COMSIG_ATOM_ATTACKBY "atom_attackby"
-/// From base of [atom/proc/attacby_secondary()]: (/obj/item/weapon, /mob/user, params)
+/// From base of [atom/proc/attacby_secondary()]: (/obj/item/weapon, /mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACKBY_SECONDARY "atom_attackby_secondary"
-/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, proximity_flag, click_parameters)
+/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, list/modifiers)
#define COMSIG_ATOM_AFTER_ATTACKEDBY "atom_after_attackby"
/// From base of [/atom/proc/attack_hand_secondary]: (mob/user, list/modifiers) - Called when the atom receives a secondary unarmed attack.
#define COMSIG_ATOM_ATTACK_HAND_SECONDARY "atom_attack_hand_secondary"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
index e8dbddc50827..8de0872a7ea9 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
@@ -295,7 +295,7 @@
/// Sent to the mob when their mind is slaved
#define COMSIG_MOB_ENSLAVED_TO "mob_enslaved_to"
-/// From /obj/item/proc/attack_atom: (mob/living/attacker, atom/attacked)
+/// From /obj/item/proc/attack_atom: (mob/living/attacker, atom/attacked, list/modifiers)
#define COMSIG_LIVING_ATTACK_ATOM "living_attack_atom"
/// From /mob/living/proc/stop_leaning()
#define COMSIG_LIVING_STOPPED_LEANING "living_stopped_leaning"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
index 4623a3d0dc66..60b352accca1 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
@@ -187,7 +187,7 @@
#define COMSIG_TABLE_SLAMMED "table_slammed"
///from base of atom/attack_hand(): (mob/user, modifiers)
#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand"
-///from base of /obj/item/attack(): (mob/M, mob/user)
+///from base of /obj/item/attack(): (mob/M, mob/user, list/modifiers, list/attack_modifiers)
#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack"
///from base of mob/RangedAttack(): (atom/A, modifiers)
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged"
diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm
index ed3ba0553bf9..06f6497dda5d 100644
--- a/code/__DEFINES/dcs/signals/signals_object.dm
+++ b/code/__DEFINES/dcs/signals/signals_object.dm
@@ -136,7 +136,7 @@
#define COMSIG_ITEM_ON_GRIND "on_grind"
///from base of obj/item/on_juice(): ()
#define COMSIG_ITEM_ON_JUICE "on_juice"
-///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) when an object is used as compost: (mob/user)
+///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) when an object is used as compost: (mob/user)
#define COMSIG_ITEM_ON_COMPOSTED "on_composted"
///Called when an item is dried by a drying rack
#define COMSIG_ITEM_DRIED "item_dried"
@@ -190,7 +190,7 @@
#define COMSIG_ITEM_OFFER_TAKEN "item_offer_taken"
///Interrupts the offer acceptance
#define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0)
-/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params)
+/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, list/modifiers)
#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked"
/// Called by /obj/item/proc/worn_overlays(list/overlays, mutable_appearance/standing, isinhands, icon_file)
#define COMSIG_ITEM_GET_WORN_OVERLAYS "item_get_worn_overlays"
@@ -452,24 +452,24 @@
/// Prevents click from happening.
#define COMPONENT_CANCEL_EQUIPMENT_CLICK (1<<0)
-///from base of /obj/item/attack(): (mob/living, mob/living, params)
+///from base of /obj/item/attack(): (mob/living, mob/living, list/modifiers, list/attack_modifiers)
#define COMSIG_ITEM_ATTACK "item_attack"
///from base of obj/item/attack_self(): (/mob)
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self"
//from base of obj/item/attack_self_secondary(): (/mob)
#define COMSIG_ITEM_ATTACK_SELF_SECONDARY "item_attack_self_secondary"
-///from base of obj/item/attack_atom(): (/atom, /mob)
+///from base of obj/item/attack_atom(): (/atom, /mob, list/modifiers)
#define COMSIG_ITEM_ATTACK_ATOM "item_attack_atom"
-///from base of obj/item/pre_attack(): (atom/target, mob/user, params)
+///from base of obj/item/pre_attack(): (atom/target, mob/user, list/modifiers)
#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack"
-/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, params)
+/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, list/modifiers, list/attack_modifiers)
#define COMSIG_ITEM_PRE_ATTACK_SECONDARY "item_pre_attack_secondary"
#define COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN (1<<0)
#define COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN (1<<1)
#define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN (1<<2)
-/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, params)
+/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, list/modifiers, list/attack_modifiers)
#define COMSIG_ITEM_ATTACK_SECONDARY "item_attack_secondary"
-///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, click_parameters)
+///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, list/modifiers)
#define COMSIG_ITEM_AFTERATTACK "item_afterattack"
///from base of obj/item/embedded(): (atom/target, obj/item/bodypart/part)
#define COMSIG_ITEM_EMBEDDED "item_embedded"
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 152255634bc5..deeb3f4b1d77 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -141,7 +141,7 @@
//User itself, current loc, and user inventory
if(A in DirectAccess())
if(W)
- W.melee_attack_chain(src, A, params)
+ W.melee_attack_chain(src, A, modifiers)
else
if(ismob(A))
changeNext_move(CLICK_CD_MELEE)
@@ -162,7 +162,7 @@
//Standard reach turf to turf or reaching inside storage
if(CanReach(A,W))
if(W)
- W.melee_attack_chain(src, A, params)
+ W.melee_attack_chain(src, A, modifiers)
else
if(ismob(A))
changeNext_move(CLICK_CD_MELEE)
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 8c7809c24e92..333cb89439c0 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -78,7 +78,7 @@
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
if(A == loc || (A in loc) || (A in contents))
- W.melee_attack_chain(src, A, params)
+ W.melee_attack_chain(src, A, modifiers)
return
if(!isturf(loc))
@@ -86,7 +86,7 @@
// cyborg rightclick code, allowing borgos to use weapons at range
if(CanReach(A,W))
- W.melee_attack_chain(src, A, params)
+ W.melee_attack_chain(src, A, modifiers)
return
else if(isturf(A) || isturf(A.loc))
A.base_ranged_item_interaction(src, W, modifiers)
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index a8b6acd42935..45a3144e9cad 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -1,19 +1,32 @@
/**
- * This is the proc that handles the order of an item_attack.
+ * THIS IS THE ROOT OF ALL EVIL (I mean the root of all item-on-atom interactions)
*
- * The order of procs called is:
- * * [/atom/proc/tool_act] on the target. If it returns ITEM_INTERACT_SUCCESS or ITEM_INTERACT_BLOCKING, the chain will be stopped.
- * * [/obj/item/proc/pre_attack] on src. If this returns TRUE, the chain will be stopped.
- * * [/atom/proc/attackby] on the target. If it returns TRUE, the chain will be stopped.
- * * [/obj/item/proc/afterattack]. The return value does not matter.
+ * Implementation details
+ *
+ * [obj/item/proc/base_item_interaction] handles all non-combat interactions of an item with an atom.
+ * This calls [atom/proc/tool_act], among others.
+ *
+ * [obj/item/proc/pre_attack] is called before an attack is made, before we even check for block.
+ * Use pre attack to cancel attacks early based on conditions ("You cant attack with this unless you're a pacifist!")
+ * After pre-attack we go into [atom/proc/attackby] which is where individual atoms handle what happens when being hit
+ * Objects use [obj/item/proc/attack_atom], mobs use [obj/item/proc/attack].
+ * You GENERALLY should never override attack, like ever. (On-attack effects go in afterattack)
+ * Regardless, we go BACK to the atom to call [atom/proc/attacked_by], which is where the damage is actually applied.
+ * Finally we call [obj/item/proc/afterattack] after damage is dealt, to handle special item interacts after an attack occurs.
+ * Use afterattack for stuff like "My stick stuns when it hits people".
+ *
+ * Arguments
+ * * mob/living/user - The mob using src on something
+ * * atom/target - The atom being clicked on with src
+ * * list/modifiers - click params such as alt/shift and x/y, etc
+ * * list/attack_modifiers - attack modifiers such as force, damage type, etc. Only used in attacks
*/
-/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
+/obj/item/proc/melee_attack_chain(mob/user, atom/target, list/modifiers, list/attack_modifiers = list())
//Proxy replaces src cause it returns an atom that will attack the target on our behalf
var/obj/item/source_atom = get_proxy_attacker_for(target, user)
if(source_atom != src) //if we are someone else then call that attack chain else we can proceed with the usual stuff
- return source_atom.melee_attack_chain(user, target, params)
+ return source_atom.melee_attack_chain(user, target, modifiers, attack_modifiers)
- var/list/modifiers = params2list(params)
var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK)
var/item_interact_result = target.base_item_interaction(user, src, modifiers)
@@ -26,9 +39,9 @@
var/pre_attack_result
if (is_right_clicking)
- switch (pre_attack_secondary(target, user, params))
+ switch (pre_attack_secondary(target, user, modifiers, attack_modifiers))
if (SECONDARY_ATTACK_CALL_NORMAL)
- pre_attack_result = pre_attack(target, user, params)
+ pre_attack_result = pre_attack(target, user, modifiers, attack_modifiers)
if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return TRUE
if (SECONDARY_ATTACK_CONTINUE_CHAIN)
@@ -36,7 +49,7 @@
else
CRASH("pre_attack_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm")
else
- pre_attack_result = pre_attack(target, user, params)
+ pre_attack_result = pre_attack(target, user, modifiers, attack_modifiers)
if(pre_attack_result)
return TRUE
@@ -45,9 +58,9 @@
var/attackby_result
if (is_right_clicking)
- switch (target.attackby_secondary(src, user, params))
+ switch (target.attackby_secondary(src, user, modifiers, attack_modifiers))
if (SECONDARY_ATTACK_CALL_NORMAL)
- attackby_result = target.attackby(src, user, params)
+ attackby_result = target.attackby(src, user, modifiers, attack_modifiers)
if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return TRUE
if (SECONDARY_ATTACK_CONTINUE_CHAIN)
@@ -55,7 +68,7 @@
else
CRASH("attackby_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm")
else
- attackby_result = target.attackby(src, user, params)
+ attackby_result = target.attackby(src, user, modifiers, attack_modifiers)
if (attackby_result)
// This means the attack failed or was handled for whatever reason
@@ -66,9 +79,9 @@
if(user.client && isitem(target))
if(isnull(user.get_inactive_held_item()))
- SStutorials.suggest_tutorial(user, /datum/tutorial/switch_hands, params2list(params))
+ SStutorials.suggest_tutorial(user, /datum/tutorial/switch_hands, modifiers)
else
- SStutorials.suggest_tutorial(user, /datum/tutorial/drop, params2list(params))
+ SStutorials.suggest_tutorial(user, /datum/tutorial/drop, modifiers)
return TRUE
@@ -87,14 +100,15 @@
* Called on the item before it hits something
*
* Arguments:
- * * atom/A - The atom about to be hit
+ * * atom/target - The atom about to be hit
* * mob/living/user - The mob doing the htting
- * * params - click params such as alt/shift etc
- *
+ * * list/modifiers - click params such as alt/shift etc
+ * * attack_modifiers - attack modifiers such as force, damage type, etc
+
* See: [/obj/item/proc/melee_attack_chain]
*/
-/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
- if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN)
+/obj/item/proc/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) //do stuff before attackby!
+ if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, target, user, modifiers, attack_modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
return FALSE //return TRUE to avoid calling attackby after this proc does stuff
@@ -104,12 +118,13 @@
* Arguments:
* * atom/target - The atom about to be hit
* * mob/living/user - The mob doing the htting
- * * params - click params such as alt/shift etc
+ * * list/modifiers - click params such as alt/shift etc
+ * * list/attack_modifiers - attack modifiers such as force, damage type, etc
*
* See: [/obj/item/proc/melee_attack_chain]
*/
-/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, params)
- var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, params)
+/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, modifiers, attack_modifiers)
if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -125,12 +140,13 @@
* Arguments:
* * obj/item/attacking_item - The item hitting this atom
* * mob/user - The wielder of this item
- * * params - click params such as alt/shift etc
+ * * list/modifiers - click params such as alt/shift etc
+ * * list/attack_modifiers - attack modifiers such as force, damage type, etc
*
* See: [/obj/item/proc/melee_attack_chain]
*/
-/atom/proc/attackby(obj/item/attacking_item, mob/user, params)
- if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, params) & COMPONENT_NO_AFTERATTACK)
+/atom/proc/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, modifiers, attack_modifiers) & COMPONENT_NO_AFTERATTACK)
return TRUE
return FALSE
@@ -140,12 +156,13 @@
* Arguments:
* * obj/item/weapon - The item hitting this atom
* * mob/user - The wielder of this item
- * * params - click params such as alt/shift etc
+ * * list/modifiers - click params such as alt/shift etc
+ * * list/attack_modifiers - attack modifiers such as force, damage type, etc
*
* See: [/obj/item/proc/melee_attack_chain]
*/
-/atom/proc/attackby_secondary(obj/item/weapon, mob/user, params)
- var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, params)
+/atom/proc/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
+ var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, modifiers, attack_modifiers)
if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -155,12 +172,12 @@
return SECONDARY_ATTACK_CALL_NORMAL
-/obj/attackby(obj/item/attacking_item, mob/user, params)
+/obj/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(..())
return TRUE
if(!(obj_flags & CAN_BE_HIT))
return FALSE
- return attacking_item.attack_atom(src, user, params)
+ return attacking_item.attack_atom(src, user, modifiers, attack_modifiers)
/mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(user.combat_mode)
@@ -178,14 +195,14 @@
return NONE
-/mob/living/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(..())
return TRUE
user.changeNext_move(attacking_item.attack_speed)
- return attacking_item.attack(src, user, params)
+ return attacking_item.attack(src, user, modifiers, attack_modifiers)
-/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, params)
- var/result = weapon.attack_secondary(src, user, params)
+/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/result = weapon.attack_secondary(src, user, modifiers, attack_modifiers)
// Normal attackby updates click cooldown, so we have to make up for it
if (result != SECONDARY_ATTACK_CALL_NORMAL)
@@ -202,51 +219,52 @@
* Arguments:
* * mob/living/target_mob - The mob being hit by this item
* * mob/living/user - The mob hitting with this item
- * * params - Click params of this attack
+ * * modifiers - click modifiers such as alt/shift or x/y
+ * * attack_modifiers - attack modifiers such as force, damage type, etc
*/
-/obj/item/proc/attack(mob/living/target_mob, mob/living/user, params)
- var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, params)
+/obj/item/proc/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, modifiers, attack_modifiers) || SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, modifiers, attack_modifiers)
if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
if(signal_return & COMPONENT_SKIP_ATTACK)
return FALSE
- SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, params)
-
if(item_flags & NOBLUDGEON)
return FALSE
- if(!IS_DISABLING_DAMAGE(damtype) && force && HAS_TRAIT(user, TRAIT_PACIFISM))
+ var/final_force = CALCULATE_FORCE(src, attack_modifiers)
+ if(damtype != STAMINA && final_force && HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, span_warning("You don't want to harm other living beings!"))
return FALSE
- if(!force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND))
- playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1)
- else if(hitsound)
- playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0)
+ if(!LAZYACCESS(attack_modifiers, SILENCE_HITSOUND))
+ if(!final_force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND))
+ playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1)
+ else if(hitsound)
+ playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0)
target_mob.lastattacker = user.real_name
target_mob.lastattackerckey = user.ckey
- if(force && target_mob == user && user.client)
+ if(final_force && target_mob == user && user.client)
user.client.give_award(/datum/award/achievement/misc/selfouch, user)
if(get(src, /mob/living) == user) // telekinesis.
user.do_attack_animation(target_mob)
- if(!target_mob.attacked_by(src, user))
+ if(!target_mob.attacked_by(src, user, modifiers, attack_modifiers))
return TRUE
- SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, params)
- SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params)
- afterattack(target_mob, user, params)
-
- log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])")
+ SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, modifiers, attack_modifiers)
+ SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers, attack_modifiers)
+ afterattack(target_mob, user, modifiers, attack_modifiers)
+ if(final_force > 0)
+ log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])")
add_fingerprint(user)
return FALSE // unhandled
/// The equivalent of [/obj/item/proc/attack] but for alternate attacks, AKA right clicking
-/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, params)
- var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, params)
+/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, modifiers, attack_modifiers)
if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -257,8 +275,8 @@
return SECONDARY_ATTACK_CALL_NORMAL
/// The equivalent of the standard version of [/obj/item/proc/attack] but for non mob targets.
-/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, params)
- var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user)
+/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user, modifiers, attack_modifiers) | SEND_SIGNAL(user, COMSIG_LIVING_ATTACK_ATOM, attacked_atom, modifiers, attack_modifiers)
if(signal_return & COMPONENT_SKIP_ATTACK)
return TRUE
if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN)
@@ -268,30 +286,32 @@
user.changeNext_move(attack_speed)
if(get(src, /mob/living) == user) // telekinesis.
user.do_attack_animation(attacked_atom)
- attacked_atom.attacked_by(src, user)
- SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, params)
- SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params)
- afterattack(attacked_atom, user, params)
+ attacked_atom.attacked_by(src, user, modifiers, attack_modifiers)
+ SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers, attack_modifiers)
+ SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers, attack_modifiers)
+ afterattack(attacked_atom, user, modifiers, attack_modifiers)
return FALSE // unhandled
/// Called from [/obj/item/proc/attack_atom] and [/obj/item/proc/attack] if the attack succeeds
-/atom/proc/attacked_by(obj/item/attacking_item, mob/living/user)
+/atom/proc/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!uses_integrity)
CRASH("attacked_by() was called on an object that doesnt use integrity!")
- if(!attacking_item.force)
- return
+ var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers)
+ if(final_force <= 0)
+ return 0
- var/damage = take_damage(attacking_item.force, attacking_item.damtype, MELEE, 1, get_dir(src, user))
+ var/damage = take_damage(final_force, attacking_item.damtype, MELEE, 1, get_dir(src, user))
//only witnesses close by and the victim see a hit message.
user.visible_message(span_danger("[user] hits [src] with [attacking_item][damage ? "." : ", without leaving a mark!"]"), \
span_danger("You hit [src] with [attacking_item][damage ? "." : ", without leaving a mark!"]"), null, COMBAT_MESSAGE_RANGE)
log_combat(user, src, "attacked", attacking_item)
+ return damage
-/area/attacked_by(obj/item/attacking_item, mob/living/user)
+/area/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
CRASH("areas are NOT supposed to have attacked_by() called on them!")
-/mob/living/attacked_by(obj/item/attacking_item, mob/living/user)
+/mob/living/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
var/targeting = check_zone(user.zone_selected)
if(user != src)
@@ -301,7 +321,8 @@
targeting = get_random_valid_zone(targeting, zone_hit_chance)
var/targeting_human_readable = parse_zone(targeting)
- send_item_attack_message(attacking_item, user, targeting_human_readable, targeting)
+ if(!LAZYACCESS(attack_modifiers, SILENCE_DEFAULT_MESSAGES))
+ send_item_attack_message(attacking_item, user, targeting_human_readable, targeting)
var/armor_block = min(run_armor_check(
def_zone = targeting,
@@ -312,9 +333,9 @@
weak_against_armour = attacking_item.weak_against_armour,
), ARMOR_MAX_BLOCK)
- var/damage = attacking_item.force * user.outgoing_damage_mod
- if(mob_biotypes & (MOB_ROBOTIC|MOB_MINERAL|MOB_SKELETAL)) // this should probably check hit bodypart for humanoids
- damage *= attacking_item.get_demolition_modifier(src)
+ var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers)
+ if(mob_biotypes & MOB_ROBOTIC)
+ final_force *= attacking_item.get_demolition_modifier(src)
var/wounding = attacking_item.wound_bonus
if((attacking_item.item_flags & SURGICAL_TOOL) && !user.combat_mode && HAS_TRAIT(user, TRAIT_READY_TO_OPERATE))
@@ -322,20 +343,20 @@
if(user != src)
// This doesn't factor in armor, or most damage modifiers (physiology). Your mileage may vary
- if(check_block(attacking_item, damage, "the [attacking_item.name]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype))
- return FALSE
+ if(check_block(attacking_item, final_force, "\the [attacking_item]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype))
+ return 0
SEND_SIGNAL(attacking_item, COMSIG_ITEM_ATTACK_ZONE, src, user, targeting)
- if(damage <= 0)
- return TRUE
+ if(final_force <= 0)
+ return 1 // Pretend like we did 1 damage so afterattack still runs
if(ishuman(src) || client) // istype(src) is kinda bad, but it's to avoid spamming the blackbox
SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[attacking_item.force]", "[attacking_item.type]"))
SSblackbox.record_feedback("tally", "zone_targeted", 1, targeting_human_readable)
var/damage_done = apply_damage(
- damage = damage,
+ damage = final_force,
damagetype = attacking_item.damtype,
def_zone = targeting,
blocked = armor_block,
@@ -348,7 +369,7 @@
attack_effects(damage_done, targeting, armor_block, attacking_item, user)
- return TRUE
+ return damage_done
/**
* Called when we take damage, used to cause effects such as a blood splatter.
@@ -460,7 +481,7 @@
* * proximity_flag - is 1 if this afterattack was called on something adjacent, in your square, or on your person.
* * click_parameters - is the params string from byond [/atom/proc/Click] code, see that documentation.
*/
-/obj/item/proc/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/proc/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
PROTECTED_PROC(TRUE)
return
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index bdbf6ab0a024..7cc9813e3a5d 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -171,7 +171,7 @@
var/obj/item/focused_item = focus
apply_focus_overlay()
if(interacting_with.Adjacent(focus))
- . = focused_item.melee_attack_chain(user, interacting_with, list2params(modifiers)) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+ . = focused_item.melee_attack_chain(user, interacting_with, modifiers) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
if(check_if_focusable(focus))
focus.do_attack_animation(interacting_with, null, focus)
diff --git a/code/datums/components/combo_attacks.dm b/code/datums/components/combo_attacks.dm
index a8dbe423780e..84d022ae4b70 100644
--- a/code/datums/components/combo_attacks.dm
+++ b/code/datums/components/combo_attacks.dm
@@ -84,14 +84,13 @@
if(deltimer && timerid)
deltimer(timerid)
-/datum/component/combo_attacks/proc/on_attack(datum/source, mob/living/target, mob/user, click_parameters)
+/datum/component/combo_attacks/proc/on_attack(datum/source, mob/living/target, mob/user, list/modifiers)
SIGNAL_HANDLER
if(can_attack_callback && !can_attack_callback.Invoke(user, target))
return NONE
if(HAS_TRAIT(user, TRAIT_PACIFISM))
return NONE
- var/list/modifiers = params2list(click_parameters)
if(LAZYACCESS(modifiers, RIGHT_CLICK))
input_list += RIGHT_ATTACK
if(LAZYACCESS(modifiers, LEFT_CLICK))
diff --git a/code/datums/components/dart_insert.dm b/code/datums/components/dart_insert.dm
index ad869903051d..b404008f0f49 100644
--- a/code/datums/components/dart_insert.dm
+++ b/code/datums/components/dart_insert.dm
@@ -46,7 +46,7 @@
remove_from_dart(holder_casing, holder_projectile)
UnregisterSignal(parent, COMSIG_ITEM_PRE_ATTACK)
-/datum/component/dart_insert/proc/on_preattack(datum/source, atom/target, mob/user, params)
+/datum/component/dart_insert/proc/on_preattack(datum/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
var/obj/item/ammo_casing/foam_dart/dart = target
if(!istype(dart))
diff --git a/code/datums/components/focused_attacker.dm b/code/datums/components/focused_attacker.dm
index c927aab8822f..23d88a9f5a6a 100644
--- a/code/datums/components/focused_attacker.dm
+++ b/code/datums/components/focused_attacker.dm
@@ -3,6 +3,8 @@
* Not compatible with any other component or status effect which modifies attack damage
*/
/datum/component/focused_attacker
+ /// Current attack bonus
+ VAR_FINAL/current_gain
/// Amount of damage we gain per attack
var/gain_per_attack
/// Maximum amount by which we can increase our attack power
@@ -48,14 +50,14 @@
register_new_target(target)
/// Before an item attacks, try increasing its attack power
-/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, params)
+/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, list/modifiers, list/attack_modifiers)
SIGNAL_HANDLER
if (target == last_target)
- if (weapon.force - initial(weapon.force) < maximum_gain)
- weapon.force += gain_per_attack
+ current_gain += gain_per_attack
+ MODIFY_ATTACK_FORCE(attack_modifiers, current_gain)
return
- weapon.force = initial(weapon.force)
+ current_gain = 0
register_new_target(target)
/// Register a new target
diff --git a/code/datums/components/food/golem_food.dm b/code/datums/components/food/golem_food.dm
index 136d495b59e3..16efd4d4ba26 100644
--- a/code/datums/components/food/golem_food.dm
+++ b/code/datums/components/food/golem_food.dm
@@ -36,7 +36,7 @@
return ..()
/// Attempt to feed this item to golem
-/datum/component/golem_food/proc/on_attack(atom/source, mob/living/target, mob/living/user, click_parameters)
+/datum/component/golem_food/proc/on_attack(atom/source, mob/living/target, mob/living/user, list/modifiers)
SIGNAL_HANDLER
if (user.combat_mode || !HAS_TRAIT(target, TRAIT_ROCK_EATER))
return
@@ -48,7 +48,7 @@
return COMPONENT_CANCEL_ATTACK_CHAIN
if (isnull(golem_snack))
create_golem_snack(source)
- golem_snack.attack(target, user, click_parameters)
+ golem_snack.attack(target, user, modifiers)
return COMPONENT_CANCEL_ATTACK_CHAIN
/// Creates our golem snack atom instance
diff --git a/code/datums/components/igniter.dm b/code/datums/components/igniter.dm
index ad9351b34e9b..f8abd0116dad 100644
--- a/code/datums/components/igniter.dm
+++ b/code/datums/components/igniter.dm
@@ -20,7 +20,7 @@
/datum/component/igniter/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
-/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters)
+/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
do_igniter(target)
diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm
index 087eb0c06d24..9e49679f0231 100644
--- a/code/datums/components/scope.dm
+++ b/code/datums/components/scope.dm
@@ -74,7 +74,7 @@
return
stop_zooming(tracker.owner)
-/datum/component/scope/proc/do_secondary_zoom(datum/source, mob/user, atom/target, click_parameters)
+/datum/component/scope/proc/do_secondary_zoom(datum/source, mob/user, atom/target, list/modifiers)
SIGNAL_HANDLER
if(tracker)
diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm
index b75723bb1f8b..ba6f603a9f30 100644
--- a/code/datums/components/seclight_attachable.dm
+++ b/code/datums/components/seclight_attachable.dm
@@ -212,7 +212,7 @@
return COMPONENT_ACTION_HANDLED
/// Signal proc for [COMSIG_ATOM_ATTACKBY] that allows a user to attach a seclite by hitting our parent with it.
-/datum/component/seclite_attachable/proc/on_attackby(obj/item/source, obj/item/attacking_item, mob/attacker, params)
+/datum/component/seclite_attachable/proc/on_attackby(obj/item/source, obj/item/attacking_item, mob/attacker, list/modifiers)
SIGNAL_HANDLER
if(!is_type_in_typecache(attacking_item, valid_lights))
diff --git a/code/datums/components/soul_stealer.dm b/code/datums/components/soul_stealer.dm
index e725792bffe3..5be54a45be14 100644
--- a/code/datums/components/soul_stealer.dm
+++ b/code/datums/components/soul_stealer.dm
@@ -42,13 +42,13 @@
if(10 to INFINITY)
examine_list += span_notice("A staggering [num_souls] souls have been claimed by it! And it hungers for more!")
-/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, click_parameters)
+/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, list/modifiers)
SIGNAL_HANDLER
if(ishuman(target))
INVOKE_ASYNC(src, PROC_REF(try_capture), target, user)
-/datum/component/soul_stealer/proc/try_transfer_soul(obj/item/source, mob/user, atom/target, click_parameters)
+/datum/component/soul_stealer/proc/try_transfer_soul(obj/item/source, mob/user, atom/target, list/modifiers)
SIGNAL_HANDLER
if(istype(target, /obj/structure/constructshell) && length(soulstones))
diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm
index f39379d63678..28aa0fd745f1 100644
--- a/code/datums/components/style/style.dm
+++ b/code/datums/components/style/style.dm
@@ -319,7 +319,7 @@
return "#364866"
/// A proc that lets a user, when their rank >= `hotswap_rank`, swap items in storage with what's in their hands, simply by clicking on the stored item with a held item
-/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, click_parameters)
+/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, list/modifiers)
SIGNAL_HANDLER
if((rank < hotswap_rank) || !isitem(target) || !(target in source.get_all_contents()))
diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm
index 69ade1e2f1b5..3406aed7b38c 100644
--- a/code/datums/components/summoning.dm
+++ b/code/datums/components/summoning.dm
@@ -49,7 +49,7 @@
/datum/component/summoning/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
-/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters)
+/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
do_spawn_mob(get_turf(target), user)
diff --git a/code/datums/components/swabbing.dm b/code/datums/components/swabbing.dm
index 12d851afe39f..69d3688ebc20 100644
--- a/code/datums/components/swabbing.dm
+++ b/code/datums/components/swabbing.dm
@@ -53,7 +53,7 @@ This component is used in vat growing to swab for microbiological samples which
examine_list += MO.get_details()
///Ran when you attack an object, tries to get a swab of the object. if a swabbable surface is found it will run behavior and hopefully
-/datum/component/swabbing/proc/try_to_swab(datum/source, atom/target, mob/user, params)
+/datum/component/swabbing/proc/try_to_swab(datum/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
if(istype(target, /obj/structure/table))//help how do i do this less shitty
diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm
index 6fb7267a0824..afe6339866dc 100644
--- a/code/datums/components/trapdoor.dm
+++ b/code/datums/components/trapdoor.dm
@@ -288,7 +288,7 @@
internals.forceMove(get_turf(src))
internals = null
-/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, params)
+/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. || !istype(assembly))
return
diff --git a/code/datums/elements/cuffsnapping.dm b/code/datums/elements/cuffsnapping.dm
index 1abdc4a7a6bd..3640b0a5bd8d 100644
--- a/code/datums/elements/cuffsnapping.dm
+++ b/code/datums/elements/cuffsnapping.dm
@@ -72,7 +72,7 @@
examine_list += span_notice(examine_string)
-/datum/element/cuffsnapping/proc/try_cuffsnap_target(obj/item/cutter, mob/living/carbon/target, mob/living/cutter_user, params)
+/datum/element/cuffsnapping/proc/try_cuffsnap_target(obj/item/cutter, mob/living/carbon/target, mob/living/cutter_user, list/modifiers)
SIGNAL_HANDLER
if(!istype(target)) //we aren't the kind of mob that can even have cuffs, so we skip.
diff --git a/code/datums/elements/disarm_attack.dm b/code/datums/elements/disarm_attack.dm
index a788cd9f35ed..c51a789a035d 100644
--- a/code/datums/elements/disarm_attack.dm
+++ b/code/datums/elements/disarm_attack.dm
@@ -13,7 +13,7 @@
UnregisterSignal(source, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_ATTACK_SECONDARY))
return ..()
-/datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, params)
+/datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, list/modifiers)
SIGNAL_HANDLER
if(!user.can_disarm(victim) || !can_disarm_attack(source, victim, user))
return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN
diff --git a/code/datums/elements/easily_fragmented.dm b/code/datums/elements/easily_fragmented.dm
index aa8b07a866ec..f54f84547ae1 100644
--- a/code/datums/elements/easily_fragmented.dm
+++ b/code/datums/elements/easily_fragmented.dm
@@ -23,7 +23,7 @@
. = ..()
UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ITEM_TOOL_ACTED))
-/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, click_parameters)
+/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
try_break(source, user)
diff --git a/code/datums/elements/envenomable_casing.dm b/code/datums/elements/envenomable_casing.dm
index 5e080adaf000..a334a6618014 100644
--- a/code/datums/elements/envenomable_casing.dm
+++ b/code/datums/elements/envenomable_casing.dm
@@ -20,10 +20,10 @@
/datum/element/envenomable_casing/Detach(datum/target)
. = ..()
- UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ATOM_EXAMINE))
+ UnregisterSignal(target, list(COMSIG_ITEM_INTERACTING_WITH_ATOM, COMSIG_ATOM_EXAMINE))
///signal called on the parent attacking an item
-/datum/element/envenomable_casing/proc/handle_interaction(obj/item/ammo_casing/casing, mob/user, atom/target, click_parameters)
+/datum/element/envenomable_casing/proc/handle_interaction(obj/item/ammo_casing/casing, mob/user, atom/target, list/modifiers)
SIGNAL_HANDLER
if(!is_reagent_container(target))
return NONE
diff --git a/code/datums/elements/kneecapping.dm b/code/datums/elements/kneecapping.dm
index 6858843132b1..d371cba79a58 100644
--- a/code/datums/elements/kneecapping.dm
+++ b/code/datums/elements/kneecapping.dm
@@ -44,7 +44,7 @@
* if the special attack could not be attempted, performing the ordinary attack procs instead - Or cancelling the attack chain if
* the attack can be started.
*/
-/datum/element/kneecapping/proc/try_kneecap_target(obj/item/source, mob/living/carbon/target, mob/attacker, params)
+/datum/element/kneecapping/proc/try_kneecap_target(obj/item/source, mob/living/carbon/target, mob/attacker, list/modifiers)
SIGNAL_HANDLER
if((attacker.zone_selected != BODY_ZONE_L_LEG) && (attacker.zone_selected != BODY_ZONE_R_LEG))
diff --git a/code/datums/elements/kneejerk.dm b/code/datums/elements/kneejerk.dm
index 53c6c7b58efa..5f0ff8e580bb 100644
--- a/code/datums/elements/kneejerk.dm
+++ b/code/datums/elements/kneejerk.dm
@@ -14,11 +14,9 @@
UnregisterSignal(source, COMSIG_ITEM_ATTACK)
-/datum/element/kneejerk/proc/on_item_attack(datum/source, mob/living/target, mob/living/user, params)
+/datum/element/kneejerk/proc/on_item_attack(datum/source, mob/living/target, mob/living/user, list/modifiers)
SIGNAL_HANDLER
- var/list/modifiers = params2list(params)
-
if((user.zone_selected == BODY_ZONE_L_LEG || user.zone_selected == BODY_ZONE_R_LEG) && LAZYACCESS(modifiers, RIGHT_CLICK) && target.buckled)
tap_knee(source, target, user)
diff --git a/code/datums/elements/knockback.dm b/code/datums/elements/knockback.dm
index c8f06efa430e..077fc1fb299d 100644
--- a/code/datums/elements/knockback.dm
+++ b/code/datums/elements/knockback.dm
@@ -30,7 +30,7 @@
return ..()
/// triggered after an item attacks something
-/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters)
+/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
do_knockback(target, user, get_dir(source, target))
diff --git a/code/datums/elements/pet_bonus.dm b/code/datums/elements/pet_bonus.dm
index 5ef8b515077a..e0d3c3387b67 100644
--- a/code/datums/elements/pet_bonus.dm
+++ b/code/datums/elements/pet_bonus.dm
@@ -32,7 +32,7 @@
if(pet.stat != CONSCIOUS || petter.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK))
return
- new /obj/effect/temp_visual/heart(pet.loc)
+ new /obj/effect/temp_visual/heart(get_turf(pet))
SEND_SIGNAL(pet, COMSIG_ANIMAL_PET, petter, modifiers)
if(emote_message && prob(33))
pet.manual_emote(emote_message)
diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm
index a6c319d7bc9b..ae63e2b86d53 100644
--- a/code/datums/elements/relay_attackers.dm
+++ b/code/datums/elements/relay_attackers.dm
@@ -33,10 +33,8 @@
))
REMOVE_TRAIT(source, TRAIT_RELAYING_ATTACKER, REF(src))
-/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, proximity_flag, click_parameters)
+/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, list/modifiers)
SIGNAL_HANDLER
- if(!proximity_flag) // we don't care about someone clicking us with a piece of metal from across the room
- return
if(weapon.force)
relay_attacker(target, attacker, weapon.damtype == STAMINA ? ATTACKER_STAMINA_ATTACK : ATTACKER_DAMAGING_ATTACK)
diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm
index 004724c4e66a..bdc7bad27e9e 100644
--- a/code/datums/holocall.dm
+++ b/code/datums/holocall.dm
@@ -238,9 +238,9 @@
QDEL_NULL(record)
return ..()
-/obj/item/disk/holodisk/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/disk/holodisk))
- var/obj/item/disk/holodisk/holodiskOriginal = W
+/obj/item/disk/holodisk/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ if(istype(item, /obj/item/disk/holodisk))
+ var/obj/item/disk/holodisk/holodiskOriginal = item
if (holodiskOriginal.record)
if (!record)
record = new
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 8a449bbf6932..1728182c579c 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -25,7 +25,7 @@
return ..()
///Signal from getting attacked with an item, for a special interaction with touch spells
-/datum/martial_art/cqc/proc/on_attackby(mob/living/cqc_user, obj/item/attack_weapon, mob/attacker, params)
+/datum/martial_art/cqc/proc/on_attackby(mob/living/cqc_user, obj/item/attack_weapon, mob/attacker, list/modifiers)
SIGNAL_HANDLER
if(!istype(attack_weapon, /obj/item/melee/touch_attack))
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 3ba2b55bdd42..7f98435c093e 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -211,7 +211,7 @@
return COMPONENT_BULLET_PIERCED
///Signal from getting attacked with an item, for a special interaction with touch spells
-/datum/martial_art/the_sleeping_carp/proc/on_attackby(mob/living/carp_user, obj/item/attack_weapon, mob/attacker, params)
+/datum/martial_art/the_sleeping_carp/proc/on_attackby(mob/living/carp_user, obj/item/attack_weapon, mob/attacker, list/modifiers)
SIGNAL_HANDLER
if(!istype(attack_weapon, /obj/item/melee/touch_attack))
@@ -273,7 +273,7 @@
icon_state = "[base_icon_state]0"
return ..()
-/obj/item/staff/bostaff/attack(mob/target, mob/living/user, params)
+/obj/item/staff/bostaff/attack(mob/target, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
to_chat(user, span_warning("You club yourself over the head with [src]."))
@@ -292,7 +292,6 @@
if(C.stat)
to_chat(user, span_warning("It would be dishonorable to attack a foe while they cannot retaliate."))
return
- var/list/modifiers = params2list(params)
if(LAZYACCESS(modifiers, RIGHT_CLICK))
if(!HAS_TRAIT(src, TRAIT_WIELDED))
return ..()
diff --git a/code/datums/memory/tattoo_kit.dm b/code/datums/memory/tattoo_kit.dm
index 98d47eaa285d..424e9c695b44 100644
--- a/code/datums/memory/tattoo_kit.dm
+++ b/code/datums/memory/tattoo_kit.dm
@@ -17,7 +17,7 @@
. += span_notice("This kit has enough ink for [uses] use\s.")
. += span_boldnotice("You can use a toner cartridge to refill this.")
-/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, params)
+/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(ink_cart))
return
@@ -29,7 +29,7 @@
qdel(ink_cart)
balloon_alert(tattoo_artist, "added tattoo ink")
-/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, params)
+/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return TRUE
diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm
index b4bb2c6445d3..3daa5c6368a1 100644
--- a/code/datums/storage/storage.dm
+++ b/code/datums/storage/storage.dm
@@ -674,7 +674,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
thing.emp_act(severity)
/// Signal handler for preattack from an object.
-/datum/storage/proc/on_preattack(datum/source, obj/item/thing, mob/user, params)
+/datum/storage/proc/on_preattack(datum/source, obj/item/thing, mob/user, list/modifiers)
SIGNAL_HANDLER
if(!istype(thing) || !allow_quick_gather || thing.atom_storage)
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index 679a3182a57c..05a4fbd9eac1 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -109,7 +109,7 @@
power_change()
return ITEM_INTERACT_SUCCESS
-/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, params)
+/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers)
if(machine_stat & BROKEN)
if(O.tool_behaviour == TOOL_WELDER && !user.combat_mode)
if(!O.tool_start_check(user, amount=1))
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 5dbf4296cf79..0f90239599a4 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -796,13 +796,13 @@
return attack_robot(user)
return _try_interact(user)
-/obj/machinery/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
update_last_used(user)
-/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index 40670a22f44c..0e7c90c6649b 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -43,7 +43,7 @@
synced_bank_account = null
return ..()
-/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
var/value = 0
if(istype(weapon, /obj/item/stack/spacecash))
var/obj/item/stack/spacecash/inserted_cash = weapon
diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm
index 3c3e400f7ed5..3ca8bbbea2f4 100644
--- a/code/game/machinery/camera/camera_construction.dm
+++ b/code/game/machinery/camera/camera_construction.dm
@@ -119,7 +119,7 @@
return ITEM_INTERACT_SUCCESS
return ..()
-/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(camera_construction_state != CAMERA_STATE_FINISHED || panel_open)
if(attacking_item.tool_behaviour == TOOL_ANALYZER)
if(!isXRay(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 412c929420f6..c1865b3d8525 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -41,7 +41,7 @@
update_appearance()
return ITEM_INTERACT_SUCCESS
-/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
+/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stock_parts/power_store/cell) && !panel_open)
if(machine_stat & BROKEN)
to_chat(user, span_warning("[src] is broken!"))
diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm
index d502ed3e8c6c..c1a73764e35f 100644
--- a/code/game/machinery/civilian_bounties.dm
+++ b/code/game/machinery/civilian_bounties.dm
@@ -47,7 +47,7 @@
///Typecast of an inserted, scanned ID card inside the console, as bounties are held within the ID card.
var/obj/item/card/id/inserted_scan_id
-/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(isidcard(I))
if(id_insert(user, I, inserted_scan_id))
inserted_scan_id = I
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index e8673cc8bf7b..47edf82057ab 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -113,7 +113,7 @@
return TRUE
return authenticated
-/obj/machinery/computer/communications/attackby(obj/I, mob/user, params)
+/obj/machinery/computer/communications/attackby(obj/I, mob/user, list/modifiers, list/attack_modifiers)
if(isidcard(I))
attack_hand(user)
else
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index c28e915c6cab..8ef33ae20587 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -172,7 +172,7 @@
genetic_damage_pulse()
return
-/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, params)
+/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
// Store chromosomes in the console if there's room
if (istype(item, /obj/item/chromosome))
item.forceMove(src)
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index 423633d31ac3..f29edb6748fd 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -12,7 +12,7 @@
log_silicon("\A [name] was created at [loc_name(src)].")
message_admins("\A [name] was created at [ADMIN_VERBOSEJMP(src)].")
-/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, params)
+/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/ai_module))
var/obj/item/ai_module/M = O
if(machine_stat & (NOPOWER|BROKEN|MAINT))
diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm
index 10eaa4f2af4b..9864a6f4c27b 100644
--- a/code/game/machinery/computer/operating_computer.dm
+++ b/code/game/machinery/computer/operating_computer.dm
@@ -66,7 +66,7 @@
linked_techweb = tool.buffer
return TRUE
-/obj/machinery/computer/operating/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/computer/operating/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/disk/surgery))
user.visible_message(
span_notice("[user] begins to load [tool] in [src]..."),
diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm
index cc9b189d79f2..54946f8afeec 100644
--- a/code/game/machinery/computer/orders/order_computer/mining_order.dm
+++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm
@@ -155,7 +155,7 @@
. = ..()
. += span_notice("There's [points] point\s on the card.")
-/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!isidcard(attacking_item))
return ..()
var/obj/item/card/id/attacking_id = attacking_item
diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm
index 9777c1b209cd..1df46b261164 100644
--- a/code/game/machinery/computer/prisoner/_prisoner.dm
+++ b/code/game/machinery/computer/prisoner/_prisoner.dm
@@ -50,7 +50,7 @@
balloon_alert_to_viewers("id ejected")
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
-/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/card/id/advanced/prisoner))
id_insert(user, weapon)
return TRUE
diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm
index 5129b48124ee..a009072868a2 100644
--- a/code/game/machinery/computer/records/medical.dm
+++ b/code/game/machinery/computer/records/medical.dm
@@ -19,11 +19,11 @@
icon_keyboard = "laptop_key"
pass_flags = PASSTABLE
-/obj/machinery/computer/records/medical/attacked_by(obj/item/attacking_item, mob/living/user)
- . = ..()
- if(!istype(attacking_item, /obj/item/photo))
- return
- insert_new_record(user, attacking_item)
+/obj/machinery/computer/records/medical/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/photo))
+ return NONE
+ insert_new_record(user, tool)
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/computer/records/medical/ui_interact(mob/user, datum/tgui/ui)
. = ..()
diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm
index d71bbc0b2144..504a61ae86c8 100644
--- a/code/game/machinery/computer/records/security.dm
+++ b/code/game/machinery/computer/records/security.dm
@@ -65,11 +65,11 @@
qdel(target)
continue
-/obj/machinery/computer/records/security/attacked_by(obj/item/attacking_item, mob/living/user)
- . = ..()
- if(!istype(attacking_item, /obj/item/photo))
- return
- insert_new_record(user, attacking_item)
+/obj/machinery/computer/records/security/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/photo))
+ return NONE
+ insert_new_record(user, tool)
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/computer/records/security/ui_interact(mob/user, datum/tgui/ui)
. = ..()
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index 53d824fdc77f..26e26b68f3d2 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -83,7 +83,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
return
user.put_in_hands(defib.paddles)
-/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/defibrillator))
if(defib)
to_chat(user, span_warning("There's already a defibrillator in [src]!"))
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 55940a02f19d..831b83bcf8f5 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -26,7 +26,7 @@
return
-/obj/structure/barricade/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/barricade/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WELDER && !user.combat_mode && bar_material == METAL)
if(atom_integrity < max_integrity)
if(!I.tool_start_check(user, amount=1))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 74ca492657b6..41ce6ecfebee 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -83,7 +83,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, params)
+/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, list/modifiers, list/attack_modifiers)
if(is_type_in_list(dish, collectable_items) && !user.combat_mode)
if(!user.transferItemToLoc(dish, src))
return
diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm
index 9fac4aac9ede..1b6aa6a61397 100644
--- a/code/game/machinery/dna_infuser/dna_infuser.dm
+++ b/code/game/machinery/dna_infuser/dna_infuser.dm
@@ -210,7 +210,7 @@
//we set drop to false to manually call it with an allowlist
dump_inventory_contents(list(occupant))
-/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, params)
+/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers)
if(infusing)
return
if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, used))//sent icon_state is irrelevant...
diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
index 42ec94c34bef..9872859fa499 100644
--- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
@@ -128,7 +128,7 @@
. = ..()
. += "You can use your tendril hammer arm to deliver a devastating blow against mining fauna, but only once every two seconds."
-/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, click_parameters)
+/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
. = ..()
//If we're on cooldown, we'll do a normal attack.
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 0ed9bd4a0103..0ede1a9025b9 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -125,16 +125,16 @@
return
open_machine()
-/obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params)
+/obj/machinery/dna_scannernew/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
- if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant...
+ if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item))//sent icon_state is irrelevant...
update_appearance()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed
return
- if(default_pry_open(I, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE))
+ if(default_pry_open(item, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE))
return
- if(default_deconstruction_crowbar(I))
+ if(default_deconstruction_crowbar(item))
return
return ..()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index a83454b681e4..65cc48bebb28 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1004,7 +1004,7 @@
update_appearance()
return TRUE
-/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
+/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers)
if(!issilicon(user) && !isAdminGhostAI(user))
if(isElectrified() && (C.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75))
return
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 7d066f5006d7..8fef4b2545b0 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -363,7 +363,7 @@
try_to_crowbar(tool, user, forced_open)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/access_key))
var/obj/item/access_key/key = weapon
return key.attempt_open_door(user, src)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index f2c84e2341a9..a73405245424 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -302,7 +302,7 @@
/obj/machinery/firealarm/attack_robot_secondary(mob/user)
return attack_hand_secondary(user)
-/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, params)
+/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(tool.tool_behaviour == TOOL_SCREWDRIVER && buildstage == FIRE_ALARM_BUILD_SECURED)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 5800e452721a..c28e9fff3c37 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -62,7 +62,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
return ..()
//Don't want to render prison breaks impossible
-/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if (attacking_item.tool_behaviour == TOOL_WIRECUTTER)
if (bulb)
@@ -185,7 +185,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
if(vname == NAMEOF(src, flash_range))
proximity_monitor?.set_range(flash_range)
-/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if (attacking_item.tool_behaviour == TOOL_WRENCH)
attacking_item.play_tool_sound(src, 100)
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index fc1cacae8f81..97070ea89c1a 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -254,24 +254,24 @@ Possible to do for anyone motivated enough:
if(record_mode)
record_stop()
-/obj/machinery/holopad/attackby(obj/item/P, mob/user, params)
- if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
+/obj/machinery/holopad/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", item))
return
- if(default_pry_open(P, close_after_pry = TRUE, closed_density = FALSE))
+ if(default_pry_open(item, close_after_pry = TRUE, closed_density = FALSE))
return
- if(default_deconstruction_crowbar(P))
+ if(default_deconstruction_crowbar(item))
return
- if(istype(P,/obj/item/disk/holodisk))
+ if(istype(item, /obj/item/disk/holodisk))
if(disk)
to_chat(user,span_warning("There's already a disk inside [src]!"))
return
- if (!user.transferItemToLoc(P,src))
+ if (!user.transferItemToLoc(item, src))
return
- to_chat(user,span_notice("You insert [P] into [src]."))
- disk = P
+ to_chat(user,span_notice("You insert [item] into [src]."))
+ disk = item
return
return ..()
diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm
index f8f3ed49be59..264f2ca569a3 100644
--- a/code/game/machinery/hypnochair.dm
+++ b/code/game/machinery/hypnochair.dm
@@ -27,13 +27,13 @@
open_machine()
update_appearance()
-/obj/machinery/hypnochair/attackby(obj/item/I, mob/user, params)
- if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))
+/obj/machinery/hypnochair/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item))
update_appearance()
return
- if(default_pry_open(I))
+ if(default_pry_open(item))
return
- if(default_deconstruction_crowbar(I))
+ if(default_deconstruction_crowbar(item))
return
return ..()
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 99b4fbdb0f0e..4725a7cfd830 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -179,7 +179,7 @@
user.visible_message(span_warning("[user] attaches [src] to [target]."), span_notice("You attach [src] to [target]."))
attach_iv(target, user)
-/obj/machinery/iv_drip/attackby(obj/item/W, mob/user, params)
+/obj/machinery/iv_drip/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(use_internal_storage)
return ..()
@@ -190,15 +190,15 @@
/obj/item/reagent_containers/chem_pack,
))
- if(is_type_in_typecache(W, drip_containers) || IS_EDIBLE(W))
+ if(is_type_in_typecache(item, drip_containers) || IS_EDIBLE(item))
if(reagent_container)
to_chat(user, span_warning("[reagent_container] is already loaded on [src]!"))
return
- if(!user.transferItemToLoc(W, src))
+ if(!user.transferItemToLoc(item, src))
return
- reagent_container = W
- to_chat(user, span_notice("You attach [W] to [src]."))
- user.log_message("attached a [W] to [src] at [AREACOORD(src)] containing ([reagent_container.reagents.get_reagent_log_string()])", LOG_ATTACK)
+ reagent_container = item
+ to_chat(user, span_notice("You attach [item] to [src]."))
+ user.log_message("attached a [item] to [src] at [AREACOORD(src)] containing ([reagent_container.reagents.get_reagent_log_string()])", LOG_ATTACK)
add_fingerprint(user)
update_appearance(UPDATE_ICON)
return
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 0f469a766d41..753fdd1ef6f7 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -75,7 +75,7 @@
balloon_alert(user, "saved to buffer")
return ITEM_INTERACT_SUCCESS
-/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(!stationary)
return ..()
@@ -312,13 +312,13 @@
closed = TRUE
update_indicator()
-/obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/launchpad_remote))
- var/obj/item/launchpad_remote/L = I
- if(L.pad == WEAKREF(src)) //do not attempt to link when already linked
+/obj/machinery/launchpad/briefcase/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ if(istype(item, /obj/item/launchpad_remote))
+ var/obj/item/launchpad_remote/launch = item
+ if(launch.pad == WEAKREF(src)) //do not attempt to link when already linked
return ..()
- L.pad = WEAKREF(src)
- to_chat(user, span_notice("You link [src] to [L]."))
+ launch.pad = WEAKREF(src)
+ to_chat(user, span_notice("You link [src] to [launch]."))
else
return ..()
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 401245613e1b..43dfb9ee79c1 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -54,16 +54,16 @@
O.throw_at(target, drive_range * power, power)
flick("mass_driver1", src)
-/obj/machinery/mass_driver/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/mass_driver/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
- if(is_wire_tool(I) && panel_open)
+ if(is_wire_tool(item) && panel_open)
wires.interact(user)
return
- if(default_deconstruction_screwdriver(user, "mass_driver_o", "mass_driver", I))
+ if(default_deconstruction_screwdriver(user, "mass_driver_o", "mass_driver", item))
return
- if(default_change_direction_wrench(user, I))
+ if(default_change_direction_wrench(user, item))
return
- if(default_deconstruction_crowbar(I))
+ if(default_deconstruction_crowbar(item))
return
return ..()
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm
index 56dec7a3e2bb..2f5e9cf66478 100644
--- a/code/game/machinery/medical_kiosk.dm
+++ b/code/game/machinery/medical_kiosk.dm
@@ -117,7 +117,7 @@
active_price = board.custom_cost
return
-/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, params)
+/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]_off", O))
return
else if(default_deconstruction_crowbar(O))
diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm
index 19aa7c3c8b34..554aaf4952b9 100644
--- a/code/game/machinery/modular_shield.dm
+++ b/code/game/machinery/modular_shield.dm
@@ -143,7 +143,7 @@
if(default_deconstruction_crowbar(tool))
return TRUE
-/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, params)
+/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(is_wire_tool(W) && panel_open)
wires.interact(user)
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 5caa41d90890..730437c2fe8c 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -115,7 +115,7 @@
return TRUE
return default_deconstruction_screwdriver(user, "navbeacon1","navbeacon0",tool)
-/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/turf/our_turf = loc
if(our_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE)
return // prevent intraction when T-scanner revealed
diff --git a/code/game/machinery/nebula_shielding.dm b/code/game/machinery/nebula_shielding.dm
index cd10a23150c8..c5e632fa913f 100644
--- a/code/game/machinery/nebula_shielding.dm
+++ b/code/game/machinery/nebula_shielding.dm
@@ -109,7 +109,7 @@
if(isopenturf(turf))
turf.atmos_spawn_air("[GAS_TRITIUM]=1;[TURF_TEMPERATURE(T20C)]")
-/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, params)
+/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, initial(icon_state) + "_open", initial(icon_state), item))
return
diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm
index 8205b4781cdc..d7ef8c533177 100644
--- a/code/game/machinery/newscaster/newscaster_machine.dm
+++ b/code/game/machinery/newscaster/newscaster_machine.dm
@@ -490,7 +490,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30)
. = ..()
update_appearance()
-/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/paper))
if(!user.temporarilyRemoveItemFromInventory(attacking_item))
return
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index eb5b499bce79..1d84b0f008e6 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -151,7 +151,7 @@
ui = new(user, src, "PipeDispenser", name)
ui.open()
-/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params)
+/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter))
to_chat(usr, span_notice("You put [W] back into [src]."))
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index e51059657126..dc653b2d7194 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -324,7 +324,7 @@ DEFINE_BITFIELD(turret_flags, list(
balloon_alert(user, "saved to multitool buffer")
return ITEM_INTERACT_SUCCESS
-/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params)
+/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(machine_stat & BROKEN)
if(I.tool_behaviour == TOOL_CROWBAR)
//If the turret is destroyed, you can remove it with a crowbar to
@@ -979,7 +979,7 @@ DEFINE_BITFIELD(turret_flags, list(
to_chat(user, span_notice("You link \the [multi_tool.buffer] with \the [src]."))
return ITEM_INTERACT_SUCCESS
-/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(machine_stat & BROKEN)
return
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index a8fa4e67b2bf..d606481939b1 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -40,7 +40,7 @@
if(PTURRET_START_EXTERNAL_ARMOUR)
. += span_notice("The turret's armor needs to be welded in place, the armor looks like it could be pried off.")
-/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, params)
+/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers)
//this is a bit unwieldy but self-explanatory
switch(build_step)
if(PTURRET_UNSECURED) //first step
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index ad3111b330bd..9ce769c1ddc4 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -45,7 +45,7 @@
balloon_alert(user, "saved to multitool buffer")
return ITEM_INTERACT_SUCCESS
-/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params)
+/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on)
if(parent_turret.raised)
return
@@ -72,8 +72,8 @@
return ..()
-/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user)
- parent_turret.attacked_by(I, user)
+/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
+ return parent_turret.attacked_by(I, user, modifiers)
/obj/machinery/porta_turret_cover/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers)
parent_turret.attack_alien(user, modifiers)
diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm
index aaf1e6a342ea..24373326b0e6 100644
--- a/code/game/machinery/prisonlabor.dm
+++ b/code/game/machinery/prisonlabor.dm
@@ -26,7 +26,7 @@
QDEL_NULL(current_plate)
. = ..()
-/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(!is_operational)
to_chat(user, span_warning("[src] has to be on to do this!"))
return FALSE
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index f5f5851b7586..cb80f4a27898 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -71,7 +71,7 @@
balloon_alert(user, "no quantum pad data found!")
return NONE
-/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "qpad-idle-open", "qpad-idle", weapon))
return
@@ -242,5 +242,3 @@
failed.set_output(COMPONENT_SIGNAL)
return
attached_pad.doteleport(target_pad = attached_pad.linked_pad)
-
-
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 21de0b4c3e34..4b68c1a41408 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -77,7 +77,7 @@
update_appearance()
return ..()
-/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!is_type_in_typecache(attacking_item, allowed_devices))
return ..()
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 6408f99a2af7..51f19f3afa4b 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -106,7 +106,7 @@
if (!(. & EMP_PROTECT_SELF))
open_machine()
-/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params)
+/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers)
if(state_open)
if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P))
return
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 809f23bf4820..f4b9402e6ad5 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -385,7 +385,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
to_chat(user, span_warning("You must open the maintenance panel first!"))
return TRUE
-/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/obj/item/card/id/ID = attacking_item.GetID()
if(ID)
message_verified_by = "[ID.registered_name] ([ID.assignment])"
diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm
index 88d2b2136b1f..e84bcb622326 100644
--- a/code/game/machinery/roulette_machine.dm
+++ b/code/game/machinery/roulette_machine.dm
@@ -117,7 +117,7 @@
update_appearance() // Not applicable to all objects.
///Handles setting ownership and the betting itself.
-/obj/machinery/roulette/attackby(obj/item/W, mob/user, params)
+/obj/machinery/roulette/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(machine_stat & MAINT && is_wire_tool(W))
wires.interact(user)
return
diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm
index c56093a295ae..8866d341f8fa 100644
--- a/code/game/machinery/scanner_gate.dm
+++ b/code/game/machinery/scanner_gate.dm
@@ -139,7 +139,7 @@
return
set_scanline("passive")
-/obj/machinery/scanner_gate/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/scanner_gate/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
. = ..()
if(. & ITEM_INTERACT_ANY_BLOCKER)
return .
@@ -155,7 +155,7 @@
return ITEM_INTERACT_SUCCESS
return NONE
-/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/obj/item/card/id/card = attacking_item.GetID()
if(card)
if(locked)
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 6c8cad235663..307b602775cd 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -236,7 +236,7 @@
set_anchored(FALSE)
-/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params)
+/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open)
var/obj/item/stack/cable_coil/coil = W
if (coil.get_amount() < 1)
@@ -460,7 +460,7 @@
return
return default_deconstruction_crowbar(tool)
-/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, params)
+/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(W.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index d57977c77c6c..b37c398b79ff 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -197,7 +197,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/space_heater/attackby(obj/item/I, mob/user, params)
+/obj/machinery/space_heater/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
@@ -398,7 +398,7 @@
. = TRUE
///Slightly modified to ignore the open_hatch - it's always open, we hacked it.
-/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, params)
+/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(default_deconstruction_crowbar(item))
return
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 39e62f873199..f67f29670adb 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -630,7 +630,7 @@
return TRUE
-/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = TRUE
var/obj/item/card/id/id = null
if(istype(weapon, /obj/item/stock_parts/card_reader) && can_install_card_reader(user))
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index e887a70509cb..4b3a40b3243d 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -193,7 +193,7 @@
return TRUE
-/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, params)
+/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(is_wire_tool(I) && open_panel)
wires.interact(user)
@@ -511,7 +511,7 @@
playsound(loc, 'sound/effects/bamf.ogg', 75, TRUE, 5)
-/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, params)
+/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0)
I.play_tool_sound(src)
for (var/obj/item/B in beakers)
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 6694bee1db24..78a5297c9143 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -16,7 +16,7 @@
FREQ_CTF_BLUE,
)
-/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/icon_closed = initial(icon_state)
var/icon_open = "[initial(icon_state)]_o"
diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm
index f4e0f4def527..bd30c5ba0b57 100644
--- a/code/game/machinery/telecomms/machines/allinone.dm
+++ b/code/game/machinery/telecomms/machines/allinone.dm
@@ -45,6 +45,6 @@
sleep(signal.data["slow"]) // simulate the network lag if necessary
signal.broadcast()
-/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(attacking_item.tool_behaviour == TOOL_MULTITOOL)
return attack_hand(user)
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index 78ccf9f45256..681621f8bfa4 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -34,7 +34,7 @@
to_chat(user, span_warning("It seems that the blackbox is missing..."))
return
-/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/blackbox))
if(HAS_TRAIT(attacking_item, TRAIT_NODROP) || !user.transferItemToLoc(attacking_item, src))
to_chat(user, span_warning("[attacking_item] is stuck to your hand!"))
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index c46f6b351543..4b972e57204b 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -52,7 +52,7 @@
if(is_ready())
teleport(AM)
-/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params)
+/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W))
if(power_station?.engaged)
power_station.engaged = 0 //hub with panel open is off, so the station must be informed.
@@ -179,7 +179,7 @@
balloon_alert(user, "data uploaded from buffer")
return ITEM_INTERACT_SUCCESS
-/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, params)
+/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "controller-o", "controller", W))
update_appearance()
return
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 4e7f5123af4b..4d2562e65544 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -95,7 +95,7 @@
/obj/effect/decal/cleanable/proc/lazy_init_reagents()
return
-/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, params)
+/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if((istype(W, /obj/item/reagent_containers/cup) && !istype(W, /obj/item/reagent_containers/cup/rag)) || istype(W, /obj/item/reagent_containers/cup/glass))
if(src.reagents && W.reagents)
lazy_init_reagents()
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index 5781ffde3fa6..800b4b8c80fa 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -500,7 +500,7 @@
. = ..()
ignite()
-/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, params)
+/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(item.ignition_effect(src, user))
ignite()
return ..()
diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
index 462f1e3d0189..b0546ac3081d 100644
--- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
@@ -335,7 +335,7 @@
to_chat(user, span_warning("You hit [src] but bounce off it!"))
playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE)
-/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, params)
+/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
///A speed modifier for how fast the wall is build
var/platingmodifier = 1
if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 8e005e3d00ea..09c43742660e 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -10,8 +10,8 @@
blocks_emissive = EMISSIVE_BLOCK_GENERIC
uses_integrity = FALSE
-/obj/effect/attackby(obj/item/weapon, mob/user, params)
- if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, params) & COMPONENT_NO_AFTERATTACK)
+/obj/effect/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
+ if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, modifiers, attack_modifiers) & COMPONENT_NO_AFTERATTACK)
return TRUE
// I'm not sure why these are snowflaked to early return but they are
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index 85907a906636..6cf788254f4b 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -69,7 +69,7 @@
/obj/effect/portal/newtonian_move(direction, instant = FALSE, start_delay = 0)
return TRUE
-/obj/effect/portal/attackby(obj/item/W, mob/user, params)
+/obj/effect/portal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(user && Adjacent(user))
teleport(user)
return TRUE
diff --git a/code/game/objects/effects/poster_demotivational.dm b/code/game/objects/effects/poster_demotivational.dm
index 08e46b6af63b..40f618f9b02d 100644
--- a/code/game/objects/effects/poster_demotivational.dm
+++ b/code/game/objects/effects/poster_demotivational.dm
@@ -23,7 +23,7 @@
demoraliser = new(src, 7, TRUE, mood_category)
return ..()
-/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, params)
+/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if (tool.tool_behaviour == TOOL_WIRECUTTER)
QDEL_NULL(demoraliser)
return ..()
diff --git a/code/game/objects/effects/poster_motivational.dm b/code/game/objects/effects/poster_motivational.dm
index 0e9444190af2..9720fe2ef6dc 100644
--- a/code/game/objects/effects/poster_motivational.dm
+++ b/code/game/objects/effects/poster_motivational.dm
@@ -17,7 +17,7 @@
department_grab.quirk_poster_department = quirk_poster_department
/// You can use any spraypaint can on a quirk poster to turn it into a contraband poster from the traitor objective
-/obj/item/poster/quirk/attackby(obj/item/postertool, mob/user, list/modifiers)
+/obj/item/poster/quirk/attackby(obj/item/postertool, mob/user, list/modifiers, list/attack_modifiers)
if(!user.is_antag() || !HAS_TRAIT(user, TRAIT_POSTERBOY) || !istype(postertool, /obj/item/toy/crayon))
return ..()
balloon_alert(user, "converting poster...")
@@ -50,7 +50,7 @@
mood_buff = new(_host = src, range = 7, _ignore_if_not_on_turf = TRUE, department = quirk_poster_department)
return ..()
-/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, params)
+/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if (I.tool_behaviour == TOOL_WIRECUTTER)
QDEL_NULL(mood_buff)
return ..()
diff --git a/code/game/objects/effects/posters/poster.dm b/code/game/objects/effects/posters/poster.dm
index 52533c04771e..f3c38c169752 100644
--- a/code/game/objects/effects/posters/poster.dm
+++ b/code/game/objects/effects/posters/poster.dm
@@ -55,7 +55,7 @@
name = "[name] - [poster_structure.original_name]"
-/obj/item/poster/attackby(obj/item/I, mob/user, params)
+/obj/item/poster/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(I, /obj/item/shard))
return ..()
@@ -175,7 +175,7 @@
desc = holi_data.poster_desc
icon_state = holi_data.poster_icon
-/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, params)
+/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if(tool.tool_behaviour == TOOL_WIRECUTTER)
tool.play_tool_sound(src, 100)
if(ruined)
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index 0fc190173e29..927215910f9d 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -555,7 +555,7 @@
playsound(loc, 'sound/weapons/egloves.ogg', vol = 80, vary = TRUE)
end()
-/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, params)
+/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
attacked(user)
/obj/effect/constructing_effect/attack_hand(mob/living/user, list/modifiers)
diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm
index 1e6c2b35ede2..5a0057d4f778 100644
--- a/code/game/objects/items/cardboard_cutouts.dm
+++ b/code/game/objects/items/cardboard_cutouts.dm
@@ -79,7 +79,7 @@
pushed_over = FALSE
tacticool = AddComponent(/datum/component/tactical)
-/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params)
+/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/toy/crayon))
change_appearance(I, user)
return TRUE
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index b19258a64da3..31f0e2ade3a2 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -324,7 +324,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer."))
return (TOXLOSS|OXYLOSS)
-/obj/item/cigarette/attackby(obj/item/W, mob/user, params)
+/obj/item/cigarette/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(lit)
return ..()
@@ -844,7 +844,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
QDEL_NULL(cig_smoke)
-/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, params)
+/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(thing, /obj/item/food/grown))
return ..()
diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm
index cc98f5f52b0d..28d6f0a97307 100644
--- a/code/game/objects/items/cosmetics.dm
+++ b/code/game/objects/items/cosmetics.dm
@@ -201,7 +201,7 @@
skinhead.set_hairstyle("Skinhead", update = TRUE)
playsound(loc, shave_sound, 33, TRUE)
-/obj/item/razor/attack(mob/target_mob, mob/living/user, params)
+/obj/item/razor/attack(mob/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
if(!ishuman(target_mob))
return ..()
var/mob/living/carbon/human/human_target = target_mob
diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm
index 8baba2843143..c49228d15119 100644
--- a/code/game/objects/items/courtroom.dm
+++ b/code/game/objects/items/courtroom.dm
@@ -33,7 +33,7 @@
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
-/obj/item/gavelblock/attackby(obj/item/I, mob/user, params)
+/obj/item/gavelblock/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/gavelhammer))
playsound(loc, 'sound/items/gavel.ogg', 100, TRUE)
user.visible_message(span_warning("[user] strikes [src] with [I]."))
diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm
index 86edac48b72c..65e417a99be9 100644
--- a/code/game/objects/items/crab17.dm
+++ b/code/game/objects/items/crab17.dm
@@ -64,7 +64,7 @@
return FALSE
return TRUE
-/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!canwalk)
balloon_alert(user, "not ready to accept transactions!")
return
diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm
index c7c56ec65d4a..b9e2790cda9a 100644
--- a/code/game/objects/items/credit_holochip.dm
+++ b/code/game/objects/items/credit_holochip.dm
@@ -91,7 +91,7 @@
else
return 0
-/obj/item/holochip/attackby(obj/item/I, mob/user, params)
+/obj/item/holochip/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
..()
if(istype(I, /obj/item/holochip))
var/obj/item/holochip/H = I
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 6f4fa3945144..73876e871bea 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -434,7 +434,7 @@
forceMove(defib)
defib.update_power()
-/obj/item/shockpaddles/attack(mob/M, mob/living/user, params)
+/obj/item/shockpaddles/attack(mob/M, mob/living/user, list/modifiers, list/attack_modifiers)
if(busy)
return
defib?.update_power()
@@ -455,7 +455,6 @@
to_chat(user, span_warning("[src] are recharging!"))
return
- var/list/modifiers = params2list(params)
if(LAZYACCESS(modifiers, RIGHT_CLICK))
do_disarm(M, user)
return
diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm
index 5bfff8bfcf61..9a523460d223 100644
--- a/code/game/objects/items/devices/aicard_evil.dm
+++ b/code/game/objects/items/devices/aicard_evil.dm
@@ -88,12 +88,12 @@
max_capacity = 1000
w_class = WEIGHT_CLASS_NORMAL
-/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/A, mob/living/user, params)
+/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
var/mob/living/silicon/ai/AI
- if(isAI(A))
- AI = A
+ if(isAI(target))
+ AI = target
else
- AI = locate() in A
+ AI = locate() in target
if(!AI || AI.interaction_range == INFINITY)
playsound(src,'sound/machines/buzz-sigh.ogg',50,FALSE)
to_chat(user, span_notice("Error! Incompatible object!"))
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 67576eba5617..3d86e32797f2 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -82,7 +82,7 @@
crystal_lens = null
return ITEM_INTERACT_SUCCESS
-/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, params)
+/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attack_item, /obj/item/stock_parts/micro_laser))
if(diode)
balloon_alert(user, "already has a diode!")
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 2ee41dfdc184..e9e6838db087 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -82,7 +82,7 @@
//replace lights & stuff
return do_action(interacting_with, user) ? ITEM_INTERACT_SUCCESS : NONE
-/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, params)
+/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(uses >= max_uses)
user.balloon_alert(user, "already full!")
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 11dc85df34bc..974e65bfb58d 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -38,7 +38,7 @@
return
return ..()
-/obj/item/electropack/attackby(obj/item/W, mob/user, params)
+/obj/item/electropack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/clothing/head/helmet))
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user)
A.icon = 'icons/obj/devices/assemblies.dmi'
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 1c6097687067..c883f86c60d2 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -418,7 +418,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
tool.play_tool_sound(src, 10)
return TRUE
-/obj/item/radio/headset/attackby(obj/item/W, mob/user, params)
+/obj/item/radio/headset/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/encryptionkey))
if(keyslot && keyslot2)
to_chat(user, span_warning("The headset can't hold another key!"))
diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm
index c4b0fd604dd4..07a41c43bd4b 100644
--- a/code/game/objects/items/devices/swapper.dm
+++ b/code/game/objects/items/devices/swapper.dm
@@ -29,7 +29,7 @@
icon_state = "swapper[linked_swapper ? "-linked" : null]"
return ..()
-/obj/item/swapper/attackby(obj/item/I, mob/user, params)
+/obj/item/swapper/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/swapper))
var/obj/item/swapper/other_swapper = I
if(other_swapper.linked_swapper)
diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm
index 37c1098759e9..02facf1bf77d 100644
--- a/code/game/objects/items/devices/table_clock.dm
+++ b/code/game/objects/items/devices/table_clock.dm
@@ -33,7 +33,7 @@
. += span_info("The current CST (local) time is: [station_time_timestamp()].")
. += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].")
-/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(attacking_item.force < 5 || broken)
return
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 0f1d76e35dca..889162546239 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -85,7 +85,7 @@
else
soundloop.start()
-/obj/item/taperecorder/attackby(obj/item/I, mob/user, params)
+/obj/item/taperecorder/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!mytape && istype(I, /obj/item/tape))
if(!user.transferItemToLoc(I,src))
return
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 231ebc28e085..f8dbbfd3bf6f 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -380,7 +380,7 @@ effective or pretty fucking useless.
return TRUE
-/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(attacking_item, /obj/item/wrench/combat))
return ..()
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index 5c4366246ee5..c57a18d29ff4 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -208,7 +208,7 @@
/obj/item/dualsaber/purple
possible_colors = list("purple")
-/obj/item/dualsaber/attackby(obj/item/W, mob/user, params)
+/obj/item/dualsaber/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_MULTITOOL)
if(!hacked)
hacked = TRUE
diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm
index fc6685aaf6b2..5e054d7a7f0c 100644
--- a/code/game/objects/items/dyespray.dm
+++ b/code/game/objects/items/dyespray.dm
@@ -8,7 +8,7 @@
/obj/item/dyespray/attack_self(mob/user)
dye(user, user)
-/obj/item/dyespray/pre_attack(atom/target, mob/living/user, params)
+/obj/item/dyespray/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
dye(target, user)
return ..()
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index ce283a1426a7..22104cf1b060 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -169,7 +169,7 @@
else
return ..()
-/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, params)
+/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
if(AttemptRefill(O, user))
refilling = TRUE
return FALSE
@@ -300,7 +300,7 @@
user.visible_message(span_notice("[user] empties out \the [src] onto the floor using the release valve."), span_info("You quietly empty out \the [src] using its release valve."))
//firebot assembly
-/obj/item/extinguisher/attackby(obj/O, mob/user, params)
+/obj/item/extinguisher/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/bodypart/arm/left/robot) || istype(O, /obj/item/bodypart/arm/right/robot))
to_chat(user, span_notice("You add [O] to [src]."))
qdel(O)
diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm
index e9804096a82a..adecb19d4593 100644
--- a/code/game/objects/items/fireaxe.dm
+++ b/code/game/objects/items/fireaxe.dm
@@ -57,7 +57,7 @@
user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
-/obj/item/fireaxe/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/fireaxe/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit
return
if(target.resistance_flags & INDESTRUCTIBLE)
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 80ec054aca08..bf9ae18a611a 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -117,7 +117,7 @@
update_appearance()
return TRUE
-/obj/item/flamethrower/attackby(obj/item/W, mob/user, params)
+/obj/item/flamethrower/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(isigniter(W))
var/obj/item/assembly/igniter/I = W
if(I.secured)
diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm
index df92f79b57e5..3a306852ba34 100644
--- a/code/game/objects/items/food/egg.dm
+++ b/code/game/objects/items/food/egg.dm
@@ -88,7 +88,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0)
new /mob/living/basic/chick(spawn_turf)
GLOB.chicks_from_eggs++
-/obj/item/food/egg/attackby(obj/item/item, mob/user, params)
+/obj/item/food/egg/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/toy/crayon))
var/obj/item/toy/crayon/crayon = item
var/clr = crayon.crayon_color
@@ -278,7 +278,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0)
venue_value = FOOD_PRICE_CHEAP
crafting_complexity = FOOD_COMPLEXITY_2
-/obj/item/food/omelette/attackby(obj/item/item, mob/user, params)
+/obj/item/food/omelette/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/kitchen/fork))
var/obj/item/kitchen/fork/fork = item
if(fork.forkload)
diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm
index 43b60634914f..fe4f9fb64165 100644
--- a/code/game/objects/items/food/misc.dm
+++ b/code/game/objects/items/food/misc.dm
@@ -296,7 +296,7 @@
. = ..()
. += span_notice("If you had a rod you could make butter on a stick.")
-/obj/item/food/butter/attackby(obj/item/item, mob/user, params)
+/obj/item/food/butter/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/stack/rods))
var/obj/item/stack/rods/rods = item
if(!rods.use(1))//borgs can still fail this if they have no metal
diff --git a/code/game/objects/items/food/pancakes.dm b/code/game/objects/items/food/pancakes.dm
index b9578b2d5701..daba9af5bf79 100644
--- a/code/game/objects/items/food/pancakes.dm
+++ b/code/game/objects/items/food/pancakes.dm
@@ -30,7 +30,7 @@
positive_result = TRUE,\
use_large_steam_sprite = TRUE)
-/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, params)
+/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, list/modifiers, list/attack_modifiers)
var/newresult
if(istype(garnish, /obj/item/food/grown/berries))
newresult = /obj/item/food/pancakes/blueberry
@@ -117,7 +117,7 @@
ingredients_listed += "[ING.name], "
. += "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)]."
-/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, params)
+/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/food/pancakes))
var/obj/item/food/pancakes/pancake = item
if((contents.len >= PANCAKE_MAX_STACK) || ((pancake.contents.len + contents.len) > PANCAKE_MAX_STACK))
@@ -140,7 +140,7 @@
return
else if(contents.len)
var/obj/O = contents[contents.len]
- return O.attackby(item, user, params)
+ return O.attackby(item, user, modifiers)
..()
/obj/item/food/pancakes/proc/update_snack_overlays(obj/item/food/pancakes/pancake)
diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm
index e9acdd6cfd63..5166c8229409 100644
--- a/code/game/objects/items/grenades/festive.dm
+++ b/code/game/objects/items/grenades/festive.dm
@@ -14,7 +14,7 @@
/obj/item/sparkler/fire_act(exposed_temperature, exposed_volume)
light()
-/obj/item/sparkler/attackby(obj/item/item, mob/user, params)
+/obj/item/sparkler/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
var/ignition_msg = item.ignition_effect(src, user)
if(ignition_msg)
light(user, ignition_msg)
@@ -75,7 +75,7 @@
/obj/item/grenade/firecracker/attack_self(mob/user) // You need to light it manually.
return
-/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, params)
+/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
var/ignition_msg = item.ignition_effect(src, user)
if(ignition_msg && !active)
visible_message(ignition_msg)
@@ -117,5 +117,3 @@
update_mob()
explosion(src, devastation_range = -1, heavy_impact_range = -1, light_impact_range = 2)
qdel(src)
-
-
diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm
index 9bc8c1c515f9..b10c6e6e9760 100644
--- a/code/game/objects/items/grenades/ghettobomb.dm
+++ b/code/game/objects/items/grenades/ghettobomb.dm
@@ -48,7 +48,7 @@
effects[effect_type] += as_stack.amount
else
effects[effect_type]++
- break
+ break
/obj/item/grenade/iedcasing/examine(mob/user)
. = ..()
@@ -131,7 +131,7 @@
update_icon(UPDATE_ICON_STATE)
user.balloon_alert_to_viewers("arming!")
COOLDOWN_START(src, spam_cd, 1 SECONDS)
-
+
/obj/item/grenade/iedcasing/detonate(mob/living/lanced_by) //Blowing that can up
if(effects[/obj/item/shard]) //this has to be before so it initializes us a pellet cloud or something
shrapnel_radius = effects[/obj/item/shard]
@@ -217,7 +217,7 @@
else
. += span_notice("The wires are just dangling from it, you need some sort of activating assembly.")
-/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, params)
+/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!wires_are_in)
// here we can stuff in additional objects for a cooler effect
if(is_type_in_typecache(item, allowed) && contents.len < MAX_STUFFINGS)
@@ -229,7 +229,7 @@
as_stack.merge_type = null //prevent them from merging inside for contents.len
to_put.forceMove(src)
return
-
+
//if the item has reagents lets allow it to transfer
if(item.reagents)
return ..()
@@ -268,11 +268,11 @@
if(!user.transferItemToLoc(assembly, src))
return
user.balloon_alert(user, "attached")
-
+
var/obj/item/grenade/iedcasing/pipebomb = new(drop_location())
for(var/atom/movable/item_inside as anything in contents)
item_inside.forceMove(pipebomb)
-
+
pipebomb.power = power
pipebomb.attach_activator(assembly)
pipebomb.setup_effects_from_contents()
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index d5d6053380cb..c9dd469e19c1 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -53,7 +53,7 @@
to_chat(user, span_notice("The wire panel can be accessed without a screwdriver."))
return TRUE
-/obj/item/grenade/c4/attackby(obj/item/item, mob/user, params)
+/obj/item/grenade/c4/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(is_wire_tool(item))
wires.interact(user)
else
diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm
index 9486e042e434..f11c33dfd0f9 100644
--- a/code/game/objects/items/hand_items.dm
+++ b/code/game/objects/items/hand_items.dm
@@ -282,14 +282,14 @@
playsound(slapped, 'sound/weapons/slap.ogg', slap_volume, TRUE, -1)
return
-/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, params)
+/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!loc.Adjacent(target) || !istype(target, /obj/structure/table))
return ..()
slam_table(target, user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, params)
+/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!loc.Adjacent(target) || !istype(target, /obj/structure/table))
return ..()
@@ -338,7 +338,7 @@
desc = "Sometimes, you just want to act gentlemanly."
inhand_icon_state = "nothing"
-/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, params)
+/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers, list/attack_modifiers)
if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target))
return ..()
@@ -347,7 +347,7 @@
return TRUE
-/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, params)
+/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers, list/attack_modifiers)
if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target))
return ..()
@@ -358,7 +358,7 @@
return SECONDARY_ATTACK_CALL_NORMAL
-/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, params)
+/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, list/modifiers, list/attack_modifiers)
if(!loc.Adjacent(target_mob) || !istype(user) || !istype(target_mob))
return TRUE
@@ -445,7 +445,7 @@
attack_verb_continuous = list("steals")
attack_verb_simple = list("steal")
-/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if (!ishuman(target_mob))
return
diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm
index 20233db522b3..4141c74fd67c 100644
--- a/code/game/objects/items/hot_potato.dm
+++ b/code/game/objects/items/hot_potato.dm
@@ -95,7 +95,7 @@
if(active)
to_chat(user, span_userdanger("You have a really bad feeling about [src]!"))
-/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return .
diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm
index 1a3ec50eba25..87fca49be899 100644
--- a/code/game/objects/items/implants/implantcase.dm
+++ b/code/game/objects/items/implants/implantcase.dm
@@ -35,7 +35,7 @@
icon_state = "implantcase-[imp ? imp.implant_color : 0]"
return ..()
-/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, params)
+/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(used_item))
if(!user.can_write(used_item))
return
diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm
index b4208fd93f05..d15fed1e64a3 100644
--- a/code/game/objects/items/implants/implanter.dm
+++ b/code/game/objects/items/implants/implanter.dm
@@ -50,7 +50,7 @@
else
to_chat(user, span_warning("[src] fails to implant [target]."))
-/obj/item/implanter/attackby(obj/item/I, mob/living/user, params)
+/obj/item/implanter/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(I))
return ..()
if(!user.can_write(I))
diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm
index 92f015b01a91..94f4a68f9985 100644
--- a/code/game/objects/items/implants/implantpad.dm
+++ b/code/game/objects/items/implants/implantpad.dm
@@ -37,7 +37,7 @@
inserted_case = null
update_appearance(UPDATE_ICON)
-/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, params)
+/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(inserted_case || !istype(attacking_item))
return ..()
if(!user.transferItemToLoc(attacking_item, src))
diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm
index c25496c634bb..178dfcae2a60 100644
--- a/code/game/objects/items/implants/security/implant_chem.dm
+++ b/code/game/objects/items/implants/security/implant_chem.dm
@@ -95,9 +95,9 @@
desc = "A glass case containing a remote chemical implant."
imp_type = /obj/item/implant/chem
-/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params)
+/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/reagent_containers/syringe) && imp)
- W.interact_with_atom(imp, user, params)
+ W.interact_with_atom(imp, user, modifiers)
return TRUE
else
return ..()
diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm
index 0b8cf8d9c8a3..8613caecedf4 100644
--- a/code/game/objects/items/inspector.dm
+++ b/code/game/objects/items/inspector.dm
@@ -65,7 +65,7 @@
balloon_alert(user, "[cell_cover_open ? "opened" : "closed"] cell cover")
return TRUE
-/obj/item/inspector/attackby(obj/item/I, mob/user, params)
+/obj/item/inspector/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(cell_cover_open && istype(I, /obj/item/stock_parts/power_store/cell))
if(cell)
to_chat(user, span_warning("[src] already has a cell installed."))
@@ -223,7 +223,7 @@
cycle_print_time(user)
return TRUE
-/obj/item/inspector/clown/attackby(obj/item/I, mob/user, params)
+/obj/item/inspector/clown/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(cell_cover_open && istype(I, /obj/item/kitchen/fork))
cycle_sound(user)
return
@@ -302,7 +302,7 @@
check_settings_legality()
return TRUE
-/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, params)
+/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(cell_cover_open)
check_settings_legality()
diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm
index bc1be30f578d..3263e126e71c 100644
--- a/code/game/objects/items/kirby_plants/kirbyplants.dm
+++ b/code/game/objects/items/kirby_plants/kirbyplants.dm
@@ -50,7 +50,7 @@
. = ..()
icon_state = dead ? "plant-25" : base_icon_state
-/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, params)
+/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!dead && trimmable && HAS_TRAIT(user,TRAIT_BONSAI) && isturf(loc) && I.get_sharpness())
to_chat(user,span_notice("You start trimming [src]."))
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 0d7a53e2c357..2d2aa2518f42 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -252,7 +252,7 @@
filled_overlay.color = mix_color_from_reagents(reagents.reagent_list)
. += filled_overlay
-/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
if(!target_mob.reagents || reagents.total_volume <= 0)
return ..()
@@ -279,7 +279,7 @@
reagents.trans_to(target_mob, spoon_sip_size, methods = INGEST)
return TRUE
-/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, params)
+/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
@@ -299,7 +299,7 @@
attacked_atom.balloon_alert(user, "it's full!")
return TRUE
-/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, params)
+/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm
index 627602f44e22..cba27bca02fb 100644
--- a/code/game/objects/items/knives.dm
+++ b/code/game/objects/items/knives.dm
@@ -89,7 +89,7 @@
/// Bleed stacks applied when an organic mob target is hit
var/bleed_stacks_per_hit = 3
-/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!isliving(target))
return
var/mob/living/M = target
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index 062f474307be..e08080504dd8 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -101,7 +101,7 @@
return ..()
-/obj/item/latexballoon/attackby(obj/item/item, mob/user, params)
+/obj/item/latexballoon/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/tank))
var/obj/item/tank/air_tank = item
blow(air_tank, user)
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index b7e2a7707d67..595f2bee3f87 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -98,7 +98,7 @@
postmark_image.appearance_flags |= RESET_COLOR|KEEP_APART|KEEP_APART
. += postmark_image
-/obj/item/mail/attackby(obj/item/W, mob/user, params)
+/obj/item/mail/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
// Destination tagging
if(istype(W, /obj/item/dest_tagger))
var/obj/item/dest_tagger/destination_tag = W
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index bd28c2d0eabe..3ecd38e6648b 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -42,12 +42,15 @@
var/on_stun_sound = 'sound/effects/woodhit.ogg'
/// The volume of the above.
var/on_stun_volume = 75
- /// Do we animate the "hit" when stunning something?
- var/stun_animation = TRUE
/// Whether the stun attack is logged. Only relevant for abductor batons, which have different modes.
var/log_stun_attack = TRUE
/// Boolean on whether people with chunky fingers can use this baton.
var/chunky_finger_usable = FALSE
+ /// Boolean, if TRUE when we harmbaton someone we will also try to stun if the baton is active / not on cooldown.
+ var/stun_on_harmbaton = FALSE
+
+ /// Text shown when trying to stun someone while the baton is on cooldown.
+ var/wait_desc = ""
/// What term do we use to describe our baton being 'ready', or the phrase to use when var/active is TRUE.
var/activated_word = "ready"
@@ -93,38 +96,83 @@
else
. = "that is [stun_strength] effective at disabling targets[affect_cyborg ? ", including cyborgs" : ""]"
-/**
- * Ok, think of baton attacks like a melee attack chain:
- *
- * [/baton_attack()] comes first. It checks if the user is clumsy, if the target parried the attack and handles some messages and sounds.
- * * Depending on its return value, it'll either do a normal attack, continue to the next step or stop the attack.
- *
- * [/finalize_baton_attack()] is then called. It handles logging stuff, sound effects and calls baton_effect().
- * * The proc is also called in other situations such as stunbatons right clicking or throw impact. Basically when baton_attack()
- * * checks are either redundant or unnecessary.
- *
- * [/baton_effect()] is third in the line. It knockdowns targets, along other effects called in additional_effects_cyborg() and
- * * additional_effects_non_cyborg().
- *
- * Last but not least [/set_batoned()], which gives the target the IWASBATONED trait with REF(user) as source and then removes it
- * * after a cooldown has passed. Basically, it stops users from cheesing the cooldowns by dual wielding batons.
- *
- * TL;DR: [/baton_attack()] -> [/finalize_baton_attack()] -> [/baton_effect()] -> [/set_batoned()]
- */
-/obj/item/melee/baton/attack(mob/living/target, mob/living/user, params)
- add_fingerprint(user)
- var/list/modifiers = params2list(params)
- switch(baton_attack(target, user, modifiers))
- if(BATON_DO_NORMAL_ATTACK)
- return ..()
- if(BATON_ATTACKING)
- finalize_baton_attack(target, user, modifiers)
+/// Checks if we can actually USE the baton. Impure
+/obj/item/melee/baton/proc/can_baton(mob/living/target, mob/living/user)
+ PROTECTED_PROC(TRUE)
+ if(clumsy_check(user, target))
+ return FALSE
+
+ if(!chunky_finger_usable && ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ if(human_user.check_chunky_fingers() && user.is_holding(src) && !HAS_MIND_TRAIT(user, TRAIT_CHUNKYFINGERS_IGNORE_BATON))
+ balloon_alert(human_user, "fingers are too big!")
+ return FALSE
+
+ return TRUE
+
+// Stun attack
+/obj/item/melee/baton/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
+ . = ..()
+ if(. || !isliving(target))
+ return .
+
+ if(!can_baton(target, user))
+ return TRUE
+
+ if(!COOLDOWN_FINISHED(src, cooldown_check))
+ if(wait_desc)
+ balloon_alert(user, wait_desc)
+ return TRUE
+
+ if(HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) //no doublebaton abuse anon!
+ target.balloon_alert(user, "can't stun yet!")
+ return TRUE
+
+ if(active)
+ // when we continue to attack, deal 0 (brute) damage (just stun)
+ SET_ATTACK_FORCE(attack_modifiers, 0)
+ MUTE_ATTACK_HITSOUND(attack_modifiers)
+ HIDE_ATTACK_MESSAGES(attack_modifiers)
+ return .
+
+// Harm attack
+/obj/item/melee/baton/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
+ . = ..()
+ if(. != SECONDARY_ATTACK_CALL_NORMAL || !isliving(target))
+ return .
+
+ if(!can_baton(target, user))
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+
+ // call attack, NOT pre_attack
+ // (so we go directly to harming)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+// This is where stun gets applied
+/obj/item/melee/baton/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
+ if(!isliving(target) || !active || !COOLDOWN_FINISHED(src, cooldown_check) || HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user)))
+ return
+ // worst check in the chain but - right click = harmbaton
+ if(LAZYACCESS(modifiers, RIGHT_CLICK) && !stun_on_harmbaton)
+ return
+
+ finalize_baton_attack(target, user, modifiers)
+
+ var/list/desc
+ if(iscyborg(target))
+ desc = get_cyborg_stun_description(target, user)
+ if(!affect_cyborg)
+ playsound(src, 'sound/effects/bang.ogg', 10, TRUE) //bonk
+ else
+ desc = get_stun_description(target, user)
+
+ if(desc)
+ target.visible_message(desc["visible"], desc["local"], visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE)
/obj/item/melee/baton/apply_fantasy_bonuses(bonus)
. = ..()
stamina_damage = modify_fantasy_variable("stamina_damage", stamina_damage, bonus * 4)
-
/obj/item/melee/baton/remove_fantasy_bonuses(bonus)
stamina_damage = reset_fantasy_variable("stamina_damage", stamina_damage)
return ..()
@@ -153,75 +201,19 @@
return CONTEXTUAL_SCREENTIP_SET
-/obj/item/melee/baton/proc/baton_attack(mob/living/target, mob/living/user, modifiers)
- . = BATON_ATTACKING
-
- if(clumsy_check(user, target))
- return BATON_ATTACK_DONE
-
- if(!chunky_finger_usable && ishuman(user))
- var/mob/living/carbon/human/potential_chunky_finger_human = user
- if(potential_chunky_finger_human.check_chunky_fingers() && user.is_holding(src) && !HAS_MIND_TRAIT(user, TRAIT_CHUNKYFINGERS_IGNORE_BATON))
- balloon_alert(potential_chunky_finger_human, "fingers are too big!")
- return BATON_ATTACK_DONE
-
- if(!active || LAZYACCESS(modifiers, RIGHT_CLICK))
- return BATON_DO_NORMAL_ATTACK
-
- if(cooldown_check > world.time)
- var/wait_desc = get_wait_description()
- if (wait_desc)
- to_chat(user, wait_desc)
- return BATON_ATTACK_DONE
-
- if(check_parried(target, user))
- return BATON_ATTACK_DONE
-
- if(HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) //no doublebaton abuse anon!
- to_chat(user, span_danger("You fumble and miss [target]!"))
- return BATON_ATTACK_DONE
-
- if(stun_animation)
- user.do_attack_animation(target)
-
- var/list/desc
-
- if(iscyborg(target))
- if(affect_cyborg)
- desc = get_cyborg_stun_description(target, user)
- else
- desc = get_unga_dunga_cyborg_stun_description(target, user)
- playsound(get_turf(src), 'sound/effects/bang.ogg', 10, TRUE) //bonk
- . = BATON_ATTACK_DONE
- else
- desc = get_stun_description(target, user)
-
- if(desc)
- target.visible_message(desc["visible"], desc["local"])
-
-/obj/item/melee/baton/proc/check_parried(mob/living/carbon/human/human_target, mob/living/user)
- if (human_target.check_block(src, 0, "[user]'s [name]", MELEE_ATTACK))
- playsound(human_target, 'sound/weapons/genhit.ogg', 50, TRUE)
- return TRUE
- return FALSE
-
-/obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, modifiers, in_attack_chain = TRUE)
- if(!in_attack_chain && HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user)))
- return BATON_ATTACK_DONE
-
- cooldown_check = world.time + cooldown
+/// Wrapper for calling "stun()" and doing relevant vfx/sfx
+/obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, list/modifiers)
+ PROTECTED_PROC(TRUE)
+ COOLDOWN_START(src, cooldown_check, cooldown)
if(on_stun_sound)
- playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1)
- if(user)
- target.lastattacker = user.real_name
- target.lastattackerckey = user.ckey
- target.LAssailant = WEAKREF(user)
- if(log_stun_attack)
- log_combat(user, target, "stun attacked", src)
+ playsound(src, on_stun_sound, on_stun_volume, TRUE, -1)
if(baton_effect(target, user, modifiers) && user)
set_batoned(target, user, cooldown)
+ log_combat(user, target, "stunned", src.name)
-/obj/item/melee/baton/proc/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override)
+/// The actual "stun()" of the stun baton
+/obj/item/melee/baton/proc/baton_effect(mob/living/target, mob/living/user, list/modifiers, stun_override)
+ PROTECTED_PROC(TRUE)
var/trait_check = HAS_TRAIT(target, TRAIT_BATON_RESISTANCE)
if(iscyborg(target))
if(!affect_cyborg)
@@ -245,46 +237,37 @@
SEND_SIGNAL(target, COMSIG_MOB_BATONED, user, src)
return TRUE
-/// Description for trying to stun when still on cooldown.
-/obj/item/melee/baton/proc/get_wait_description()
- return
-
/// Default message for stunning a living, non-cyborg mob.
/obj/item/melee/baton/proc/get_stun_description(mob/living/target, mob/living/user)
+ PROTECTED_PROC(TRUE)
. = list()
-
.["visible"] = span_danger("[user] knocks [target] down with [src]!")
.["local"] = span_userdanger("[user] knocks you down with [src]!")
- return .
-
/// Default message for stunning a cyborg.
/obj/item/melee/baton/proc/get_cyborg_stun_description(mob/living/target, mob/living/user)
+ PROTECTED_PROC(TRUE)
. = list()
-
- .["visible"] = span_danger("[user] pulses [target]'s sensors with the baton!")
- .["local"] = span_danger("You pulse [target]'s sensors with the baton!")
-
- return .
-
-/// Default message for trying to stun a cyborg with a baton that can't stun cyborgs.
-/obj/item/melee/baton/proc/get_unga_dunga_cyborg_stun_description(mob/living/target, mob/living/user)
- . = list()
-
- .["visible"] = span_danger("[user] tries to knock down [target] with [src], and predictably fails!") //look at this duuuuuude
- .["local"] = span_userdanger("[user] tries to... knock you down with [src]?") //look at the top of his head!
-
- return .
+ if(affect_cyborg)
+ .["visible"] = span_danger("[user] pulses [target]'s sensors with the baton!")
+ .["local"] = span_danger("You pulse [target]'s sensors with the baton!")
+ else
+ .["visible"] = span_danger("[user] tries to knock down [target] with [src], and predictably fails!") //look at this duuuuuude
+ .["local"] = span_userdanger("[user] tries to... knock you down with [src]?") //look at the top of his head!
/// Contains any special effects that we apply to living, non-cyborg mobs we stun. Does not include applying a knockdown, dealing stamina damage, etc.
/obj/item/melee/baton/proc/additional_effects_non_cyborg(mob/living/target, mob/living/user)
+ PROTECTED_PROC(TRUE)
return
/// Contains any special effects that we apply to cyborgs we stun. Does not include flashing the cyborg's screen, hardstunning them, etc.
/obj/item/melee/baton/proc/additional_effects_cyborg(mob/living/target, mob/living/user)
+ PROTECTED_PROC(TRUE)
return
+/// Used in marking a target as being hit by a baton
/obj/item/melee/baton/proc/set_batoned(mob/living/target, mob/living/user, cooldown)
+ PRIVATE_PROC(TRUE)
if(!cooldown)
return
var/user_ref = REF(user) // avoids harddels.
@@ -294,7 +277,7 @@
/obj/item/melee/baton/proc/clumsy_check(mob/living/user, mob/living/intented_target)
if(!active || !HAS_TRAIT(user, TRAIT_CLUMSY) || prob(50))
return FALSE
- user.visible_message(span_danger("[user] accidentally hits [user.p_them()]self over the head with [src]! What a doofus!"), span_userdanger("You accidentally hit yourself over the head with [src]!"))
+ user.visible_message(span_danger("[user] accidentally hits [user.p_them()]self over the head with [src]! What a doofus!"), span_userdanger("You accidentally hit yourself over the head with [src]!"), visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE)
if(iscyborg(user))
if(affect_cyborg)
@@ -302,9 +285,9 @@
user.Paralyze(clumsy_knockdown_time)
additional_effects_cyborg(user, user) // user is the target here
if(on_stun_sound)
- playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1)
+ playsound(src, on_stun_sound, on_stun_volume, TRUE, -1)
else
- playsound(get_turf(src), 'sound/effects/bang.ogg', 10, TRUE)
+ playsound(src, 'sound/effects/bang.ogg', 10, TRUE)
else
//straight up always force say for clumsy humans
if(ishuman(user))
@@ -314,14 +297,11 @@
user.apply_damage(stamina_damage, PAIN, spread_damage = TRUE)
additional_effects_non_cyborg(user, user) // user is the target here
if(on_stun_sound)
- playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1)
-
- user.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD, attacking_item = src)
+ playsound(src, on_stun_sound, on_stun_volume, TRUE, -1)
+ user.apply_damage(2 * force, BRUTE, BODY_ZONE_HEAD, attacking_item = src)
log_combat(user, user, "accidentally stun attacked [user.p_them()]self due to their clumsiness", src)
- if(stun_animation)
- user.do_attack_animation(user)
- return
+ user.do_attack_animation(user)
/obj/item/conversion_kit
name = "conversion kit"
@@ -445,15 +425,13 @@
stun_armour_penetration = 40
clumsy_knockdown_time = 24 SECONDS
affect_cyborg = TRUE
+ wait_desc = "still charging!"
on_stun_sound = 'sound/effects/contractorbatonhit.ogg'
on_inhand_icon_state = "contractor_baton_on"
on_sound = 'sound/weapons/contractorbatonextend.ogg'
active_force = 16
-/obj/item/melee/baton/telescopic/contractor_baton/get_wait_description()
- return span_danger("The baton is still charging!")
-
/obj/item/melee/baton/telescopic/contractor_baton/additional_effects_non_cyborg(mob/living/target, mob/living/user)
target.set_jitter_if_lower(40 SECONDS)
target.set_stutter_if_lower(40 SECONDS)
@@ -482,6 +460,8 @@
on_stun_sound = 'sound/weapons/egloves.ogg'
on_stun_volume = 50
active = FALSE
+ stun_on_harmbaton = TRUE
+ wait_desc = "still charging!"
activated_word = "activated"
context_living_rmb_active = "Harmful Stun"
light_range = 1.5
@@ -525,7 +505,7 @@
/obj/item/melee/baton/security/suicide_act(mob/living/user)
if(cell?.charge && active)
user.visible_message(span_suicide("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!"))
- attack(user, user)
+ finalize_baton_attack(user, user)
return FIRELOSS
else
user.visible_message(span_suicide("[user] is shoving the [name] down their throat! It looks like [user.p_theyre()] trying to commit suicide!"))
@@ -594,7 +574,7 @@
tool.play_tool_sound(src)
return TRUE
-/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, params)
+/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/stock_parts/power_store/cell))
var/obj/item/stock_parts/power_store/cell/active_cell = item
if(cell)
@@ -685,18 +665,20 @@
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
deductcharge(cell_hit_cost)
-/// Handles prodding targets with turned off stunbatons and right clicking stun'n'bash
-/obj/item/melee/baton/security/baton_attack(mob/living/target, mob/living/user, modifiers)
+/obj/item/melee/baton/security/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
- if(. != BATON_DO_NORMAL_ATTACK)
- return
- if(LAZYACCESS(modifiers, RIGHT_CLICK))
- if(active && cooldown_check <= world.time && !check_parried(target, user))
- finalize_baton_attack(target, user, modifiers, in_attack_chain = FALSE)
- else if(!user.combat_mode)
- target.visible_message(span_warning("[user] prods [target] with [src]. Luckily it was off."), \
- span_warning("[user] prods you with [src]. Luckily it was off."))
- return BATON_ATTACK_DONE
+ if(. || !isliving(target))
+ return .
+
+ if(!active && !user.combat_mode)
+ target.visible_message(
+ span_warning("[user] prods [target] with [src]. Luckily it was off."),
+ span_warning("[user] prods you with [src]. Luckily it was off."),
+ visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
+ )
+ return TRUE
+
+ return .
/obj/item/melee/baton/security/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override)
if(iscyborg(loc))
@@ -732,25 +714,22 @@
if(!trait_check)
target.Knockdown(knockdown_time)
-/obj/item/melee/baton/security/get_wait_description()
- return span_danger("The baton is still charging!")
-
/obj/item/melee/baton/security/get_stun_description(mob/living/target, mob/living/user)
. = list()
.["visible"] = span_danger("[user] stuns [target] with [src]!")
.["local"] = span_userdanger("[user] stuns you with [src]!")
-/obj/item/melee/baton/security/get_unga_dunga_cyborg_stun_description(mob/living/target, mob/living/user)
- . = list()
-
- .["visible"] = span_danger("[user] tries to stun [target] with [src], and predictably fails!")
- .["local"] = span_userdanger("[user] tries to... stun you with [src]?")
+/obj/item/melee/baton/security/get_cyborg_stun_description(mob/living/target, mob/living/user)
+ . = ..()
+ if(!affect_cyborg)
+ .["visible"] = span_danger("[user] tries to stun [target] with [src], and predictably fails!")
+ .["local"] = span_userdanger("[user] tries to... stun you with [src]?")
/obj/item/melee/baton/security/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if(!. && active && prob(throw_stun_chance) && isliving(hit_atom))
- finalize_baton_attack(hit_atom, thrownby?.resolve(), in_attack_chain = FALSE)
+ finalize_baton_attack(hit_atom, thrownby?.resolve())
/obj/item/melee/baton/security/emp_act(severity)
. = ..()
@@ -809,7 +788,7 @@
. = ..()
sparkler = new (src)
-/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, params)//handles sticking a crystal onto a stunprod to make an improved cattleprod
+/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)//handles sticking a crystal onto a stunprod to make an improved cattleprod
if(!istype(item, /obj/item/stack))
return ..()
@@ -841,9 +820,9 @@
var/obj/item/melee/baton/security/cattleprod/brand_new_prod = new our_prod(user.loc)
user.put_in_hands(brand_new_prod)
-/obj/item/melee/baton/security/cattleprod/baton_effect()
+/obj/item/melee/baton/security/cattleprod/can_baton(mob/living/target, mob/living/user)
if(!sparkler.activate())
- return BATON_ATTACK_DONE
+ return FALSE
return ..()
/obj/item/melee/baton/security/cattleprod/Destroy()
@@ -870,15 +849,7 @@
/obj/item/melee/baton/security/boomerang/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/boomerang, throw_range+2, TRUE)
-
-/obj/item/melee/baton/security/boomerang/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- if(!active)
- return ..()
- var/caught = hit_atom.hitby(src, skipcatch = FALSE, hitpush = FALSE, throwingdatum = throwingdatum)
- var/mob/thrown_by = thrownby?.resolve()
- if(isliving(hit_atom) && !iscyborg(hit_atom) && !caught && prob(throw_stun_chance))//if they are a living creature and they didn't catch it
- finalize_baton_attack(hit_atom, thrown_by, in_attack_chain = FALSE)
+ AddComponent(/datum/component/boomerang, throw_range + 2, TRUE)
/obj/item/melee/baton/security/boomerang/loaded //Same as above, comes with a cell.
preload_cell_type = /obj/item/stock_parts/power_store/cell/high
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index c6c7743fc8b8..d0edf982fd27 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -201,7 +201,7 @@
final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword
return ..()
-/obj/item/melee/beesword/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/melee/beesword/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
carbon_target.reagents.add_reagent(/datum/reagent/toxin, 4)
@@ -249,16 +249,16 @@
if(!isspaceturf(turf))
consume_turf(turf)
-/obj/item/melee/supermatter_sword/pre_attack(atom/A, mob/living/user, params)
+/obj/item/melee/supermatter_sword/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return .
- if(A == user)
+ if(target == user)
user.dropItemToGround(src, TRUE)
else
- user.do_attack_animation(A)
- consume_everything(A)
+ user.do_attack_animation(target)
+ consume_everything(target)
return TRUE
/obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
@@ -341,7 +341,7 @@
attack_verb_simple = list("flog", "whip", "lash", "discipline")
hitsound = 'sound/weapons/whip.ogg'
-/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
human_target.drop_all_held_items()
diff --git a/code/game/objects/items/piggy_bank.dm b/code/game/objects/items/piggy_bank.dm
index bdfda215966d..a11eac5f8283 100644
--- a/code/game/objects/items/piggy_bank.dm
+++ b/code/game/objects/items/piggy_bank.dm
@@ -92,7 +92,7 @@
if(95 to INFINITY)
balloon_alert(user, "brimming with cash")
-/obj/item/piggy_bank/attackby(obj/item/item, mob/user, params)
+/obj/item/piggy_bank/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
var/creds_value = item.get_item_credit_value()
if(isnull(creds_value))
return ..()
diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm
index eb8cef7a11ae..776954e8e055 100644
--- a/code/game/objects/items/pillow.dm
+++ b/code/game/objects/items/pillow.dm
@@ -46,7 +46,7 @@
. = ..()
QDEL_NULL(pillow_trophy)
-/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, params)
+/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!iscarbon(target_mob))
return
@@ -71,7 +71,7 @@
user.visible_message("[user] starts to smother [victim]", span_notice("You begin smothering [victim]"), vision_distance = COMBAT_MESSAGE_RANGE)
INVOKE_ASYNC(src, PROC_REF(smothering), user, victim)
-/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!bricked && istype(attacking_item, /obj/item/stack/sheet/mineral/sandstone))
var/obj/item/stack/sheet/mineral/sandstone/brick = attacking_item
balloon_alert(user, "inserting brick...")
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 6c4b0bb5b06c..ea9aebe5e588 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -124,7 +124,7 @@
else
to_chat(user, span_notice("You try to pet [src], but it has no stuffing. Aww..."))
-/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params)
+/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(I.get_sharpness())
if(!grenade)
if(!stuffed)
@@ -691,7 +691,7 @@
)
AddElement(/datum/element/connect_loc, loc_connections)
-/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, params)
+/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(fat_dart))
return ..()
if(splat)
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index d49f097707ec..0407f369baf0 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -110,7 +110,7 @@
balloon_alert(user, "output level set to [pressure_setting_to_text(pressure_setting)]")
return TRUE
-/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, params)
+/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(istype(W, /obj/item/tank/internals))
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index e4af94168246..73d120da03b6 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -71,7 +71,7 @@
update_tank(tank, TANK_REMOVING, user)
return TRUE
-/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, params)
+/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item_to_insert, /obj/item/tank/internals))
return ..()
if(tank)
diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm
index 9a555bd8ead3..b96aa6712879 100644
--- a/code/game/objects/items/puzzle_pieces.dm
+++ b/code/game/objects/items/puzzle_pieces.dm
@@ -126,7 +126,7 @@
desc = "This door only opens when a keycard is swiped. It looks virtually indestructible."
uses_queuelinks = FALSE
-/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(attacking_item, /obj/item/keycard))
return
@@ -376,7 +376,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32)
icon_state = "keycardpad0"
base_icon_state = "keycardpad"
-/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(attacking_item, /obj/item/keycard) || used)
return
diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm
index ef0be22acc47..758dfb94417d 100644
--- a/code/game/objects/items/rcd/RSF.dm
+++ b/code/game/objects/items/rcd/RSF.dm
@@ -72,7 +72,7 @@ RSF
/obj/item/rsf/cyborg
matter = 30
-/obj/item/rsf/attackby(obj/item/W, mob/user, params)
+/obj/item/rsf/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(is_type_in_list(W,matter_by_item))//If the thing we got hit by is in our matter list
var/tempMatter = matter_by_item[W.type] + matter
if(tempMatter > max_matter)
diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm
index 7a597087a2d1..8e25322b5f2b 100644
--- a/code/game/objects/items/robot/ai_upgrades.dm
+++ b/code/game/objects/items/robot/ai_upgrades.dm
@@ -7,9 +7,7 @@
///The upgrade that will be applied to the AI when installed
var/datum/ai_module/to_gift = /datum/ai_module
-/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, proximity)
- if(!proximity)
- return ..()
+/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!isAI(target))
return ..()
var/mob/living/silicon/ai/AI = target
@@ -50,9 +48,7 @@
icon_state = "datadisk3"
-/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, proximity)
- if(!proximity)
- return ..()
+/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers)
if(!isAI(A))
return ..()
var/mob/living/silicon/ai/AI = A
@@ -82,7 +78,3 @@
name = "power transfer upgrade"
desc = "A legal upgrade that allows an artificial intelligence to directly provide power to APCs from a distance"
to_gift = /datum/ai_module/power_apc
-
-
-
-
diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm
index 21a7e80ba807..1ee0c61aa77c 100644
--- a/code/game/objects/items/robot/items/generic.dm
+++ b/code/game/objects/items/robot/items/generic.dm
@@ -97,7 +97,7 @@
if(HUG_MODE_CRUSH)
to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.")
-/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, params)
+/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, list/modifiers, list/attack_modifiers)
if(attacked_mob == user)
return
if(attacked_mob.health < 0)
@@ -105,7 +105,6 @@
switch(mode)
if(HUG_MODE_NICE)
if(isanimal_or_basicmob(attacked_mob))
- var/list/modifiers = params2list(params)
if (!user.combat_mode && !LAZYACCESS(modifiers, RIGHT_CLICK))
attacked_mob.attack_hand(user, modifiers) //This enables borgs to get the floating heart icon and mob emote from simple_animal's that have petbonus == true.
return
diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm
index 08c777cab00b..94878e6d97bc 100644
--- a/code/game/objects/items/robot/items/storage.dm
+++ b/code/game/objects/items/robot/items/storage.dm
@@ -61,7 +61,7 @@
stored.forceMove(user.drop_location())
return CLICK_ACTION_SUCCESS
-/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, params)
+/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(atom.loc, /mob/living/silicon/robot) || istype(atom.loc, /obj/item/robot_model) || HAS_TRAIT(atom, TRAIT_NODROP))
return ..() // Borgs should not be grabbing their own modules
@@ -90,9 +90,9 @@
update_appearance()
return NONE
-/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, params)
+/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(stored)
- item.melee_attack_chain(user, stored, params)
+ item.melee_attack_chain(user, stored, modifiers)
return
return ..()
@@ -314,7 +314,7 @@
. += "The apparatus currently has [stored] secured."
. += span_notice(" Alt-click will drop the currently stored circuit. ")
-/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, params)
+/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(atom, /obj/item/ai_module) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails
to_chat(user, span_warning("This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up."))
return ..()
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index be5d494e39a4..7a8036d118c6 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -166,7 +166,7 @@
return TRUE
//ADD
-/obj/item/robot_suit/attackby(obj/item/W, mob/user, params)
+/obj/item/robot_suit/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stack/sheet/iron))
var/obj/item/stack/sheet/iron/M = W
if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 2f2d89037907..4a2e66c078ad 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -780,7 +780,7 @@
icon = 'icons/obj/devices/circuitry_n_data.dmi'
icon_state = "cyborg_upgrade1"
-/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, params)
+/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(borgo))
return ..()
if(!borgo.opened)
diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm
index 92ad097aa8b7..91a2a8934e4f 100644
--- a/code/game/objects/items/secret_documents.dm
+++ b/code/game/objects/items/secret_documents.dm
@@ -66,7 +66,7 @@
var/obj/item/documents/photocopy/C = copy
copy_type = C.copy_type
-/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, params)
+/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/toy/crayon/red) || istype(O, /obj/item/toy/crayon/blue))
if (forgedseal)
to_chat(user, span_warning("You have already forged a seal on [src]!"))
diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm
index a0f41574e4b4..d435b9558c9a 100644
--- a/code/game/objects/items/sharpener.dm
+++ b/code/game/objects/items/sharpener.dm
@@ -23,7 +23,7 @@
///If TRUE, the whetstone will only sharpen already sharp items
var/requires_sharpness = TRUE
-/obj/item/sharpener/attackby(obj/item/I, mob/user, params)
+/obj/item/sharpener/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(uses == 0)
to_chat(user, span_warning("The sharpening block is too worn to use again!"))
return
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 498af80f4cb0..d77a122d4837 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -147,7 +147,7 @@
slapcraft_recipes = slapcraft_recipe_list,\
)
-/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, params)
+/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attackby_item, /obj/item/melee/baton))
if(!COOLDOWN_FINISHED(src, baton_bash))
return
diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm
index 1a74a8b164a3..a725791e2389 100644
--- a/code/game/objects/items/signs.dm
+++ b/code/game/objects/items/signs.dm
@@ -30,7 +30,7 @@
name = "[label] sign"
desc = "It reads: [label]"
-/obj/item/picket_sign/attackby(obj/item/W, mob/user, params)
+/obj/item/picket_sign/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(W))
retext(user, W)
else
diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm
index 69e2f8ec5f58..432da2f096e4 100644
--- a/code/game/objects/items/spear.dm
+++ b/code/game/objects/items/spear.dm
@@ -177,7 +177,7 @@
return CLICK_ACTION_SUCCESS
-/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, click_parameters)
+/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, list/modifiers, list/attack_modifiers)
if(!HAS_TRAIT(src, TRAIT_WIELDED) || !istype(target))
return
if(target.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden
@@ -208,7 +208,7 @@
force_unwielded = 15
force_wielded = 25
-/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, click_parameters)
+/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, list/modifiers, list/attack_modifiers)
user.faction |= "greytide([REF(user)])"
if(!isliving(target))
return
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 28aa74e20d2a..6b5c19569e58 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -578,7 +578,7 @@
/obj/item/stack/medical/wrap/gauze/twelve
amount = 12
-/obj/item/stack/medical/wrap/gauze/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/item/stack/medical/wrap/gauze/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
if(tool.tool_behaviour == TOOL_WIRECUTTER || tool.get_sharpness())
if(get_amount() < 2)
balloon_alert(user, "not enough gauze!")
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 53ffe0505a00..beb0fdbf6d8c 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
. = ..()
. += GLOB.glass_recipes
-/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(istype(W, /obj/item/lightreplacer))
var/obj/item/lightreplacer/lightreplacer = W
@@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
. = ..()
. += GLOB.pglass_recipes
-/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(istype(W, /obj/item/stack/rods))
@@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
fire = 70
acid = 100
-/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
..()
@@ -366,7 +366,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
if(T && is_station_level(T.z))
SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
-/obj/item/shard/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/shard/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!iscarbon(user) || !user.is_holding(src))
return
@@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
to_chat(user, span_warning("[src] cuts into your hand!"))
jab.apply_damage(force * 0.5, BRUTE, user.get_active_hand(), attacking_item = src)
-/obj/item/shard/attackby(obj/item/item, mob/user, params)
+/obj/item/shard/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/lightreplacer))
var/obj/item/lightreplacer/lightreplacer = item
lightreplacer.attackby(src, user)
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 68603833f0d8..e61811c7928d 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
//Step one - dehairing.
-/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.get_sharpness())
playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1)
user.visible_message(span_notice("[user] starts cutting hair off \the [src]."), span_notice("You start cutting the hair off \the [src]..."), span_hear("You hear the sound of a knife rubbing against flesh."))
diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm
index c9153c828444..ea54d6d691e1 100644
--- a/code/game/objects/items/stacks/sheets/light.dm
+++ b/code/game/objects/items/stacks/sheets/light.dm
@@ -18,7 +18,7 @@
. = ..()
. += span_warning("The [name] looks unfinished, add iron to complete it.")
-/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params)
+/obj/item/stack/light_w/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/stack/sheet/iron))
var/obj/item/stack/sheet/iron/M = O
if (M.use(1))
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index cf78ac563bab..3985f70a46d7 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
icon_state = "sandbag"
w_class = WEIGHT_CLASS_TINY
-/obj/item/emptysandbag/attackby(obj/item/W, mob/user, params)
+/obj/item/emptysandbag/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stack/ore/glass))
var/obj/item/stack/ore/glass/G = W
to_chat(user, span_notice("You fill the sandbag."))
@@ -462,7 +462,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
grind_results = list(/datum/reagent/carbon = 20)
novariants = TRUE
-/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index d507c41e6652..30ee062ca35c 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -704,7 +704,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
/obj/item/stack/sheet/cardboard/fifty
amount = 50
-/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
+/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
var/atom/droploc = drop_location()
if(use(1))
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 1671a31e38f1..da5afc34515a 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -728,7 +728,7 @@
is_zero_amount(delete_if_zero = TRUE)
-/obj/item/stack/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(can_merge(W, inhand = TRUE))
var/obj/item/stack/S = W
if(merge(S))
diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm
index 2df744703d95..8deaa203089c 100644
--- a/code/game/objects/items/stacks/tiles/light.dm
+++ b/code/game/objects/items/stacks/tiles/light.dm
@@ -13,7 +13,7 @@
var/state = 0
-/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params)
+/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(O.tool_behaviour == TOOL_CROWBAR)
new/obj/item/stack/sheet/iron(user.loc)
amount--
diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm
index 1c19132488cc..402fcda96216 100644
--- a/code/game/objects/items/stacks/tiles/tile_mineral.dm
+++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm
@@ -4,7 +4,7 @@
/// Determines what stack is gotten out of us when welded.
var/mineralType = null
-/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, params)
+/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_WELDER)
if(get_amount() < 4)
to_chat(user, span_warning("You need at least four tiles to do this!"))
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 8c59ec39b50d..94be5dc17a5c 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -95,7 +95,7 @@
/obj/item/storage/toolbox/proc/use_tool_on(atom/interacting_with, mob/living/user, list/modifiers, obj/item/picked_tool)
current_interactions += 1
- picked_tool.melee_attack_chain(user, interacting_with, list2params(modifiers))
+ picked_tool.melee_attack_chain(user, interacting_with, modifiers)
current_interactions -= 1
if (QDELETED(picked_tool) || picked_tool.loc != user || !user.CanReach(picked_tool))
diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index d5d18461b5fb..8f0cc857ab1c 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -104,7 +104,7 @@
air_contents.assert_gas(/datum/gas/plasma)
air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
-/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, params)
+/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/flamethrower))
var/obj/item/flamethrower/F = W
if ((!F.status) || (F.ptank))
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 0c892248ab5b..89240e52e743 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -218,7 +218,7 @@
to_chat(user, span_warning("There isn't enough pressure in [src] to commit suicide with..."))
return SHAME
-/obj/item/tank/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/tank/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(istype(attacking_item, /obj/item/assembly_holder))
if(tank_assembly)
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 3b5d1b449881..8db1b86da854 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -96,7 +96,7 @@
var/atom/movable/screen/inventory/hand/H = over_object
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
-/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(attacking_item == noz)
remove_noz()
return TRUE
diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm
index fc2eeba82ff7..8487cd1a7952 100644
--- a/code/game/objects/items/tcg/tcg.dm
+++ b/code/game/objects/items/tcg/tcg.dm
@@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices)
icon_state = template.icon_state
return ..()
-/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, params)
+/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/tcgcard))
var/obj/item/tcgcard/second_card = item
var/obj/item/tcgcard_deck/new_deck = new /obj/item/tcgcard_deck(drop_location())
@@ -253,7 +253,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices)
return FALSE
return TRUE
-/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, params)
+/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(item, /obj/item/tcgcard))
if(contents.len >= 30)
diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index e13251fe8e5e..52bb3c7b8825 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -164,7 +164,7 @@
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes
return FALSE
-/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, params)
+/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/hemostat/supermatter))
var/obj/item/hemostat/supermatter/tongs = W
if (tongs.sliver)
diff --git a/code/game/objects/items/tongs.dm b/code/game/objects/items/tongs.dm
index b9e883c5059f..354c74da4716 100644
--- a/code/game/objects/items/tongs.dm
+++ b/code/game/objects/items/tongs.dm
@@ -72,7 +72,7 @@
tonged = null
update_appearance(UPDATE_ICON)
-/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, params)
+/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, list/modifiers, list/attack_modifiers)
if (!isnull(tonged) && tonged.force <= 0) // prevents tongs from giving food-weapons extra range
attacked.attackby(tonged, user)
return TRUE
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 524b55475a6e..52e00c877b20 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -114,7 +114,7 @@
flamethrower_screwdriver(tool, user)
return ITEM_INTERACT_SUCCESS
-/obj/item/weldingtool/attackby(obj/item/tool, mob/user, params)
+/obj/item/weldingtool/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/stack/rods))
flamethrower_rods(tool, user)
else
@@ -174,7 +174,7 @@
INVOKE_ASYNC(src, PROC_REF(try_heal_loop), interacting_with, user, TRUE)
return ITEM_INTERACT_SUCCESS
-/obj/item/weldingtool/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/weldingtool/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!isOn())
return
use(1)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 63d7a14813e2..6b33312ec9e1 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -71,7 +71,7 @@
return ITEM_INTERACT_SUCCESS
return ITEM_INTERACT_BLOCKING
-/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, params)
+/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/reagent_containers/cup))
if(I.reagents)
if(I.reagents.total_volume <= 0)
@@ -171,7 +171,7 @@
icon_state = "[storage_state]"
update_appearance()
-/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA))
return ..()
@@ -194,7 +194,7 @@
qdel(src)
return TRUE
-/obj/item/toy/balloon/attackby(obj/item/I, mob/user, params)
+/obj/item/toy/balloon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/ammo_casing/foam_dart) && ismonkey(user))
pop_balloon(monkey_pop = TRUE)
else
@@ -502,7 +502,7 @@
. = ..()
. += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left."
-/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params)
+/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, list/modifiers, list/attack_modifiers)
if(istype(A, /obj/item/toy/ammo/gun))
if (src.bullets >= 7)
@@ -655,7 +655,7 @@
// Copied from /obj/item/melee/energy/sword/attackby
-/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, params)
+/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/toy/sword))
var/obj/item/toy/sword/attatched_sword = weapon
if(HAS_TRAIT(weapon, TRAIT_NODROP))
diff --git a/code/game/objects/items/v8_engine.dm b/code/game/objects/items/v8_engine.dm
index c75f1ebc13af..73cd672d96f9 100644
--- a/code/game/objects/items/v8_engine.dm
+++ b/code/game/objects/items/v8_engine.dm
@@ -70,7 +70,7 @@
AddComponent(/datum/component/two_handed, force_unwielded = 12, force_wielded = 22, attacksound = active_hitsound)
RegisterSignals(src, list(COMSIG_ITEM_DROPPED, COMSIG_MOVABLE_PRE_THROW, COMSIG_ITEM_ATTACK_SELF), PROC_REF(reset_charges))
-/obj/item/house_edge/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/house_edge/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!ismob(target))
return
if(HAS_TRAIT(src, TRAIT_WIELDED))
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 4cf2909ab1c6..b092102d1f54 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -827,7 +827,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
thrown_datums.Cut()
return ..()
-/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, params)
+/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, list/modifiers, list/attack_modifiers)
var/turf/target_turf = get_turf(target)
if(!target_turf)
return ..()
@@ -941,7 +941,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
))
-/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(is_type_in_typecache(target, splattable))
to_chat(user, span_warning("You easily splat [target]."))
if(isliving(target))
@@ -978,12 +978,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
name = "\improper ACME Extendo-Hand"
desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners."
-/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, params)
+/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
var/dist = get_dist(M, user)
if(dist < min_reach)
to_chat(user, span_warning("[M] is too close to use [src] on."))
return
- var/list/modifiers = params2list(params)
M.attack_hand(user, modifiers)
/obj/item/gohei
@@ -1083,16 +1082,16 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
return TRUE
return FALSE
-/obj/item/highfrequencyblade/pre_attack(atom/A, mob/living/user, params)
+/obj/item/highfrequencyblade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return .
if(!HAS_TRAIT(src, TRAIT_WIELDED))
return . // Default attack
- if(isliving(A) && HAS_TRAIT(src, TRAIT_PACIFISM))
+ if(isliving(target) && HAS_TRAIT(src, TRAIT_PACIFISM))
return . // Default attack (ultimately nothing)
- return slash(A, user, params)
+ return slash(target, user, modifiers)
/// triggered on wield of two handed item
/obj/item/highfrequencyblade/proc/on_wield(obj/item/source, mob/user)
@@ -1102,9 +1101,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/highfrequencyblade/proc/on_unwield(obj/item/source, mob/user)
update_icon(UPDATE_ICON_STATE)
-/obj/item/highfrequencyblade/proc/slash(atom/target, mob/living/user, params)
+/obj/item/highfrequencyblade/proc/slash(atom/target, mob/living/user, list/modifiers)
user.do_attack_animation(target, "nothing")
- var/list/modifiers = params2list(params)
var/damage_mod = 1
var/x_slashed = text2num(modifiers[ICON_X]) || world.icon_size/2 //in case we arent called by a client
var/y_slashed = text2num(modifiers[ICON_Y]) || world.icon_size/2 //in case we arent called by a client
diff --git a/code/game/objects/items/wizard_weapons.dm b/code/game/objects/items/wizard_weapons.dm
index 2211f348b111..ad36f6104012 100644
--- a/code/game/objects/items/wizard_weapons.dm
+++ b/code/game/objects/items/wizard_weapons.dm
@@ -56,7 +56,7 @@
step_towards(A,pull)
step_towards(A,pull)
-/obj/item/singularityhammer/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/singularityhammer/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!HAS_TRAIT(src, TRAIT_WIELDED))
return
if(!charged)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index a02197172677..1575ec675c59 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -80,28 +80,47 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
GLOB.objects_by_id_tag -= id_tag
. = ..()
-/obj/attacked_by(obj/item/attacking_item, mob/living/user)
+/obj/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!attacking_item.force)
- return
+ return 0
var/demo_mod = attacking_item.get_demolition_modifier(src)
- var/total_force = (attacking_item.force * demo_mod)
+ var/total_force = CALCULATE_FORCE(attacking_item, attack_modifiers) * demo_mod
var/damage = take_damage(total_force, attacking_item.damtype, MELEE, TRUE, get_dir(src, user), attacking_item.armour_penetration)
- var/damage_verb = "hit"
-
- if(demo_mod > 1 && prob(damage * 5))
- if(HAS_TRAIT(src, TRAIT_INVERTED_DEMOLITION))
- damage_verb = "shred"
- else
- damage_verb = "pulverise"
-
- if(demo_mod < 1)
- damage_verb = "ineffectively pierce"
+ if(!LAZYACCESS(attack_modifiers, SILENCE_DEFAULT_MESSAGES))
+ // Sanity in case one is null for some reason
+ var/picked_index = rand(max(length(attacking_item.attack_verb_simple), length(attacking_item.attack_verb_continuous)))
+
+ var/message_verb_continuous = "attacks"
+ var/message_verb_simple = "attack"
+ // Sanity in case one is... longer than the other?
+ if (picked_index && length(attacking_item.attack_verb_continuous) >= picked_index)
+ message_verb_continuous = attacking_item.attack_verb_continuous[picked_index]
+ if (picked_index && length(attacking_item.attack_verb_simple) >= picked_index)
+ message_verb_simple = attacking_item.attack_verb_simple[picked_index]
+
+ if(demo_mod > 1 && prob(damage * 5))
+ if(HAS_TRAIT(src, TRAIT_INVERTED_DEMOLITION))
+ message_verb_simple = "shred"
+ message_verb_continuous = "shreds"
+ else
+ message_verb_simple = "pulverise"
+ message_verb_continuous = "pulverises"
+
+ if(demo_mod < 1)
+ message_verb_simple = "ineffectively " + message_verb_simple
+ message_verb_continuous = "ineffectively " + message_verb_continuous
+
+ user.visible_message(
+ span_danger("[user] [message_verb_continuous] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"),
+ span_danger("You [message_verb_simple] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"),
+ null,
+ COMBAT_MESSAGE_RANGE,
+ )
- user.visible_message(span_danger("[user] [damage_verb][plural_s(damage_verb)] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), \
- span_danger("You [damage_verb] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), null, COMBAT_MESSAGE_RANGE)
log_combat(user, src, "attacked", attacking_item)
+ return damage
/obj/assume_air(datum/gas_mixture/giver)
return loc?.assume_air(giver)
diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm
index 30d1f7944d27..c1308b556f7d 100644
--- a/code/game/objects/structures/ai_core.dm
+++ b/code/game/objects/structures/ai_core.dm
@@ -126,7 +126,7 @@
return FALSE
return TRUE
-/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, params)
+/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if(tool.tool_behaviour == TOOL_MULTITOOL)
active = !active
to_chat(user, span_notice("You [active? "activate" : "deactivate"] \the [src]'s transmitters."))
@@ -156,7 +156,7 @@
balloon_alert(user, "connected neural network")
return ITEM_INTERACT_SUCCESS
-/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, params)
+/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
if(!anchored)
if(tool.tool_behaviour == TOOL_WELDER)
if(state != EMPTY_CORE)
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index f95a84e87e34..52cf5293cbc8 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -67,6 +67,7 @@
/obj/structure/alien/resin/Initialize(mapload)
. = ..()
air_update_turf(TRUE, TRUE)
+ ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT)
/obj/structure/alien/resin/Destroy()
air_update_turf(TRUE, FALSE)
diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm
index 55e763d01b44..2e7606f99442 100644
--- a/code/game/objects/structures/beds_chairs/bed.dm
+++ b/code/game/objects/structures/beds_chairs/bed.dm
@@ -208,7 +208,7 @@
. += mutable_appearance(icon, "brakes_down")
. += emissive_appearance(icon, "brakes_down", src, alpha = src.alpha)
-/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, params)
+/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/emergency_bed/silicon))
var/obj/item/emergency_bed/silicon/silicon_bed = item
if(silicon_bed.loaded)
@@ -254,7 +254,7 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere
-/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, params)
+/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/emergency_bed/silicon))
var/obj/item/emergency_bed/silicon/silicon_bed = item
if(silicon_bed.loaded)
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index e5e23efe5c09..9211c85a8969 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -90,7 +90,7 @@
W.setDir(dir)
qdel(src)
-/obj/structure/chair/attackby(obj/item/W, mob/user, params)
+/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/assembly/shock_kit) && !HAS_TRAIT(src, TRAIT_ELECTRIFIED_BUCKLE))
electrify_self(W, user)
return
@@ -452,7 +452,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0)
return TRUE
return FALSE
-/obj/item/chair/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(!prob(break_chance))
return
user.visible_message(span_danger("[user] smashes [src] to pieces against [target]"))
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index cdaa5f2986d3..facb250e6ad0 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -39,7 +39,7 @@
QDEL_NULL(burning_loop)
. = ..()
-/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, params)
+/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(used_item, /obj/item/stack/rods) && !can_buckle && !grill)
var/obj/item/stack/rods/rods = used_item
var/choice = tgui_alert(user, "What would you like to construct?", "Bonfire", list("Stake","Grill"))
@@ -68,7 +68,6 @@
if(!user.combat_mode && !(used_item.item_flags & ABSTRACT))
if(user.temporarilyRemoveItemFromInventory(used_item))
used_item.forceMove(get_turf(src))
- var/list/modifiers = params2list(params)
//Center the icon where the user clicked.
if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y))
return
diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm
index 3a10cc17189f..55e91c2f5bf9 100644
--- a/code/game/objects/structures/cannons/cannon.dm
+++ b/code/game/objects/structures/cannons/cannon.dm
@@ -53,7 +53,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/structure/cannon/attackby(obj/item/used_item, mob/user, params)
+/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers, list/attack_modifiers)
if(charge_ignited)
balloon_alert(user, "it's gonna fire!")
return
diff --git a/code/game/objects/structures/construction_console/construction_console.dm b/code/game/objects/structures/construction_console/construction_console.dm
index 1af9f1bd0975..a59840a7e1fd 100644
--- a/code/game/objects/structures/construction_console/construction_console.dm
+++ b/code/game/objects/structures/construction_console/construction_console.dm
@@ -67,10 +67,10 @@
eyeobj.set_telegraph(alerts_cameras)
return TRUE
-/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, params)
+/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
//If we have an internal RCD, we can refill it by slapping the console with some materials
if(internal_rcd && (istype(W, /obj/item/rcd_ammo) || istype(W, /obj/item/stack/sheet)))
- internal_rcd.attackby(W, user, params)
+ internal_rcd.attackby(W, user, modifiers)
else
return ..()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index b50753449122..b29854dd20a9 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -663,7 +663,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
req_access = accesses
req_one_access = null
-/obj/structure/closet/attackby(obj/item/W, mob/user, params)
+/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(user in src)
return
if(src.tool_interact(W,user))
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index fc677da5217b..2e19478bfba5 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -197,7 +197,7 @@
. = ..()
. += span_notice("Right-click with a Security-level ID to reset [src]'s registered ID.")
-/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, params)
+/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers, list/attack_modifiers)
if(!secure || !istype(user_id))
return ..()
@@ -213,7 +213,7 @@
name = initial(name)
update_appearance()
-/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, params)
+/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers, list/attack_modifiers)
if(!secure || !istype(used_id))
return ..()
diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm
index a686d53f392c..6e292dda753b 100644
--- a/code/game/objects/structures/crates_lockers/crates/bins.dm
+++ b/code/game/objects/structures/crates_lockers/crates/bins.dm
@@ -32,7 +32,7 @@
return
. += base_icon_state + "_some"
-/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, params)
+/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/storage/bag/trash) && !opened)
var/obj/item/storage/bag/trash/T = W
to_chat(user, span_notice("You fill the bag."))
diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm
index 0a08d9c7949a..5816bcc03dda 100644
--- a/code/game/objects/structures/crates_lockers/crates/large.dm
+++ b/code/game/objects/structures/crates_lockers/crates/large.dm
@@ -30,7 +30,7 @@
else
to_chat(user, span_warning("You need a crowbar to pry this open!"))
-/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, params)
+/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_CROWBAR)
if(manifest)
tear_manifest(user)
diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm
index 8403f8221351..fd0a36ec2b7b 100644
--- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm
+++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm
@@ -43,7 +43,7 @@
qdel(src)
///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key
-/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, params)
+/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/syndicrate_key) || created_items)
return ..()
created_items = TRUE
@@ -67,7 +67,7 @@
)
update_appearance()
-/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/syndicrate_key
diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm
index 8179b45c575a..7294f8ca0830 100644
--- a/code/game/objects/structures/deployable_turret.dm
+++ b/code/game/objects/structures/deployable_turret.dm
@@ -247,14 +247,14 @@
/obj/item/gun_control/CanItemAutoclick()
return TRUE
-/obj/item/gun_control/attack_atom(obj/O, mob/living/user, params)
+/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
user.changeNext_move(CLICK_CD_MELEE)
- O.attacked_by(src, user)
+ O.attacked_by(src, user, modifiers)
-/obj/item/gun_control/attack(mob/living/M, mob/living/user)
+/obj/item/gun_control/attack(mob/living/M, mob/living/user, list/modifiers, list/attack_modifiers)
M.lastattacker = user.real_name
M.lastattackerckey = user.ckey
- M.attacked_by(src, user)
+ M.attacked_by(src, user, modifiers)
add_fingerprint(user)
/obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
diff --git a/code/game/objects/structures/detectiveboard.dm b/code/game/objects/structures/detectiveboard.dm
index 9c9832d36049..e191b214eeb2 100644
--- a/code/game/objects/structures/detectiveboard.dm
+++ b/code/game/objects/structures/detectiveboard.dm
@@ -40,7 +40,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/detectiveboard, 32)
/// Attaching evidences: photo and papers
-/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, params)
+/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!cases.len)
to_chat(user, span_warning("There are no cases!"))
return
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 012e8e8a544e..a4f6b59a3e06 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -125,7 +125,7 @@
. += "[initial(icon_state)]_closed"
return
-/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(attacking_item.GetID() && !broken)
if(allowed(user))
to_chat(user, span_notice("You [open ? "close":"open"] [src]."))
@@ -272,7 +272,7 @@
qdel(src)
return ITEM_INTERACT_SUCCESS
-/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/electronics/airlock))
balloon_alert(user, "installing electronics...")
if(do_after(user, 3 SECONDS, target = src) && user.transferItemToLoc(attacking_item, src))
@@ -359,7 +359,7 @@
holographic_showpiece = TRUE
update_appearance()
-/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/key/displaycase))
toggle_historian_mode(user)
return
@@ -609,7 +609,7 @@
return TRUE
. = TRUE
-/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(isidcard(attacking_item))
//Card Registration
var/obj/item/card/id/potential_acc = attacking_item
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index a410e0af4416..84ff50be67a8 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -83,7 +83,7 @@
if(doorname)
. += span_notice("There is a small paper placard on the assembly labelled \"[doorname]\".")
-/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params)
+/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(W) && !user.combat_mode)
var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN)
if(!t)
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index cf3864b14005..785871dac668 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -7,7 +7,7 @@
density = TRUE
anchored = TRUE
-/obj/structure/dresser/attackby(obj/item/I, mob/user, params)
+/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WRENCH)
to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src]."))
if(I.use_tool(src, user, 20, volume=50))
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 70fb5b57ae23..d68457f9baec 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -13,7 +13,7 @@
export_to_component = color_atom_overlay(export_to_component)
AddComponent(/datum/component/electrified_buckle, (SHOCK_REQUIREMENT_ITEM | SHOCK_REQUIREMENT_LIVE_CABLE | SHOCK_REQUIREMENT_SIGNAL_RECEIVED_TOGGLE), stored_kit, list(export_to_component))
-/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, params)
+/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_WRENCH)
var/obj/structure/chair/C = new /obj/structure/chair(loc)
W.play_tool_sound(src)
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index c4176048e4dc..3adbf133a419 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -65,7 +65,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29)
stored_extinguisher = null
update_appearance(UPDATE_ICON)
-/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, params)
+/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher)
user.balloon_alert(user, "deconstructing cabinet...")
used_item.play_tool_sound(src)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 79b34ff74b83..9a4a3b32d9a1 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -123,7 +123,7 @@
return ITEM_INTERACT_SUCCESS
return
-/obj/structure/falsewall/attackby(obj/item/W, mob/user, params)
+/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(!opening)
return ..()
to_chat(user, span_warning("You must wait until the door has stopped moving!"))
@@ -200,7 +200,7 @@
. = ..()
RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, PROC_REF(radiate))
-/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, params)
+/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
radiate()
return ..()
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index 2bdc002f3920..562249158031 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -43,7 +43,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
QDEL_NULL(held_item)
return ..()
-/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(iscyborg(user) || attacking_item.tool_behaviour == TOOL_MULTITOOL)
toggle_lock(user)
else if(attacking_item.tool_behaviour == TOOL_WELDER && !user.combat_mode && !broken)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 2cfd490203c0..e77e135b03b9 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -52,7 +52,7 @@
/// Flags for the flora to determine what kind of sound to play when it gets hit
var/flora_flags = NONE
-/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, params)
+/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(flags_1 & HOLOGRAM_1)
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index 84b090f8127f..fe6496aff3d6 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -14,7 +14,7 @@
///If true, the structure can be deconstructed into a metal sheet with a wrench.
var/deconstructible = TRUE
-/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WRENCH && deconstructible)
user.visible_message(span_notice("[user] starts disassembling [src]..."), span_notice("You start disassembling [src]..."))
I.play_tool_sound(src)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index c26411a30e75..39d305ab1f7a 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -38,7 +38,7 @@
if(GIRDER_TRAM)
. += span_notice("[src] is designed for tram usage. Deconstructed with a screwdriver!")
-/obj/structure/girder/attackby(obj/item/W, mob/user, params)
+/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
var/platingmodifier = 1
if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
platingmodifier = 0.7
@@ -427,7 +427,7 @@
icon_state= "cultgirder"
can_displace = FALSE
-/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params)
+/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount=1))
@@ -498,7 +498,7 @@
icon_state = "wall_gear"
can_displace = FALSE
-/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, params)
+/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount = 0))
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 692ce8c91497..4745a85b56db 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -215,7 +215,7 @@
span_notice("You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor."))
return ITEM_INTERACT_SUCCESS
-/obj/structure/grille/attackby(obj/item/W, mob/user, params)
+/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(W, /obj/item/stack/rods) && broken && do_after(user, 1 SECONDS, target = src))
if(shock(user, 90))
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 029ff62a427a..ab0f90eb44f1 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -183,7 +183,7 @@
blade_status = GUILLOTINE_BLADE_DROPPED
icon_state = "guillotine"
-/obj/structure/guillotine/attackby(obj/item/W, mob/user, params)
+/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if (istype(W, /obj/item/sharpener))
add_fingerprint(user)
if (blade_status == GUILLOTINE_BLADE_SHARPENING)
diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
index 408f11c230c2..aa113b4abac6 100644
--- a/code/game/objects/structures/guncase.dm
+++ b/code/game/objects/structures/guncase.dm
@@ -31,7 +31,7 @@
. += new /mutable_appearance(gun_overlay)
. += "[icon_state]_[open ? "open" : "door"]"
-/obj/structure/guncase/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(iscyborg(user) || isalien(user))
return
if(istype(I, gun_category) && open)
diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm
index 0413bcac5398..2b0b580a7e59 100644
--- a/code/game/objects/structures/janitor.dm
+++ b/code/game/objects/structures/janitor.dm
@@ -28,14 +28,14 @@
return .
-/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, params)
+/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/reagent_containers))
update_appearance(UPDATE_OVERLAYS)
return FALSE // skip attack animation when refilling cart
return ..()
-/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/mop))
if(weapon.reagents.total_volume >= weapon.reagents.maximum_volume)
balloon_alert(user, "already soaked!")
@@ -182,7 +182,7 @@
return . || NONE
-/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/mop))
if(mymop)
balloon_alert(user, "already has \a [mymop]!")
@@ -241,7 +241,7 @@
update_appearance(UPDATE_OVERLAYS)
return ITEM_INTERACT_SUCCESS
-/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index c51b878496c6..2e7db5519f44 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -50,7 +50,7 @@
default_unfasten_wrench(user, tool)
return TRUE
-/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(!istype(attacking_item, /obj/item/stack/rods))
return ..()
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index 9eed58686d86..f26a249b444e 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -374,11 +374,11 @@
use(user, going_up = FALSE)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-/obj/structure/ladder/attackby(obj/item/item, mob/user, params)
+/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
use(user)
return TRUE
-/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, params)
+/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 0d7d23191742..968413c49c26 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -48,7 +48,7 @@
/obj/structure/lattice/blob_act(obj/structure/blob/B)
return
-/obj/structure/lattice/attackby(obj/item/C, mob/user, params)
+/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers)
if(resistance_flags & INDESTRUCTIBLE)
return
if(C.tool_behaviour == TOOL_WIRECUTTER)
@@ -153,7 +153,7 @@
/obj/structure/lattice/lava/deconstruction_hints(mob/user)
return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.")
-/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(attacking_item, /obj/item/stack/tile/iron))
return
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm
index 169bf6250771..5702c02a1343 100644
--- a/code/game/objects/structures/lavaland/geyser.dm
+++ b/code/game/objects/structures/lavaland/geyser.dm
@@ -58,7 +58,7 @@
else
stop_chemming() //we're full
-/obj/structure/geyser/attackby(obj/item/item, mob/user, params)
+/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/mining_scanner) && !istype(item, /obj/item/t_scanner/adv_mining_scanner))
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
return ..() //this runs the plunger code
@@ -142,7 +142,7 @@
///What layer we set it to
var/target_layer = DUCT_LAYER_DEFAULT
-/obj/item/plunger/attack_atom(obj/O, mob/living/user, params)
+/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
if(layer_mode)
SEND_SIGNAL(O, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, O, target_layer)
return ..()
diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm
index 0d4fc6782288..a5bd39dff87b 100644
--- a/code/game/objects/structures/maintenance.dm
+++ b/code/game/objects/structures/maintenance.dm
@@ -92,7 +92,7 @@ at the cost of risking a vicious bite.**/
return
to_chat(user, span_warning("You find nothing of value..."))
-/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, params)
+/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(iscyborg(user) || isalien(user) || !CanReachInside(user))
return ..()
add_fingerprint(user)
@@ -137,7 +137,7 @@ at the cost of risking a vicious bite.**/
/// Stage of the pants making process
var/status = ALTAR_INACTIVE
-/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, params)
+/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/melee/cultblade/dagger) && IS_CULTIST(user) && status)
to_chat(user, span_notice("[src] is creating something, you can't move it!"))
return
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index cb41ef10e4cd..9824e9ec8c58 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -243,14 +243,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28)
return list()// no message spam
return ..()
-/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user)
+/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(broken || !istype(user) || !I.force)
return ..()
. = ..()
- if(broken) // breaking a mirror truly gets you bad luck!
- to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
- user.AddComponent(/datum/component/omen, incidents_left = 7)
+ if(broken || !.) // breaking a mirror truly gets you bad luck!
+ return
+ to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
+ user.AddComponent(/datum/component/omen, incidents_left = 7)
/obj/structure/mirror/bullet_act(obj/projectile/P)
if(broken || !isliving(P.firer) || !P.damage)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 3a7de37f2e6a..0130feff8570 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -569,7 +569,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
INVOKE_ASYNC(clicker, TYPE_PROC_REF(/mob, ClickOn), src, params)
-/obj/structure/tray/attackby(obj/P, mob/user, params)
+/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(P, /obj/item/riding_offhand))
return ..()
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 2d5ef6f0ebc8..139481ccb4f0 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -29,7 +29,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32)
find_and_hang_on_wall()
//attaching papers!!
-/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params)
+/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo))
if(!allowed(user))
to_chat(user, span_warning("You are not authorized to add notices!"))
diff --git a/code/game/objects/structures/ore_containers.dm b/code/game/objects/structures/ore_containers.dm
index 75c7a03cfcfa..ba8e59cc78a9 100644
--- a/code/game/objects/structures/ore_containers.dm
+++ b/code/game/objects/structures/ore_containers.dm
@@ -1,7 +1,7 @@
///structure to contain ores
/obj/structure/ore_container
-/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers)
+/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
if(istype(ore, /obj/item/stack/ore) && !user.combat_mode)
ore.forceMove(src)
return
diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm
index 4e28f7c38c15..93e336fa6ec0 100644
--- a/code/game/objects/structures/plaques/_plaques.dm
+++ b/code/game/objects/structures/plaques/_plaques.dm
@@ -83,7 +83,7 @@
atom_integrity = max_integrity
return TRUE
-/obj/structure/plaque/attackby(obj/item/I, mob/user, params)
+/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/pen/fountain))
if(engraved)
to_chat(user, span_warning("This plaque has already been engraved."))
@@ -156,7 +156,7 @@
return TRUE
-/obj/item/plaque/attackby(obj/item/I, mob/user, params) //Same as part of the above, except for the item in hand instead of the structure.
+/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) //Same as part of the above, except for the item in hand instead of the structure.
if(istype(I, /obj/item/pen/fountain))
if(engraved)
to_chat(user, span_warning("This plaque has already been engraved."))
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 2651684e39b8..6247c8cc05a3 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -71,7 +71,7 @@
else
. += span_notice("The railing is unbolted from the floor and can be deconstructed with wirecutters.")
-/obj/structure/railing/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
..()
add_fingerprint(user)
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index 4b498a05d921..fb05b069afef 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -132,7 +132,7 @@
return ITEM_INTERACT_SUCCESS
-/obj/structure/reflector/attackby(obj/item/W, mob/user, params)
+/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(admin)
return
//Finishing the frame
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 9e9e15b3c3a0..e4510e81b61b 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -60,7 +60,7 @@ FLOOR SAFES
icon_state = "[initial(icon_state)][open ? "-open" : null]"
return ..()
-/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(open)
. = TRUE //no afterattack
if(attacking_item.w_class + space <= maxspace)
diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm
index ce0163120e42..2599229487af 100644
--- a/code/game/objects/structures/shower.dm
+++ b/code/game/objects/structures/shower.dm
@@ -127,7 +127,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
to_chat(user, span_notice("The water temperature seems to be [current_temperature]."))
return TRUE
-/obj/machinery/shower/attackby(obj/item/tool, mob/user, params)
+/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/stock_parts/water_recycler))
if(has_water_reclaimer)
to_chat(user, span_warning("There is already has a water recycler installed."))
@@ -342,7 +342,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
. = ..()
AddComponent(/datum/component/simple_rotation)
-/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, params)
+/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/stock_parts/water_recycler))
qdel(tool)
var/obj/machinery/shower/shower = new(loc, REVERSE_DIR(dir), TRUE)
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
index 6226161bfff4..da15ce8b2912 100644
--- a/code/game/objects/structures/signs/_signs.dm
+++ b/code/game/objects/structures/signs/_signs.dm
@@ -84,7 +84,7 @@
atom_integrity = max_integrity
return TRUE
-/obj/structure/sign/attackby(obj/item/I, mob/user, params)
+/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(is_editable && IS_WRITING_UTENSIL(I))
if(!length(GLOB.editable_sign_types))
CRASH("GLOB.editable_sign_types failed to populate")
@@ -191,7 +191,7 @@
context[SCREENTIP_CONTEXT_LMB] = "Change design"
return CONTEXTUAL_SCREENTIP_SET
-/obj/item/sign/attackby(obj/item/I, mob/user, params)
+/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(is_editable && IS_WRITING_UTENSIL(I))
if(!length(GLOB.editable_sign_types))
CRASH("GLOB.editable_sign_types failed to populate")
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 4fb7b8df14e7..a57c485f513a 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -39,7 +39,7 @@
else
. += span_notice("It looks like you could probably scan and tag it with a [scanner_descriptor].")
-/obj/structure/spawner/attackby(obj/item/item, mob/user, params)
+/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return TRUE
diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm
index 21d78cae8cd1..3243bf62ff03 100644
--- a/code/game/objects/structures/stairs.dm
+++ b/code/game/objects/structures/stairs.dm
@@ -346,7 +346,7 @@
/obj/structure/stairs_frame/atom_deconstruct(disassembled = TRUE)
new frame_stack(get_turf(src), frame_stack_amount)
-/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, params)
+/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers, list/attack_modifiers)
if(!isstack(attacked_by))
return ..()
if(!anchored)
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index d14ac04d9f71..9e831a945bc5 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -59,7 +59,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
var/full
if(istype(I, /obj/item/tank/internals/plasma))
if(plasmatanks < TANK_DISPENSER_CAPACITY)
diff --git a/code/game/objects/structures/tank_holder.dm b/code/game/objects/structures/tank_holder.dm
index 34284b1f1dd0..5a9eb683c5c2 100644
--- a/code/game/objects/structures/tank_holder.dm
+++ b/code/game/objects/structures/tank_holder.dm
@@ -42,7 +42,7 @@
. += "It is empty."
. += span_notice("It is held together by some screws.")
-/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, params)
+/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(W.tool_behaviour == TOOL_WRENCH)
diff --git a/code/game/objects/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm
index 0ea21e9ff848..038e8fa292a3 100644
--- a/code/game/objects/structures/toiletbong.dm
+++ b/code/game/objects/structures/toiletbong.dm
@@ -100,7 +100,7 @@
to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet."))
return TRUE
-/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/card/emag))
return
return ..()
diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm
index bed4c4805cca..698f1d958190 100644
--- a/code/game/objects/structures/training_machine.dm
+++ b/code/game/objects/structures/training_machine.dm
@@ -360,16 +360,16 @@
///Number of hits made since the Lap button (alt-click) was last pushed
var/lap_hits = 0
-/obj/item/training_toolbox/pre_attack(atom/A, mob/living/user, params)
+/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return .
- if(A == user || !user.combat_mode)
+ if(target == user || !user.combat_mode)
return .
- if(!check_hit(A))
+ if(!check_hit(target))
return .
user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(A)
+ user.do_attack_animation(target)
return TRUE
/**
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 8fc1426c5f36..9c37301ed5a1 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -93,7 +93,7 @@
break
-/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, params)
+/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_CROWBAR)
for(var/obj/structure/transit_tube_pod/P in loc)
P.deconstruct(FALSE, user)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index a4259c9d554d..ed73c1f0f4fc 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -32,7 +32,7 @@
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
-/obj/structure/transit_tube/attackby(obj/item/W, mob/user, params)
+/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.tool_behaviour == TOOL_WRENCH)
if(tube_construction)
for(var/obj/structure/transit_tube_pod/pod in src.loc)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index b1168302f683..3877f75d1bf8 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -27,7 +27,7 @@
icon_state = contents.len ? occupied_icon_state : initial(icon_state)
return ..()
-/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, params)
+/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_CROWBAR)
if(!moving)
I.play_tool_sound(src)
diff --git a/code/game/objects/structures/votingbox.dm b/code/game/objects/structures/votingbox.dm
index 296a5149e1ed..d86a19e45b20 100644
--- a/code/game/objects/structures/votingbox.dm
+++ b/code/game/objects/structures/votingbox.dm
@@ -19,7 +19,7 @@
var/list/voted //List of ID's that already voted.
COOLDOWN_DECLARE(vote_print_cooldown)
-/obj/structure/votebox/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I,/obj/item/card/id))
if(!owner)
register_owner(I,user)
diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm
index 1059f9fd5b0f..49b72384cef2 100644
--- a/code/game/objects/structures/water_structures/sink.dm
+++ b/code/game/objects/structures/water_structures/sink.dm
@@ -103,7 +103,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14))
user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \
span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."))
-/obj/structure/sink/attackby(obj/item/O, mob/living/user, params)
+/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers)
if(busy)
to_chat(user, span_warning("Someone's already washing here!"))
return
@@ -255,7 +255,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16))
. = ..()
AddComponent(/datum/component/simple_rotation)
-/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, params)
+/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/stock_parts/water_recycler))
qdel(tool)
var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE)
diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm
index ad2d71f3d046..d9ff870ca700 100644
--- a/code/game/objects/structures/water_structures/toilet.dm
+++ b/code/game/objects/structures/water_structures/toilet.dm
@@ -188,7 +188,7 @@
for(var/datum/material/M as anything in custom_materials)
new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1))
-/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(cover_open && istype(attacking_item, /obj/item/fish))
if(fishes >= 3)
diff --git a/code/game/objects/structures/water_structures/urinal.dm b/code/game/objects/structures/water_structures/urinal.dm
index 3b34e2cc0e5b..23795155db0c 100644
--- a/code/game/objects/structures/water_structures/urinal.dm
+++ b/code/game/objects/structures/water_structures/urinal.dm
@@ -51,7 +51,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32)
return
return ..()
-/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(exposed)
if(hidden_item)
to_chat(user, span_warning("There is already something in the drain enclosure!"))
diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm
index 9e1b5b40e0e9..4487547b2416 100644
--- a/code/game/objects/structures/water_structures/water_source.dm
+++ b/code/game/objects/structures/water_structures/water_source.dm
@@ -57,7 +57,7 @@
span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."),
)
-/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(busy)
to_chat(user, span_warning("Someone's already washing here!"))
return
@@ -138,7 +138,7 @@
. = ..()
icon_state = base_icon_state
-/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
icon_state = "[base_icon_state]-splash"
. = ..()
icon_state = base_icon_state
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 195fbbc643e0..e91468470ed3 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -92,7 +92,7 @@
leaving.Bump(src)
return COMPONENT_ATOM_BLOCK_EXIT
-/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, params)
+/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
//I really should have spread this out across more states but thin little windoors are hard to sprite.
add_fingerprint(user)
switch(state)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 221c0dbea93d..8e397bdab1e4 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -270,7 +270,7 @@
return ITEM_INTERACT_SUCCESS
-/obj/structure/window/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(!can_be_reached(user))
return TRUE //skip the afterattack
@@ -468,7 +468,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0)
return list("delay" = 3 SECONDS, "cost" = 15)
return FALSE
-/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, params)
+/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
switch(state)
if(RWINDOW_SECURE)
if(tool.tool_behaviour == TOOL_WELDER)
diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm
index 6fa1fd0ed69d..b6e6f3b74ba9 100644
--- a/code/game/turfs/closed/indestructible.dm
+++ b/code/game/turfs/closed/indestructible.dm
@@ -20,7 +20,7 @@
/turf/closed/indestructible/singularity_act()
return
-/turf/closed/indestructible/attackby(obj/item/attacking_item, mob/user, params)
+/turf/closed/indestructible/attackby(obj/item/attacking_item, mob/user, list/modifiers)
if(istype(attacking_item, /obj/item/poster) && Adjacent(user))
return place_poster(attacking_item, user)
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 9c66ccc9d8e0..872a11e7eb3d 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -92,7 +92,7 @@
return ..()
-/turf/closed/mineral/attackby(obj/item/I, mob/user, params)
+/turf/closed/mineral/attackby(obj/item/I, mob/user, list/modifiers)
if (!ISADVANCEDTOOLUSER(user))
to_chat(usr, span_warning("You don't have the dexterity to do this!"))
return
@@ -676,7 +676,7 @@
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
. = ..()
-/turf/closed/mineral/gibtonite/attackby(obj/item/attacking_item, mob/living/user, params)
+/turf/closed/mineral/gibtonite/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
var/previous_stage = stage
if(istype(attacking_item, /obj/item/mining_scanner) || istype(attacking_item, /obj/item/t_scanner/adv_mining_scanner) && stage == GIBTONITE_ACTIVE)
user.visible_message(span_notice("[user] holds [attacking_item] to [src]..."), span_notice("You use [attacking_item] to locate where to cut off the chain reaction and attempt to stop it..."))
@@ -793,7 +793,7 @@
base_icon_state = "rock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
-/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, params)
+/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, list/modifiers)
if(!ishuman(user))
to_chat(usr, span_warning("Only a more advanced species could break a rock such as this one!"))
return FALSE
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 7a951e9abc58..c27d11d9fdeb 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -125,7 +125,7 @@
radiate()
return ..()
-/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params)
+/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, list/modifiers)
radiate()
return ..()
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index bcc4f7fbb966..c6625ce8ecdf 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -59,7 +59,7 @@
/turf/open/misc/asteroid/ex_act(severity, target)
return FALSE
-/turf/open/misc/asteroid/attackby(obj/item/attack_item, mob/user, params)
+/turf/open/misc/asteroid/attackby(obj/item/attack_item, mob/user, list/modifiers)
. = ..()
if(.)
return TRUE
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index 0e1863d14e17..62c46e9214fa 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -125,25 +125,25 @@
W.update_appearance()
return W
-/turf/open/floor/attackby(obj/item/object, mob/living/user, params)
+/turf/open/floor/attackby(obj/item/object, mob/living/user, list/modifiers)
if(!object || !user)
return TRUE
. = ..()
if(.)
return .
if(overfloor_placed && istype(object, /obj/item/stack/tile))
- try_replace_tile(object, user, params)
+ try_replace_tile(object, user, modifiers)
return TRUE
if(user.combat_mode && istype(object, /obj/item/stack/sheet))
var/obj/item/stack/sheet/sheets = object
- return sheets.on_attack_floor(user, params)
+ return sheets.on_attack_floor(user, modifiers)
return FALSE
/turf/open/floor/crowbar_act(mob/living/user, obj/item/I)
if(overfloor_placed && pry_tile(I, user))
return TRUE
-/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers)
if(T.turf_type == type && T.turf_dir == dir)
return
var/obj/item/crowbar/CB = user.is_holding_tool_quality(TOOL_CROWBAR)
@@ -152,7 +152,7 @@
var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE)
if(!istype(P))
return
- P.attackby(T, user, params)
+ P.attackby(T, user, modifiers)
/turf/open/floor/proc/pry_tile(obj/item/I, mob/user, silent = FALSE)
I.play_tool_sound(src, 80)
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
index 418afff71481..24abffca7ee7 100644
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ b/code/game/turfs/open/floor/fancy_floor.dm
@@ -31,7 +31,7 @@
return TRUE
return pry_tile(I, user) ? TRUE : FALSE
-/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers)
if(T.turf_type == type)
return
var/obj/item/tool = user.is_holding_tool_quality(TOOL_SCREWDRIVER)
@@ -42,7 +42,7 @@
var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE)
if(!istype(P))
return
- P.attackby(T, user, params)
+ P.attackby(T, user, modifiers)
/turf/open/floor/wood/pry_tile(obj/item/C, mob/user, silent = FALSE)
C.play_tool_sound(src, 80)
@@ -212,7 +212,7 @@
/turf/open/floor/fake_snow/broken_states()
return list("snow_dug")
-/turf/open/floor/fake_snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/open/floor/fake_snow/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers)
return
/turf/open/floor/fake_snow/crowbar_act(mob/living/user, obj/item/I)
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
index dd30a86d8de4..8779c604fa4a 100644
--- a/code/game/turfs/open/floor/light_floor.dm
+++ b/code/game/turfs/open/floor/light_floor.dm
@@ -129,7 +129,7 @@
currentcolor = choice
update_appearance()
-/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
+/turf/open/floor/light/attackby(obj/item/C, mob/user, list/modifiers)
if(..())
return
if(istype(C, /obj/item/light/bulb)) //only for light tiles
diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm
index 620bfe85e04a..c2ceab62d474 100644
--- a/code/game/turfs/open/floor/mineral_floor.dm
+++ b/code/game/turfs/open/floor/mineral_floor.dm
@@ -192,7 +192,7 @@
if(isliving(arrived))
squeak()
-/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params)
+/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, list/modifiers)
.=..()
if(!.)
honk()
@@ -248,7 +248,7 @@
if(isliving(arrived))
radiate()
-/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, params)
+/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, list/modifiers)
.=..()
if(!.)
radiate()
diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm
index ec5bbc0f78d6..ce853b506502 100644
--- a/code/game/turfs/open/floor/plating.dm
+++ b/code/game/turfs/open/floor/plating.dm
@@ -46,7 +46,7 @@
#define PLATE_REINFORCE_COST 2
-/turf/open/floor/plating/attackby(obj/item/C, mob/user, params)
+/turf/open/floor/plating/attackby(obj/item/C, mob/user, list/modifiers)
if(..())
return
if(istype(C, /obj/item/stack/rods) && attachment_holes)
@@ -141,7 +141,7 @@
/turf/open/floor/plating/foam/break_tile()
return //jetfuel can't break steel foam...
-/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, params)
+/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, list/modifiers)
if(istype(I, /obj/item/stack/tile/iron))
var/obj/item/stack/tile/iron/P = I
if(P.use(1))
@@ -218,7 +218,7 @@
icon_state = "r_plate-[deconstruction_state]"
return ..()
-/turf/open/floor/plating/reinforced/attackby(obj/item/tool_used, mob/user, params)
+/turf/open/floor/plating/reinforced/attackby(obj/item/tool_used, mob/user, list/modifiers)
user.changeNext_move(CLICK_CD_MELEE)
if (!ISADVANCEDTOOLUSER(user))
to_chat(user, span_warning("You don't have the dexterity to do this!"))
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index 9b79313111f1..b2ed69c5039d 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -40,7 +40,7 @@
/turf/open/floor/plating/abductor2/burn_tile()
return //unburnable
-/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers)
return
/turf/open/floor/plating/snowed
diff --git a/code/game/turfs/open/floor/reinforced_floor.dm b/code/game/turfs/open/floor/reinforced_floor.dm
index f828f39c45bf..3fe427f1aced 100644
--- a/code/game/turfs/open/floor/reinforced_floor.dm
+++ b/code/game/turfs/open/floor/reinforced_floor.dm
@@ -33,7 +33,7 @@
return ..()
return //unplateable
-/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers)
return
/turf/open/floor/engine/crowbar_act(mob/living/user, obj/item/I)
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 27e80c200d1b..a07e067a76fe 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -193,7 +193,7 @@
/turf/open/lava/TakeTemperature(temp)
-/turf/open/lava/attackby(obj/item/C, mob/user, params)
+/turf/open/lava/attackby(obj/item/C, mob/user, list/modifiers)
..()
if(istype(C, /obj/item/stack/rods/lava))
var/obj/item/stack/rods/lava/R = C
@@ -375,7 +375,7 @@
. = ..()
. += span_info("Some liquid plasma could probably be scooped up with a container.")
-/turf/open/lava/plasma/attackby(obj/item/I, mob/user, params)
+/turf/open/lava/plasma/attackby(obj/item/I, mob/user, list/modifiers)
if(!I.is_open_container())
return ..()
if(!I.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(5, 10)))
diff --git a/code/game/turfs/open/misc.dm b/code/game/turfs/open/misc.dm
index 5f993cf70d51..8ae825b0da4f 100644
--- a/code/game/turfs/open/misc.dm
+++ b/code/game/turfs/open/misc.dm
@@ -21,7 +21,7 @@
heat_capacity = 10000
tiled_dirt = TRUE
-/turf/open/misc/attackby(obj/item/W, mob/user, params)
+/turf/open/misc/attackby(obj/item/W, mob/user, list/modifiers)
. = ..()
if(.)
return TRUE
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index fd3d96db1f4f..c3b0d2af163e 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -111,7 +111,7 @@
/turf/open/openspace/proc/CanBuildHere()
return can_build_on
-/turf/open/openspace/attackby(obj/item/C, mob/user, params)
+/turf/open/openspace/attackby(obj/item/C, mob/user, list/modifiers)
..()
if(!CanBuildHere())
return
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index f636065d5160..751a8e67c16b 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -137,7 +137,7 @@ GLOBAL_LIST_EMPTY(starlight)
/turf/open/space/handle_slip()
return
-/turf/open/space/attackby(obj/item/C, mob/user, params)
+/turf/open/space/attackby(obj/item/C, mob/user, list/modifiers)
..()
if(!CanBuildHere())
return
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 83b4ad3d0301..7755b1a3b857 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -386,7 +386,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
C.wiringGuiUpdate(user)
C.is_empty(user)
-/turf/attackby(obj/item/C, mob/user, params)
+/turf/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers)
if(..())
return TRUE
if(can_lay_cable() && istype(C, /obj/item/stack/cable_coil))
diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
index 56081a0c01c9..79289b0e5f12 100644
--- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
+++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
@@ -340,7 +340,6 @@ Congratulations! You are now trained for invasive xenobiology research!"}
affect_cyborg = is_stun_mode
log_stun_attack = is_stun_mode // other modes have their own log entries.
- stun_animation = is_stun_or_sleep
on_stun_sound = is_stun_or_sleep ? 'sound/weapons/egloves.ogg' : null
to_chat(usr, span_notice("You switch the baton to [txt] mode."))
@@ -362,16 +361,16 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon_state = "wonderprodProbe"
inhand_icon_state = "wonderprodProbe"
-/obj/item/melee/baton/abductor/baton_attack(mob/target, mob/living/user, modifiers)
+/obj/item/melee/baton/abductor/can_baton(mob/living/target, mob/living/user)
if(!AbductorCheck(user))
- return BATON_ATTACK_DONE
+ return TRUE
return ..()
/obj/item/melee/baton/abductor/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override)
switch (mode)
if(BATON_STUN)
target.visible_message(span_danger("[user] stuns [target] with [src]!"),
- span_userdanger("[user] stuns you with [src]!"))
+ span_userdanger("[user] stuns you with [src]!"), visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE)
target.set_jitter_if_lower(40 SECONDS)
target.set_confusion_if_lower(10 SECONDS)
target.set_stutter_if_lower(16 SECONDS)
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index d30e695be241..3e5f49d4ff7b 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -266,7 +266,7 @@
vest = V
return TRUE
-/obj/machinery/abductor/console/attackby(obj/O, mob/user, params)
+/obj/machinery/abductor/console/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O))
to_chat(user, span_notice("You link the tool to the console."))
else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O))
diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm
index 472b24c5064d..514ac4a1fc0f 100644
--- a/code/modules/antagonists/abductor/machinery/dispenser.dm
+++ b/code/modules/antagonists/abductor/machinery/dispenser.dm
@@ -61,7 +61,7 @@
Dispense(gland_id)
return TRUE
-/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, params)
+/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/organ/heart/gland))
if(!user.transferItemToLoc(W, src))
return
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 324c91ea3a52..a6ecf7a3d1a9 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -241,7 +241,7 @@
/obj/structure/blob/hulk_damage()
return 15
-/obj/structure/blob/attackby(obj/item/I, mob/user, params)
+/obj/structure/blob/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_ANALYZER)
user.changeNext_move(CLICK_CD_MELEE)
to_chat(user, "The analyzer beeps once, then reports:
")
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index 05b9f7102490..13e934daead4 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -212,7 +212,7 @@
effectiveness = 80, \
)
-/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(istype(target, /obj/structure/table))
var/obj/smash = target
smash.deconstruct(FALSE)
diff --git a/code/modules/antagonists/clown_ops/clown_weapons.dm b/code/modules/antagonists/clown_ops/clown_weapons.dm
index bd2dfd4b0da0..40f7d17a591b 100644
--- a/code/modules/antagonists/clown_ops/clown_weapons.dm
+++ b/code/modules/antagonists/clown_ops/clown_weapons.dm
@@ -133,7 +133,7 @@
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
slipper.Slip(src, hit_atom)
-/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, params)
+/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(COOLDOWN_FINISHED(src, next_trombone_allowed) && istype(weapon, /obj/item/melee/energy/sword/bananium))
COOLDOWN_START(src, next_trombone_allowed, 5 SECONDS)
to_chat(user, span_warning("You slap the two swords together. Sadly, they do not seem to fit!"))
diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm
index f68540292b37..a9accccd8b20 100644
--- a/code/modules/antagonists/heretic/heretic_antag.dm
+++ b/code/modules/antagonists/heretic/heretic_antag.dm
@@ -368,7 +368,7 @@
* and have mansus grasp active in their offhand,
* they're able to draw a transmutation rune.
*/
-/datum/antagonist/heretic/proc/on_item_use(mob/living/source, atom/target, obj/item/weapon, click_parameters)
+/datum/antagonist/heretic/proc/on_item_use(mob/living/source, atom/target, obj/item/weapon, list/modifiers)
SIGNAL_HANDLER
if(!is_type_in_typecache(weapon, scribing_tools))
return NONE
diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm
index 662af81249a5..b52fed811e13 100644
--- a/code/modules/antagonists/heretic/influences.dm
+++ b/code/modules/antagonists/heretic/influences.dm
@@ -254,7 +254,7 @@
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, params)
+/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm
index c323ac86aa6e..22212e944690 100644
--- a/code/modules/antagonists/heretic/items/heretic_blades.dm
+++ b/code/modules/antagonists/heretic/items/heretic_blades.dm
@@ -24,7 +24,7 @@
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
var/after_use_message = ""
-/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, params)
+/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return .
diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm
index 7233d04ca8a8..490e930de527 100644
--- a/code/modules/antagonists/heretic/items/heretic_necks.dm
+++ b/code/modules/antagonists/heretic/items/heretic_necks.dm
@@ -62,7 +62,7 @@
// How much damage does this item do to the targets sanity?
var/sanity_damage = 20
-/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params)
+/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
var/mob/living/carbon/human/hit = target
if(!IS_HERETIC(user))
user.balloon_alert(user, "you feel a presence watching you")
diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm
index 49e91c588ff0..73320a195ae4 100644
--- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm
@@ -370,14 +370,8 @@
offand_force_decrement += 2
hits_to_crit_on_average = ROUND_UP(100 / (blade.force * 2 - offand_force_decrement))
- // Save the force as our last weapon force
- last_weapon_force = blade.force
- // Subtract the decrement
- blade.force -= offand_force_decrement
// Perform the offhand attack
- blade.melee_attack_chain(source, target)
- // Restore the force.
- blade.force = last_weapon_force
+ blade.melee_attack_chain(source, target, null, list(FORCE_MODIFIER = -offand_force_decrement))
/datum/heretic_knowledge/spell/furious_steel
name = "Furious Steel"
diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm
index 51df4fb7de9a..f0de526ec1fe 100644
--- a/code/modules/antagonists/heretic/structures/carving_knife.dm
+++ b/code/modules/antagonists/heretic/structures/carving_knife.dm
@@ -179,13 +179,14 @@
return
return ..()
-/obj/structure/trap/eldritch/attacked_by(obj/item/weapon, mob/living/user)
- if(istype(weapon, /obj/item/melee/rune_carver) || istype(weapon, /obj/item/nullrod))
+/obj/structure/trap/eldritch/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/melee/rune_carver) || istype(tool, /obj/item/nullrod))
loc.balloon_alert(user, "carving dispelled")
playsound(src, 'sound/items/sheath.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE)
qdel(src)
+ return ITEM_INTERACT_SUCCESS
- return ..()
+ return NONE
/obj/structure/trap/eldritch/alert
name = "alert carving"
diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm
index 666e95e5bfb2..15512ee48968 100644
--- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm
+++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm
@@ -57,37 +57,37 @@
return span_notice("It's at [round(atom_integrity * 100 / max_integrity)]% stability.")
return ..()
-/obj/structure/destructible/eldritch_crucible/attacked_by(obj/item/weapon, mob/living/user)
- if(!iscarbon(user))
- return ..()
-
- if(!IS_HERETIC_OR_MONSTER(user))
- bite_the_hand(user)
- return TRUE
-
- if(isbodypart(weapon))
-
- var/obj/item/bodypart/consumed = weapon
+/obj/structure/destructible/eldritch_crucible/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(isbodypart(tool))
+ var/obj/item/bodypart/consumed = tool
if(!IS_ORGANIC_LIMB(consumed))
balloon_alert(user, "not organic!")
- return
-
+ return ITEM_INTERACT_BLOCKING
+ if(!IS_HERETIC_OR_MONSTER(user))
+ if(user.combat_mode)
+ return ITEM_INTERACT_SKIP_TO_ATTACK
+ bite_the_hand(user)
+ return ITEM_INTERACT_SUCCESS
consume_fuel(user, consumed)
- return TRUE
+ return ITEM_INTERACT_SUCCESS
- if(isorgan(weapon))
- var/obj/item/organ/consumed = weapon
+ if(isorgan(tool))
+ var/obj/item/organ/consumed = tool
if(!IS_ORGANIC_ORGAN(consumed))
balloon_alert(user, "not organic!")
- return
+ return ITEM_INTERACT_BLOCKING
if(consumed.organ_flags & ORGAN_VITAL) // Basically, don't eat organs like brains
balloon_alert(user, "invalid organ!")
- return
-
+ return ITEM_INTERACT_BLOCKING
+ if(!IS_HERETIC_OR_MONSTER(user))
+ if(user.combat_mode)
+ return ITEM_INTERACT_SKIP_TO_ATTACK
+ bite_the_hand(user)
+ return ITEM_INTERACT_SUCCESS
consume_fuel(user, consumed)
- return TRUE
+ return ITEM_INTERACT_SUCCESS
- return ..()
+ return NONE
/obj/structure/destructible/eldritch_crucible/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(istype(tool, /obj/item/codex_cicatrix) || istype(tool, /obj/item/melee/touch_attack/mansus_fist))
@@ -180,7 +180,7 @@
if(QDELETED(arm))
return
- to_chat(user, span_userdanger("[src] grabs your [arm.name]!"))
+ to_chat(user, span_userdanger("[src] grabs your [arm.plaintext_zone]!"))
arm.dismember()
consume_fuel(consumed = arm)
diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm
index 0d869bd1760e..9a0372716e8c 100644
--- a/code/modules/antagonists/nightmare/nightmare_equipment.dm
+++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm
@@ -47,7 +47,7 @@
UnregisterSignal(user, COMSIG_MOB_AFTER_EXIT_JAUNT)
remove_crit()
-/obj/item/light_eater/attack(mob/living/target, mob/living/user, params)
+/obj/item/light_eater/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!has_crit)
return
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm
index 87577f1e040d..e7d0f15b60bb 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm
@@ -82,7 +82,7 @@
return discover_after
-/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, params)
+/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/claymore/highlander) && !fake)
var/obj/item/claymore/highlander/claymore = weapon
if(claymore.nuke_disk)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index abfc0ec702b6..5d3da08da2da 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -87,7 +87,7 @@ GLOBAL_VAR(station_nuke_source)
return TRUE
-/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if (istype(weapon, /obj/item/disk/nuclear))
if(!disk_check(weapon))
return TRUE
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm
index 4275c807ea88..f2cc848a8b35 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm
@@ -27,7 +27,7 @@
else
. += span_danger("It's empty.")
-/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(weapon.is_refillable())
weapon.interact_with_atom(keg, user) // redirect refillable containers to the keg, allowing them to be filled
return TRUE // pretend we handled the attack, too.
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index f2b2e3cc3895..5fc3ba692920 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -65,7 +65,7 @@
qdel(src)
return PROCESS_KILL
-/obj/effect/rend/attackby(obj/item/I, mob/user, params)
+/obj/effect/rend/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/nullrod))
user.visible_message(span_danger("[user] seals \the [src] with \the [I]."))
qdel(src)
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index a535cce443be..cbeb91ed79ec 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -309,7 +309,7 @@
A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n
A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."}
-/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
+/obj/structure/constructshell/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
if(!IS_CULTIST(user) && !HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) && !SS.theme == THEME_HOLY)
diff --git a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm
index 79fb2a1568f2..5652241692dd 100644
--- a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm
@@ -74,7 +74,7 @@
return ..()
-/obj/item/spellbook/attackby(obj/item/O, mob/user, params)
+/obj/item/spellbook/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
// This can be generalized in the future, but for now it stays
if(istype(O, /obj/item/antag_spawner/contract))
var/datum/spellbook_entry/item/contract/contract_entry = locate() in entries
diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm
index 917808ad7083..909985f5a254 100644
--- a/code/modules/art/paintings.dm
+++ b/code/modules/art/paintings.dm
@@ -15,7 +15,7 @@
var/obj/item/canvas/painting = null
//Adding canvases
-/obj/structure/easel/attackby(obj/item/I, mob/user, params)
+/obj/structure/easel/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/canvas))
var/obj/item/canvas/canvas = I
user.transfer_item_to_turf(canvas, get_turf(src), silent = FALSE)
@@ -135,7 +135,7 @@
ui = new(user, src, "Canvas", name)
ui.open()
-/obj/item/canvas/attackby(obj/item/I, mob/living/user, params)
+/obj/item/canvas/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(!user.combat_mode)
ui_interact(user)
else
@@ -721,7 +721,7 @@
. = ..()
SSpersistent_paintings.painting_frames -= src
-/obj/structure/sign/painting/attackby(obj/item/I, mob/user, params)
+/obj/structure/sign/painting/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!current_canvas && istype(I, /obj/item/canvas))
frame_canvas(user,I)
else if(current_canvas && current_canvas.painting_metadata.title == initial(current_canvas.painting_metadata.title) && istype(I,/obj/item/pen))
diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm
index 18d07bf5ed9a..5c0bd756b20d 100644
--- a/code/modules/art/statues.dm
+++ b/code/modules/art/statues.dm
@@ -33,7 +33,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
+/obj/structure/statue/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount=1))
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 0ac5993aeccf..43c50fe16a1c 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -117,7 +117,7 @@
return
. = ..()
-/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(isassembly(attacking_item))
var/obj/item/assembly/new_assembly = attacking_item
// Check both our's and their's assembly flags to see if either should not duplicate
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index ac8d5d4e8cee..cf9cbd6b10e4 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -289,7 +289,7 @@
..()
new /obj/effect/temp_visual/borgflash(get_turf(src))
-/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params)
+/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/item/assembly/flash/cyborg/screwdriver_act(mob/living/user, obj/item/I)
return
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 5f50618e77df..f42f0df6f5da 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -134,7 +134,7 @@
for(var/obj/item/assembly/assembly as anything in assemblies)
assembly.attack_hand(user, modifiers) // Note override in assembly.dm to prevent side effects here
-/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, params)
+/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(isassembly(weapon))
try_add_assembly(weapon, user)
return
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 91f3a0ace5a5..1ea31def3a7e 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -120,7 +120,7 @@
update_appearance()
-/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params)
+/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(issignaler(W))
var/obj/item/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
@@ -182,7 +182,7 @@
/obj/item/assembly/signaler/cyborg
-/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
+/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I)
return
@@ -193,7 +193,7 @@
/obj/item/assembly/signaler/internal/ui_state(mob/user)
return GLOB.inventory_state
-/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, params)
+/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/item/assembly/signaler/internal/screwdriver_act(mob/living/user, obj/item/I)
diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
index c231333bfb86..6ee1ed9482c9 100644
--- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
+++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
@@ -98,7 +98,7 @@
if((buildstage == AIR_ALARM_BUILD_COMPLETE))
new /obj/item/stack/cable_coil(loc, 3)
-/obj/machinery/airalarm/attackby(obj/item/W, mob/user, params)
+/obj/machinery/airalarm/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
update_last_used(user)
switch(buildstage)
if(AIR_ALARM_BUILD_COMPLETE)
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index da7fd51efbd6..b83e281a39dd 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -388,7 +388,7 @@
nodes[nodes.Find(reference)] = null
update_appearance()
-/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, params)
+/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/pipe)) //lets you autodrop
var/obj/item/pipe/pipe = W
if(user.dropItemToGround(pipe))
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
index 4a811c3435cb..c4bcfcdcc88c 100644
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
@@ -168,7 +168,7 @@
/obj/machinery/electrolyzer/crowbar_act(mob/living/user, obj/item/tool)
return default_deconstruction_crowbar(tool)
-/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params)
+/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(istype(I, /obj/item/stock_parts/power_store/cell))
if(!panel_open)
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
index 194e3744ca6d..0eee62cdbeaf 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
@@ -34,7 +34,7 @@
. = ..()
. += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.")
-/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, params)
+/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!fusion_started)
if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I))
return
@@ -128,7 +128,7 @@
. = ..()
. += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.")
-/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, params)
+/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!fusion_started)
if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I))
return
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
index 801a905563d4..219d7c338ca4 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
@@ -58,7 +58,7 @@
context[SCREENTIP_CONTEXT_LMB] = "Rotate"
return CONTEXTUAL_SCREENTIP_SET
-/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, params)
+/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!on)
if(default_deconstruction_screwdriver(user, "[base_icon_state]-open", "[base_icon_state]-off", I))
return
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index 1e89478d8065..f95e5c18da55 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -548,7 +548,7 @@
if(TANK_PLATING_UNSECURED)
icon_state = "plated_frame"
-/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, params)
+/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(construction_state == TANK_FRAME && isstack(item) && add_plating(user, item))
return
return ..()
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index ff5adf476875..785a1bb8aa96 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -87,7 +87,7 @@
return air_temporary.remove(amount)
return parent.air.remove(amount)
-/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, params)
+/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/pipe_meter))
var/obj/item/pipe_meter/meter = item
user.dropItemToGround(meter)
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index c6ce5933f421..26e75dfd5ad7 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -412,7 +412,7 @@
if(internal_cell)
internal_cell.forceMove(drop_location())
-/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params)
+/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/stock_parts/power_store/cell))
var/obj/item/stock_parts/power_store/cell/active_cell = item
if(!panel_open)
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index c91c9d1d2310..025ff01d3b4a 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -9,6 +9,7 @@
anchored = FALSE
layer = ABOVE_OBJ_LAYER
interaction_flags_click = NEED_DEXTERITY
+ damage_deflection = 11
///Stores the gas mixture of the portable component. Don't access this directly, use return_air() so you support the temporary processing it provides
var/datum/gas_mixture/air_contents
@@ -196,7 +197,7 @@
update_appearance()
return TRUE
-/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, params)
+/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/tank))
return ..()
if(machine_stat & BROKEN)
@@ -238,13 +239,20 @@
investigate_log("was connected to [possible_port] by [key_name(user)].", INVESTIGATE_ATMOS)
return TRUE
+/obj/machinery/portable_atmospherics/atom_break(damage_flag)
+ . = ..()
+ damage_deflection = 0
+
+/obj/machinery/portable_atmospherics/atom_fix()
+ . = ..()
+ damage_deflection = initial(damage_deflection)
+
/obj/machinery/portable_atmospherics/attacked_by(obj/item/item, mob/user)
- if(item.force < 10 && !(machine_stat & BROKEN))
- take_damage(0)
+ . = ..()
+ if(!.)
return
investigate_log("was smacked with \a [item] by [key_name(user)].", INVESTIGATE_ATMOS)
- add_fingerprint(user)
- return ..()
+ add_hiddenprint(user)
/// Holding tanks can get to zero integrity and be destroyed without other warnings due to pressure change.
/// This checks for that case and removes our reference to it.
diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm
index cf6a6a3c9c7a..81b2c47c4bc0 100644
--- a/code/modules/awaymissions/mission_code/Cabin.dm
+++ b/code/modules/awaymissions/mission_code/Cabin.dm
@@ -50,7 +50,7 @@
active = FALSE
toggleFirepit()
-/obj/structure/firepit/attackby(obj/item/W,mob/living/user,params)
+/obj/structure/firepit/attackby(obj/item/W,mob/living/user,list/modifiers)
if(!active)
var/msg = W.ignition_effect(src, user)
if(msg)
diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm
index 864b4fa03f86..4fec07484a45 100644
--- a/code/modules/awaymissions/signpost.dm
+++ b/code/modules/awaymissions/signpost.dm
@@ -30,7 +30,7 @@
else
to_chat(user, "Nothing happens. You feel that this is a bad sign.")
-/obj/structure/signpost/attackby(obj/item/W, mob/user, params)
+/obj/structure/signpost/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return interact(user)
/obj/structure/signpost/attack_paw(mob/user, list/modifiers)
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index d7ecda850182..6d338e5ec269 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -90,7 +90,7 @@
speaking = FALSE
times_spoken_to++
-/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, params)
+/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return interact(user)
/obj/structure/speaking_tile/attack_paw(mob/user, list/modifiers)
diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm
index 35579dc44828..8d58733a59e4 100644
--- a/code/modules/basketball/basketball.dm
+++ b/code/modules/basketball/basketball.dm
@@ -150,7 +150,7 @@
user.balloon_alert_to_viewers("fumbles the ball")
-/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, params)
+/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!iscarbon(target) || user.combat_mode)
return ..()
diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm
index 505ce9c8c3a4..c3379fbcaead 100644
--- a/code/modules/basketball/hoop.dm
+++ b/code/modules/basketball/hoop.dm
@@ -89,7 +89,7 @@
scoreboard.add_overlay(tens_overlay)
scoreboard.add_overlay(emissive_tens_overlay)
-/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, params)
+/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, list/modifiers, list/attack_modifiers)
if(!baller.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH))
return // TK users aren't allowed to dunk
diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm
index c814ff839d9d..b398d8d1aa33 100644
--- a/code/modules/bitrunning/server/_parent.dm
+++ b/code/modules/bitrunning/server/_parent.dm
@@ -122,7 +122,7 @@
return ..()
-/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
if(!istype(tool, /obj/item/bitrunning_debug))
return NONE
diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm
index 38a7318b5548..36c15b8c15ae 100644
--- a/code/modules/capture_the_flag/ctf_game.dm
+++ b/code/modules/capture_the_flag/ctf_game.dm
@@ -171,7 +171,7 @@
player_mob.add_traits(player_traits, CAPTURE_THE_FLAG_TRAIT)
return player_mob //used in medisim_game.dm
-/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, params)
+/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/ctf_flag))
var/obj/item/ctf_flag/flag = item
if(flag.team != team)
@@ -268,7 +268,7 @@
user.set_anchored(TRUE)
user.status_flags &= ~CANPUSH
-/obj/item/ctf_flag/attackby(obj/item/item, mob/user, params)
+/obj/item/ctf_flag/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/ctf_flag))
return ..()
@@ -367,7 +367,7 @@
scores += UNLINT("[ctf_team.team_color] - [ctf_team.points]/[ctf_game.points_to_win]\n")
balloon_alert_to_viewers(scores)
-/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, params)
+/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
capture(user)
/obj/machinery/ctf/control_point/attack_hand(mob/user, list/modifiers)
diff --git a/code/modules/cards/cardhand.dm b/code/modules/cards/cardhand.dm
index ac14e17fea61..806e56572573 100644
--- a/code/modules/cards/cardhand.dm
+++ b/code/modules/cards/cardhand.dm
@@ -91,8 +91,8 @@
return ..()
-/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, params)
- attackby(weapon, user, params, flip_card = TRUE)
+/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
+ attackby(weapon, user, modifiers, flip_card = TRUE)
return SECONDARY_ATTACK_CONTINUE_CHAIN
#define CARDS_MAX_DISPLAY_LIMIT 5 // the amount of cards that are displayed in a hand
diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm
index 5fc280f5b19a..baa46542fee5 100644
--- a/code/modules/cards/deck/deck.dm
+++ b/code/modules/cards/deck/deck.dm
@@ -175,7 +175,7 @@
card.Flip(CARD_FACEDOWN)
. = ..()
-/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, params)
+/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/toy/singlecard) || istype(item, /obj/item/toy/cards/cardhand))
insert(item)
var/card_grammar = istype(item, /obj/item/toy/singlecard) ? "card" : "cards"
diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm
index 300523254ed7..33b93d850dec 100644
--- a/code/modules/cards/singlecard.dm
+++ b/code/modules/cards/singlecard.dm
@@ -219,7 +219,7 @@
return
return ..()
-/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, modifiers)
+/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
attackby(item, user, modifiers, flip_card=TRUE)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm
index 6ef2567d2524..f3a24a6ee7db 100644
--- a/code/modules/cargo/coupon.dm
+++ b/code/modules/cargo/coupon.dm
@@ -106,7 +106,7 @@
to_chat(player, span_userdanger("...The suspense is killing you!"))
player.set_heartattack(status = TRUE)
-/obj/item/coupon/attack_atom(obj/O, mob/living/user, params)
+/obj/item/coupon/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(O, /obj/machinery/computer/cargo))
return ..()
if(discount_pct_off == COUPON_OMEN)
diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm
index 947197d16f29..44660e9728c4 100644
--- a/code/modules/cargo/materials_market.dm
+++ b/code/modules/cargo/materials_market.dm
@@ -53,7 +53,7 @@
if(default_deconstruction_crowbar(tool))
return ITEM_INTERACT_SUCCESS
-/obj/machinery/materials_market/attackby(obj/item/O, mob/user, params)
+/obj/machinery/materials_market/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(is_type_in_list(O, exportable_material_items))
var/amount = 0
var/value = 0
diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm
index 2e47241c3fbe..632a3bce3831 100644
--- a/code/modules/cargo/universal_scanner.dm
+++ b/code/modules/cargo/universal_scanner.dm
@@ -71,7 +71,7 @@
return ITEM_INTERACT_SUCCESS
return NONE
-/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(scanning_mode == SCAN_SALES_TAG && isidcard(attacking_item))
var/obj/item/card/id/potential_acc = attacking_item
diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm
index 0b657c5b5247..b4cdee3ea72a 100644
--- a/code/modules/clothing/belts/polymorph_belt.dm
+++ b/code/modules/clothing/belts/polymorph_belt.dm
@@ -48,7 +48,7 @@
update_transform_action()
playsound(src, 'sound/machines/crate_open.ogg', 50, FALSE)
-/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if (.)
return
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 25e1f5620185..93e513d3418e 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -113,14 +113,14 @@
else
qdel(src)
-/obj/item/clothing/attack(mob/living/target, mob/living/user, params)
+/obj/item/clothing/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode || !ismoth(target) || ispickedupmob(src))
return ..()
if((clothing_flags & INEDIBLE_CLOTHING) || (resistance_flags & INDESTRUCTIBLE))
return ..()
if(isnull(moth_snack))
create_moth_snack()
- moth_snack.attack(target, user, params)
+ moth_snack.attack(target, user, modifiers)
/// Creates a food object in null space which we can eat and imagine we're eating this pair of shoes
/obj/item/clothing/proc/create_moth_snack()
diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm
index c62d31d295a6..248d5bac0bb8 100644
--- a/code/modules/clothing/gloves/_gloves.dm
+++ b/code/modules/clothing/gloves/_gloves.dm
@@ -72,7 +72,7 @@
return FALSE // We don't want to cut dyed gloves.
return TRUE
-/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, params)
+/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 3a75bd963356..6a0ebbcdd860 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -45,7 +45,7 @@
. = ..()
AddComponent(/datum/component/seclite_attachable, light_icon_state = "flight")
-/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(issignaler(attacking_item))
var/obj/item/assembly/signaler/attached_signaler = attacking_item
// There's a flashlight in us. Remove it first, or it'll be lost forever!
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index bf3f5f052eb2..a3a1fd6f40de 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -297,7 +297,7 @@
return TRUE
-/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, params)
+/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(LAZYLEN(contents) >= max_items)
diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm
index 2affc4c63da1..05b1f2d7bd6a 100644
--- a/code/modules/clothing/head/tophat.dm
+++ b/code/modules/clothing/head/tophat.dm
@@ -10,7 +10,7 @@
/// Cooldown for how often we can pull rabbits out of here
COOLDOWN_DECLARE(rabbit_cooldown)
-/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, params)
+/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(hitby_item, /obj/item/gun/magic/wand))
abracadabra(hitby_item, user)
diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm
index 2603f378960e..d0de59f0ae49 100644
--- a/code/modules/clothing/masks/muzzle.dm
+++ b/code/modules/clothing/masks/muzzle.dm
@@ -77,7 +77,7 @@
INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, emote), "scream")
to_chat(user, span_userdanger("You feel a massive pain as hundreds of tiny spikes tear free from your face!"))
-/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, params)
+/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, list/modifiers, list/attack_modifiers)
if(attacker.combat_mode)
return ..()
if(victim.is_mouth_covered(ITEM_SLOT_HEAD))
diff --git a/code/modules/clothing/neck/collar_bomb.dm b/code/modules/clothing/neck/collar_bomb.dm
index 72f5b20320db..77c23516bffc 100644
--- a/code/modules/clothing/neck/collar_bomb.dm
+++ b/code/modules/clothing/neck/collar_bomb.dm
@@ -38,7 +38,7 @@
return
. += span_tinynotice("It has a [EXAMINE_HINT("wire")] panel that could be interacted with...")
-/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, params)
+/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(is_wire_tool(item))
wires.interact(user)
else
diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm
index f0f3c68a2f7e..63f7cd40d1d8 100644
--- a/code/modules/clothing/shoes/sneakers.dm
+++ b/code/modules/clothing/shoes/sneakers.dm
@@ -153,13 +153,13 @@
return
return ..()
-/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, params)
+/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, list/modifiers, list/attack_modifiers)
if(attached_cuffs || attacking_movable.type != /obj/item/restraints/handcuffs)
return ..()
attacking_movable.forceMove(src)
return TRUE
-/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(attached_cuffs || attacking_item.type != /obj/item/restraints/handcuffs) // Note: not using istype here because we want to ignore all subtypes
return ..()
attacking_item.forceMove(src)
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index f7189490997e..c86cca85d829 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -213,7 +213,7 @@
return ITEM_INTERACT_SUCCESS
// object handling for accessing features of the suit
-/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params)
+/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!cell_cover_open || !istype(I, /obj/item/stock_parts/power_store/cell))
return ..()
if(cell)
diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm
index d72dcf48fc16..2f07001ac555 100644
--- a/code/modules/clothing/spacesuits/softsuit.dm
+++ b/code/modules/clothing/spacesuits/softsuit.dm
@@ -52,7 +52,7 @@
. = ..()
. += span_notice("You can start constructing a critter sized mecha with a [span_bold("cyborg leg")].")
-/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, params)
+/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 21d70112bb3e..4570957c0b2f 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -105,7 +105,7 @@
if(accessory_overlay)
. += accessory_overlay
-/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/cabling = attacking_item
to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling]."))
diff --git a/code/modules/economy/holopay.dm b/code/modules/economy/holopay.dm
index 45b37969876d..52219bb61aa1 100644
--- a/code/modules/economy/holopay.dm
+++ b/code/modules/economy/holopay.dm
@@ -74,7 +74,7 @@
linked_card = null
return ..()
-/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, params)
+/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, list/modifiers, list/attack_modifiers)
var/mob/living/user = item_holder
if(!isliving(user))
return ..()
@@ -115,7 +115,7 @@
return TRUE
return ..()
-/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
/// Can kill it by right-clicking with ID because it seems useful and intuitive, to me, at least
if(!isidcard(weapon))
return ..()
diff --git a/code/modules/events/space_vines/vine_structure.dm b/code/modules/events/space_vines/vine_structure.dm
index a7b9aa2fce51..6bd89ac255a5 100644
--- a/code/modules/events/space_vines/vine_structure.dm
+++ b/code/modules/events/space_vines/vine_structure.dm
@@ -30,6 +30,7 @@
/obj/structure/spacevine/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_CHASM_DESTROYED, INNATE_TRAIT)
+ ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT)
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
@@ -76,16 +77,14 @@
if(!override)
qdel(src)
-/obj/structure/spacevine/attacked_by(obj/item/item, mob/living/user)
- var/damage_dealt = item.force
- if(item.get_sharpness())
- damage_dealt *= 4
+/obj/structure/spacevine/attacked_by(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
+ LAZYSET(attack_modifiers, SILENCE_DEFAULT_MESSAGES, TRUE)
+ LAZYSET(attack_modifiers, FORCE_MULTIPLIER, 1)
if(item.damtype == BURN)
- damage_dealt *= 4
-
- for(var/datum/spacevine_mutation/mutation in mutations)
- damage_dealt = mutation.on_hit(src, user, item, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
- take_damage(damage_dealt, item.damtype, MELEE, 1)
+ MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4)
+ if(item.get_sharpness())
+ MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4)
+ return ..()
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm
index 443cc2ddea5f..43517ec26dd4 100644
--- a/code/modules/events/wizard/rpgloot.dm
+++ b/code/modules/events/wizard/rpgloot.dm
@@ -35,7 +35,7 @@
return ..()
-/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user)
+/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. || !istype(target) || !user.combat_mode)
return
diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm
index 0b90850b9556..415a33289d6e 100644
--- a/code/modules/experisci/destructive_scanner.dm
+++ b/code/modules/experisci/destructive_scanner.dm
@@ -102,7 +102,7 @@
. = ..()
icon_state = scanning ? "tube_on" : "tube_open"
-/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, params)
+/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, list/modifiers, list/attack_modifiers)
if (!scanning && default_deconstruction_screwdriver(user, "tube_open", "tube_open", object) || default_deconstruction_crowbar(object))
update_icon()
return
diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm
index ddecb9440ceb..2606353661e2 100644
--- a/code/modules/experisci/experiment/handlers/experiment_handler.dm
+++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm
@@ -79,7 +79,7 @@
/**
* Hooks on attack to try and run an experiment (When using a handheld handler)
*/
-/datum/component/experiment_handler/proc/try_run_handheld_experiment(datum/source, atom/target, mob/user, params)
+/datum/component/experiment_handler/proc/try_run_handheld_experiment(datum/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
if (!should_run_handheld_experiment(source, target, user))
return
@@ -89,7 +89,7 @@
/**
* Provides feedback when an item isn't related to an experiment, and has fully passed the attack chain
*/
-/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, params)
+/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
if ((isnull(selected_experiment) && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || (config_flags & EXPERIMENT_CONFIG_SILENT_FAIL))
return
diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm
index 0143959d2969..1989548dd756 100644
--- a/code/modules/explorer_drone/exodrone.dm
+++ b/code/modules/explorer_drone/exodrone.dm
@@ -359,7 +359,7 @@ GLOBAL_LIST_EMPTY(exodrone_launchers)
if(fuel_canister)
. += span_notice("You can remove the [fuel_canister] with a prying tool.")
-/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/fuel_pellet))
if(fuel_canister)
to_chat(user, span_warning("There's already fuel loaded inside [src]!"))
diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm
index b0a91c37037b..5f60c613eee2 100644
--- a/code/modules/explorer_drone/loot.dm
+++ b/code/modules/explorer_drone/loot.dm
@@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index())
cell = new /obj/item/stock_parts/power_store/cell(src)
AddComponent(/datum/component/two_handed)
-/obj/item/firelance/attack(mob/living/M, mob/living/user, params)
+/obj/item/firelance/attack(mob/living/M, mob/living/user, list/modifiers, list/attack_modifiers)
if(!user.combat_mode)
return
. = ..()
diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm
index c489cf8384f0..4513f51b414e 100644
--- a/code/modules/fishing/fish/_fish.dm
+++ b/code/modules/fishing/fish/_fish.dm
@@ -402,7 +402,7 @@
icon_state = base_icon_state
return ..()
-/obj/item/fish/attackby(obj/item/item, mob/living/user, params)
+/obj/item/fish/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/fish_feed))
return ..()
if(!item.reagents.total_volume)
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
index 7df047d8f68c..1ae5bede48cb 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -354,7 +354,7 @@
. += line_overlay
. += mutable_appearance(icon_file, "hook_overlay")
-/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(slot_check(attacking_item,ROD_SLOT_LINE))
use_slot(ROD_SLOT_LINE, user, attacking_item)
SStgui.update_uis(src)
diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm
index 1f929a0de841..9a05451323e0 100644
--- a/code/modules/food_and_drinks/machinery/coffeemaker.dm
+++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm
@@ -179,7 +179,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, params)
+/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers)
//You can only screw open empty grinder
if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item))
return FALSE
@@ -581,7 +581,7 @@
return FALSE
return TRUE
-/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, params)
+/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers)
//You can only screw open empty grinder
if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item))
return
diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm
index eca04daaf012..df72bf46c16a 100644
--- a/code/modules/food_and_drinks/machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm
@@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
// Dissolving pills into the frier
if(istype(weapon, /obj/item/reagent_containers/pill))
if(!reagents.total_volume)
diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm
index f52c51cfa1d7..b3adf8e31f30 100644
--- a/code/modules/food_and_drinks/machinery/gibber.dm
+++ b/code/modules/food_and_drinks/machinery/gibber.dm
@@ -113,7 +113,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/gibber/attackby(obj/item/P, mob/user, params)
+/obj/machinery/gibber/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P))
return
diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm
index e0c45e6c9af1..abc7d9ba3d05 100644
--- a/code/modules/food_and_drinks/machinery/griddle.dm
+++ b/code/modules/food_and_drinks/machinery/griddle.dm
@@ -62,12 +62,11 @@
return default_deconstruction_crowbar(I, ignore_panel = TRUE)
-/obj/machinery/griddle/attackby(obj/item/I, mob/user, params)
+/obj/machinery/griddle/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(griddled_objects.len >= max_items)
to_chat(user, span_notice("[src] can't fit more items!"))
return
- var/list/modifiers = params2list(params)
//Center the icon where the user clicked.
if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y))
return
diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm
index 1db71ab2ed46..0b74183b8a6f 100644
--- a/code/modules/food_and_drinks/machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm
@@ -106,7 +106,7 @@
context[SCREENTIP_CONTEXT_RMB] = "Change mode to flavors"
return CONTEXTUAL_SCREENTIP_SET
-/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, params)
+/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
@@ -126,7 +126,7 @@
balloon_alert(user, "beaker inserted")
custom_ice_cream_beaker = beaker
-/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, params)
+/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
index 7fae74c453e3..9767a74823ed 100644
--- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
@@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
power_change()
return ITEM_INTERACT_SUCCESS
-/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params)
+/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O))
return
diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm
index 16e0c9ab42e6..b8fa80e7d2b3 100644
--- a/code/modules/food_and_drinks/machinery/oven.dm
+++ b/code/modules/food_and_drinks/machinery/oven.dm
@@ -96,7 +96,7 @@
update_appearance()
use_energy(active_power_usage)
-/obj/machinery/oven/attackby(obj/item/item, mob/user, params)
+/obj/machinery/oven/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!open || used_tray || !istype(item, /obj/item/plate/oven_tray))
return ..()
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index d733de06d337..9e96c637d5af 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -87,7 +87,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(processing)
to_chat(user, span_warning("[src] is in the process of processing!"))
return TRUE
diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm
index d5c1c7a23a29..cf5ad45d3ba7 100644
--- a/code/modules/food_and_drinks/machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/machinery/smartfridge.dm
@@ -261,7 +261,7 @@
playsound(src, SFX_SHATTER, 50, TRUE)
return ..()
-/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(!machine_stat)
var/shown_contents_length = visible_items()
if(shown_contents_length >= max_n_of_items)
diff --git a/code/modules/food_and_drinks/machinery/stove.dm b/code/modules/food_and_drinks/machinery/stove.dm
index 0ecea3a1d6cf..e39e3c3b7f50 100644
--- a/code/modules/food_and_drinks/machinery/stove.dm
+++ b/code/modules/food_and_drinks/machinery/stove.dm
@@ -148,7 +148,7 @@
update_appearance(UPDATE_OVERLAYS)
return TRUE
-/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm
index 9e3d47abb181..22909b67bf56 100644
--- a/code/modules/food_and_drinks/plate.dm
+++ b/code/modules/food_and_drinks/plate.dm
@@ -29,7 +29,7 @@
if(fragile)
AddElement(/datum/element/can_shatter)
-/obj/item/plate/attackby(obj/item/I, mob/user, params)
+/obj/item/plate/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!IS_EDIBLE(I))
balloon_alert(user, "not food!")
return
@@ -39,7 +39,6 @@
if(contents.len >= max_items)
balloon_alert(user, "can't fit!")
return
- var/list/modifiers = params2list(params)
//Center the icon where the user clicked.
if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y))
return
@@ -51,13 +50,13 @@
else
return ..()
-/obj/item/plate/pre_attack(atom/A, mob/living/user, params)
- if(!iscarbon(A))
+/obj/item/plate/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
+ if(!iscarbon(target))
return
if(!contents.len)
return
var/obj/item/object_to_eat = contents[1]
- A.attackby(object_to_eat, user)
+ target.attackby(object_to_eat, user)
return TRUE //No normal attack
///This proc adds the food to viscontents and makes sure it can deregister if this changes.
diff --git a/code/modules/food_and_drinks/restaurant/_venue.dm b/code/modules/food_and_drinks/restaurant/_venue.dm
index 59d82878b463..0a968e3351f8 100644
--- a/code/modules/food_and_drinks/restaurant/_venue.dm
+++ b/code/modules/food_and_drinks/restaurant/_venue.dm
@@ -223,15 +223,14 @@
linked_venue.toggle_open()
update_icon()
-/obj/machinery/restaurant_portal/attacked_by(obj/item/I, mob/living/user)
- if(!istype(I, /obj/item/card/id))
- return ..()
-
- var/obj/item/card/id/used_id = I
+/obj/machinery/restaurant_portal/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ var/obj/item/card/id/used_id = tool.GetID()
+ if(!istype(used_id))
+ return NONE
- if(!(linked_venue.req_access in used_id.GetAccess()))
- to_chat(user, span_warning("This card lacks the access to change this venues status."))
- return
+ if(!check_access(used_id))
+ balloon_alert(user, "insufficient access!")
+ return ITEM_INTERACT_BLOCKING
var/list/radial_items = list()
var/list/radial_results = list()
@@ -244,7 +243,7 @@
var/choice = show_radial_menu(user, src, radial_items, null, require_near = TRUE)
if(!choice)
- return
+ return ITEM_INTERACT_BLOCKING
var/venue_type = radial_results[choice]
var/obj/item/circuitboard/machine/restaurant_portal/board = circuit
@@ -253,11 +252,7 @@
turned_on_portal = WEAKREF(user)
- if(!(chosen_venue.req_access in used_id.GetAccess()))
- to_chat(user, span_warning("This card lacks the access to change this venues status."))
- return
-
- to_chat(user, span_notice("You change the portal's linked venue."))
+ balloon_alert(user, "venue changed to [chosen_venue.name]")
if(linked_venue && (src in linked_venue.restaurant_portals)) //We're already linked, unlink us.
linked_venue.restaurant_portals -= src
@@ -267,6 +262,7 @@
linked_venue = chosen_venue
linked_venue.restaurant_portals += src
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/restaurant_portal/screwdriver_act(mob/user, obj/item/tool)
if (default_deconstruction_screwdriver(user, "[base_icon_state]-open", base_icon_state, tool))
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 789aeeddaaf1..2765092a5e3a 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -93,7 +93,7 @@
to_chat(user, span_warning("You are too primitive to use this device!"))
return
-/obj/machinery/readybutton/attackby(obj/item/W, mob/user, params)
+/obj/machinery/readybutton/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
to_chat(user, span_warning("The device is a solid button, there's nothing you can do with it!"))
/obj/machinery/readybutton/attack_hand(mob/user, list/modifiers)
@@ -148,7 +148,7 @@
/obj/machinery/conveyor/holodeck
-/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, params)
+/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!user.transferItemToLoc(I, drop_location()))
return ..()
diff --git a/code/modules/hydroponics/beekeeping/bee_smoker.dm b/code/modules/hydroponics/beekeeping/bee_smoker.dm
index f3eae4dc41c7..b6e1f86571c2 100644
--- a/code/modules/hydroponics/beekeeping/bee_smoker.dm
+++ b/code/modules/hydroponics/beekeeping/bee_smoker.dm
@@ -71,7 +71,7 @@
return .
-/obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers)
+/obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index c6cfd175958e..f808a794026c 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -147,7 +147,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
+/obj/structure/beebox/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/honey_frame))
var/obj/item/honey_frame/HF = I
if(honey_frames.len < BEEBOX_MAX_FRAMES)
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 2a211ef4c537..78396c6c43c4 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -202,7 +202,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index a971b2b6a740..6ff5ea9a03ba 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -50,7 +50,7 @@
else
. += span_notice("It is currently closed, letting it ferment fruits or draw reagents from its tap.")
-/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, params)
+/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, list/modifiers, list/attack_modifiers)
if(open)
if(istype(object, /obj/item/food/grown) && insert_fruit(user, object))
balloon_alert(user, "added fruit")
diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm
index 02f77280c5ab..a55ae42e449c 100644
--- a/code/modules/hydroponics/grown/corn.dm
+++ b/code/modules/hydroponics/grown/corn.dm
@@ -47,7 +47,7 @@
throw_range = 7
grind_results = list(/datum/reagent/cellulose = 10) //really partially hemicellulose
-/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, params)
+/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.get_sharpness())
to_chat(user, span_notice("You use [W] to fashion a pipe out of the corn cob!"))
new /obj/item/cigarette/pipe/cobpipe (user.loc)
diff --git a/code/modules/hydroponics/grown/hedges.dm b/code/modules/hydroponics/grown/hedges.dm
index b61033f0e5ff..bbee00c82985 100644
--- a/code/modules/hydroponics/grown/hedges.dm
+++ b/code/modules/hydroponics/grown/hedges.dm
@@ -47,14 +47,15 @@
opacity = FALSE
max_integrity = 80
-/obj/structure/hedge/attacked_by(obj/item/I, mob/living/user)
- if(opacity && HAS_TRAIT(user, TRAIT_BONSAI) && I.get_sharpness())
- to_chat(user,span_notice("You start trimming \the [src]."))
- if(do_after(user, 3 SECONDS,target=src))
- to_chat(user,span_notice("You finish trimming \the [src]."))
- opacity = FALSE
- else
- return ..()
+/obj/structure/hedge/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!opacity || !HAS_TRAIT(user, TRAIT_BONSAI) || !tool.get_sharpness())
+ return NONE
+ balloon_alert(user, "trimming...")
+ if(!do_after(user, 3 SECONDS, target=src))
+ return ITEM_INTERACT_BLOCKING
+ opacity = FALSE
+ return ITEM_INTERACT_SUCCESS
+
/**
* useful for mazes and such
*/
diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm
index c57111b86d0c..a9be7fc2c2f8 100644
--- a/code/modules/hydroponics/grown/potato.dm
+++ b/code/modules/hydroponics/grown/potato.dm
@@ -37,7 +37,7 @@
icon_state = "potato_wedges"
bite_consumption_mod = 100
-/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, params)
+/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.get_sharpness())
to_chat(user, span_notice("You cut the potato into wedges with [W]."))
var/obj/item/food/grown/potato/wedges/Wedges = new /obj/item/food/grown/potato/wedges
diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm
index edfa985b4b1d..256abeced65b 100644
--- a/code/modules/hydroponics/grown/pumpkin.dm
+++ b/code/modules/hydroponics/grown/pumpkin.dm
@@ -29,7 +29,7 @@
///Which type of lantern this gourd produces when carved.
var/carved_type = /obj/item/clothing/head/utility/hardhat/pumpkinhead
-/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params)
+/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, list/modifiers, list/attack_modifiers)
if(W.get_sharpness())
user.show_message(span_notice("You carve a face into [src]!"), MSG_VISUAL)
new carved_type(user.loc)
diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm
index 6162f9ad1d11..de3b8cf956c2 100644
--- a/code/modules/hydroponics/grown/root.dm
+++ b/code/modules/hydroponics/grown/root.dm
@@ -25,7 +25,7 @@
juice_typepath = /datum/reagent/consumable/carrotjuice
wine_power = 30
-/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params)
+/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.get_sharpness())
var/carrot_blade
var/carrot_sword_chance = (max(0, seed.potency - 50) / 50)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 6d9f70b5f539..53eebcf4f874 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -81,7 +81,7 @@
return NONE
-/obj/item/grown/log/attackby(obj/item/W, mob/user, params)
+/obj/item/grown/log/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.get_sharpness())
user.show_message(span_notice("You make [plank_name] out of \the [src]!"), MSG_VISUAL)
var/seed_modifier = 0
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index 873576917296..cfe7eb0c8383 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -194,7 +194,7 @@
playsound(src, SFX_DESECRATION ,50, TRUE, -1)
return BRUTELOSS
-/obj/item/scythe/pre_attack(atom/target, mob/living/user, params)
+/obj/item/scythe/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(target, /obj/structure/alien/resin/flower_bud) && !istype(target, /obj/structure/spacevine))
return ..()
if(swiping || get_turf(target) == get_turf(user))
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 866201894060..7579a879be79 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -207,7 +207,7 @@
if(!QDELETED(src) && gone == myseed)
set_seed(null, FALSE)
-/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if (!user.combat_mode)
// handle opening the panel
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
@@ -856,7 +856,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params)
+/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
//Called when mob user "attacks" it with object O
if(IS_EDIBLE(O) || is_reagent_container(O)) // Syringe stuff (and other reagent containers now too)
var/obj/item/reagent_containers/reagent_source = O
@@ -1078,7 +1078,7 @@
else
return ..()
-/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if (istype(weapon, /obj/item/reagent_containers/syringe))
to_chat(user, span_warning("You can't get any extract out of this plant."))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -1200,7 +1200,7 @@
/obj/machinery/hydroponics/soil/update_status_light_overlays()
return // Has no lights
-/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(weapon.tool_behaviour != TOOL_SHOVEL) //Spades can still uproot plants on left click
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
balloon_alert(user, "clearing up soil...")
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index a78c7142e4fc..ab74f9aebeb0 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -94,7 +94,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(!isliving(user) || user.combat_mode)
return ..()
@@ -126,7 +126,7 @@
var/list/generated_seeds = seedify(attacking_item, -1, src, user)
if(!isnull(generated_seeds))
- if(LAZYACCESS(params2list(params), RIGHT_CLICK))
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
//find all seeds lying on the turf and add them to the machine
for(var/obj/item/seeds/seed as anything in generated_seeds)
//machine is full
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 680bab3660d2..1b75baf77ebd 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -475,7 +475,7 @@
/obj/item/seeds/proc/on_chem_reaction(datum/reagents/reagents)
return
-/obj/item/seeds/attackby(obj/item/O, mob/user, params)
+/obj/item/seeds/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(O))
var/choice = tgui_input_list(usr, "What would you like to change?", "Seed Alteration", list("Plant Name", "Seed Description", "Product Description"))
if(isnull(choice))
diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm
index acc7ce6aefc6..93b97aa60c69 100644
--- a/code/modules/hydroponics/unique_plant_genes.dm
+++ b/code/modules/hydroponics/unique_plant_genes.dm
@@ -76,7 +76,7 @@
return
/// Signal proc for [COMSIG_ITEM_AFTERATTACK] that allows for effects after an attack is done
-/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, click_parameters)
+/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
INVOKE_ASYNC(src, PROC_REF(after_attack_effect), source, target, user)
@@ -129,7 +129,7 @@
name = "Bright Petals"
description = "Makes others feel the power on hit."
-/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, proximity_flag, click_parameters)
+/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, list/modifiers)
if(ismob(target))
var/mob/target_mob = target
user.visible_message("[user] smacks [target_mob] with [user.p_their()] [our_plant.name]! FLOWER POWER!", ignored_mobs = list(target_mob, user))
diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm
index 38ace109729c..2f512867639b 100644
--- a/code/modules/instruments/items.dm
+++ b/code/modules/instruments/items.dm
@@ -124,7 +124,7 @@
. = ..()
AddElement(/datum/element/spooky)
-/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
return ..()
@@ -148,7 +148,7 @@
. = ..()
AddElement(/datum/element/spooky)
-/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
return ..()
@@ -172,7 +172,7 @@
. = ..()
AddElement(/datum/element/spooky)
-/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
playsound(src, 'sound/runtime/instruments/trombone/Cn4.mid', 1000, 1, -1)
return ..()
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
index dbe6c65a0312..76da9ef69a44 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
@@ -85,7 +85,7 @@
user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!"))
return (BRUTELOSS|FIRELOSS)
-/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
if(!user.mind?.holy_role)
return ..()
if(!IS_CULTIST(target_mob) || istype(target_mob, /mob/living/carbon/human/cult_ghost))
@@ -241,11 +241,9 @@
force = 15
menu_description = "An odd sharp blade which provides a low chance of blocking incoming melee attacks and deals a random amount of damage, which can range from almost nothing to very high. Can be worn on the back."
-/obj/item/nullrod/claymore/multiverse/melee_attack_chain(mob/user, atom/target, params)
- var/old_force = force
- force += rand(-14, 15)
- . = ..()
- force = old_force
+/obj/item/nullrod/claymore/multiverse/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
+ SET_ATTACK_FORCE(attack_modifiers, rand(max(force - 15, 1), force + 15))
+ return ..()
/obj/item/nullrod/claymore/saber
name = "light energy sword"
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
index e5d1fd1fe5e5..bd7242689506 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
@@ -94,7 +94,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and
)
AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE) //less good at killing revenants, much better at killing plants
-/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, params)
+/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(ismonkey(target) && !target.mind) //Don't empower from hitting monkeys. Hit a corgi or something, I don't know.
return ..()
diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm
index 6f4f8bec500d..0bec2f42fe4f 100644
--- a/code/modules/library/book.dm
+++ b/code/modules/library/book.dm
@@ -98,7 +98,7 @@
user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently."))
display_content(user)
-/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(attacking_item))
if(!user.can_perform_action(src) || !user.can_write(attacking_item))
return
@@ -179,7 +179,7 @@
user.balloon_alert(user, "book added to inventory")
playsound(loc, 'sound/items/barcodebeep.ogg', 20, FALSE)
- else if(try_carve(attacking_item, user, params))
+ else if(try_carve(attacking_item, user, modifiers))
return
return ..()
@@ -188,7 +188,7 @@
icon_state = "book[rand(1, maximum_book_state)]"
/// Called when user attempts to carve the book with an item
-/obj/item/book/proc/try_carve(obj/item/carving_item, mob/living/user, params)
+/obj/item/book/proc/try_carve(obj/item/carving_item, mob/living/user, list/modifiers)
if(carved)
return FALSE
if(!user.combat_mode)
diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm
index 004db281c75c..762985a69594 100644
--- a/code/modules/library/bookcase.dm
+++ b/code/modules/library/bookcase.dm
@@ -94,7 +94,7 @@
I.forceMove(Tsec)
update_appearance()
-/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(state == BOOKCASE_UNANCHORED)
if(attacking_item.tool_behaviour == TOOL_WRENCH)
if(attacking_item.use_tool(src, user, 20, volume=50))
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index d03247b85da2..5842d6c47a8e 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -539,7 +539,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
set_screen_state(MIN_LIBRARY)
return TRUE
-/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(weapon, /obj/item/barcodescanner))
return ..()
var/obj/item/barcodescanner/scanner = weapon
@@ -705,7 +705,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
cache = null
return ..()
-/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, params)
+/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, list/modifiers, list/attack_modifiers)
if(istype(hitby, /obj/item/book))
user.transferItemToLoc(hitby, src)
if(held_book)
@@ -786,7 +786,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
if(default_deconstruction_crowbar(tool))
return ITEM_INTERACT_SUCCESS
-/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params)
+/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, list/modifiers, list/attack_modifiers)
if(istype(hitby, /obj/item/paper))
prebind_book(user, hitby)
return TRUE
diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm
index 8fc982280348..b55d67996936 100644
--- a/code/modules/library/skill_learning/skill_station.dm
+++ b/code/modules/library/skill_learning/skill_station.dm
@@ -83,7 +83,7 @@
else
toggle_open()
-/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I,/obj/item/skillchip))
if(inserted_skillchip)
to_chat(user,span_notice("There's already a skillchip inside."))
diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm
index 6b5690de6338..18db493cf845 100644
--- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm
+++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm
@@ -40,7 +40,7 @@
/// Type of shell to create
var/shell_type = /obj/effect/mob_spawn/ghost_role/human/golem
-/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, params)
+/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!isstack(potential_food))
balloon_alert(user, "not a mineral!")
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
index 2a4f908d2c1b..7f4b417bd270 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -105,7 +105,7 @@
reagents.expose(user, TOUCH, 20) //Covers target in 20u of oil.
to_chat(user, span_notice("You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water."))
-/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, params)
+/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers)
flick("puddle-oil-splash",src)
if(O.tool_behaviour == TOOL_SHOVEL) //attempt to deconstruct the puddle with a shovel
to_chat(user, "You fill in the oil well with soil.")
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
index 172c0e2f9e5c..3ff54df736c4 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
@@ -49,7 +49,7 @@
warning_channel = "Syndicate"
include_in_cims = FALSE
-/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, params)
+/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/scalpel/supermatter)) //You can already yoink the docs as a free objective win, another would be just gross
to_chat(user, span_danger("This shard's already in Syndicate custody, taking it again could cause more harm than good."))
return
diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm
index 15566603a932..2025c7614d71 100644
--- a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm
@@ -36,7 +36,7 @@
w_class = WEIGHT_CLASS_NORMAL
hitsound = 'sound/weapons/bladeslice.ogg'
-/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, click_parameters)
+/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
if(!istype(user) || !ishuman(target))
return
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
index b65b32044c31..15e644cd1392 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
@@ -98,7 +98,7 @@
. = ..()
stored_organ = pick_weight(allowed_organs)
-/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if (attacking_item.sharpness & SHARP_EDGED)
cut_open(user)
return
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm
index 8a002f4a8186..7d285f4069d7 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm
@@ -23,7 +23,7 @@
. += span_notice("Insert [EXAMINE_HINT("Research Notes")] to generate points.")
-/obj/machinery/rnd/server/oldstation/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/rnd/server/oldstation/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
if(istype(tool, /obj/item/research_notes) && stored_research)
var/obj/item/research_notes/research_notes = tool
stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value))
diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm
index 28088535c74e..ff60b4a41402 100644
--- a/code/modules/meteors/meteor_types.dm
+++ b/code/modules/meteors/meteor_types.dm
@@ -116,7 +116,7 @@
check_examine_award(user)
-/obj/effect/meteor/attackby(obj/item/I, mob/user, params)
+/obj/effect/meteor/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_MINING)
make_debris()
qdel(src)
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index c33181dd8068..5a50bc540628 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list(
/obj/structure/marker_beacon/attack_tk(mob/user)
return
-/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, params)
+/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/stack/marker_beacon))
var/obj/item/stack/marker_beacon/M = I
to_chat(user, span_notice("You start picking [src] up..."))
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index 99b27e15ca8a..1a7f8664d709 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -42,7 +42,7 @@
new /obj/effect/temp_visual/resonance(target_turf, user, src, mode, adding_failure)
user.changeNext_move(CLICK_CD_MELEE)
-/obj/item/resonator/pre_attack(atom/target, mob/user, params)
+/obj/item/resonator/pre_attack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(check_allowed_items(target, not_inside = TRUE))
create_resonance(target, user)
return ..()
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 8a7ffeec88f6..d578116e6b95 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -180,7 +180,7 @@ GLOBAL_LIST(labor_sheet_values)
return
user.examinate(src)
-/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(weapon, /obj/item/card/id/advanced/prisoner))
return ..()
var/obj/item/card/id/advanced/prisoner/prisoner_id = weapon
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 94a4df2591de..1ab04396d938 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -15,7 +15,7 @@
/// var to check if it got opened by a key
var/spawned_loot = FALSE
-/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, params)
+/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(item, /obj/item/skeleton_key) || spawned_loot)
return ..()
var/loot = rand(1,21)
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 9e44b3e8ea60..0ab13f399fe1 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -282,7 +282,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
/obj/item/gibtonite/IsSpecialAssembly()
return TRUE
-/obj/item/gibtonite/attackby(obj/item/I, mob/user, params)
+/obj/item/gibtonite/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/assembly_holder) && !rig)
var/obj/item/assembly_holder/holder = I
if(!(locate(/obj/item/assembly/igniter) in holder.assemblies))
@@ -477,7 +477,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
. = ..()
. += span_info("It's worth [value] credit\s.")
-/obj/item/coin/attackby(obj/item/W, mob/user, params)
+/obj/item/coin/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
if(string_attached)
diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm
index e6995cb74cce..0ef3d87d3b92 100644
--- a/code/modules/mob/living/basic/bots/_bots.dm
+++ b/code/modules/mob/living/basic/bots/_bots.dm
@@ -427,7 +427,7 @@ GLOBAL_LIST_INIT(command_strings, list(
heal_overall_damage(10)
user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src]."))
-/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(attacking_item.GetID())
unlock_with_id(user)
return
diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm
index e99a6092e44e..4cf055ee606f 100644
--- a/code/modules/mob/living/basic/clown/clown.dm
+++ b/code/modules/mob/living/basic/clown/clown.dm
@@ -408,20 +408,16 @@
AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/cheesiehonkers, /obj/item/food/cornchips), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed)))
AddElement(/datum/element/damage_threshold, 10) //lots of fat to cushion blows.
-/mob/living/basic/clown/mutant/glutton/attacked_by(obj/item/item, mob/living/user)
- if(!check_edible(item))
+/mob/living/basic/clown/mutant/glutton/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!check_edible(tool))
+ return NONE
+ eat_atom(tool)
+ return ITEM_INTERACT_SUCCESS
+
+/mob/living/basic/clown/mutant/glutton/resolve_unarmed_attack(atom/attack_target, list/modifiers)
+ if(!check_edible(attack_target))
return ..()
- eat_atom(item)
-
-/mob/living/basic/clown/mutant/glutton/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE)
- if(!check_edible(target))
- return ..()
- eat_atom(target)
-
-/mob/living/basic/clown/mutant/glutton/UnarmedAttack(atom/victim, proximity_flag, list/modifiers)
- if(!check_edible(victim))
- return ..()
- eat_atom(victim)
+ eat_atom(attack_target)
///Returns whether or not the supplied movable atom is edible.
/mob/living/basic/clown/mutant/glutton/proc/check_edible(atom/movable/potential_food)
diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm
index ca9b735c1bd0..d5f5b7c6655b 100644
--- a/code/modules/mob/living/basic/cult/shade.dm
+++ b/code/modules/mob/living/basic/cult/shade.dm
@@ -71,7 +71,7 @@
SSblackbox.record_feedback("tally", "cult_shade_suicided", 1)
..()
-/mob/living/basic/shade/attackby(obj/item/item, mob/user, params)
+/mob/living/basic/shade/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/soulstone))
var/obj/item/soulstone/stone = item
stone.capture_shade(src, user)
diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm
index 0f0b7f9ad59b..c6f41f522a92 100644
--- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm
+++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm
@@ -140,7 +140,7 @@
combatant_state = state
update_appearance()
-/mob/living/basic/seedling/attackby(obj/item/can, mob/living/carbon/human/user, list/modifiers)
+/mob/living/basic/seedling/attackby(obj/item/can, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
if(istype(can, /obj/item/reagent_containers/cup/watering_can) && isnull(held_can))
can.forceMove(src)
return
diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm
index 854afafef7c2..4b7ecb8f980d 100644
--- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm
+++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm
@@ -59,14 +59,14 @@
damage_amount = 0
. = ..()
-/obj/structure/alien/resin/flower_bud/attacked_by(obj/item/item, mob/living/user)
- var/damage_dealt = item.force
+/obj/structure/alien/resin/flower_bud/attacked_by(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
+ LAZYSET(attack_modifiers, SILENCE_DEFAULT_MESSAGES, TRUE)
+ LAZYSET(attack_modifiers, FORCE_MULTIPLIER, 1)
if(item.damtype == BURN)
- damage_dealt *= 4
+ MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4)
if(item.get_sharpness())
- damage_dealt *= 16 // alien resin applies 75% reduction to brute damage so this actually x4 damage
-
- take_damage(damage_dealt, item.damtype, MELEE, 1)
+ MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 16) // alien resin applies 75% reduction to brute damage so this actually x4 damage
+ return ..()
/obj/structure/alien/resin/flower_bud/Destroy()
QDEL_LIST(vines)
diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
index ca3f2f464333..69a8d105f961 100644
--- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
+++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
@@ -108,7 +108,7 @@
if (tentacles.cooldown_time > 1 SECONDS)
tentacles.cooldown_time -= 1 SECONDS
-/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if (!istype(attacking_item, /obj/item/goliath_saddle))
return ..()
if (!tameable)
diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
index ff0e6a74f964..356d9a49fedc 100644
--- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
+++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
@@ -56,7 +56,7 @@
stage = 0
elapsed_time = 0
-/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, params)
+/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
if (try_apply(target, user))
qdel(src)
return
diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm
index 33c3fbc3cd09..2cb5cc44aa9a 100644
--- a/code/modules/mob/living/basic/minebots/minebot.dm
+++ b/code/modules/mob/living/basic/minebots/minebot.dm
@@ -113,9 +113,9 @@
user.balloon_alert(user, "successfully repaired!")
return TRUE
-/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, params)
+/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers)
if(item_used.tool_behaviour == TOOL_CROWBAR || istype(item_used, /obj/item/borg/upgrade/modkit))
- item_used.melee_attack_chain(user, stored_gun, params)
+ item_used.melee_attack_chain(user, stored_gun, modifiers)
return
return ..()
diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm
index 1eca84ded3aa..15e4b58d959e 100644
--- a/code/modules/mob/living/basic/pets/dog/_dog.dm
+++ b/code/modules/mob/living/basic/pets/dog/_dog.dm
@@ -85,7 +85,7 @@
attack_verb_continuous = list("attacks", "bashes", "batters", "bludgeons", "whacks")
attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack")
-/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, params)
+/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if (!isdog(target) || user.combat_mode)
return ..()
var/mob/living/basic/pet/dog/dog_target = target
diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm
index 3789804a16fd..c8a47bf9e21d 100644
--- a/code/modules/mob/living/basic/pets/dog/corgi.dm
+++ b/code/modules/mob/living/basic/pets/dog/corgi.dm
@@ -104,7 +104,7 @@
armorval += inventory_back.get_armor_rating(type)
return armorval * 0.5
-/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, params)
+/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/razor))
if(shaved)
to_chat(user, span_warning("You can't shave this corgi, [p_they()] has already been shaved!"))
diff --git a/code/modules/mob/living/basic/pets/parrot/_parrot.dm b/code/modules/mob/living/basic/pets/parrot/_parrot.dm
index 27445157c431..071222b6d466 100644
--- a/code/modules/mob/living/basic/pets/parrot/_parrot.dm
+++ b/code/modules/mob/living/basic/pets/parrot/_parrot.dm
@@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
return FALSE
/// If we're right-clicked on with a cracker, we eat the cracker.
-/mob/living/basic/parrot/proc/on_attacked(mob/living/basic/source, obj/item/thing, mob/living/attacker, params)
+/mob/living/basic/parrot/proc/on_attacked(mob/living/basic/source, obj/item/thing, mob/living/attacker, list/modifiers)
SIGNAL_HANDLER
if(!istype(thing, /obj/item/food/cracker)) // Poly wants a cracker
return
diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm
index 657f66fe8718..29b4abdbd9d5 100644
--- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm
+++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm
@@ -80,7 +80,7 @@
/mob/living/basic/living_floor/med_hud_set_status()
return
-/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, params)
+/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(weapon.tool_behaviour != TOOL_CROWBAR)
return ..()
balloon_alert(user, "prying...")
diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
index b952b53b5f9a..3040b0143506 100644
--- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
+++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
@@ -76,7 +76,7 @@
qdel(attack_target)
return TRUE
-/mob/living/basic/eyeball/attackby(obj/item/weapon, mob/living/carbon/human/user, list/modifiers)
+/mob/living/basic/eyeball/attackby(obj/item/weapon, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!weapon.force && !user.combat_mode)
return
diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm
index b2e655a5c5f1..fcd0468d2631 100644
--- a/code/modules/mob/living/basic/space_fauna/mushroom.dm
+++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm
@@ -161,7 +161,7 @@
melee_damage_upper += (level_gain * rand(1,5))
maxHealth += (level_gain * rand(1,5))
-/mob/living/basic/mushroom/attackby(obj/item/mush, mob/living/carbon/human/user, list/modifiers)
+/mob/living/basic/mushroom/attackby(obj/item/mush, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers)
if(istype(mush, /obj/item/food/grown/mushroom))
recover(mush)
return
diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach.dm
index 4c06665a14af..43e987ce1b0d 100644
--- a/code/modules/mob/living/basic/vermin/mothroach.dm
+++ b/code/modules/mob/living/basic/vermin/mothroach.dm
@@ -57,7 +57,7 @@
else
playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE)
-/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(src.stat == DEAD)
return
diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm
index 010cba1b9309..80ae60978654 100644
--- a/code/modules/mob/living/basic/vermin/mouse.dm
+++ b/code/modules/mob/living/basic/vermin/mouse.dm
@@ -334,7 +334,7 @@
qdel(src)
return LAZARUS_INJECTOR_USED
-/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/mob/living/living_user = user
if(istype(living_user) && attacking_item.get_sharpness() && living_user.combat_mode)
if(!isturf(loc))
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index c0bf48b1dc95..f14e0c7e3b1d 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -49,7 +49,7 @@
if(brain)
. += "mmi_dead"
-/obj/item/mmi/attackby(obj/item/O, mob/user, params)
+/obj/item/mmi/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index da13953c0cb5..5a8f25431fa8 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -166,7 +166,7 @@
L.mind.transfer_to(brainmob)
to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain."))
-/obj/item/organ/brain/attackby(obj/item/item, mob/user, params)
+/obj/item/organ/brain/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(item, /obj/item/borg/apparatus/organ_storage))
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index 4959321ebdd9..32fa3281ab49 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -212,7 +212,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
icon_state = "[base_icon_state]"
return
-/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, params)
+/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/item/mmi/posibrain/add_mmi_overlay()
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 1ac136bbf89f..4806c4f87c73 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -49,8 +49,8 @@
if(atom_integrity < 90)
Die()
-/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params)
- return O.attack_atom(src, user, params)
+/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
+ return O.attack_atom(src, user, modifiers)
/obj/item/clothing/mask/facehugger/proc/react_to_mob(datum/source, mob/user)
SIGNAL_HANDLER
diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
index 96694fd090b6..89345bb6d887 100644
--- a/code/modules/mob/living/inhand_holder.dm
+++ b/code/modules/mob/living/inhand_holder.dm
@@ -133,3 +133,15 @@
if(delete_mob && held_mob)
QDEL_NULL(held_mob)
return ..()
+
+/obj/item/clothing/head/mob_holder/attack_self(mob/user, modifiers)
+ . = ..()
+ if(. || !held_mob) //overriden or mob missing
+ return
+ user.UnarmedAttack(held_mob, proximity_flag = TRUE, modifiers = modifiers)
+
+/obj/item/clothing/head/mob_holder/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ . = ..()
+ if(. || !held_mob) // Another interaction was performed
+ return
+ tool.melee_attack_chain(user, held_mob, modifiers) //Interact with the mob with our tool
diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm
index 1148b639d011..bede86590c14 100644
--- a/code/modules/mob/living/silicon/ai/ai_defense.dm
+++ b/code/modules/mob/living/silicon/ai/ai_defense.dm
@@ -1,5 +1,5 @@
-/mob/living/silicon/ai/attackby(obj/item/W, mob/user, params)
+/mob/living/silicon/ai/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/ai_module))
var/obj/item/ai_module/MOD = W
if(!mind) //A player mind is required for law procs to run antag checks.
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 59acc8b952b1..f2291c110484 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -473,7 +473,7 @@
user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src]."))
return ITEM_INTERACT_SUCCESS
-/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(attacking_item.GetID())
unlock_with_id(user)
return
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index d1287db9c00b..52230f3c3bcc 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -10,7 +10,7 @@
var/build_step = ASSEMBLY_FIRST_STEP
var/robot_arm = /obj/item/bodypart/arm/right/robot
-/obj/item/bot_assembly/attackby(obj/item/I, mob/user, params)
+/obj/item/bot_assembly/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
..()
if(IS_WRITING_UTENSIL(I))
rename_bot()
@@ -73,7 +73,7 @@
return ..()
-/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, params)
+/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, list/modifiers, list/attack_modifiers)
..()
if(!istype(item_attached, /obj/item/bodypart/arm/left/robot) && !istype(item_attached, /obj/item/bodypart/arm/right/robot))
return
@@ -98,7 +98,7 @@
var/lasercolor = ""
var/vest_type = /obj/item/clothing/suit/armor/vest
-/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, params)
+/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP, ASSEMBLY_SECOND_STEP)
@@ -228,7 +228,7 @@
if(ASSEMBLY_SECOND_STEP)
icon_state = "[toolbox_color]toolbox_tiles_sensor"
-/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, params)
+/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
@@ -268,7 +268,7 @@
if(skin)
icon_state = "[base_icon_state]_[skin]" // NON-MODULE CHANGE
-/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, params)
+/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
@@ -305,7 +305,7 @@
icon_state = "honkbot_arm"
created_name = "Honkbot"
-/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
@@ -344,7 +344,7 @@
var/swordamt = 0 //If you're converting it into a grievousbot, how many swords have you attached
var/toyswordamt = 0 //honk
-/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, params)
+/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
..()
var/atom/Tsec = drop_location()
switch(build_step)
@@ -478,7 +478,7 @@
icon_state = "firebot_arm"
created_name = "Firebot"
-/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params)
+/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
@@ -508,7 +508,7 @@
icon_state = "hygienebot"
created_name = "Hygienebot"
-/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, params)
+/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
var/atom/Tsec = drop_location()
switch(build_step)
@@ -563,7 +563,7 @@
icon_state = "vim_0"
created_name = "\improper Vim"
-/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, params)
+/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 81144a20ab47..b979f8ee1985 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -177,7 +177,7 @@
diag_hud_set_mulebotcell()
return ITEM_INTERACT_SUCCESS
-/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, params)
+/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/stock_parts/power_store/cell) && bot_cover_flags & BOT_COVER_OPEN)
if(cell)
to_chat(user, span_warning("[src] already has a power cell!"))
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index fe35ca424e88..ebea7f12a239 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -252,7 +252,7 @@
return ..()
-/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, params)
+/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
..()
if(!(bot_mode_flags & BOT_MODE_ON)) // Bots won't remember if you hit them while they're off.
return
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index ae48ae4a1577..cdd33ecc5f7e 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -152,7 +152,7 @@ Difficulty: Hard
* * mob/user The user of the item
* * params, extra parameters
*/
-/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, params)
+/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(W, /obj/item/organ/tongue))
user.client?.give_award(/datum/award/achievement/jobs/frenching, user)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index 44a902acc4d1..c1612866ae43 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -749,7 +749,7 @@ Difficulty: Hard
layer = LOW_OBJ_LAYER
anchored = TRUE
-/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, params)
+/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/hierophant_club))
var/obj/item/hierophant_club/club = attacking_item
if(club.beacon == src)
diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm
index 1b3cbb8c164a..98d3177383b0 100644
--- a/code/modules/mob/living/simple_animal/hostile/ooze.dm
+++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm
@@ -44,13 +44,15 @@
grant_actions_by_list(get_innate_actions())
-/mob/living/simple_animal/hostile/ooze/attacked_by(obj/item/I, mob/living/user)
- if(!eat_atom(I, TRUE))
- return ..()
+/mob/living/simple_animal/hostile/ooze/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(eat_atom(tool, TRUE))
+ return ITEM_INTERACT_SUCCESS
+ return ..()
-/mob/living/simple_animal/hostile/ooze/AttackingTarget(atom/attacked_target)
- if(!eat_atom(attacked_target))
- return ..()
+/mob/living/simple_animal/hostile/ooze/resolve_unarmed_attack(atom/attack_target, list/modifiers)
+ if(eat_atom(attack_target))
+ return ITEM_INTERACT_SUCCESS
+ return ..()
///Handles nutrition gain/loss of mob and also makes it take damage if it's too low on nutrition, only happens for sentient mobs.
/mob/living/simple_animal/hostile/ooze/Life(seconds_per_tick = SSMOBS_DT, times_fired)
@@ -86,12 +88,13 @@
///Tries to transfer the atoms reagents then delete it
/mob/living/simple_animal/hostile/ooze/proc/eat_atom(atom/eat_target, silent)
if(isnull(eat_target))
- return
+ return FALSE
if(SEND_SIGNAL(eat_target, COMSIG_OOZE_EAT_ATOM, src, edible_food_types) & COMPONENT_ATOM_EATEN)
- return
+ return TRUE
if(silent || !isitem(eat_target)) //Don't bother reporting it for everything
- return
+ return FALSE
to_chat(src, span_warning("[eat_target] cannot be eaten!"))
+ return FALSE
///Updates the display that shows the mobs nutrition
/mob/living/simple_animal/hostile/ooze/proc/updateNutritionDisplay()
diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm
index 3581c04e606a..fd41c1c7f304 100644
--- a/code/modules/mod/mod_construction.dm
+++ b/code/modules/mod/mod_construction.dm
@@ -67,7 +67,7 @@
. = ..()
. += span_notice("You could probably attach some wires to it...")
-/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, params)
+/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(weapon, /obj/item/stack/cable_coil))
return ..()
if(!weapon.tool_start_check(user, amount=2))
@@ -155,7 +155,7 @@
display_text = "All it's missing is external plating..."
. += span_notice(display_text)
-/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, params)
+/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
switch(step)
if(START_STEP)
diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm
index 1aad85c04a50..fe85048a9da0 100644
--- a/code/modules/mod/mod_link.dm
+++ b/code/modules/mod/mod_link.dm
@@ -205,7 +205,7 @@
return
cell.use(0.02 * STANDARD_CELL_RATE * seconds_per_tick, force = TRUE)
-/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params)
+/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(cell || !istype(attacked_by, /obj/item/stock_parts/power_store/cell))
return
diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm
index eb3aabcb38d1..afa811e3e5b9 100644
--- a/code/modules/mod/modules/_module.dm
+++ b/code/modules/mod/modules/_module.dm
@@ -510,7 +510,7 @@
return FALSE
return TRUE
-/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, params)
+/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(item.type in accepted_anomalies)
if(core)
balloon_alert(user, "core already in!")
diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm
index f33088db5a86..9f1cec7e9fab 100644
--- a/code/modules/mod/modules/module_pathfinder.dm
+++ b/code/modules/mod/modules/module_pathfinder.dm
@@ -43,7 +43,7 @@
else
. += span_warning("The implant is missing.")
-/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, params)
+/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!ishuman(target) || !implant)
return
if(!do_after(user, 1.5 SECONDS, target = target))
diff --git a/code/modules/modular_computers/computers/item/disks/virus_disk.dm b/code/modules/modular_computers/computers/item/disks/virus_disk.dm
index 28ceb2da54a1..585e7d315587 100644
--- a/code/modules/modular_computers/computers/item/disks/virus_disk.dm
+++ b/code/modules/modular_computers/computers/item/disks/virus_disk.dm
@@ -109,7 +109,7 @@
///How much progression should be shown in the uplink, set on purchase of the item.
var/current_progression = 0
-/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(attacking_item, /obj/item/stack/telecrystal))
return
diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm
index 7d85432739f0..1ba0f25b3ff4 100644
--- a/code/modules/modular_computers/computers/item/pda.dm
+++ b/code/modules/modular_computers/computers/item/pda.dm
@@ -107,7 +107,7 @@
return ..()
-/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, params)
+/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(!inserted_disk || !ismachinery(target))
return ..()
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 48cbc57d7455..3d7aaed374f5 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -157,8 +157,8 @@
/obj/machinery/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.item_interaction(user, tool, modifiers) : ..()
-/obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user)
- return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user) : ..()
+/obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
+ return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user, modifiers, attack_modifiers) : ..()
// Stronger explosions cause serious damage to internal components
// Minor explosions are mostly mitigitated by casing.
diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm
index f94efa85a9b0..d5ac23f5a324 100644
--- a/code/modules/pai/card.dm
+++ b/code/modules/pai/card.dm
@@ -30,12 +30,12 @@
SSpai.pai_card_list += src
ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT)
-/obj/item/pai_card/attackby(obj/item/used, mob/user, params)
+/obj/item/pai_card/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers)
if(pai && istype(used, /obj/item/encryptionkey))
if(!pai.encrypt_mod)
to_chat(user, span_alert("Encryption Key ports not configured."))
return
- pai.radio.attackby(used, user, params)
+ pai.radio.attackby(used, user, modifiers)
to_chat(user, span_notice("You insert [used] into the [src]."))
return
return ..()
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index a952ba6b178f..37435e1264a4 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -113,7 +113,7 @@
return TRUE
. = ..()
-/obj/item/clipboard/attackby(obj/item/weapon, mob/user, params)
+/obj/item/clipboard/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
if(istype(weapon, /obj/item/paper))
//Add paper into the clipboard
diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm
index f4ecd27a01bf..8b760bd8d7eb 100644
--- a/code/modules/paperwork/desk_bell.dm
+++ b/code/modules/paperwork/desk_bell.dm
@@ -59,7 +59,7 @@
/obj/structure/desk_bell/attack_paw(mob/user, list/modifiers)
return attack_hand(user, modifiers)
-/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, params)
+/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
times_rang += weapon.force
ring_bell(user)
diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm
index db069717768c..afa3448c64e3 100644
--- a/code/modules/paperwork/fax.dm
+++ b/code/modules/paperwork/fax.dm
@@ -152,7 +152,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department
fax_name = new_fax_name
return ITEM_INTERACT_SUCCESS
-/obj/machinery/fax/attackby(obj/item/item, mob/user, params)
+/obj/machinery/fax/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if (jammed && clear_jam(item, user))
return
if (panel_open)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 05c8001375d1..1e229217f7ac 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -42,8 +42,7 @@
for(var/obj/item/obj in src)
obj.forceMove(loc)
-/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, params)
- var/list/modifiers = params2list(params)
+/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, list/modifiers, list/attack_modifiers)
if(P.tool_behaviour == TOOL_WRENCH && LAZYACCESS(modifiers, RIGHT_CLICK))
to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src]."))
if(P.use_tool(src, user, 20, volume=50))
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 3bda5754fa84..f4d7daadca73 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -81,7 +81,7 @@
paper_overlay = contents[1].color_atom_overlay(paper_overlay)
return paper_overlay
-/obj/item/folder/attackby(obj/item/weapon, mob/user, params)
+/obj/item/folder/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(is_type_in_typecache(weapon, folder_insertables))
//Add paper, photo or documents into the folder
if(!user.transferItemToLoc(weapon, src))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 9828633fc2e5..a5517034573a 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -417,7 +417,7 @@
user.put_in_hands(new_plane)
return new_plane
-/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
// Enable picking paper up by clicking on it with the clipboard or folder
if(istype(attacking_item, /obj/item/clipboard) || istype(attacking_item, /obj/item/folder) || istype(attacking_item, /obj/item/paper_bin))
attacking_item.attackby(src, user)
diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm
index 5d77fd424894..e0ee61e69e79 100644
--- a/code/modules/paperwork/paper_biscuit.dm
+++ b/code/modules/paperwork/paper_biscuit.dm
@@ -73,7 +73,7 @@
return ..()
-/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, params)
+/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if (is_type_in_typecache(weapon, folder_insertables) && !crack_check(user))
return
diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm
index 0a6edf893be3..b0b7bb2d4294 100644
--- a/code/modules/paperwork/paper_cutter.dm
+++ b/code/modules/paperwork/paper_cutter.dm
@@ -110,7 +110,7 @@
blade_secured = !blade_secured
return ITEM_INTERACT_SUCCESS
-/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, params)
+/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(inserted_item, /obj/item/paper))
if(is_type_in_list(inserted_item, list(
/obj/item/paper/fake_report,
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 6764f6747b6d..40824b1ba77c 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -116,7 +116,7 @@
add_fingerprint(user)
return ..()
-/obj/item/paper_bin/attackby(obj/item/I, mob/user, params)
+/obj/item/paper_bin/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(at_overlay_limit())
dump_contents(drop_location(), TRUE)
return
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 4183b3829995..c746e5d56bdc 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -80,7 +80,7 @@
user.put_in_hands(released_paper)
-/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(attacking_item))
to_chat(user, span_warning("You should unfold [src] before changing it!"))
return
diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm
index 03f22177f9e7..94a121556f97 100644
--- a/code/modules/paperwork/paperwork.dm
+++ b/code/modules/paperwork/paperwork.dm
@@ -39,7 +39,7 @@
detailed_desc = span_notice("As you sift through the papers, you slowly start to piece together what you're reading.")
-/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
@@ -234,7 +234,7 @@
else
. += span_notice("These appear to just be a photocopy of the original documents.")
-/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/stamp/void) && !stamped && !voided)
to_chat(user, span_notice("You plant the [attacking_item] firmly onto the front of the documents."))
stamp_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paper_stamp-void")
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 70dd11839741..e4715058cd19 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -244,7 +244,7 @@
SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user)
return CLICK_ACTION_SUCCESS
-/obj/item/pen/attack(mob/living/M, mob/user, params)
+/obj/item/pen/attack(mob/living/M, mob/user, list/modifiers, list/attack_modifiers)
if(force) // If the pen has a force value, call the normal attack procs. Used for e-daggers and captain's pen mostly.
return ..()
if(!M.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))
@@ -268,7 +268,7 @@
* Sleepypens
*/
-/obj/item/pen/sleepy/attack(mob/living/M, mob/user, params)
+/obj/item/pen/sleepy/attack(mob/living/M, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!.)
return
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 88e2c27e13f9..891fe49f0aaa 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -675,7 +675,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks())
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/photocopier/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/photocopier/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers)
// No infinite paper chain. You need the original paperwork to make more copies.
if(istype(tool, /obj/item/paperwork/photocopy))
balloon_alert(user, "too blurry!")
diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm
index b3d925fcf189..7f5f5bcd7071 100644
--- a/code/modules/paperwork/ticketmachine.dm
+++ b/code/modules/paperwork/ticketmachine.dm
@@ -177,7 +177,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32)
maptext_x = 4
maptext = MAPTEXT(current_number) //Finally, apply the maptext
-/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, params)
+/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
..()
if(istype(I, /obj/item/hand_labeler_refill))
if(!(ticket_number >= max_number))
diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm
index 2158e829b50d..2df077a2b51d 100644
--- a/code/modules/photography/photos/frame.dm
+++ b/code/modules/photography/photos/frame.dm
@@ -147,7 +147,7 @@
return ITEM_INTERACT_SUCCESS
-/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params)
+/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/photo))
if(framed)
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index d9547e9cd118..09f8d02796a3 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -80,7 +80,7 @@
/obj/item/photo/attack_self(mob/user)
user.examinate(src)
-/obj/item/photo/attackby(obj/item/P, mob/user, params)
+/obj/item/photo/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers)
if(IS_WRITING_UTENSIL(P))
if(!user.can_write(P))
return
diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm
index 06aad506ff03..18a018750825 100644
--- a/code/modules/plumbing/plumbers/plumbing_buffer.dm
+++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm
@@ -84,7 +84,7 @@
to_chat(user, span_notice("New activation threshold is now [activation_volume]."))
return
-/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, params)
+/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(item.tool_behaviour == TOOL_SCREWDRIVER)
to_chat(user, span_notice("You reset the automatic buffer."))
diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm
index 46c46d594f6f..e0720d9fc07e 100644
--- a/code/modules/plumbing/plumbers/teleporter.dm
+++ b/code/modules/plumbing/plumbers/teleporter.dm
@@ -98,7 +98,7 @@
senders = list()
-/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, params)
+/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, icon_state + "_open", initial(icon_state), I))
update_appearance()
return
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 510355918c98..c7fbb72d364d 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -174,7 +174,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
icon_state = dir_string
return ..()
-/obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params)
+/obj/structure/cable/proc/handlecable(obj/item/W, mob/user, list/modifiers)
var/turf/T = get_turf(src)
if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE)
return
@@ -204,8 +204,8 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
// - Wirecutters : cut it duh !
// - Multitool : get the power currently passing through the cable
//
-/obj/structure/cable/attackby(obj/item/W, mob/user, params)
- handlecable(W, user, params)
+/obj/structure/cable/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ handlecable(item, user, modifiers)
// shock the user with probability prb
diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm
index ecacc0bc6a95..4861c3b7896c 100644
--- a/code/modules/power/floodlight.dm
+++ b/code/modules/power/floodlight.dm
@@ -97,7 +97,7 @@
return TRUE
-/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params)
+/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/stack/cable_coil) && state == FLOODLIGHT_NEEDS_WIRES)
var/obj/item/stack/S = O
if(S.use(5))
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 1e561c603079..3c1aa5eefa43 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -82,7 +82,7 @@ GLOBAL_LIST_EMPTY(gravity_generators)
main_part = null
return ..()
-/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(!main_part)
return
return main_part.attackby(weapon, user)
@@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY(gravity_generators)
. += span_notice("The new plating just needs to be bolted into place now.")
// Fixing the gravity generator.
-/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(machine_stat & BROKEN)
switch(broken_state)
if(GRAV_NEEDS_SCREWDRIVER)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index bf624e02c360..056dedd09831 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -346,7 +346,7 @@
// attack with item - insert light (if right type), otherwise try to break the light
-/obj/machinery/light/attackby(obj/item/tool, mob/living/user, params)
+/obj/machinery/light/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
// attempt to insert light
if(istype(tool, /obj/item/light))
if(status == LIGHT_OK)
@@ -424,14 +424,17 @@
real_cell.forceMove(new_light)
cell = null
-/obj/machinery/light/attacked_by(obj/item/attacking_object, mob/living/user)
- ..()
+/obj/machinery/light/attacked_by(obj/item/attacking_object, mob/living/user, list/modifiers, list/attack_modifiers)
+ . = ..()
+ if(!.)
+ return
if(status != LIGHT_BROKEN && status != LIGHT_EMPTY)
return
if(!on || !(attacking_object.obj_flags & CONDUCTS_ELECTRICITY))
return
- if(prob(12))
- electrocute_mob(user, get_area(src), src, 0.3, TRUE)
+ if(!prob(12))
+ return
+ electrocute_mob(user, get_area(src), src, 0.3, TRUE)
/obj/machinery/light/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
. = ..()
diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm
index 902ca9fb0eb3..3b4ab157b0e7 100644
--- a/code/modules/power/lighting/light_construct.dm
+++ b/code/modules/power/lighting/light_construct.dm
@@ -75,7 +75,7 @@
cell_reference.forceMove(drop_location())
return cell_reference.attack_tk(user)
-/obj/structure/light_construct/attackby(obj/item/tool, mob/user, params)
+/obj/structure/light_construct/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(istype(tool, /obj/item/stock_parts/power_store/cell))
if(!cell_connectors)
diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm
index 2fc3148aa0ca..2b4fd0b3e7df 100644
--- a/code/modules/power/lighting/light_items.dm
+++ b/code/modules/power/lighting/light_items.dm
@@ -32,7 +32,7 @@
AddElement(/datum/element/update_icon_updates_onmob)
AddComponent(/datum/component/golem_food, golem_food_key = /obj/item/light, extra_validation = CALLBACK(src, PROC_REF(is_intact)))
-/obj/item/light/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/light/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(attacking_item, /obj/item/lightreplacer))
@@ -127,7 +127,7 @@
..()
shatter(M)
-/obj/item/light/attack_atom(obj/O, mob/living/user, params)
+/obj/item/light/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers)
..()
shatter(O)
diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm
index 7f1ef8fc2e3a..009fc93e57b9 100644
--- a/code/modules/power/pipecleaners.dm
+++ b/code/modules/power/pipecleaners.dm
@@ -150,8 +150,8 @@ By design, d1 is the smallest direction and d2 is the highest
investigate_log("was pulled up by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES)
deconstruct()
-/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, params)
- handlecable(W, user, params)
+/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
+ handlecable(W, user, modifiers)
/obj/structure/pipe_cleaner/singularity_pull(S, current_size)
..()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index b302ae8871b2..be671627b533 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -175,7 +175,7 @@
else
disconnect_from_network()
-/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, params)
+/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, sheet_path))
var/obj/item/stack/addstack = O
var/amount = min((max_sheets - sheets), addstack.amount)
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 35d75ed8dcea..142b54865a64 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -326,7 +326,7 @@
// attach a wire to a power machine - leads from the turf you are standing on
//almost never called, overwritten by all power machines but terminal and generator
-/obj/machinery/power/attackby(obj/item/W, mob/user, params)
+/obj/machinery/power/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = W
var/turf/T = user.loc
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index 657263b3de41..122d13d18d9a 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -37,7 +37,7 @@
if(in_range(user, src) || isobserver(user))
. += span_notice("The status display reads: Power generation at [display_power(power_gen, convert = FALSE)].")
-/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
+/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I))
return
else if(default_deconstruction_crowbar(I))
@@ -142,7 +142,7 @@
power_gen = 750
anchored = TRUE
-/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, params)
+/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I))
to_chat(user,span_warning("You feel it crumbling under your hands!"))
return
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index b47f32a4d10d..7bbec1e91916 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -50,7 +50,7 @@
yeet_shock(user)
return TRUE
-/obj/machinery/field/containment/attackby(obj/item/W, mob/user, params)
+/obj/machinery/field/containment/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
yeet_shock(user)
return TRUE
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index e4e2ec438134..acede021c5ed 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -332,7 +332,7 @@
locked = !locked
to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls."))
-/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, params)
+/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(item.GetID())
togglelock(user)
return
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index e09fadfbed36..1963abdc597b 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -312,7 +312,7 @@
return
randomise_offset(anchored ? 0 : random_offset)
-/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, params)
+/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers)
if(item_used.tool_behaviour == TOOL_WRENCH && isturf(loc))
if(isinspace())
to_chat(user, span_warning("You can't secure [src] here."))
@@ -566,7 +566,7 @@
return TRUE
return FALSE
-/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
if(I.use_tool(src, user, 20, volume=50))
if (src.machine_stat & BROKEN)
diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm
index 5f0db611c5e1..0b6daae76a39 100644
--- a/code/modules/power/supermatter/supermatter_hit_procs.dm
+++ b/code/modules/power/supermatter/supermatter_hit_procs.dm
@@ -65,7 +65,7 @@
qdel(rip_u)
return COMPONENT_CANCEL_ATTACK_CHAIN
-/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, params)
+/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/scalpel/supermatter))
var/obj/item/scalpel/supermatter/scalpel = item
to_chat(user, span_notice("You carefully begin to scrape \the [src] with \the [scalpel]..."))
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 14eb6c88864b..21443f265738 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -74,7 +74,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, params)
+/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W))
return
@@ -156,7 +156,7 @@
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, params)
+/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W))
return
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index 0d45232d8fa2..0a89b6679e17 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -105,7 +105,7 @@
if(!loaded_projectile)
loaded_projectile = new projectile_type(src, src)
-/obj/item/ammo_casing/attackby(obj/item/I, mob/user, params)
+/obj/item/ammo_casing/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/ammo_box))
var/obj/item/ammo_box/box = I
if(isturf(loc))
diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm
index 2895d74555be..9925139a0b13 100644
--- a/code/modules/projectiles/ammunition/ballistic/foam.dm
+++ b/code/modules/projectiles/ammunition/ballistic/foam.dm
@@ -39,7 +39,7 @@
[length(type_initial_names) ? ", such as [english_list(type_initial_names, and_text = "or ", final_comma_text = ", ")]" : ""].")
-/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/obj/projectile/bullet/foam_dart/dart = loaded_projectile
if (attacking_item.tool_behaviour == TOOL_SCREWDRIVER && !modified)
modified = TRUE
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index e2b4612d6413..6556b41ed5d1 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -340,7 +340,7 @@
return
..()
-/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
+/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, list/modifiers, list/attack_modifiers)
if(!cover_open && istype(A, accepted_magazine_type))
balloon_alert(user, "open the cover!")
return
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index d772003e9809..902b66bb69b4 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -16,7 +16,7 @@
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted
pin = /obj/item/firing_pin
-/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params)
+/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, list/modifiers, list/attack_modifiers)
..()
if(istype(A, /obj/item/ammo_box) || isammocasing(A))
chamber_round()
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index a457c214464d..087ae33f406d 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -90,7 +90,7 @@
return underbarrel.try_fire_gun(target, user, params)
return ..()
-/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
var/obj/projectile/energy/fisher/melee/simulated_hit = new
simulated_hit.firer = user
simulated_hit.on_hit(target)
diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm
index 9a7fa9aa78be..e92df87d50e9 100644
--- a/code/modules/projectiles/guns/energy/dueling.dm
+++ b/code/modules/projectiles/guns/energy/dueling.dm
@@ -165,7 +165,7 @@
setting_overlay = mutable_appearance(icon,setting_iconstate())
add_overlay(setting_overlay)
-/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, params)
+/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(istype(W, /obj/item/gun/energy/dueling))
var/obj/item/gun/energy/dueling/other_gun = W
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index 65fa80bd8306..f09527dec9e2 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -53,7 +53,7 @@
else
..()
-/obj/item/minigunpack/attackby(obj/item/W, mob/user, params)
+/obj/item/minigunpack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W == gun) //Don't need armed check, because if you have the gun assume its armed.
user.dropItemToGround(gun, TRUE)
else
diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm
index b97397f1c206..a54131bca794 100644
--- a/code/modules/projectiles/guns/energy/recharge.dm
+++ b/code/modules/projectiles/guns/energy/recharge.dm
@@ -168,7 +168,7 @@
Caveat emptor." \
)
-/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(.)
return
diff --git a/code/modules/projectiles/guns/special/grenade_launcher.dm b/code/modules/projectiles/guns/special/grenade_launcher.dm
index 834a7f506686..b375f1affa49 100644
--- a/code/modules/projectiles/guns/special/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/special/grenade_launcher.dm
@@ -28,7 +28,7 @@
max_grenades = reset_fantasy_variable("max_syringes", max_grenades)
return ..()
-/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, params)
+/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/grenade/c4))
return
diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm
index 9d6a89c77c3d..67729f07844e 100644
--- a/code/modules/projectiles/guns/special/hand_of_midas.dm
+++ b/code/modules/projectiles/guns/special/hand_of_midas.dm
@@ -78,7 +78,7 @@
return ITEM_INTERACT_SUCCESS
// If we botch a shot, we have to start over again by inserting gold coins into the gun. Can only be done if it has no charges or gold.
-/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, params)
+/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(charges || gold_timer)
balloon_alert(user, "already loaded")
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index bd89819c6726..1a9815f9f3bd 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -266,7 +266,7 @@
gun.desc = initial(desc)
..()
-/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, params)
+/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, list/modifiers, list/attack_modifiers)
if(isidcard(M))
var/obj/item/card/id/id = M
if(!id.registered_account)
diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm
index 68141702d55b..c3ef1e6f0952 100644
--- a/code/modules/reagents/chemistry/items.dm
+++ b/code/modules/reagents/chemistry/items.dm
@@ -163,7 +163,7 @@
if(reagent_type)
reagents.add_reagent(reagent_type, 15)
-/obj/item/burner/attackby(obj/item/I, mob/living/user, params)
+/obj/item/burner/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(is_reagent_container(I))
if(lit)
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 44aabc73783e..8dcf53e05a69 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -79,13 +79,12 @@
beaker = null
update_appearance()
-/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, params)
- //Advanced science! Percision instruments (eg droppers and syringes) are precise enough to modify the loaded sample!
+/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, list/modifiers, list/attack_modifiers)
+ //Advanced science! Precision instruments (eg droppers and syringes) are precise enough to modify the loaded sample!
if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe))
if(!beaker)
balloon_alert(user, "no beaker!")
return ..()
- var/list/modifiers = params2list(params)
if(istype(held_item, /obj/item/reagent_containers/syringe) && LAZYACCESS(modifiers, RIGHT_CLICK))
held_item.interact_with_atom_secondary(beaker, user)
else
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 43e21aa7fdcd..a3f165e44493 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -84,7 +84,7 @@
RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change))
RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del))
-/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
if (!user.combat_mode)
return
return ..()
@@ -125,7 +125,7 @@
balloon_alert(user, "transferring [amount_per_transfer_from_this]u")
mode_change_message(user)
-/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, params)
+/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
if(HAS_TRAIT(target, TRAIT_DO_NOT_SPLASH))
return ..()
if(!user.combat_mode)
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index df12232b522f..be2874596b24 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -99,7 +99,7 @@
/obj/item/reagent_containers/blood/universal
blood_type = /datum/blood_type/universal
-/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, params)
+/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
if (IS_WRITING_UTENSIL(tool))
if(!user.can_write(tool))
return
diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm
index 4d0475d81c96..eecd2cda8192 100644
--- a/code/modules/reagents/reagent_containers/cups/_cup.dm
+++ b/code/modules/reagents/reagent_containers/cups/_cup.dm
@@ -186,7 +186,7 @@
target.update_appearance()
return ITEM_INTERACT_SUCCESS
-/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
var/hotness = attacking_item.get_temperature()
if(hotness && reagents)
reagents.expose_temperature(hotness)
@@ -431,7 +431,7 @@
melee = 10
acid = 50
-/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, params)
+/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers)
if(istype(O, /obj/item/mop))
if(reagents.total_volume < 1)
user.balloon_alert(user, "empty!")
diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm
index 59752a5a7b65..0a778f1cf789 100644
--- a/code/modules/reagents/reagent_containers/cups/bottle.dm
+++ b/code/modules/reagents/reagent_containers/cups/bottle.dm
@@ -511,7 +511,7 @@
return CONTEXTUAL_SCREENTIP_SET
//when you attack the syrup bottle with a container it refills it
-/obj/item/reagent_containers/cup/bottle/syrup_bottle/item_interaction(mob/living/user, obj/item/tool, params)
+/obj/item/reagent_containers/cup/bottle/syrup_bottle/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(IS_WRITING_UTENSIL(tool))
return writing_utensil_act(user, tool)
if(cap_on && tool.is_refillable())
diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm
index 53b8483e1ea2..cc1c8b2a41fb 100644
--- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm
+++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm
@@ -674,7 +674,7 @@
if(do_after(user, 1 SECONDS, src))
return pop_cork(user, sabrage = FALSE, froth_severity = pick(0, 1))
-/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(spillable)
@@ -911,7 +911,7 @@
target.fire_act()
new /obj/effect/hotspot(get_turf(target))
-/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, params)
+/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.get_temperature() && !active)
active = TRUE
log_bomber(user, "has primed a", src, "for detonation")
diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm
index e989f49c2432..1228d2ed57b6 100644
--- a/code/modules/reagents/reagent_containers/misc.dm
+++ b/code/modules/reagents/reagent_containers/misc.dm
@@ -73,7 +73,7 @@
to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] ."))
update_appearance()
-/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, params)
+/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(!istype(I, /obj/item/stock_parts/power_store/cell))
return ..()
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index b2f76bb4f44f..b1d7feb4eebc 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -135,7 +135,7 @@
current_range = spray_range
to_chat(user, span_notice("You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]."))
-/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, params)
+/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
var/hotness = I.get_temperature()
if(hotness && reagents)
reagents.expose_temperature(hotness)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index c3c583223adf..b3a74f675c54 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -24,7 +24,7 @@
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
-/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, params)
+/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 57d75810ac88..2b4e88b5e42e 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -82,7 +82,7 @@
if(tank_volume && (damage_flag == BULLET || damage_flag == LASER))
boom()
-/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
+/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(W.is_refillable())
return FALSE //so we can refill them via their afterattack.
if(istype(W, /obj/item/assembly_holder) && accepts_rig)
@@ -294,7 +294,7 @@
// if this sucks, feel free to change it, but make sure the damn thing will log. thanks.
return ..()
-/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
+/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WELDER)
if(!reagents.has_reagent(/datum/reagent/fuel))
to_chat(user, span_warning("[src] is out of fuel!"))
diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm
index 6addae95f9c4..c4267dc1fc27 100644
--- a/code/modules/recycling/conveyor.dm
+++ b/code/modules/recycling/conveyor.dm
@@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
SSmove_manager.stop_looping(thing, SSconveyors)
// attack with item, place item on conveyor
-/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(attacking_item.tool_behaviour == TOOL_CROWBAR)
user.visible_message(span_notice("[user] struggles to pry up [src] with [attacking_item]."), \
span_notice("You struggle to pry up [src] with [attacking_item]."))
@@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
else
return ..()
-/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, params)
+/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(attacking_item.tool_behaviour == TOOL_SCREWDRIVER)
attacking_item.play_tool_sound(src)
flipped = !flipped
@@ -468,7 +468,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
/obj/machinery/conveyor_switch/attack_robot_secondary(mob/user, list/modifiers)
return attack_hand_secondary(user, modifiers)
-/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(is_wire_tool(attacking_item))
wires.interact(user)
return TRUE
@@ -583,7 +583,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
use(1)
return ITEM_INTERACT_SUCCESS
-/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, params)
+/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers)
..()
if(istype(item_used, /obj/item/conveyor_switch_construct))
to_chat(user, span_notice("You link the switch to the conveyor belt assembly."))
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 62aadf8eda68..4c8256b90038 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -114,7 +114,7 @@
air_contents.merge(removed)
trunk_check()
-/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, params)
+/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
if(!pressure_charging && !full_pressure && !flush)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
@@ -361,7 +361,7 @@
interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY
// attack by item places it in to disposal
-/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params)
+/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/storage/bag/trash)) //Not doing component overrides because this is a specific type.
var/obj/item/storage/bag/trash/bag = I
to_chat(user, span_warning("You empty the bag."))
diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm
index 90cd58329663..9a7002d122cf 100644
--- a/code/modules/recycling/disposal/pipe_sorting.dm
+++ b/code/modules/recycling/disposal/pipe_sorting.dm
@@ -55,7 +55,7 @@
else
. += "It has no sorting tags set."
-/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, params)
+/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/dest_tagger))
var/obj/item/dest_tagger/O = I
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 0bbf7071b340..68eb30cf3b0b 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -103,7 +103,7 @@
if(sticker)
. += "[base_icon_state]_tag"
-/obj/item/delivery/attackby(obj/item/item, mob/user, params)
+/obj/item/delivery/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/dest_tagger))
var/obj/item/dest_tagger/dest_tagger = item
@@ -356,7 +356,7 @@
if(payments_acc)
. += span_notice("Ctrl-click to clear the registered account.")
-/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, params)
+/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(isidcard(item))
var/obj/item/card/id/potential_acc = item
diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm
index 64049ba6dafd..fabb9e649b2c 100644
--- a/code/modules/religion/burdened/psyker.dm
+++ b/code/modules/religion/burdened/psyker.dm
@@ -229,7 +229,7 @@
/obj/item/gun/ballistic/revolver/chaplain/attack_self(mob/living/user)
pray_refill(user)
-/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, params)
+/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, list/modifiers, list/attack_modifiers)
if (isammocasing(possibly_ammo) || istype(possibly_ammo, /obj/item/ammo_box))
user.balloon_alert(user, "no manual reloads!")
return
diff --git a/code/modules/religion/sparring/ceremonial_gear.dm b/code/modules/religion/sparring/ceremonial_gear.dm
index 75bad29990cb..de525a0a2866 100644
--- a/code/modules/religion/sparring/ceremonial_gear.dm
+++ b/code/modules/religion/sparring/ceremonial_gear.dm
@@ -41,7 +41,7 @@
)
RegisterSignal(src, COMSIG_ITEM_SHARPEN_ACT, PROC_REF(block_sharpening))
-/obj/item/ceremonial_blade/melee_attack_chain(mob/user, atom/target, params)
+/obj/item/ceremonial_blade/melee_attack_chain(mob/user, atom/target, list/modifiers)
if(!HAS_TRAIT(target, TRAIT_SPARRING))
return ..()
var/old_force = force
diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm
index 9cf762e58d21..292db329a5fd 100644
--- a/code/modules/research/anomaly/anomaly_core.dm
+++ b/code/modules/research/anomaly/anomaly_core.dm
@@ -29,7 +29,7 @@
/obj/item/assembly/signaler/anomaly/attack_self()
return
-/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, params)
+/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_ANALYZER)
to_chat(user, span_notice("Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code]."))
return ..()
diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm
index a47926cabc43..6eb6eda00382 100644
--- a/code/modules/research/anomaly/anomaly_refinery.dm
+++ b/code/modules/research/anomaly/anomaly_refinery.dm
@@ -71,7 +71,7 @@
var/radius = clamp(round(MIN_RADIUS_REQUIRED + radius_increase_per_core * already_made, 1), MIN_RADIUS_REQUIRED, MAX_RADIUS_REQUIRED)
return radius
-/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, params)
+/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers)
if(active)
to_chat(user, span_warning("You can't insert [tool] into [src] while [p_theyre()] currently active."))
return
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 597a6ba7d00b..f3ccf2d39eb8 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -116,7 +116,7 @@
if(in_range(user, src) || isobserver(user))
. += span_notice("The status display reads: Malfunction probability reduced by [malfunction_probability_coeff]%.
Cooldown interval between experiments at [resetTime*0.1] seconds.")
-/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(!is_insertion_ready(user))
diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm
index 90f56055d53c..1c59c654c70d 100644
--- a/code/modules/research/ordnance/doppler_array.dm
+++ b/code/modules/research/ordnance/doppler_array.dm
@@ -49,7 +49,7 @@
. = ..()
. += span_notice("It is currently facing [dir2text(dir)]")
-/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, params)
+/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(item, /obj/item/computer_disk))
var/obj/item/computer_disk/disk = item
eject_disk(user)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index b0e3dbe2a328..38a01c648f8c 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -64,7 +64,7 @@ Nothing else in the console has ID requirements.
d_disk = null
return ..()
-/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params)
+/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, list/modifiers, list/attack_modifiers)
//Loading a disk into it.
if(istype(D, /obj/item/disk))
if(istype(D, /obj/item/disk/tech_disk))
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 3f610fc23844..70c37d3d0669 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -165,7 +165,7 @@
return ITEM_INTERACT_BLOCKING
return ..()
-/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params)
+/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(attacking_item, /obj/item/computer_disk/hdd_theft))
switch(deconstruction_state)
if(HDD_PANEL_CLOSED)
diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
index c5136baafb14..1b21c5756396 100644
--- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
@@ -27,7 +27,7 @@ Slimecrossing Weapons
throwforce = 15
damtype = BRUTE
-/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, params)
+/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(isliving(target))
damtype = pick(BRUTE, BURN, TOX, OXY)
switch(damtype)
diff --git a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm
index 2ff71feff245..08e88b1e4818 100644
--- a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm
+++ b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm
@@ -26,7 +26,7 @@
var/datum/micro_organism/MO = i
. += MO.get_details()
-/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, params)
+/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!sample || !istype(A, /obj/structure/sink))
return FALSE
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 98249455c24e..b23108f0bb6c 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -124,7 +124,7 @@
user.hud_used.show_hud(user.hud_used.hud_version)
return ..()
-/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, params)
+/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, list/modifiers, list/attack_modifiers)
if(istype(used_item, /obj/item/food/monkeycube))
monkeys++
to_chat(user, span_notice("You feed [used_item] to [src]. It now has [monkeys] monkey cubes stored."))
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index 9abc4bc5e08e..28320849ada9 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -62,7 +62,7 @@
active = FALSE
update_appearance()
-/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params)
+/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/machinery/power/emitter/energycannon/magical/ex_act(severity)
@@ -283,7 +283,7 @@
/obj/machinery/scanner_gate/luxury_shuttle/auto_scan(atom/movable/AM)
return
-/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, params)
+/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
return
/obj/machinery/scanner_gate/luxury_shuttle/emag_act(mob/user, obj/item/card/emag/emag_card)
diff --git a/code/modules/spells/spell_types/self/sanguine_strike.dm b/code/modules/spells/spell_types/self/sanguine_strike.dm
index aa6f501ea422..caed3b321f9e 100644
--- a/code/modules/spells/spell_types/self/sanguine_strike.dm
+++ b/code/modules/spells/spell_types/self/sanguine_strike.dm
@@ -58,7 +58,7 @@
RegisterSignal(enchanted, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped))
/// signal called from attacking with the enchanted item
-/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, click_parameters)
+/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, list/modifiers)
SIGNAL_HANDLER
end_enchantment(enchanted)
if(!isliving(target))
diff --git a/code/modules/spells/spell_types/self/spacetime_distortion.dm b/code/modules/spells/spell_types/self/spacetime_distortion.dm
index 976d83e8a30a..e0d59774133b 100644
--- a/code/modules/spells/spell_types/self/spacetime_distortion.dm
+++ b/code/modules/spells/spell_types/self/spacetime_distortion.dm
@@ -149,7 +149,7 @@
if(!busy)
walk_link(AM)
-/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, params)
+/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
if(user.temporarilyRemoveItemFromInventory(W))
walk_link(W)
else
diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm
index b769cb00dbfb..9f36fea910a1 100644
--- a/code/modules/spells/spell_types/touch/_touch.dm
+++ b/code/modules/spells/spell_types/touch/_touch.dm
@@ -168,7 +168,7 @@
*
* When our hand hits an atom, we can cast do_hand_hit() on them.
*/
-/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, click_parameters)
+/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, list/modifiers)
SIGNAL_HANDLER
SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit
@@ -182,7 +182,7 @@
*
* When our hand hits an atom, we can cast do_hand_hit() on them.
*/
-/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, click_parameters)
+/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, list/modifiers)
SIGNAL_HANDLER
SHOULD_NOT_OVERRIDE(TRUE)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index f45d5dc37d09..52ae175e3f86 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -577,7 +577,7 @@
// NON-MODULE CHANGE END
return ..()
-/obj/item/bodypart/attackby(obj/item/weapon, mob/user, params)
+/obj/item/bodypart/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
SHOULD_CALL_PARENT(TRUE)
if(weapon.get_sharpness())
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index 293ffc0e64ae..064daf66a940 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -318,7 +318,7 @@
TRAIT_RESISTHIGHPRESSURE,
), AUGMENTATION_TRAIT)
-/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, params)
+/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/stock_parts/power_store/cell))
if(cell)
to_chat(user, span_warning("You have already inserted a cell!"))
@@ -471,7 +471,7 @@
. += "It has two eye sockets occupied by flashes."
. += span_notice("You can remove the seated flash[single_flash ? "":"es"] with a crowbar.")
-/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, params)
+/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/assembly/flash/handheld))
var/obj/item/assembly/flash/handheld/flash = weapon
if(flash1 && flash2)
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index ea0ed8faa087..f8324214bf23 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -119,11 +119,11 @@
/obj/item/autosurgeon/attack_self(mob/user)//when the object it used...
use_autosurgeon(user, user)
-/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, params)
+/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers)
add_fingerprint(user)
use_autosurgeon(target, user, 8 SECONDS)
-/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, params)
+/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(isorgan(attacking_item))
load_organ(attacking_item, user)
else
diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm
index aec66d39020e..e7ffdb059c3e 100644
--- a/code/modules/transport/tram/tram_controller.dm
+++ b/code/modules/transport/tram/tram_controller.dm
@@ -770,7 +770,7 @@
. += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Left-click.")]")
-/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode || cover_open)
return ..()
diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm
index adf37e6a87f2..3f7aa9c32bb7 100644
--- a/code/modules/transport/tram/tram_floors.dm
+++ b/code/modules/transport/tram/tram_floors.dm
@@ -22,7 +22,7 @@
. += ..()
. += span_notice("The reinforcement bolts are [EXAMINE_HINT("wrenched")] firmly in place. Use a [EXAMINE_HINT("wrench")] to remove the plate.")
-/turf/open/floor/tram/attackby(obj/item/object, mob/living/user, params)
+/turf/open/floor/tram/attackby(obj/item/object, mob/living/user, list/modifiers)
. = ..()
if(istype(object, /obj/item/stack/thermoplastic))
build_with_transport_tiles(object, user)
@@ -34,7 +34,7 @@
return ..()
return //unplateable
-/turf/open/floor/tram/try_replace_tile(obj/item/stack/tile/replacement_tile, mob/user, params)
+/turf/open/floor/tram/try_replace_tile(obj/item/stack/tile/replacement_tile, mob/user, list/modifiers)
return
/turf/open/floor/tram/crowbar_act(mob/living/user, obj/item/item)
@@ -126,7 +126,7 @@
/turf/open/floor/tram/plate/energized/burnt_states()
return list("energized_plate_damaged")
-/turf/open/floor/tram/plate/energized/attackby(obj/item/attacking_item, mob/living/user, params)
+/turf/open/floor/tram/plate/energized/attackby(obj/item/attacking_item, mob/living/user, list/modifiers)
if((broken || burnt) && istype(attacking_item, /obj/item/stack/sheet/mineral/titanium))
if(attacking_item.use(1))
broken = FALSE
@@ -149,7 +149,7 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/indestructible/tram/attackby(obj/item/object, mob/living/user, params)
+/turf/open/indestructible/tram/attackby(obj/item/object, mob/living/user, list/modifiers)
. = ..()
if(istype(object, /obj/item/stack/thermoplastic))
build_with_transport_tiles(object, user)
diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm
index eb6486660304..5776ba5ecc18 100644
--- a/code/modules/transport/tram/tram_signals.dm
+++ b/code/modules/transport/tram/tram_signals.dm
@@ -118,7 +118,7 @@
SStransport.crossing_signals -= src
. = ..()
-/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(!user.combat_mode)
if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon))
return
@@ -180,7 +180,7 @@
find_uplink()
return CLICK_ACTION_SUCCESS
-/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(weapon.tool_behaviour == TOOL_WRENCH && panel_open)
@@ -538,7 +538,7 @@
. += span_notice("The red [EXAMINE_HINT("local fault")] light is on.")
. += span_notice("The status display reads: Repair required.")
-/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if (!user.combat_mode)
if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon))
return
diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm
index 26df15ae6b4e..504d606aa91b 100644
--- a/code/modules/transport/tram/tram_structures.dm
+++ b/code/modules/transport/tram/tram_structures.dm
@@ -163,7 +163,7 @@
update_appearance()
return ITEM_INTERACT_SUCCESS
-/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, params)
+/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers)
switch(state)
if(TRAM_SCREWED_TO_FRAME)
if(tool.tool_behaviour == TOOL_SCREWDRIVER)
@@ -218,7 +218,7 @@
for(var/i in 1 to mineral_amount)
new mineral(loc)
-/obj/structure/tram/attackby(obj/item/item, mob/user, params)
+/obj/structure/tram/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(item, /obj/item/wallframe/tram))
@@ -353,7 +353,7 @@
/// The last time a radiation pulse was performed
var/last_event = 0
-/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, params)
+/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
radiate()
return ..()
diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm
index b265dece0c0c..33e1afd7c462 100644
--- a/code/modules/transport/transport_module.dm
+++ b/code/modules/transport/transport_module.dm
@@ -729,7 +729,7 @@
return open_lift_radial(user)
-/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, params)
+/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!radial_travel)
return ..()
diff --git a/code/modules/tutorials/tutorials/drop.dm b/code/modules/tutorials/tutorials/drop.dm
index 06980b28848d..6ace8bb88a78 100644
--- a/code/modules/tutorials/tutorials/drop.dm
+++ b/code/modules/tutorials/tutorials/drop.dm
@@ -18,8 +18,8 @@
QDEL_NULL(drop_preview)
return ..()
-/datum/tutorial/drop/perform(list/params)
- create_drop_preview(params[SCREEN_LOC])
+/datum/tutorial/drop/perform(list/modifiers)
+ create_drop_preview(modifiers[SCREEN_LOC])
addtimer(CALLBACK(src, PROC_REF(show_instructions)), TIME_TO_START_MOVING_DROP_ICON)
RegisterSignal(user, COMSIG_MOB_DROPPING_ITEM, PROC_REF(on_dropped_item))
diff --git a/code/modules/tutorials/tutorials/switch_hands.dm b/code/modules/tutorials/tutorials/switch_hands.dm
index f1bcbbb3b711..c1a9c3e02f2b 100644
--- a/code/modules/tutorials/tutorials/switch_hands.dm
+++ b/code/modules/tutorials/tutorials/switch_hands.dm
@@ -25,8 +25,8 @@
return ..()
-/datum/tutorial/switch_hands/perform(list/params)
- create_hand_preview(params[SCREEN_LOC])
+/datum/tutorial/switch_hands/perform(list/modifiers)
+ create_hand_preview(modifiers[SCREEN_LOC])
addtimer(CALLBACK(src, PROC_REF(show_instructions)), TIME_TO_START_MOVING_HAND_ICON)
RegisterSignal(user, COMSIG_MOB_SWAP_HANDS, PROC_REF(on_swap_hands))
diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm
index c9a0b011e741..8f8451a1200e 100644
--- a/code/modules/vehicles/cars/clowncar.dm
+++ b/code/modules/vehicles/cars/clowncar.dm
@@ -100,14 +100,14 @@
foam.set_up(4, holder = src, location = loc, carry = foamreagent)
foam.start()
-/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user)
- . = ..()
- if(!istype(I, /obj/item/food/grown/banana))
+/obj/vehicle/sealed/car/clowncar/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/food/grown/banana))
return
- var/obj/item/food/grown/banana/banana = I
- atom_integrity += min(banana.seed.potency, max_integrity-atom_integrity)
- to_chat(user, span_danger("You use the [banana] to repair [src]!"))
+ var/obj/item/food/grown/banana/banana = tool
+ repair_damage(banana.seed.potency)
+ to_chat(user, span_danger("You use [banana] to repair [src]!"))
qdel(banana)
+ return ITEM_INTERACT_SUCCESS
/obj/vehicle/sealed/car/clowncar/Bump(atom/bumped)
. = ..()
diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm
index ba1e043bb177..bf6de9afa6bf 100644
--- a/code/modules/vehicles/mecha/combat/durand.dm
+++ b/code/modules/vehicles/mecha/combat/durand.dm
@@ -124,10 +124,10 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/
else
. = ..()
-/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, params)
+/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, list/modifiers, list/attack_modifiers)
if(defense_check(user.loc))
log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange")
- shield.attackby(W, user, params)
+ shield.attackby(W, user, modifiers)
else
. = ..()
diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
index ac277e1b1f01..944ed221a49b 100644
--- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
@@ -318,7 +318,7 @@
log_message("Deactivated.", LOG_MECHA)
return TRUE
-/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, params)
+/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(!istype(weapon, fuel))
return FALSE
diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm
index 5166b9c5fdfc..fefa0ecbb46a 100644
--- a/code/modules/vehicles/mecha/mech_bay.dm
+++ b/code/modules/vehicles/mecha/mech_bay.dm
@@ -76,7 +76,7 @@
recharge_console.update_appearance()
-/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params)
+/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I))
return
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
index c37ea8381754..3d943284d62c 100644
--- a/code/modules/vehicles/mecha/mecha_defense.dm
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -209,14 +209,14 @@
cookedalive.adjust_fire_stacks(1)
cookedalive.ignite_mob()
-/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if(istype(weapon, /obj/item/mecha_parts))
var/obj/item/mecha_parts/parts = weapon
parts.try_attach_part(user, src, TRUE)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
return ..()
-/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, params)
+/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(istype(weapon, /obj/item/mmi))
@@ -318,13 +318,14 @@
balloon_alert(user, "already installed!")
return
-/obj/vehicle/sealed/mecha/attacked_by(obj/item/attacking_item, mob/living/user)
- if(!attacking_item.force)
- return
+/obj/vehicle/sealed/mecha/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
+ var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers) * attacking_item.get_demolition_modifier(src)
+ if(!final_force)
+ return 0
var/old_internals = internal_damage
- var/damage_taken = take_damage(attacking_item.force * attacking_item.get_demolition_modifier(src), attacking_item.damtype, MELEE, 1, get_dir(src, user))
+ var/damage_taken = take_damage(final_force, attacking_item.damtype, MELEE, 1, get_dir(src, user))
try_damage_component(damage_taken, user.zone_selected)
var/hit_verb = length(attacking_item.attack_verb_simple) ? "[pick(attacking_item.attack_verb_simple)]" : "hit"
@@ -342,6 +343,8 @@
spray_blood(get_dir(user, src), rand(2, 4), list("[oil_name]" = oil_type))
oil_pool -= 2
+ return damage_taken
+
/obj/vehicle/sealed/mecha/attack_generic(mob/user, damage_amount, damage_type, damage_flag, effects, armor_penetration)
var/old_internals = internal_damage
diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm
index 4ea14a6d332a..a2a2900914ec 100644
--- a/code/modules/vehicles/mecha/mecha_parts.dm
+++ b/code/modules/vehicles/mecha/mecha_parts.dm
@@ -252,7 +252,7 @@
name = "\improper Phazon chassis"
construct_type = /datum/component/construction/unordered/mecha_chassis/phazon
-/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, params)
+/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/bluespace))
to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!")
diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm
index 8b28aa241d01..24d31de6ac70 100644
--- a/code/modules/vehicles/motorized_wheelchair.dm
+++ b/code/modules/vehicles/motorized_wheelchair.dm
@@ -101,7 +101,7 @@
user.put_in_hands(power_cell)
power_cell = null
-/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, params)
+/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
if(!panel_open)
return ..()
diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm
index 967a48c6c4e9..88582410dcde 100644
--- a/code/modules/vehicles/pimpin_ride.dm
+++ b/code/modules/vehicles/pimpin_ride.dm
@@ -34,7 +34,7 @@
if (installed_upgrade)
. += "It has been upgraded with [installed_upgrade], which can be removed with a screwdriver."
-/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params)
+/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/storage/bag/trash))
if(trash_bag)
to_chat(user, span_warning("[src] already has a trashbag hooked!"))
diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm
index 52c7924d72f2..1bcf91301b1b 100644
--- a/code/modules/vehicles/ridden.dm
+++ b/code/modules/vehicles/ridden.dm
@@ -29,7 +29,7 @@
add_occupant(M)
return ..()
-/obj/vehicle/ridden/attackby(obj/item/I, mob/user, params)
+/obj/vehicle/ridden/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!key_type || is_key(inserted_key) || !is_key(I))
return ..()
if(!user.transferItemToLoc(I, src))
diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm
index 6ccb2f70c616..9d417bb20830 100644
--- a/code/modules/vehicles/scooter.dm
+++ b/code/modules/vehicles/scooter.dm
@@ -227,7 +227,7 @@
icon_state = "scooter_frame"
w_class = WEIGHT_CLASS_NORMAL
-/obj/item/scooter_frame/attackby(obj/item/I, mob/user, params)
+/obj/item/scooter_frame/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(I, /obj/item/stack/sheet/iron))
return ..()
if(!I.tool_start_check(user, amount=5))
@@ -250,7 +250,7 @@
/obj/vehicle/ridden/scooter/skateboard/wrench_act(mob/living/user, obj/item/I)
return
-/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, params)
+/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(!istype(I, /obj/item/stack/rods))
return ..()
if(!I.tool_start_check(user, amount=2))
diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm
index 821a69d8f826..96b1a4b52f52 100644
--- a/code/modules/vehicles/sealed.dm
+++ b/code/modules/vehicles/sealed.dm
@@ -105,7 +105,7 @@
/obj/vehicle/sealed/proc/exit_location(M)
return drop_location()
-/obj/vehicle/sealed/attackby(obj/item/I, mob/user, params)
+/obj/vehicle/sealed/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(key_type && !is_key(inserted_key) && is_key(I))
if(user.transferItemToLoc(I, src))
to_chat(user, span_notice("You insert [I] into [src]."))
diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm
index c8cab1a7dc1c..dc90de8471c1 100644
--- a/code/modules/vehicles/secway.dm
+++ b/code/modules/vehicles/secway.dm
@@ -61,7 +61,7 @@
else
user.balloon_alert_to_viewers("stopped welding [src]", "interrupted the repair!")
-/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, params)
+/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers)
if(!istype(W, /obj/item/food/grown/banana))
return ..()
// ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now!
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index d4ca5ce02a5d..26183c44ef0d 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -716,7 +716,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock)
to_chat(user, span_warning("You must first secure [src]."))
return TRUE
-/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, params)
+/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers)
if(panel_open && is_wire_tool(attack_item))
wires.interact(user)
return
@@ -1754,7 +1754,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock)
vend_ready = TRUE
return TRUE
-/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, params)
+/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, list/modifiers, list/attack_modifiers)
if(!linked_account && isliving(user))
var/mob/living/living_user = user
var/obj/item/card/id/card_used = living_user.get_idcard(TRUE)
diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm
index 4dd144b4c80e..01c37c88c9ac 100644
--- a/code/modules/wiremod/components/abstract/module.dm
+++ b/code/modules/wiremod/components/abstract/module.dm
@@ -229,9 +229,9 @@
. = list()
.["global_port_types"] = GLOB.wiremod_basic_types
-/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, params)
+/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(I, /obj/item/circuit_component))
- internal_circuit.attackby(I, user, params)
+ internal_circuit.attackby(I, user, modifiers)
return
return ..()
diff --git a/code/modules/wiremod/components/action/mmi.dm b/code/modules/wiremod/components/action/mmi.dm
index ddb29e190d51..0a3114bababc 100644
--- a/code/modules/wiremod/components/action/mmi.dm
+++ b/code/modules/wiremod/components/action/mmi.dm
@@ -149,7 +149,7 @@
return TRUE
-/obj/item/circuit_component/mmi/proc/handle_mmi_attack(mob/living/source, atom/target, list/modifiers)
+/obj/item/circuit_component/mmi/proc/handle_mmi_attack(mob/living/source, atom/target, list/modifiers, list/attack_modifiers)
SIGNAL_HANDLER
if(modifiers[RIGHT_CLICK])
clicked_atom.set_output(target)
diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm
index e609cda6f18c..13ab32649e31 100644
--- a/code/modules/wiremod/core/component_printer.dm
+++ b/code/modules/wiremod/core/component_printer.dm
@@ -205,7 +205,7 @@
return data
-/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, params)
+/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
if (user.combat_mode)
return ..()
@@ -435,7 +435,7 @@
created_atom.pixel_x = created_atom.base_pixel_x + rand(-5, 5)
created_atom.pixel_y = created_atom.base_pixel_y + rand(-5, 5)
-/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
var/list/data = list()
if(istype(weapon, /obj/item/circuit_component/module))
diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm
index 0a9e6335a067..800237a0ede5 100644
--- a/code/modules/wiremod/core/integrated_circuit.dm
+++ b/code/modules/wiremod/core/integrated_circuit.dm
@@ -146,7 +146,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
SEND_SIGNAL(src, COMSIG_CIRCUIT_SET_LOCKED, new_value)
locked = new_value
-/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, params)
+/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if(istype(I, /obj/item/circuit_component))
add_component_manually(I, user)
diff --git a/code/modules/wiremod/core/marker.dm b/code/modules/wiremod/core/marker.dm
index 65ed029213e3..36c1857b9c95 100644
--- a/code/modules/wiremod/core/marker.dm
+++ b/code/modules/wiremod/core/marker.dm
@@ -27,8 +27,8 @@
clear_marked_atom()
return TRUE
-/obj/item/multitool/circuit/melee_attack_chain(mob/user, atom/target, params)
- var/is_right_clicking = LAZYACCESS(params2list(params), RIGHT_CLICK)
+/obj/item/multitool/circuit/melee_attack_chain(mob/user, atom/target, list/modifiers)
+ var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK)
if(marked_atom || !user.Adjacent(target) || is_right_clicking)
return ..()
diff --git a/code/modules/wiremod/core/usb_cable.dm b/code/modules/wiremod/core/usb_cable.dm
index 23683bf0ee81..d350df2ac2b1 100644
--- a/code/modules/wiremod/core/usb_cable.dm
+++ b/code/modules/wiremod/core/usb_cable.dm
@@ -36,7 +36,7 @@
if (!check_in_range())
return PROCESS_KILL
-/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, params)
+/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers)
. = ..()
if (.)
return
diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm
index 513a744945f5..f75a43864705 100644
--- a/code/modules/wiremod/shell/brain_computer_interface.dm
+++ b/code/modules/wiremod/shell/brain_computer_interface.dm
@@ -354,7 +354,7 @@
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, params)
+/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
var/obj/item/organ/cyberimp/bci/new_bci = weapon
if (istype(new_bci))
if (!(locate(/obj/item/integrated_circuit) in new_bci))
@@ -376,7 +376,7 @@
return ..()
-/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, params)
+/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
if (!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, weapon))
update_appearance()
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
diff --git a/code/modules/wiremod/shell/dispenser.dm b/code/modules/wiremod/shell/dispenser.dm
index 4a00f7fed88d..d31a5cb04c0a 100644
--- a/code/modules/wiremod/shell/dispenser.dm
+++ b/code/modules/wiremod/shell/dispenser.dm
@@ -60,7 +60,7 @@
new /obj/item/circuit_component/dispenser_bot()
), SHELL_CAPACITY_LARGE)
-/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, params)
+/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
if(user.combat_mode)
return ..()
if(istype(item, /obj/item/wrench) || istype(item, /obj/item/multitool) || istype(item, /obj/item/integrated_circuit))
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index dd34e8ff1779..a415e4feec92 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -11,7 +11,7 @@
bare_wound_bonus = 15
sharpness = SHARP_EDGED
-/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, click_parameters)
+/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
if(ishuman(target))
try_to_zombie_infect(target, user, user.zone_selected)
else if(isliving(target))