diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 2c370f47da9..ec4ad68610e 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -279,6 +279,12 @@ item_path = /obj/item/weapon/gun/magic/staff/chaos log_name = "SC" +/datum/spellbook_entry/item/spellblade + name = "Spellblade" + desc = "A sword capable of firing blasts of energy which rip targets limb from limb." + item_path = /obj/item/weapon/gun/magic/staff/spellblade + log_name = "SB" + /datum/spellbook_entry/item/staffdoor name = "Staff of Door Creation" desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 92381bdfb83..15f0fcdb4b6 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -180,7 +180,15 @@ name = "high frequency blade" desc = "Bad references are the DNA of the soul." attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' + + +/obj/item/weapon/nullrod/scythe/spellblade + icon_state = "spellblade" + item_state = "spellblade" + name = "dormant spellblade" + desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is." + hitsound = 'sound/weapons/rapierhit.ogg' /obj/item/weapon/nullrod/scythe/talking icon_state = "talking_sword" @@ -188,7 +196,7 @@ name = "possessed blade" desc = "When the station falls into chaos, it's nice to have a friend by your side." attack_verb = list("chopped", "sliced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' var/possessed = FALSE /obj/item/weapon/nullrod/scythe/talking/attack_self(mob/living/user) @@ -262,6 +270,7 @@ item_state = "chain" slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed") + hitsound = 'sound/weapons/chainhit.ogg' /obj/item/weapon/nullrod/fedora name = "atheist's fedora" diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 8b9794a59e0..78b8f819e92 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -674,7 +674,7 @@ /obj/structure/closet/crate/necropolis/bubblegum/New() ..() - var/loot = rand(1,3) + var/loot = rand(1,4) switch(loot) if(1) new /obj/item/weapon/antag_spawner/slaughter_demon(src) @@ -682,6 +682,8 @@ new /obj/item/mayhem(src) if(3) new /obj/item/blood_contract(src) + if(4) + new /obj/item/weapon/gun/magic/staff/spellblade(src) /obj/item/blood_contract name = "blood contract" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d8d73767278..edf30eb4b84 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -60,8 +60,14 @@ if(check_shields(P.damage, "the [P.name]", P, PROJECTILE_ATTACK, P.armour_penetration)) P.on_hit(src, 100, def_zone) return 2 + return (..(P , def_zone)) +/mob/living/check_projectile_dismemberment(obj/item/projectile/P, def_zone) + var/obj/item/bodypart/affecting = get_bodypart(def_zone) + if(affecting && affecting.get_damage() >= (affecting.max_damage - P.dismemberment)) + affecting.dismember(P.damtype) + /mob/living/carbon/human/proc/check_reflect(def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on the reflection chance of the object if(wear_suit) if(wear_suit.IsReflect(def_zone) == 1) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e3eba6b060b..85b466c18c7 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -31,8 +31,13 @@ var/armor = run_armor_check(def_zone, P.flag, "","",P.armour_penetration) if(!P.nodamage) apply_damage(P.damage, P.damage_type, def_zone, armor) + if(P.dismemberment) + check_projectile_dismemberment(P, def_zone) return P.on_hit(src, armor, def_zone) +/mob/living/proc/check_projectile_dismemberment(obj/item/projectile/P, def_zone) + return 0 + /proc/vol_by_throwforce_and_or_w_class(obj/item/I) if(!I) return 0 diff --git a/code/modules/projectiles/ammunition/special.dm b/code/modules/projectiles/ammunition/special.dm index b91ce29a999..9a720b84138 100644 --- a/code/modules/projectiles/ammunition/special.dm +++ b/code/modules/projectiles/ammunition/special.dm @@ -27,6 +27,9 @@ /obj/item/ammo_casing/magic/chaos projectile_type = /obj/item/projectile/magic +/obj/item/ammo_casing/magic/spellblade + projectile_type = /obj/item/projectile/magic/spellblade + /obj/item/ammo_casing/magic/chaos/newshot() projectile_type = pick(typesof(/obj/item/projectile/magic)) ..() diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index e62055578c3..a47c14d29a9 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -59,3 +59,22 @@ item_state = "honker" max_charges = 4 recharge_rate = 8 + +/obj/item/weapon/gun/magic/staff/spellblade + name = "spellblade" + desc = "A deadly combination of laziness and boodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword." + fire_sound = "sound/magic/Fireball.ogg" + ammo_type = /obj/item/ammo_casing/magic/spellblade + icon_state = "spellblade" + item_state = "spellblade" + hitsound = 'sound/weapons/rapierhit.ogg' + force = 20 + armour_penetration = 75 + block_chance = 50 + sharpness = IS_SHARP + max_charges = 4 + +/obj/item/weapon/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = 0 + return ..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b921b1aa501..1c4616c90ed 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -49,6 +49,7 @@ var/stamina = 0 var/jitter = 0 var/forcedodge = 0 //to pass through everything + var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. /obj/item/projectile/New() permutated = list() @@ -146,7 +147,7 @@ next_run = world.time sleep(1) continue - + if((!( current ) || loc == current)) current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) @@ -199,7 +200,7 @@ Range() if (delay > 0) sleep(delay) - + else //old projectile system set waitfor = 0 while(loc) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index a94abf7243c..b47f0ea7011 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -349,3 +349,11 @@ var/mob/living/simple_animal/hostile/mimic/copy/C = change C.ChangeOwner(firer) +/obj/item/projectile/magic/spellblade + name = "blade energy" + icon_state = "lavastaff" + damage = 15 + damage_type = BURN + flag = "magic" + dismemberment = 50 + nodamage = 0 diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 7edeb9f6e53..aabb1fd448e 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -223,6 +223,7 @@ damage_type = BRUTE damage = 5 range = 3.5 //works as 4, but doubles to 7 + dismemberment = 20 /obj/item/projectile/plasma/New() var/turf/proj_turf = get_turf(src) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 275b721e94c..f4bee86ddc6 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 0db7929152a..0f6f940695e 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index b1545e13be0..9b6df4f3fc2 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/guns/magic.dmi b/icons/obj/guns/magic.dmi index d5d4910184b..45e7b49f4e1 100644 Binary files a/icons/obj/guns/magic.dmi and b/icons/obj/guns/magic.dmi differ