From bde9ae6f7e07c6c1c9bf7b4019b3af303af5d1fb Mon Sep 17 00:00:00 2001 From: Neerti Date: Sun, 31 Dec 2017 05:43:23 -0500 Subject: [PATCH] Adds Visual Cleavage Axes executing a cleaving attack now has a visual effect to show the tiles that can potentially get hit. Gives hatchets and the energy axe the ability to cleave. --- code/game/objects/effects/misc.dm | 21 +++++++++++++++++- .../objects/items/weapons/material/knives.dm | 1 + .../objects/items/weapons/material/misc.dm | 11 +++++++++ .../objects/items/weapons/melee/energy.dm | 6 +++++ code/game/objects/weapons.dm | 11 ++++++++- icons/effects/96x96.dmi | Bin 331822 -> 334448 bytes 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index c2f590c561..6cc507aeec 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -5,4 +5,23 @@ icon = 'icons/obj/items.dmi' icon_state = "strangepresent" density = 1 - anchored = 0 \ No newline at end of file + anchored = 0 + +// Shown really briefly when attacking with axes. +/obj/effect/temporary_effect/cleave_attack + name = "cleaving attack" + desc = "Something swinging really wide." + icon = 'icons/effects/96x96.dmi' + icon_state = "cleave" + layer = 6 + time_to_die = 6 + alpha = 140 + invisibility = 0 + mouse_opacity = 0 + new_light_range = 0 + new_light_power = 0 + pixel_x = -32 + pixel_y = -32 + +/obj/effect/temporary_effect/cleave_attack/initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself. + animate(src, alpha = 0, time = time_to_die - 1) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 7b6e6184f1..375c6eee68 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -100,3 +100,4 @@ icon_state = "survivalknife" item_state = "knife" applies_material_colour = FALSE + should_cleave = FALSE diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 6afacb30cb..d66cd3efab 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -32,6 +32,13 @@ origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) attack_verb = list("chopped", "torn", "cut") applies_material_colour = 0 + var/should_cleave = TRUE // Because knives inherit from hatchets. For some reason. + +// This cannot go into afterattack since some mobs delete themselves upon dying. +/obj/item/weapon/material/hatchet/pre_attack(var/mob/living/target, var/mob/living/user) + if(should_cleave && istype(target)) + cleave(user, target) + ..() /obj/item/weapon/material/hatchet/unathiknife name = "duelling knife" @@ -39,6 +46,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "unathiknife" attack_verb = list("ripped", "torn", "cut") + should_cleave = FALSE var hits = 0 /obj/item/weapon/material/hatchet/unathiknife/attack(mob/M as mob, mob/user as mob) @@ -56,6 +64,7 @@ hits = initial(hits) ..() +// These probably shouldn't inherit from hatchets. /obj/item/weapon/material/hatchet/tacknife name = "tactical knife" desc = "You'd be killing loads of people if this was Medal of Valor: Heroes of Space." @@ -64,6 +73,7 @@ item_state = "knife" attack_verb = list("stabbed", "chopped", "cut") applies_material_colour = 1 + should_cleave = FALSE /obj/item/weapon/material/hatchet/tacknife/combatknife name = "combat knife" @@ -75,6 +85,7 @@ thrown_force_divisor = 1.75 // 20 with weight 20 (steel) attack_verb = list("sliced", "stabbed", "chopped", "cut") applies_material_colour = 1 + should_cleave = FALSE /obj/item/weapon/material/minihoe // -- Numbers name = "mini hoe" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 2533a07e63..c2952cfc1e 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -97,6 +97,12 @@ icon_state = initial(icon_state) to_chat(user, "\The [src] is de-energised. It's just a regular axe now.") +// This cannot go into afterattack since some mobs delete themselves upon dying. +/obj/item/weapon/melee/energy/axe/pre_attack(var/mob/living/target, var/mob/living/user) + if(istype(target)) + cleave(user, target) + ..() + /obj/item/weapon/melee/energy/axe/suicide_act(mob/user) visible_message("\The [user] swings \the [src] towards \his head! It looks like \he's trying to commit suicide.") return (BRUTELOSS|FIRELOSS) diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index b78f5d4585..7a619477ea 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -19,6 +19,8 @@ /obj/item/weapon/proc/cleave(var/mob/living/user, var/mob/living/target) if(cleaving) return // We're busy. + if(get_turf(user) == get_turf(target)) + return // Otherwise we would hit all eight surrounding tiles. cleaving = TRUE var/hit_mobs = 0 for(var/mob/living/simple_animal/SA in orange(get_turf(target), 1)) @@ -35,6 +37,13 @@ if(resolve_attackby(SA, user)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true. hit_mobs++ + cleave_visual(user, target) + if(hit_mobs) to_chat(user, "You used \the [src] to attack [hit_mobs] other thing\s!") - cleaving = FALSE // We're done now. \ No newline at end of file + cleaving = FALSE // We're done now. + +// This is purely the visual effect of cleaving. +/obj/item/weapon/proc/cleave_visual(var/mob/living/user, var/mob/living/target) + var/obj/effect/temporary_effect/cleave_attack/E = new(get_turf(src)) + E.dir = get_dir(user, target) \ No newline at end of file diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 5580e9a5da74949957b806adf828018f77ec788e..841c17d3f51e6a39a6def2571b4b54ce81ba6551 100644 GIT binary patch delta 11043 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