From 448dc20c2b75bc351417406fadf0c28d72867b7d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 20 May 2017 12:42:11 -0500 Subject: [PATCH] Proto-kinetic crushers are significantly better --- code/__DEFINES/status_effects.dm | 3 +- code/datums/status_effects/debuffs.dm | 28 +++++++- code/datums/status_effects/debuffs.dm.rej | 10 +++ code/modules/mining/equipment.dm | 78 ++++++++++------------- code/modules/mining/equipment.dm.rej | 11 ++++ 5 files changed, 82 insertions(+), 48 deletions(-) create mode 100644 code/datums/status_effects/debuffs.dm.rej create mode 100644 code/modules/mining/equipment.dm.rej diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 69bc163234..834097bd44 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -39,4 +39,5 @@ #define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. -#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes \ No newline at end of file +#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes +#define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 5b7d015e19..f21e8aa503 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -166,4 +166,30 @@ /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes id = "cult_ghost" duration = -1 - alert_type = null \ No newline at end of file + alert_type = null +/datum/status_effect/crusher_mark + id = "crusher_mark" + duration = 600 //if you leave for a minute you lose the mark, deal with it + status_type = STATUS_EFFECT_REPLACE + alert_type = null + var/mutable_appearance/marked_underlay + var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced + +/datum/status_effect/crusher_mark/on_apply() + if(owner.mob_size >= MOB_SIZE_LARGE) + marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") + marked_underlay.pixel_x = -owner.pixel_x + marked_underlay.pixel_y = -owner.pixel_y + owner.underlays += marked_underlay + return FALSE + +/datum/status_effect/crusher_mark/Destroy() + hammer_synced = null + if(owner) + owner.underlays -= marked_underlay + QDEL_NULL(marked_underlay) + return ..() + +/datum/status_effect/crusher_mark/be_replaced() + owner.underlays -= marked_underlay //if this is being called, we should have an owner at this point. + ..() diff --git a/code/datums/status_effects/debuffs.dm.rej b/code/datums/status_effects/debuffs.dm.rej new file mode 100644 index 0000000000..40fd21cf60 --- /dev/null +++ b/code/datums/status_effects/debuffs.dm.rej @@ -0,0 +1,10 @@ +diff a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm (rejected hunks) +@@ -170,7 +170,7 @@ + + /datum/status_effect/crusher_mark + id = "crusher_mark" +- duration = 600 //if you leave for a minute you lose the mark, deal with it ++ duration = 300 //if you leave for 30 seconds you lose the mark, deal with it + status_type = STATUS_EFFECT_REPLACE + alert_type = null + var/mutable_appearance/marked_underlay diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm index dd8766bdc9..a748adf2d8 100644 --- a/code/modules/mining/equipment.dm +++ b/code/modules/mining/equipment.dm @@ -510,79 +510,65 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped") sharpness = IS_SHARP - var/charged = 1 - var/charge_time = 16 - var/atom/mark = null - var/mutable_appearance/marked_underlay + var/charged = TRUE + var/charge_time = 14 /obj/item/projectile/destabilizer name = "destabilizing force" icon_state = "pulse1" + nodamage = TRUE damage = 0 //We're just here to mark people. This is still a melee weapon. damage_type = BRUTE flag = "bomb" range = 6 - var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced = null log_override = TRUE + var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced + +/obj/item/projectile/destabilizer/Destroy() + hammer_synced = null + return ..() /obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0) - if(hammer_synced) - if(hammer_synced.mark == target) - return ..() - if(isliving(target)) - if(hammer_synced.mark && hammer_synced.marked_underlay) - hammer_synced.mark.underlays -= hammer_synced.marked_underlay - hammer_synced.marked_underlay = null - var/mob/living/L = target - if(L.mob_size >= MOB_SIZE_LARGE) - hammer_synced.mark = L - hammer_synced.marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") - hammer_synced.marked_underlay.pixel_x = -L.pixel_x - hammer_synced.marked_underlay.pixel_y = -L.pixel_y - L.underlays += hammer_synced.marked_underlay - var/target_turf = get_turf(target) - if(ismineralturf(target_turf)) - var/turf/closed/mineral/M = target_turf - new /obj/effect/overlay/temp/kinetic_blast(M) - M.gets_drilled(firer) + if(isliving(target)) + var/mob/living/L = target + var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK) + CM.hammer_synced = hammer_synced + var/target_turf = get_turf(target) + if(ismineralturf(target_turf)) + var/turf/closed/mineral/M = target_turf + new /obj/effect/overlay/temp/kinetic_blast(M) + M.gets_drilled(firer) ..() /obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag) if(!proximity_flag && charged)//Mark a target, or mine a tile. - var/turf/proj_turf = get_turf(src) + var/turf/proj_turf = user.loc if(!isturf(proj_turf)) return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure > 50) - playsound(user, 'sound/weapons/empty.ogg', 100, 1) - return - var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(user.loc) - D.preparePixelProjectile(target,get_turf(target), user) + var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf) + D.preparePixelProjectile(target, get_turf(target), user) D.hammer_synced = src playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1) D.fire() - charged = 0 + charged = FALSE icon_state = "mining_hammer1_uncharged" addtimer(CALLBACK(src, .proc/Recharge), charge_time) return - if(proximity_flag && target == mark && isliving(target)) + if(proximity_flag && isliving(target)) var/mob/living/L = target + if(!L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK)) + return new /obj/effect/overlay/temp/kinetic_blast(get_turf(L)) - mark = 0 - if(L.mob_size >= MOB_SIZE_LARGE) - L.underlays -= marked_underlay - QDEL_NULL(marked_underlay) - var/backstab_dir = get_dir(user, L) - var/def_check = L.getarmor(type = "bomb") - if((user.dir & backstab_dir) && (L.dir & backstab_dir)) - L.apply_damage(80, BRUTE, blocked = def_check) - playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong - else - L.apply_damage(50, BRUTE, blocked = def_check) + var/backstab_dir = get_dir(user, L) + var/def_check = L.getarmor(type = "bomb") + if((user.dir & backstab_dir) && (L.dir & backstab_dir)) + L.apply_damage(80, BRUTE, blocked = def_check) + playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong + else + L.apply_damage(50, BRUTE, blocked = def_check) /obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge() if(!charged) - charged = 1 + charged = TRUE icon_state = "mining_hammer1" playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) diff --git a/code/modules/mining/equipment.dm.rej b/code/modules/mining/equipment.dm.rej new file mode 100644 index 0000000000..5ce11831b9 --- /dev/null +++ b/code/modules/mining/equipment.dm.rej @@ -0,0 +1,11 @@ +diff a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm (rejected hunks) +@@ -549,7 +556,8 @@ + return + if(proximity_flag && isliving(target)) + var/mob/living/L = target +- if(!L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK)) ++ var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK) ++ if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK)) + return + new /obj/effect/temp_visual/kinetic_blast(get_turf(L)) + var/backstab_dir = get_dir(user, L)