diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 12a7943dfa5..983705144d1 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -54,6 +54,123 @@ user.visible_message("[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") return(BRUTELOSS) +var/highlander_claymores = 0 +/obj/item/weapon/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS + desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." + block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY + attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved", "gored") //ONLY THE MOST VISCERAL ATTACK VERBS + var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE + var/announced = FALSE //IF WE ARE THE ONLY ONE LEFT STANDING + +/obj/item/weapon/claymore/highlander/New() + ..() + START_PROCESSING(SSobj, src) + highlander_claymores++ + +/obj/item/weapon/claymore/highlander/Destroy() + STOP_PROCESSING(SSobj, src) + highlander_claymores-- + return ..() + +/obj/item/weapon/claymore/highlander/process() + if(isliving(loc)) + var/mob/living/L = loc + if(L.stat != DEAD) + if(announced || admin_spawned || highlander_claymores > 1) + return + announced = TRUE + L.fully_heal() + world << "[L.real_name] IS THE ONLY ONE LEFT STANDING!" + world << sound('sound/misc/highlander_only_one.ogg') + L << "YOU ARE THE ONLY ONE LEFT STANDING!" + +/obj/item/weapon/claymore/highlander/pickup(mob/living/user) + user << "The power of Scotland protects you! You are shielded from all stuns and knockdowns." + user.add_stun_absorption("highlander", INFINITY, 1, "is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") + +/obj/item/weapon/claymore/highlander/dropped(mob/living/user) + user << "The power of Scotland fades away! You are no longer shielded from stuns." + user.add_stun_absorption("highlander", 0.1, 1, "is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") + +/obj/item/weapon/claymore/highlander/examine(mob/user) + ..() + user << "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." + +/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user) + var/old_target_stat = target.stat + . = ..() + if(target && target.stat == DEAD && old_target_stat != DEAD && target.mind && target.mind.special_role == "highlander") + user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES + add_notch(user) + target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") + target.dust() + +/obj/item/weapon/claymore/highlander/attack_self(mob/living/user) + var/closest_victim + var/closest_distance = 255 + for(var/mob/living/carbon/human/H in player_list - user) + if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) + closest_victim = H + if(!closest_victim) + user << "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby." + user << "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))]." + +/obj/item/weapon/claymore/highlander/IsReflect() + return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? + +/obj/item/weapon/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE + notches++ + force++ + var/new_name = name + switch(notches) + if(1) + user << "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade." + user << "You feel your fallen foe's soul entering your blade, restoring your wounds!" + new_name = "notched claymore" + if(2) + user << "Another falls before you. Another soul fuses with your own. Another notch in the blade." + new_name = "double-notched claymore" + color = rgb(255, 235, 235) + if(3) + user << "You're beginning to relish the thrill of battle." + new_name = "triple-notched claymore" + color = rgb(255, 215, 215) + if(4) + user << "You've lost count of how many you've killed." + new_name = "many-notched claymore" + color = rgb(255, 195, 195) + if(5) + user << "Five voices now echo in your mind, cheering the slaughter." + new_name = "battle-tested claymore" + color = rgb(255, 175, 175) + if(6) + user << "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe." + new_name = "battle-scarred claymore" + color = rgb(255, 155, 155) + if(7) + user << "Kill. Butcher. Conquer." + new_name = "vicious claymore" + color = rgb(255, 135, 135) + if(8) + user << "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE." + new_name = "bloodthirsty claymore" + color = rgb(255, 115, 115) + if(9) + user << "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE." + new_name = "gore-stained claymore" + color = rgb(255, 95, 95) + if(10) + user.visible_message("[user]'s eyes light up with a vengeful fire!", \ + "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") + user.update_icons() + new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" + icon_state = "claymore_valhalla" + item_state = "cultblade" + color = initial(color) + + name = new_name + playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) + /obj/item/weapon/katana name = "katana" desc = "Woefully underpowered in D20" diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 7a1377afe78..bddc973b359 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -3,12 +3,16 @@ alert("The game hasn't started yet!") return + world << "THERE CAN BE ONLY ONE!!!" + world << sound('sound/misc/highlander.ogg') + for(var/mob/living/carbon/human/H in player_list) - if(H.stat == 2 || !(H.client)) continue - if(is_special_character(H)) continue + if(H.stat == DEAD || !(H.client)) continue ticker.mode.traitors += H.mind - H.mind.special_role = "traitor" + H.mind.special_role = "highlander" + + H.dna.species.specflags |= NOGUNS //nice try jackass var/datum/objective/steal/steal_objective = new steal_objective.owner = H.mind @@ -16,10 +20,10 @@ H.mind.objectives += steal_objective var/datum/objective/hijack/hijack_objective = new + hijack_objective.explanation_text = "Escape on the shuttle alone. Ensure nobody else makes it out." hijack_objective.owner = H.mind H.mind.objectives += hijack_objective - H << "You are the traitor." H.mind.announce_objectives() for (var/obj/item/I in H) @@ -27,10 +31,9 @@ continue qdel(I) - H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_ears) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store) @@ -40,12 +43,17 @@ W.access += get_all_centcom_access() W.assignment = "Highlander" W.registered_name = H.real_name + W.flags |= NODROP W.update_label(H.real_name) H.equip_to_slot_or_del(W, slot_wear_id) - message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!") - log_admin("[key_name(usr)] used there can be only one.") + var/obj/item/weapon/claymore/highlander/H1 = new(H) + H.put_in_hands(H1) + H1.pickup(H) + message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!") + log_admin("[key_name(usr)] used THERE CAN BE ONLY ONE.") + addtimer(SSshuttle.emergency, "request", 50, FALSE, null, 1) /proc/only_me() if(!ticker || !ticker.mode) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index f81067d75ea..1c3de2d39d3 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -87,6 +87,10 @@ dog_fashion = /datum/dog_fashion/head/beret +/obj/item/clothing/head/beret/highlander + desc = "That was white fabric. Was." + flags = NODROP + dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES //Security diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index e39452362c6..6ee8b505403 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -355,6 +355,10 @@ fitted = FEMALE_UNIFORM_TOP can_adjust = 0 +/obj/item/clothing/under/kilt/highlander + desc = "You're the only one worthy of this kilt." + flags = NODROP + /obj/item/clothing/under/sexymime name = "sexy mime outfit" desc = "The only time when you DON'T enjoy looking at someone's rack." diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index f9cddb028d6..993c6dc509b 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/sound/misc/highlander.ogg b/sound/misc/highlander.ogg new file mode 100644 index 00000000000..2116f8a9724 Binary files /dev/null and b/sound/misc/highlander.ogg differ diff --git a/sound/misc/highlander_only_one.ogg b/sound/misc/highlander_only_one.ogg new file mode 100644 index 00000000000..3b69d26ade5 Binary files /dev/null and b/sound/misc/highlander_only_one.ogg differ