From be1fe799db90e357fcb094eb634e3f1ba8746353 Mon Sep 17 00:00:00 2001 From: Leo Date: Sun, 7 Jan 2018 15:02:30 -0200 Subject: [PATCH 1/3] Fixes armor penetration not working on objects and therefore mechs --- code/game/objects/obj_defense.dm | 18 ++++++++++-------- code/modules/projectiles/projectile.dm | 4 ++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index ff8bcc3e1e..c20c01cc42 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -1,10 +1,10 @@ //the essential proc to call when an obj must receive damage of any kind. -/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) +/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) if(sound_effect) play_attack_sound(damage_amount, damage_type, damage_flag) if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0) - damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir) + damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration) if(damage_amount >= 0.1) . = damage_amount var/old_integ = obj_integrity @@ -19,7 +19,7 @@ obj_break(damage_flag) //returns the damage value of the attack after processing the obj's various armor protections -/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) +/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) switch(damage_type) if(BRUTE) if(BURN) @@ -28,6 +28,8 @@ var/armor_protection = 0 if(damage_flag) armor_protection = armor[damage_flag] + if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. + armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, 0.1) //the sound played when the obj is damaged. @@ -72,7 +74,7 @@ . = ..() playsound(src, P.hitsound, 50, 1) visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE) - take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180)) + take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) /obj/proc/hulk_damage() return 150 //the damage hulks do on punches to this object, is affected by melee armor @@ -97,10 +99,10 @@ return take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) -/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime +/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) - return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user)) + return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) /obj/attack_alien(mob/living/carbon/alien/humanoid/user) if(attack_generic(user, 60, BRUTE, "melee", 0)) @@ -115,9 +117,9 @@ if(M.environment_smash) play_soundeffect = 0 if(M.obj_damage) - . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect) + . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) else - . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect) + . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) if(. && !play_soundeffect) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 79e2fdf903..6bdd4b31be 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -362,6 +362,10 @@ if(targloc || !params) yo = targloc.y - curloc.y xo = targloc.x - curloc.x +<<<<<<< HEAD +======= + setAngle(Get_Angle(src, targloc)) +>>>>>>> e1e10ca... Merge pull request #34140 from kevinz000/quickfix-1 if(isliving(source) && params) var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) From 7f53f7dc08cc568bc110ba364e9a9e7c449f29d7 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 7 Jan 2018 15:20:59 -0500 Subject: [PATCH 2/3] Update projectile.dm --- code/modules/projectiles/projectile.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6bdd4b31be..dc3d584061 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -362,10 +362,7 @@ if(targloc || !params) yo = targloc.y - curloc.y xo = targloc.x - curloc.x -<<<<<<< HEAD -======= setAngle(Get_Angle(src, targloc)) ->>>>>>> e1e10ca... Merge pull request #34140 from kevinz000/quickfix-1 if(isliving(source) && params) var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) From 1f65e222b7c954b02985bf271ff28de0d846d5d2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 7 Jan 2018 14:39:31 -0600 Subject: [PATCH 3/3] Automatic changelog generation for PR #4692 [ci skip] --- html/changelogs/AutoChangeLog-pr-4692.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4692.yml diff --git a/html/changelogs/AutoChangeLog-pr-4692.yml b/html/changelogs/AutoChangeLog-pr-4692.yml new file mode 100644 index 0000000000..44ca0d879b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4692.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Armor penetration now works on objects and mechs."