diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 212a19f79e8..f57e096e0ec 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -2,8 +2,8 @@ #define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. #define NODROP 2 // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. #define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler -#define AIRTIGHT 8 // mask allows internals -//#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s) +#define AIRTIGHT 8 // mask allows internals +#define HANDSLOW 16 // If an item has this flag, it will slow you to carry it #define NOSHIELD 32 // weapon not affected by shield #define CONDUCT 64 // conducts electricity (metal etc.) #define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm new file mode 100644 index 00000000000..687872e3360 --- /dev/null +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -0,0 +1,328 @@ +/obj/item/weapon/nullrod + name = "null rod" + desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers." + icon_state = "nullrod" + item_state = "nullrod" + force = 18 + throw_speed = 3 + throw_range = 4 + throwforce = 10 + w_class = 1 + var/reskinned = FALSE + var/list/fluff_transformations = list() //does it have any special transformations only accessible to it? Should only be subtypes of /obj/item/weapon/nullrod + +/obj/item/weapon/nullrod/suicide_act(mob/user) + user.visible_message("[user] is killing \himself with \the [src.name]! It looks like \he's trying to get closer to god!") + return (BRUTELOSS|FIRELOSS) + +/obj/item/weapon/nullrod/attack(mob/M, mob/living/carbon/user) + ..() + if(M.mind) + if(M.mind.vampire) + if(ishuman(M)) + if(!M.mind.vampire.get_ability(/datum/vampire_passive/full)) + to_chat(M, "The nullrod's power interferes with your own!") + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + +/obj/item/weapon/nullrod/attack_self(mob/user) + if(reskinned) + return + if(user.mind && (user.mind.assigned_role == "Chaplain")) + reskin_holy_weapon(user) + +/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M) + var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod) - typesof(/obj/item/weapon/nullrod/fluff) + if(fluff_transformations.len) + for(var/thing in fluff_transformations) + holy_weapons_list += thing + var/list/display_names = list() + for(var/V in holy_weapons_list) + var/atom/A = V + display_names += initial(A.name) + + var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names + if(!src || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned) + return + + var/index = display_names.Find(choice) + var/A = holy_weapons_list[index] + + var/obj/item/weapon/nullrod/holy_weapon = new A + + feedback_set_details("chaplain_weapon","[choice]") + + if(holy_weapon) + holy_weapon.reskinned = TRUE + M.unEquip(src) + M.put_in_active_hand(holy_weapon) + qdel(src) + +/obj/item/weapon/nullrod/godhand + icon_state = "disintegrate" + item_state = "disintegrate" + name = "god hand" + desc = "This hand of yours glows with an awesome power!" + flags = ABSTRACT | NODROP + w_class = 5 + hitsound = 'sound/weapons/sear.ogg' + damtype = BURN + attack_verb = list("punched", "cross countered", "pummeled") + +/obj/item/weapon/nullrod/staff + icon_state = "godstaff-red" + item_state = "godstaff-red" + name = "red holy staff" + desc = "It has a mysterious, protective aura." + w_class = 5 + force = 5 + slot_flags = SLOT_BACK + +/obj/item/weapon/nullrod/staff/IsShield() + return 1 + +/obj/item/weapon/nullrod/staff/blue + name = "blue holy staff" + icon_state = "godstaff-blue" + item_state = "godstaff-blue" + +/obj/item/weapon/nullrod/claymore + icon_state = "claymore" + item_state = "claymore" + name = "holy claymore" + desc = "A weapon fit for a crusade!" + w_class = 5 + slot_flags = SLOT_BACK|SLOT_BELT + sharp = 1 + edge = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/nullrod/claymore/IsShield() + if(prob(30)) + return 1 + else + return 0 + +/obj/item/weapon/nullrod/claymore/darkblade + icon_state = "cultblade" + item_state = "cultblade" + name = "dark blade" + desc = "Spread the glory of the dark gods!" + slot_flags = SLOT_BELT + hitsound = 'sound/hallucinations/growl1.ogg' + +/obj/item/weapon/nullrod/claymore/chainsaw_sword + icon_state = "chainswordon" + item_state = "chainswordon" + name = "sacred chainsaw sword" + desc = "Suffer not a heretic to live." + slot_flags = SLOT_BELT + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsaw.ogg' + +/obj/item/weapon/nullrod/claymore/glowing + icon_state = "swordon" + item_state = "swordon" + name = "force weapon" + desc = "The blade glows with the power of faith. Or possibly a battery." + slot_flags = SLOT_BELT + +/obj/item/weapon/nullrod/claymore/katana + name = "hanzo steel" + desc = "Capable of cutting clean through a holy claymore." + icon_state = "katana" + item_state = "katana" + slot_flags = SLOT_BELT | SLOT_BACK + +/obj/item/weapon/nullrod/claymore/saber + name = "light energy sword" + hitsound = 'sound/weapons/blade1.ogg' + icon_state = "swordblue" + item_state = "swordblue" + desc = "If you strike me down, I shall become more robust than you can possibly imagine." + slot_flags = SLOT_BELT + +/obj/item/weapon/nullrod/claymore/saber/red + name = "dark energy sword" + icon_state = "swordred" + item_state = "swordred" + desc = "Woefully ineffective when used on steep terrain." + +/obj/item/weapon/nullrod/sord + name = "\improper UNREAL SORD" + desc = "This thing is so unspeakably HOLY you are having a hard time even holding it." + icon_state = "sord" + item_state = "sord" + slot_flags = SLOT_BELT + force = 4.13 + throwforce = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/nullrod/scythe + icon_state = "scythe0" + item_state = "scythe0" + name = "reaper scythe" + desc = "Ask not for whom the bell tolls..." + w_class = 4 + armour_penetration = 35 + slot_flags = SLOT_BACK + sharp = 1 + edge = 1 + attack_verb = list("chopped", "sliced", "cut", "reaped") + hitsound = 'sound/weapons/bladeslice.ogg' + +/obj/item/weapon/nullrod/scythe/vibro + icon_state = "hfrequency0" + item_state = "hfrequency1" + name = "high frequency blade" + desc = "Bad references are the DNA of the soul." + attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") + +/obj/item/weapon/nullrod/hammmer + icon_state = "hammeron" + item_state = "hammeron" + name = "relic war hammer" + desc = "This war hammer cost the chaplain fourty thousand space dollars." + slot_flags = SLOT_BELT + w_class = 5 + attack_verb = list("smashed", "bashed", "hammered", "crunched") + +/obj/item/weapon/nullrod/chainsaw + name = "chainsaw hand" + desc = "Good? Bad? You're the guy with the chainsaw hand." + icon_state = "chainsaw1" + item_state = "mounted_chainsaw" + w_class = 5 + flags = NODROP | ABSTRACT + sharp = 1 + edge = 1 + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsaw.ogg' + +/obj/item/weapon/nullrod/clown + icon = 'icons/obj/wizard.dmi' + icon_state = "clownrender" + item_state = "gold_horn" + name = "clown dagger" + desc = "Used for absolutely hilarious sacrifices." + hitsound = 'sound/items/bikehorn.ogg' + sharp = 1 + edge = 1 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/nullrod/whip + name = "holy whip" + desc = "What a terrible night to be on Space Station 13." + icon_state = "chain" + item_state = "chain" + slot_flags = SLOT_BELT + attack_verb = list("whipped", "lashed") + hitsound = 'sound/weapons/slash.ogg' + +/obj/item/weapon/nullrod/whip/afterattack(atom/movable/AM, mob/user, proximity) + if(!proximity) + return + if(istype(AM, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = AM + if(is_shadow(H)) + var/phrase = pick("Die monster! You don't belong in this world!!!", "You steal men's souls and make them your slaves!!!", "Your words are as empty as your soul!!!", "Mankind ill needs a savior such as you!!!") + user.say("[phrase]") + H.adjustBruteLoss(8) //Bonus damage + +/obj/item/weapon/nullrod/fedora + name = "athiest's fedora" + desc = "The brim of the hat is as sharp as your wit. Throwing it at someone would hurt almost as much as disproving the existence of God." + icon_state = "fedora" + item_state = "fedora" + slot_flags = SLOT_HEAD + icon = 'icons/obj/clothing/hats.dmi' + force = 0 + throw_speed = 4 + throw_range = 7 + throwforce = 20 + +/obj/item/weapon/nullrod/armblade + name = "dark blessing" + desc = "Particularly twisted dieties grant gifts of dubious value." + icon_state = "arm_blade" + item_state = "arm_blade" + flags = ABSTRACT | NODROP + w_class = 5 + sharp = 1 + edge = 1 + +/obj/item/weapon/nullrod/carp + name = "carp-sie plushie" + desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to recieve the blessing of Carp-Sie." + icon = 'icons/obj/toy.dmi' + icon_state = "carpplushie" + item_state = "carp_plushie" + force = 15 + attack_verb = list("bitten", "eaten", "fin slapped") + hitsound = 'sound/weapons/bite.ogg' + var/used_blessing = FALSE + +/obj/item/weapon/nullrod/carp/attack_self(mob/living/user) + if(used_blessing) + return + if(user.mind && (user.mind.assigned_role != "Chaplain")) + return + user << "You are blessed by Carp-Sie. Wild space carp will no longer attack you." + user.faction |= "carp" + used_blessing = TRUE + +/obj/item/weapon/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking + name = "monk's staff" + desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, now used to harass the clown." + w_class = 4 + force = 15 + slot_flags = SLOT_BACK + sharp = 0 + edge = 0 + hitsound = "swing_hit" + attack_verb = list("smashed", "slammed", "whacked", "thwacked") + icon = 'icons/obj/weapons.dmi' + icon_state = "bostaff0" + item_state = "bostaff0" + +/obj/item/weapon/nullrod/claymore/bostaff/IsShield() + if(prob(40)) + return 1 + else + return 0 + +/obj/item/weapon/nullrod/tribal_knife + icon_state = "crysknife" + item_state = "crysknife" + name = "arrhythmic knife" + w_class = 5 + desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn." + sharp = 1 + edge = 1 + slot_flags = null + flags = HANDSLOW + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/nullrod/tribal_knife/New() + ..() + processing_objects.Add(src) + +/obj/item/weapon/nullrod/tribal_knife/Destroy() + processing_objects.Remove(src) + return ..() + +/obj/item/weapon/nullrod/tribal_knife/process() + slowdown = rand(-2, 2) + +/obj/item/weapon/nullrod/pitchfork + icon_state = "pitchfork0" + item_state = "pitchfork0" + name = "unholy pitchfork" + w_class = 3 + desc = "Holding this makes you look absolutely devilish." + attack_verb = list("poked", "impaled", "pierced", "jabbed") + hitsound = 'sound/weapons/bladeslice.ogg' + sharp = 1 + edge = 1 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e20a3af837b..8ff2f931159 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -15,75 +15,6 @@ to_chat(viewers(user), "[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.") return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) -/obj/item/weapon/nullrod - name = "null rod" - desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae." - icon_state = "nullrod" - item_state = "nullrod" - slot_flags = SLOT_BELT - force = 15 - throw_speed = 1 - throw_range = 4 - throwforce = 10 - w_class = 1 - var/transformed = 0 - var/transform_into = /obj/item/weapon/nullrod/sword - var/transform_via = list(/obj/item/clothing/suit/armor/riot/knight/templar, /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx) - - suicide_act(mob/user) - to_chat(viewers(user), "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.") - return (BRUTELOSS|FIRELOSS) - -/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. - - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - - if(!iscarbon(user)) - M.LAssailant = null - else - M.LAssailant = user - - msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)])") - - if ((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "\red The rod slips out of your hand and hits your head.") - user.take_organ_damage(10) - user.Paralyse(20) - return - - if(M.mind) - if(M.mind.vampire) - if(ishuman(M)) - if(!M.mind.vampire.get_ability(/datum/vampire_passive/full)) - to_chat(M, "The nullrod's power interferes with your own!") - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - ..() - -/obj/item/weapon/nullrod/afterattack(var/obj/item/I as obj, mob/user as mob, proximity) - if(!proximity) - return - for(var/T in transform_via) - if(istype(I, T)) //Only the Chaplain's holy armor is capable fo performing this feat. - if(!transformed) // can't turn a sword into a sword. - var/obj/item/S = new transform_into() - to_chat(user, "You sheath the [src] into the [I]'s scabbard, transforming it into \a [S].") - user.unEquip(src) - qdel(src) - user.put_in_hands(S) - break - -/obj/item/weapon/nullrod/sword - name = "holy sword" - desc = "A sword imbued with holy power, its very presence disrupts and dampens the powers of paranormal phenomenae." - icon_state = "claymore" - item_state = "claymore" - hitsound = 'sound/weapons/bladeslice.ogg' - w_class = 3 //transforming it is not without its downsides. - sharp = 1 - edge = 1 - transformed = 1 - /obj/item/weapon/sord name = "\improper SORD" desc = "This thing is so unspeakably shitty you are having a hard time even holding it." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6f699e3a9ae..7934d49a620 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -265,7 +265,7 @@ desc = "God wills it!" icon_state = "knight_templar" item_state = "knight_templar" - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/nullrod/sword) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/nullrod/claymore) //Non-hardsuit ERT armor. /obj/item/clothing/suit/armor/vest/ert diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index c89d08b8d1b..3cd6566e731 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -340,9 +340,9 @@ flags_inv = HIDEFACE /obj/item/weapon/nullrod/fluff/chronx //chronx100: Hughe O'Splash - transform_into = /obj/item/weapon/nullrod/sword/fluff/chronx + fluff_transformations = list(/obj/item/weapon/nullrod/fluff/chronx/scythe) -/obj/item/weapon/nullrod/sword/fluff/chronx +/obj/item/weapon/nullrod/fluff/chronx/scythe name = "Soul Collector" desc = "An ancient scythe used by the worshipers of Cthulhu. Tales say it is used to prepare souls for Cthulhu's great devouring. Someone carved their name into the handle: Hughe O'Splash" icon = 'icons/obj/custom_items.dmi' diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index d44bfbbb27f..5d79e3f6237 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -39,6 +39,10 @@ if(back) tally += back.slowdown + if(l_hand && (l_hand.flags & HANDSLOW)) + tally += l_hand.slowdown + if(r_hand && (r_hand.flags & HANDSLOW)) + tally += r_hand.slowdown if(FAT in src.mutations) tally += 1.5 diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 877f91de1f4..ce634c701d9 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 c649cee3ec2..67313e46bfb 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 c0b8af3b551..1462d26e344 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 728bfaba198..a10524fb9b9 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/paradise.dme b/paradise.dme index 17dddc8065d..1c593f7e095 100644 --- a/paradise.dme +++ b/paradise.dme @@ -797,6 +797,7 @@ #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\handcuffs.dm" #include "code\game\objects\items\weapons\holosign.dm" +#include "code\game\objects\items\weapons\holy_weapons.dm" #include "code\game\objects\items\weapons\kitchen.dm" #include "code\game\objects\items\weapons\legcuffs.dm" #include "code\game\objects\items\weapons\lighters.dm"