diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 98d0f963433..e0d0fdb3d00 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -91,7 +91,7 @@ var/bomb_set
if (istype(I, /obj/item/weapon/disk/nuclear))
if(!user.drop_item())
return
- I.loc = src
+ I.forceMove(src)
auth = I
add_fingerprint(user)
return
@@ -496,6 +496,20 @@ This is here to make the tiles around the station mininuke change when it's arme
poi_list |= src
START_PROCESSING(SSobj, src)
+/obj/item/weapon/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
+ if(istype(I, /obj/item/weapon/claymore/highlander))
+ var/obj/item/weapon/claymore/highlander/H = I
+ if(H.nuke_disk)
+ user << "Wait... what?"
+ qdel(H.nuke_disk)
+ H.nuke_disk = null
+ return
+ user.visible_message("[user] captures [src]!", "You've got the disk! Defend it with your life!")
+ loc = H
+ H.nuke_disk = src
+ return 1
+ return ..()
+
/obj/item/weapon/disk/nuclear/suicide_act(mob/user)
user.visible_message("[user] is \
going delta! It looks like they're comitting suicide.")
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 0702a80d30c..07d09d07451 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -82,10 +82,14 @@
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."
+ flags = CONDUCT | NODROP
+ slot_flags = null
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
+ attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //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
+ var/bloodthirst_level = 0 //HOW THIRSTY WE ARE FOR BLOOD
+ var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
/obj/item/weapon/claymore/highlander/New()
..()
@@ -95,19 +99,27 @@ var/highlander_claymores = 0
/obj/item/weapon/claymore/highlander/Destroy()
STOP_PROCESSING(SSobj, src)
highlander_claymores--
+ if(nuke_disk)
+ nuke_disk.forceMove(get_turf(src))
+ nuke_disk.visible_message("The nuke disk is vulnerable!")
+ nuke_disk = null
return ..()
/obj/item/weapon/claymore/highlander/process()
if(isliving(loc))
var/mob/living/L = loc
if(L.stat != DEAD)
+ if(!announced)
+ handle_bloodthirst(L)
if(announced || admin_spawned || highlander_claymores > 1)
return
announced = TRUE
L.fully_heal()
- world << "[L.real_name] IS THE ONLY ONE LEFT STANDING!"
+ world << "[uppertext(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!"
+ for(var/obj/item/weapon/bloodcrawl/B in L)
+ qdel(B)
/obj/item/weapon/claymore/highlander/pickup(mob/living/user)
user << "The power of Scotland protects you! You are shielded from all stuns and knockdowns."
@@ -120,12 +132,18 @@ var/highlander_claymores = 0
/obj/item/weapon/claymore/highlander/examine(mob/user)
..()
user << "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade."
+ if(nuke_disk)
+ user << "It's holding the nuke disk!"
/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user)
var/old_target_stat = target.stat
. = ..()
+ bloodthirst_level = max(bloodthirst_level - (target.mind && target.mind.special_role == "highlander" ? 15 : 5), 0)
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
+ if(bloodthirst_level >= 30)
+ user << "[src] shakes greedily as it devours [target]'s soul. Its bloodthirst is quenched for the moment..."
+ bloodthirst_level = 0
add_notch(user)
target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!")
target.dust()
@@ -138,6 +156,7 @@ var/highlander_claymores = 0
closest_victim = H
if(!closest_victim)
user << "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby."
+ return
user << "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))]."
/obj/item/weapon/claymore/highlander/IsReflect()
@@ -196,6 +215,22 @@ var/highlander_claymores = 0
name = new_name
playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1)
+/obj/item/weapon/claymore/highlander/proc/handle_bloodthirst(mob/living/S) //THE BLADE THIRSTS FOR BLOOD AND WILL PUNISH THE WEAK OR PACIFISTIC
+ bloodthirst_level += (1 + min(notches, 10))
+ if(bloodthirst_level == 30)
+ S << "[src] shudders in your hand. It hungers for battle..."
+ if(bloodthirst_level == 60)
+ S << "[src] trembles violently. Kill someone already!"
+ if(bloodthirst_level == 90)
+ S << "[src] starts shaking viciously! Shed blood or it'll give you away!"
+ if(bloodthirst_level >= 120)
+ var/turf/T = get_turf(S)
+ for(var/mob/M in player_list - S)
+ if(M.z == T.z)
+ M << "THERE IS A COWARD WHO DOES NOT FIGHT TO THE [uppertext(dir2text(get_dir(M, T)))]. THEIR NAME IS [uppertext(S.real_name)] - SLAUGHTER THEM."
+ S << "you fucked up"
+ bloodthirst_level = 100
+
/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 affb6b57bc9..fa8998008d6 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -1,60 +1,78 @@
-/client/proc/only_one()
+var/highlander = FALSE
+/client/proc/only_one() //Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle.
if(!ticker || !ticker.mode)
alert("The game hasn't started yet!")
return
+ highlander = TRUE
world << "THERE CAN BE ONLY ONE!!!"
world << sound('sound/misc/highlander.ogg')
+ for(var/obj/item/weapon/disk/nuclear/N in poi_list)
+ N.relocate() //Gets it out of bags and such
+
for(var/mob/living/carbon/human/H in player_list)
- if(H.stat == DEAD || !(H.client)) continue
-
- ticker.mode.traitors += H.mind
- 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
- steal_objective.set_target(new /datum/objective_item/steal/nukedisc)
- 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.mind.announce_objectives()
-
- for (var/obj/item/I in H)
- if (istype(I, /obj/item/weapon/implant))
- continue
- qdel(I)
-
- 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/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)
-
- var/obj/item/weapon/card/id/W = new(H)
- W.icon_state = "centcom"
- W.access = get_all_accesses()
- 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)
-
- var/obj/item/weapon/claymore/highlander/H1 = new(H)
- H.put_in_hands(H1)
- H1.pickup(H)
+ if(H.stat == DEAD || !(H.client))
+ continue
+ H.make_scottish()
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)
+/mob/living/carbon/human/proc/make_scottish()
+ ticker.mode.traitors += mind
+ mind.special_role = "highlander"
+ dna.species.specflags |= NOGUNS //nice try jackass
+
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = mind
+ steal_objective.set_target(new /datum/objective_item/steal/nukedisc)
+ mind.objectives += steal_objective
+
+ var/datum/objective/hijack/hijack_objective = new
+ hijack_objective.explanation_text = "Escape on the shuttle alone. Ensure that nobody else makes it out."
+ hijack_objective.owner = mind
+ mind.objectives += hijack_objective
+
+ mind.announce_objectives()
+
+ for(var/obj/item/I in src)
+ if(istype(I, /obj/item/weapon/implant))
+ continue
+ qdel(I)
+ equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(src), slot_w_uniform)
+ equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(src), slot_ears)
+ equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(src), slot_head)
+ equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(src), slot_shoes)
+ equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_l_store)
+ for(var/obj/item/weapon/pinpointer/P in src)
+ P.attack_self(src)
+ var/obj/item/weapon/card/id/W = new(src)
+ W.icon_state = "centcom"
+ W.access = get_all_accesses()
+ W.access += get_all_centcom_access()
+ W.assignment = "Highlander"
+ W.registered_name = real_name
+ W.flags |= NODROP
+ W.update_label(real_name)
+ equip_to_slot_or_del(W, slot_wear_id)
+
+ var/obj/item/weapon/claymore/highlander/H1 = new(src)
+ if(!highlander)
+ H1.admin_spawned = TRUE //To prevent announcing
+ put_in_hands(H1)
+ H1.pickup(src) //For the stun shielding
+
+ var/obj/item/weapon/bloodcrawl/antiwelder = new(src)
+ antiwelder.name = "compulsion of honor"
+ antiwelder.desc = "You are unable to hold anything in this hand until you're the last one left!"
+ antiwelder.icon_state = "bloodhand_right"
+ put_in_hands(antiwelder)
+
+ src << "Your [H1.name] cries out for blood. Join in the slaughter, lest you be claimed yourself...\n\
+ Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it."
+
/proc/only_me()
if(!ticker || !ticker.mode)
alert("The game hasn't started yet!")
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 3c2c95fbbf8..e947d24c1a7 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -332,6 +332,9 @@
data_core.manifest_inject(humanc)
AnnounceArrival(humanc, rank)
AddEmploymentContract(humanc)
+ if(highlander)
+ humanc << "THERE CAN BE ONLY ONE!!!"
+ humanc.make_scottish()
joined_player_list += character.ckey