diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm index abc0507bf4..8c8e03d865 100644 --- a/code/__DEFINES/_flags/_flags.dm +++ b/code/__DEFINES/_flags/_flags.dm @@ -137,3 +137,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_PICKUP | MOBILITY_USE | MOBILITY_UI | MOBILITY_STORAGE | MOBILITY_PULL | MOBILITY_RESIST) #define MOBILITY_FLAGS_ANY_INTERACTION (MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_UI | MOBILITY_STORAGE) + +// melee_attack_chain() attackchain_flags +/// The attack is from a parry counterattack. +#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index cdb5c48dbd..2380c447b4 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -115,18 +115,6 @@ #define GRAB_NECK 2 #define GRAB_KILL 3 -/// Attack types for check_block()/run_block(). Flags, combinable. -/// Attack was melee, whether or not armed. -#define ATTACK_TYPE_MELEE (1<<0) -/// Attack was with a gun or something that should count as a gun (but not if a gun shouldn't count for a gun, crazy right?) -#define ATTACK_TYPE_PROJECTILE (1<<1) -/// Attack was unarmed.. this usually means hand to hand combat. -#define ATTACK_TYPE_UNARMED (1<<2) -/// Attack was a thrown atom hitting the victim. -#define ATTACK_TYPE_THROWN (1<<3) -/// Attack was a bodyslam/leap/tackle. See: Xenomorph leap tackles. -#define ATTACK_TYPE_TACKLE (1<<4) - //attack visual effects #define ATTACK_EFFECT_PUNCH "punch" #define ATTACK_EFFECT_KICK "kick" diff --git a/code/__DEFINES/combat/attack_types b/code/__DEFINES/combat/attack_types new file mode 100644 index 0000000000..409e74966b --- /dev/null +++ b/code/__DEFINES/combat/attack_types @@ -0,0 +1,13 @@ +// Attack types for check_block()/run_block(). Flags, combinable. +/// Attack was melee, whether or not armed. +#define ATTACK_TYPE_MELEE (1<<0) +/// Attack was with a gun or something that should count as a gun (but not if a gun shouldn't count for a gun, crazy right?) +#define ATTACK_TYPE_PROJECTILE (1<<1) +/// Attack was unarmed.. this usually means hand to hand combat. +#define ATTACK_TYPE_UNARMED (1<<2) +/// Attack was a thrown atom hitting the victim. +#define ATTACK_TYPE_THROWN (1<<3) +/// Attack was a bodyslam/leap/tackle. See: Xenomorph leap tackles. +#define ATTACK_TYPE_TACKLE (1<<4) +/// Attack was from a parry counterattack. Do not attempt to parry-this! +#define ATTACK_TYPE_PARRY_COUNTERATTACK (1<<5) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 7ffb870971..10dca449fa 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,7 +7,7 @@ *and lastly *afterattack. The return value does not matter. */ -/obj/item/proc/melee_attack_chain(mob/user, atom/target, params) +/obj/item/proc/melee_attack_chain(mob/user, atom/target, params, flags, damage_multiplier = 1) if(isliving(user)) var/mob/living/L = user if(item_flags & NO_ATTACK_CHAIN_SOFT_STAMCRIT) @@ -21,7 +21,7 @@ return if(pre_attack(target, user, params)) return - if(target.attackby(src,user, params)) + if(target.attackby(src, user, params, flags, damage_multiplier)) return if(QDELETED(src) || QDELETED(target)) return @@ -56,13 +56,13 @@ /obj/attackby(obj/item/I, mob/living/user, params) return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user)) -/mob/living/attackby(obj/item/I, mob/living/user, params) +/mob/living/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier) if(..()) return TRUE user.changeNext_move(CLICK_CD_MELEE) - return I.attack(src, user) + return I.attack(src, user, attackchain_flags, damage_multiplier) -/obj/item/proc/attack(mob/living/M, mob/living/user) +/obj/item/proc/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK) return SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user) @@ -86,7 +86,7 @@ M.lastattackerckey = user.ckey user.do_attack_animation(M) - M.attacked_by(src, user) + M.attacked_by(src, user, attackchain_flags, damage_multiplier) log_combat(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") add_fingerprint(user) @@ -110,8 +110,8 @@ /atom/movable/proc/attacked_by() return -/obj/attacked_by(obj/item/I, mob/living/user) - var/totitemdamage = I.force +/obj/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) + var/totitemdamage = I.force * damage_multiplier var/bad_trait if(!SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_INACTIVE)) totitemdamage *= 0.5 @@ -129,10 +129,10 @@ log_combat(user, src, "attacked", I) take_damage(totitemdamage, I.damtype, "melee", 1) -/mob/living/attacked_by(obj/item/I, mob/living/user) +/mob/living/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) var/list/block_return = list() - var/totitemdamage = pre_attacked_by(I, user) - if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user, null, block_return) & BLOCK_SUCCESS) + var/totitemdamage = pre_attacked_by(I, user) * damage_multiplier + if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ((attackchain_flags & ATTACKCHAIN_PARRY_COUNTERATTACK)? ATTACK_TYPE_PARRY_COUNTERATTACK : NONE) | ATTACK_TYPE_MELEE, I.armour_penetration, user, null, block_return) & BLOCK_SUCCESS) return FALSE totitemdamage = block_calculate_resultant_damage(totitemdamage, block_return) send_item_attack_message(I, user) @@ -148,7 +148,7 @@ user.add_mob_blood(src) return TRUE //successful attack -/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) +/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(I.force < force_threshold || I.damtype == STAMINA) playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), 1, -1) else diff --git a/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm index af75315ded..db145ffacc 100644 --- a/code/game/gamemodes/gangs/dominator.dm +++ b/code/game/gamemodes/gangs/dominator.dm @@ -145,9 +145,9 @@ new /obj/item/stack/sheet/plasteel(src.loc) qdel(src) -/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user) +/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) add_fingerprint(user) - ..() + return ..() /obj/machinery/dominator/attack_hand(mob/user) if(operating || (stat & BROKEN)) @@ -240,4 +240,4 @@ #undef DOM_BLOCKED_SPAM_CAP #undef DOM_REQUIRED_TURFS -#undef DOM_HULK_HITS_REQUIRED \ No newline at end of file +#undef DOM_HULK_HITS_REQUIRED diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index afb00d4ee2..5b029a6bf7 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -70,8 +70,8 @@ else 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, attackchain_flags = NONE, damage_multiplier = 1) + parent_turret.attacked_by(I, user, attackchain_flags, damage_multiplier) /obj/machinery/porta_turret_cover/attack_alien(mob/living/carbon/alien/humanoid/user) parent_turret.attack_alien(user) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 1fe7f74dec..395ac810f4 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -282,9 +282,9 @@ else return ..() -/obj/mecha/attacked_by(obj/item/I, mob/living/user) +/obj/mecha/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) mecha_log_message("Attacked by [I]. Attacker - [user]") - ..() + return ..() /obj/mecha/proc/mech_toxin_damage(mob/living/target) playsound(src, 'sound/effects/spray2.ogg', 50, 1) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 4eedfc12fb..dcccf9149a 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -61,7 +61,6 @@ force = 18 throwforce = 15 w_class = WEIGHT_CLASS_BULKY - block_chance = 50 armour_penetration = 75 sharpness = IS_SHARP attack_verb = list("slashed", "cut") @@ -72,12 +71,12 @@ block_parry_data = /datum/block_parry_data/captain_saber /datum/block_parry_data/captain_saber - parry_time_windup = 1 - parry_time_active = 3 + parry_time_windup = 0.5 + parry_time_active = 4 parry_time_spindown = 1 - parry_time_perfect = 1.5 - parry_time_perfect_leeway = 0.25 - parry_imperfect_falloff_percent = 20 + parry_time_perfect = 0.75 + parry_time_perfect_leeway = 0.75 + parry_imperfect_falloff_percent = 30 parry_efficiency_perfect = 100 parry_failed_stagger_duration = 3 SECONDS parry_failed_clickcd_duration = 2 SECONDS diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 1b245b5a01..6e6754eca2 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -117,9 +117,9 @@ return 2 -/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) +/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone, attackchain_flags = NONE, damage_multiplier = 1) var/weakness = check_weakness(I, user) - apply_damage(I.force * weakness, I.damtype, def_zone) + apply_damage(I.force * weakness * damage_multiplier, I.damtype, def_zone) var/message_verb = "" if(I.attack_verb && I.attack_verb.len) message_verb = "[pick(I.attack_verb)]" diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 8bf0554070..825ce84f1c 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -147,7 +147,7 @@ /obj/machinery/portable_atmospherics/analyzer_act(mob/living/user, obj/item/I) atmosanalyzer_scan(air_contents, user, src) -/obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user) +/obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user, attackchain_flags = NONE, damage_multiplier = 1) if(I.force < 10 && !(stat & BROKEN)) take_damage(0) else diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 69bfa6e569..05c098f767 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -330,8 +330,8 @@ if(!override) qdel(src) -/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user) - var/damage_dealt = I.force +/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) + var/damage_dealt = I.force * damage_multiplier if(I.get_sharpness()) damage_dealt *= 4 if(I.damtype == BURN) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 0ec2f16815..f9d38828e3 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -76,11 +76,11 @@ visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) -/mob/living/carbon/attacked_by(obj/item/I, mob/living/user) - var/totitemdamage = pre_attacked_by(I, user) +/mob/living/carbon/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) + var/totitemdamage = pre_attacked_by(I, user) * damage_multiplier var/impacting_zone = (user == src)? check_zone(user.zone_selected) : ran_zone(user.zone_selected) var/list/block_return = list() - if((user != src) && (mob_run_block(I, totitemdamage, "the [I]", ATTACK_TYPE_MELEE, I.armour_penetration, user, impacting_zone, block_return) & BLOCK_SUCCESS)) + if((user != src) && (mob_run_block(I, totitemdamage, "the [I]", ((attackchain_flags & ATTACKCHAIN_PARRY_COUNTERATTACK)? ATTACK_TYPE_PARRY_COUNTERATTACK : NONE) | ATTACK_TYPE_MELEE, I.armour_penetration, user, impacting_zone, block_return) & BLOCK_SUCCESS)) return FALSE totitemdamage = block_calculate_resultant_damage(totitemdamage, block_return) var/obj/item/bodypart/affecting = get_bodypart(impacting_zone) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f1281171a1..6f013f560a 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -78,7 +78,7 @@ ..() -/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user) +/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(!I || !user) return 0 @@ -95,7 +95,7 @@ SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area) // the attacked_by code varies among species - return dna.species.spec_attacked_by(I, user, affecting, a_intent, src) + return dna.species.spec_attacked_by(I, user, affecting, a_intent, src, attackchain_flags, damage_multiplier) /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index de55ef388a..e1a7a3b221 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1700,12 +1700,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if("disarm") disarm(M, H, attacker_style) -/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - var/totitemdamage = H.pre_attacked_by(I, user) +/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H, attackchain_flags = NONE, damage_multiplier = 1) + var/totitemdamage = H.pre_attacked_by(I, user) * damage_multiplier // Allows you to put in item-specific reactions based on species if(user != H) var/list/block_return = list() - if(H.mob_run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user, affecting.body_zone, block_return) & BLOCK_SUCCESS) + if(H.mob_run_block(I, totitemdamage, "the [I.name]", ((attackchain_flags & ATTACKCHAIN_PARRY_COUNTERATTACK)? ATTACK_TYPE_PARRY_COUNTERATTACK : NONE) | ATTACK_TYPE_MELEE, I.armour_penetration, user, affecting.body_zone, block_return) & BLOCK_SUCCESS) return 0 totitemdamage = block_calculate_resultant_damage(totitemdamage, block_return) if(H.check_martial_melee_block()) diff --git a/code/modules/mob/living/living_active_parry.dm b/code/modules/mob/living/living_active_parry.dm index 00cc20f7bc..609312917e 100644 --- a/code/modules/mob/living/living_active_parry.dm +++ b/code/modules/mob/living/living_active_parry.dm @@ -93,7 +93,7 @@ */ /mob/living/proc/handle_parry_starting_effects(datum/block_parry_data/data) playsound(src, data.parry_start_sound, 75, 1) - parry_visual_effect = new /obj/effect/abstract/parry/main(null, data, src, data.parry_effect_icon_state) + parry_visual_effect = new /obj/effect/abstract/parry/main(null, TRUE, src, data.parry_effect_icon_state, data.parry_time_windup_visual_override || data.parry_time_windup, data.parry_time_active_visual_override || data.parry_time_active, data.parry_time_spindown_visual_override || data.parry_time_spindown) switch(parrying) if(ITEM_PARRY) visible_message("[src] swings [active_parry_item]!") @@ -303,13 +303,13 @@ /obj/effect/abstract/parry/main name = null -/obj/effect/abstract/parry/main/Initialize(mapload, datum/block_parry_data/data, mob/living/owner, icon_state) +/obj/effect/abstract/parry/main/Initialize(mapload, autorun, mob/living/owner, set_icon_state, windup, active, spindown) . = ..() - src.icon_state = icon_state + icon_state = set_icon_state if(owner) attach_to(owner) - if(data) - INVOKE_ASYNC(src, .proc/run_animation, data.parry_time_windup, data.parry_time_active, data.parry_time_spindown, TRUE) + if(autorun) + INVOKE_ASYNC(src, .proc/run_animation, windup, active, spindown) /obj/effect/abstract/parry/main/Destroy() detach_from(owner) @@ -326,9 +326,7 @@ owner = null detaching.vis_contents -= src -/obj/effect/abstract/parry/main/proc/run_animation(windup_time = 2, active_time = 5, spindown_time = 3, qdel_end = TRUE) - if(qdel_end) - QDEL_IN(src, windup_time + active_time + spindown_time) +/obj/effect/abstract/parry/main/proc/run_animation(windup_time = 2, active_time = 5, spindown_time = 3) var/matrix/current = transform transform = matrix(0.1, 0, 0, 0, 0.1, 0) animate(src, transform = current, time = windup_time) diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm index 1f4eae5ffb..3ae82dcd39 100644 --- a/code/modules/mob/living/living_blocking_parrying.dm +++ b/code/modules/mob/living/living_blocking_parrying.dm @@ -102,6 +102,13 @@ GLOBAL_LIST_EMPTY(block_parry_data) var/parry_time_spindown = 3 /// Main parry window in deciseconds. This is between [parry_time_windup] and [parry_time_spindown] var/parry_time_active = 5 + // Visual overrides + /// If set, overrides visual duration of windup + var/parry_time_windup_visual_override + /// If set, overrides visual duration of active period + var/parry_time_active_visual_override + /// If set, overrides visual duration of spindown + var/parry_time_spindown_visual_override /// Perfect parry window in deciseconds from the start of the main window. 3 with main 5 = perfect on third decisecond of main window. var/parry_time_perfect = 2.5 /// Time on both sides of perfect parry that still counts as part of the perfect window. @@ -122,7 +129,7 @@ GLOBAL_LIST_EMPTY(block_parry_data) var/parry_efficiency_considered_successful = 0.1 /// Efficiency must be at least this to run automatic counterattack var/parry_efficiency_to_counterattack = 0.1 - /// Maximum attacks to parry successfully or unsuccessfully during active period, hitting this immediately ends the sequence. + /// Maximum attacks to parry successfully or unsuccessfully (but not efficiency < 0) during active period, hitting this immediately ends the sequence. var/parry_max_attacks = INFINITY /// Visual icon state override for parrying var/parry_effect_icon_state = "parry_bm_hold" diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 2bcb3c9b5a..9cefa7a12f 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/ai/attacked_by(obj/item/I, mob/living/user, def_zone) +/mob/living/silicon/ai/attacked_by(obj/item/I, mob/living/user, def_zone, attackchain_flags = NONE, damage_multiplier = 1) . = ..() if(!.) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index e41fa7c896..e8991df358 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -117,7 +117,7 @@ Move(get_step(src,chosen_dir)) face_atom(target) //Looks better if they keep looking at you when dodging -/mob/living/simple_animal/hostile/attacked_by(obj/item/I, mob/living/user) +/mob/living/simple_animal/hostile/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client && user) FindTarget(list(user), 1) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index 116082d571..8ebd384b20 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -103,7 +103,7 @@ IGNORE_PROC_IF_NOT_TARGET(attack_slime) return BULLET_ACT_FORCE_PIERCE return ..() -/mob/living/simple_animal/hostile/asteroid/curseblob/attacked_by(obj/item/I, mob/living/L) +/mob/living/simple_animal/hostile/asteroid/curseblob/attacked_by(obj/item/I, mob/living/L, attackchain_flags = NONE, damage_multiplier = 1) if(L != set_target) return return ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3c3f3c9541..c18eebbb55 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -506,7 +506,7 @@ cell = null qdel(src) -/obj/machinery/light/attacked_by(obj/item/I, mob/living/user) +/obj/machinery/light/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) ..() if(status == LIGHT_BROKEN || status == LIGHT_EMPTY) if(on && (I.flags_1 & CONDUCT_1)) diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index dc6cccb9a9..365a9abd3c 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -49,7 +49,7 @@ mob_exit(M, silent) return TRUE -/obj/vehicle/sealed/car/attacked_by(obj/item/I, mob/living/user) +/obj/vehicle/sealed/car/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(!I.force) return if(occupants[user]) @@ -85,4 +85,4 @@ if(!silent) M.visible_message("[M] is forced into \the [src]!") M.forceMove(src) - add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) \ No newline at end of file + add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index 2b9890b863..cd21b61dbe 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -36,7 +36,7 @@ visible_message("[src] spews out a ton of space lube!") new /obj/effect/particle_effect/foam(loc) //YEET -/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user) +/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) . = ..() if(istype(I, /obj/item/reagent_containers/food/snacks/grown/banana)) var/obj/item/reagent_containers/food/snacks/grown/banana/banana = I @@ -129,4 +129,4 @@ icon_state = initial(icon_state) /obj/vehicle/sealed/car/clowncar/proc/StopDroppingOil() - droppingoil = FALSE \ No newline at end of file + droppingoil = FALSE