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