Highlander Patch (#20211)

* Highlander changes

* Prevents losing your claymore F O R E V E R

* Adds partial bloodthirst sating from attacking

* Reworks bloodthirst

* Forgot to push this

* Adds a disk-capture mechanic

* Changes based on feedback

* Bugfixes

* Makes the pinpointer functional
This commit is contained in:
Xhuis
2016-09-20 21:37:08 +12:00
committed by oranges
parent cb7036e66c
commit ea21aa4e00
4 changed files with 117 additions and 47 deletions
+15 -1
View File
@@ -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 << "<span class='notice'>Wait... what?</span>"
qdel(H.nuke_disk)
H.nuke_disk = null
return
user.visible_message("<span class='warning'>[user] captures [src]!</span>", "<span class='userdanger'>You've got the disk! Defend it with your life!</span>")
loc = H
H.nuke_disk = src
return 1
return ..()
/obj/item/weapon/disk/nuclear/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is \
going delta! It looks like they're comitting suicide.</span>")
+37 -2
View File
@@ -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 = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\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("<span class='warning'>The nuke disk is vulnerable!</span>")
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 << "<span class='userdanger'>[L.real_name] IS THE ONLY ONE LEFT STANDING!</span>"
world << "<span class='userdanger'>[uppertext(L.real_name)] IS THE ONLY ONE LEFT STANDING!</span>"
world << sound('sound/misc/highlander_only_one.ogg')
L << "<span class='notice'>YOU ARE THE ONLY ONE LEFT STANDING!</span>"
for(var/obj/item/weapon/bloodcrawl/B in L)
qdel(B)
/obj/item/weapon/claymore/highlander/pickup(mob/living/user)
user << "<span class='notice'>The power of Scotland protects you! You are shielded from all stuns and knockdowns.</span>"
@@ -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 << "<span class='boldwarning'>It's holding the nuke disk!</span>"
/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 << "<span class='notice'>[src] shakes greedily as it devours [target]'s soul. Its bloodthirst is quenched for the moment...</span>"
bloodthirst_level = 0
add_notch(user)
target.visible_message("<span class='warning'>[target] crumbles to dust beneath [user]'s blows!</span>", "<span class='userdanger'>As you fall, your body crumbles to dust!</span>")
target.dust()
@@ -138,6 +156,7 @@ var/highlander_claymores = 0
closest_victim = H
if(!closest_victim)
user << "<span class='warning'>[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.</span>"
return
user << "<span class='danger'>[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].</span>"
/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 << "<span class='warning'>[src] shudders in your hand. It hungers for battle...</span>"
if(bloodthirst_level == 60)
S << "<span class='boldwarning'>[src] trembles violently. Kill someone already!</span>"
if(bloodthirst_level == 90)
S << "<span class='userdanger'>[src] starts shaking viciously! Shed blood or it'll give you away!</span>"
if(bloodthirst_level >= 120)
var/turf/T = get_turf(S)
for(var/mob/M in player_list - S)
if(M.z == T.z)
M << "<span class='userdanger'>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.</span>"
S << "<span class='notice'>you fucked up</span>"
bloodthirst_level = 100
/obj/item/weapon/katana
name = "katana"
desc = "Woefully underpowered in D20"
+62 -44
View File
@@ -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 << "<span class='userdanger'><i>THERE CAN BE ONLY ONE!!!</i></span>"
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("<span class='adminnotice'>[key_name_admin(usr)] used THERE CAN BE ONLY ONE!</span>")
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 << "<span class='boldannounce'>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.</span>"
/proc/only_me()
if(!ticker || !ticker.mode)
alert("The game hasn't started yet!")
@@ -332,6 +332,9 @@
data_core.manifest_inject(humanc)
AnnounceArrival(humanc, rank)
AddEmploymentContract(humanc)
if(highlander)
humanc << "<span class='userdanger'><i>THERE CAN BE ONLY ONE!!!</i></span>"
humanc.make_scottish()
joined_player_list += character.ckey