diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index dcec31e5c2..7f03a7e003 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -141,6 +141,11 @@ name = "Disintegrate" spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate +/datum/spellbook_entry/nuclearfist + name = "Nuclear Fist" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist + cost = 3 + /datum/spellbook_entry/disabletech name = "Disable Tech" spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index d91c60367d..e2f8fd1a83 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -507,4 +507,37 @@ return var/turf/T = get_turf(target) for(var/i=0, i<50, i+=10) - addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) \ No newline at end of file + addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) + +/obj/item/projectile/magic/nuclear + name = "\proper blazing manliness" + icon_state = "nuclear" + nodamage = TRUE + var/mob/living/victim = null + +/obj/item/projectile/magic/nuclear/on_hit(target) + new/obj/effect/temp_visual/nuclear(get_turf(src)) + if(ismob(target)) + if(target == victim) + return + visible_message("[victim] slams into [target] with explosive force!") + explosion(src, 2, 3, 4, 0, 6, 0) + qdel(src) + return + else + victim.take_overall_damage(30,30) + explosion(src, -1, -1, -1, 0, 3, 0) + qdel(src) + return //Autistically making it return and qdel because for some reason it was blowing up three times? + +/obj/item/projectile/magic/nuclear/Destroy() + for(var/atom/movable/AM in contents) + AM.forceMove(get_turf(src)) + . = ..() + +/obj/effect/temp_visual/nuclear //where's a good place to put this boi + icon = 'icons/effects/96x96.dmi' + icon_state = "slugboom" + randomdir = FALSE + duration = 60 + pixel_x = -48 \ No newline at end of file diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index a5f371ffc2..ef55ec0f63 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -182,3 +182,42 @@ if(charges <= 0) qdel(src) + +/obj/item/melee/touch_attack/nuclearfist + name = "\improper PURE MANLINESS" + desc = "SHOW THEM RAW POWER" + catchphrase = "I CAST FIST!" + on_use_sound = 'sound/weapons/mortar_long_whistle.ogg' + icon = 'icons/mecha/mecha_equipment.dmi' + icon_state = "mecha_honker" + +/obj/item/melee/touch_attack/nuclearfist/afterattack(atom/movable/target, mob/living/carbon/user, proximity) + if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad + return + if(!user.can_speak_vocal()) + to_chat(user, "You can't get the words out!") + return + var/mob/M = target + do_sparks(4, FALSE, M.loc) + for(var/mob/living/L in view(src, 7)) + if(L != user) + L.flash_act(affect_silicon = FALSE) + var/atom/A = M.anti_magic_check() + if(A) + if(isitem(A)) + target.visible_message("[target]'s [A] glows brightly as it wards off the spell!") + user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!") + user.flash_act() + var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src) + if(part) + part.dismember() + return ..() + var/angle = dir2angle(get_dir(src, get_step_away(target, src))) + var/obj/item/projectile/magic/nuclear/P = new(get_turf(src)) + P.victim = target + target.forceMove(P) + P.setAngle(angle) + P.original = user + P.firer = user + P.fire() + return ..() \ No newline at end of file diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index 0ffe02cec2..358b9e3ff0 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -23,7 +23,7 @@ remove_hand(TRUE) to_chat(user, "You draw the power out of your hand.") return - + for(var/mob/living/carbon/C in targets) if(!attached_hand) if(ChargeHand(C)) @@ -71,3 +71,15 @@ action_icon_state = "statue" sound = 'sound/magic/fleshtostone.ogg' + +/obj/effect/proc_holder/spell/targeted/touch/nuclear_fist + name = "Nuclear Fist" + desc = "This spell channels raw manliness, allowing you punch your enemies across the galaxy, causing them to detonate violently if hitting any other living being midflight." + hand_path = /obj/item/melee/touch_attack/nuclearfist + + school = "evocation" + charge_max = 600 + clothes_req = 1 + cooldown_min = 200 //100 deciseconds reduction per rank + + action_icon_state = "gib" \ No newline at end of file diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index a9f20ae8a8..c0b5ef5b40 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index d1c625c18e..a434994846 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ