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))