Cult and antag fixes/tweaks (#3524)

This commit is contained in:
Alberyk
2017-10-03 00:34:01 -03:00
committed by Lohikar
parent 95bb5c7668
commit 8e53ea0c78
19 changed files with 91 additions and 61 deletions
+4
View File
@@ -65,6 +65,10 @@
return 1
if(istype(A,/obj/item/device/radio/beacon))
return 1
if(istype(A,/obj/item/phylactery))
return 1
if(istype(A,/obj/effect/decal/wizard_mark))
return 1
for(var/i=1, i<=A.contents.len, i++)
var/atom/B = A.contents[i]
+2 -2
View File
@@ -5,12 +5,12 @@
bantype = "changeling"
feedback_tag = "changeling_objective"
restricted_jobs = list("AI", "Cyborg", "Head of Security", "Captain", "Internal Affairs Agent")
protected_jobs = list("Security Officer", "Warden", "Detective")
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame")
welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
antaghud_indicator = "hudchangeling"
faction = "Changeling"
/datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player)
+1 -1
View File
@@ -18,7 +18,7 @@ var/datum/antagonist/cultist/cult
role_text_plural = "Cultists"
bantype = "cultist"
restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Head of Security", "Captain")
protected_jobs = list("Security Officer", "Warden", "Detective")
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
feedback_tag = "cult_objective"
antag_indicator = "cult"
welcome_text = "You have a talisman in your possession; one that will help you start the cult on this station. Use it well and remember - there are others."
@@ -29,7 +29,7 @@ var/datum/antagonist/revolutionary/revs
faction_invisible = 1
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Captain", "Head of Security", "Internal Affairs Agent")
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Captain", "Head of Security", "Internal Affairs Agent")
/datum/antagonist/revolutionary/New()
..()
+1 -1
View File
@@ -4,7 +4,7 @@ var/datum/antagonist/traitor/traitors
/datum/antagonist/traitor
id = MODE_TRAITOR
restricted_jobs = list("Internal Affairs Agent", "Head of Security", "Captain")
protected_jobs = list("Security Officer", "Warden", "Detective")
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
faction = "syndicate"
+1 -1
View File
@@ -7,7 +7,7 @@ var/datum/antagonist/vampire/vamp = null
bantype = "vampires"
feedback_tag = "vampire_objective"
restricted_jobs = list("AI", "Cyborg", "Chaplain", "Head of Security", "Captain", "Internal Affairs Agent")
protected_jobs = list("Security Officer", "Warden", "Detective")
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame","Diona")
welcome_text = "You are a Vampire! Use the \"<b>Vampire Help</b>\" command to learn about the backstory and mechanics! Stay away from the Chaplain, and use the darkness to your advantage."
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
+4 -4
View File
@@ -54,7 +54,7 @@
qdel(src)
/obj/item/clothing/head/culthood
name = "hood"
name = "ragged hood"
icon_state = "culthood"
desc = "A torn, dust-caked hood."
flags_inv = HIDEFACE|HIDEEARS|HIDEEYES
@@ -78,7 +78,7 @@
icon_state = "cult_hoodalt"
/obj/item/clothing/suit/cultrobes
name = "robes"
name = "ragged robes"
desc = "A ragged, dusty set of robes."
icon_state = "cultrobes"
item_state = "cultrobes"
@@ -104,7 +104,7 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/head/helmet/space/cult
name = "cult helmet"
name = "eldritch helmet"
desc = "A bulky helmet, bristling with spikes. It looks space proof."
icon_state = "cult_helmet"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
@@ -114,7 +114,7 @@
return
/obj/item/clothing/suit/space/cult
name = "cult armour"
name = "eldritch armour"
icon_state = "cult_armour"
item_state = "cult_armour"
desc = "A bulky suit of armour, bristling with spikes. It looks space proof."
+16 -13
View File
@@ -116,7 +116,7 @@ var/list/sacrificed = list()
if(!target) //didn't find any new targets
if(!converting.len)
fizzle()
fizzle(user)
else
user << "<span class='danger'>You sense that the power of the dark one is already working away at them.</span>"
return
@@ -179,6 +179,7 @@ var/list/sacrificed = list()
cult.add_antagonist(target.mind)
converting -= target
target.hallucination = 0 //sudden clarity
playsound(target, 'sound/effects/bloodcult.ogg', 100, 1)
sleep(100) //proc once every 10 seconds
return 1
@@ -187,7 +188,7 @@ var/list/sacrificed = list()
/obj/effect/rune/proc/tearreality(var/mob/living/user)
if(!cult.allow_narsie)
return fizzle()
return fizzle(user)
var/list/cultists = new()
for(var/mob/M in range(1,src))
@@ -214,7 +215,7 @@ var/list/sacrificed = list()
user.say("Ta'gh fara[pick("'","`")]qha fel d'amar det!")
else
user.whisper("Ta'gh fara[pick("'","`")]qha fel d'amar det!")
playsound(U, 'sound/items/Welder2.ogg', 25, 1)
playsound(U, 'sound/magic/Disable_Tech.ogg', 25, 1)
var/turf/T = get_turf(U)
if(T)
T.hotspot_expose(700,125)
@@ -242,6 +243,7 @@ var/list/sacrificed = list()
user.visible_message("<span class='danger'>Blood flows from the rune into [user]!</span>", \
"<span class='danger'>The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.</span>", \
"<span class='warning'>You hear a liquid flowing.</span>")
playsound(user, 'sound/magic/enter_blood.ogg', 100, 1)
if(user.bhunger)
user.bhunger = max(user.bhunger-2*drain,0)
@@ -325,7 +327,7 @@ var/list/sacrificed = list()
user << "<span class='warning'>The Geometer of Blood wants that corpse for himself.</span>"
else
user << "<span class='warning'>The sacrifical corpse is not dead. You must free it from this world of illusions before it may be used.</span>"
return fizzle()
return fizzle(user)
var/mob/dead/observer/ghost
for(var/mob/dead/observer/O in loc)
@@ -421,7 +423,7 @@ var/list/sacrificed = list()
var/obj/effect/rune/this_rune = src
src = null
if(user.loc!=this_rune.loc)
return this_rune.fizzle()
return this_rune.fizzle(user)
var/mob/dead/observer/ghost
for(var/mob/dead/observer/O in this_rune.loc)
if(!O.client) continue
@@ -430,9 +432,9 @@ var/list/sacrificed = list()
ghost = O
break
if(!ghost)
return this_rune.fizzle()
return this_rune.fizzle(user)
if(jobban_isbanned(ghost, "cultist"))
return this_rune.fizzle()
return this_rune.fizzle(user)
user.say("Gal'h'rfikk harfrandid mud[pick("'","`")]gib!")
var/mob/living/carbon/human/apparition/D = new(this_rune.loc)
@@ -450,6 +452,7 @@ var/list/sacrificed = list()
D.underwear = 0
D.key = ghost.key
cult.add_antagonist(D.mind)
playsound(loc, 'sound/magic/exit_blood.ogg', 100, 1)
if(!chose_name)
D.real_name = pick("Anguished", "Blasphemous", "Corrupt", "Cruel", "Depraved", "Despicable", "Disturbed", "Exacerbated", "Foul", "Hateful", "Inexorable", "Implacable", "Impure", "Malevolent", "Malignant", "Malicious", "Pained", "Profane", "Profligate", "Relentless", "Resentful", "Restless", "Spiteful", "Tormented", "Unclean", "Unforgiving", "Vengeful", "Vindictive", "Wicked", "Wronged")
@@ -484,7 +487,7 @@ var/list/sacrificed = list()
if (!newtalisman)
if (unsuitable_newtalisman)
user << "<span class='warning'>The blank is tainted. It is unsuitable.</span>"
return fizzle()
return fizzle(user)
var/obj/effect/rune/imbued_from
var/obj/item/weapon/paper/talisman/T
@@ -577,7 +580,7 @@ var/list/sacrificed = list()
var/input = input(user, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")//sanitize() below, say() and whisper() have their own
if(!input)
if (istype(src))
fizzle()
fizzle(user)
return 0
else
return 0
@@ -783,7 +786,7 @@ var/list/sacrificed = list()
if(users.len>=3)
var/mob/living/carbon/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - users)
if(!cultist)
return fizzle()
return fizzle(user)
if (cultist == user) //just to be sure.
return
if(!(cultist.buckled || \
@@ -828,12 +831,12 @@ var/list/sacrificed = list()
if(users.len>=3)
var/mob/living/carbon/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - user)
if(!cultist)
return fizzle()
return fizzle(user)
if (cultist == user) //just to be sure.
return
if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet)))
user << "<span class='warning'>You cannot summon \the [cultist], for \his shackles of blood are strong.</span>"
return fizzle()
return fizzle(user)
cultist.loc = src.loc
cultist.lying = 1
cultist.regenerate_icons()
@@ -875,7 +878,7 @@ var/list/sacrificed = list()
admin_attacker_log_many_victims(user, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on")
qdel(src)
else
return fizzle()
return fizzle(user)
else
var/list/affected = new()
for(var/mob/living/carbon/C in range(7,user))
@@ -222,6 +222,7 @@
visible_message("<span class='danger'>[src.name]'s eyes no longer glow with violent rage, their form reverting to resemble that of a normal human's.</span>", "<span class='danger'>The beast within you retreats. You gain control over your body once more.</span>")
verbs -= /mob/living/carbon/human/proc/grapple
regenerate_icons()
// Removes all vampire powers.
/mob/proc/remove_vampire_powers()
+7
View File
@@ -13,6 +13,9 @@
if(shattered) return
if(user.mind && user.mind.vampire && (!(user.mind.vampire.status & VAMP_ISTHRALL)))
user << "<span class='notice'>Your reflection appears distorted on the surface of \the [src].</span>"
if(ishuman(user))
var/datum/nano_module/appearance_changer/AC = ui_users[user]
if(!AC)
@@ -108,6 +111,10 @@
var/list/ui_users = list()
/obj/item/weapon/mirror/attack_self(mob/user as mob)
if(user.mind && user.mind.vampire && (!(user.mind.vampire.status & VAMP_ISTHRALL)))
user << "<span class='notice'>Your reflection appears distorted on the surface of \the [src].</span>"
if(ishuman(user))
var/datum/nano_module/appearance_changer/AC = ui_users[user]
if(!AC)
+6 -21
View File
@@ -652,7 +652,7 @@
M.equip_to_slot_or_del(pda, slot_r_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pistol(M), slot_belt)
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card"
@@ -677,7 +677,7 @@
M.equip_to_slot_or_del(pda, slot_r_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pistol(M), slot_belt)
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card"
@@ -688,22 +688,7 @@
M.equip_to_slot_or_del(W, slot_wear_id)
if("emergency response team")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_all_centcom_access()
W.assignment = "Emergency Response Team"
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
ert.equip(M)
if("protection detail")
M.equip_to_slot_or_del(new /obj/item/clothing/under/ccpolice(M), slot_w_uniform)
@@ -713,7 +698,7 @@
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M.back), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M.back), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat/peacekeeper(M.back), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/accessory/holster/hip(M.back), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pistol(M.back), slot_in_backpack)
@@ -821,7 +806,7 @@
W.assignment = "Special Operations Officer"
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
if("blue wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
@@ -857,7 +842,7 @@
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("soviet admiral")
M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
+2 -1
View File
@@ -74,12 +74,13 @@
playsound(src, "clownstep", 20, 1)
/obj/item/clothing/shoes/cult
name = "boots"
name = "ragged boots"
desc = "A ragged, dusty pair of boots."
icon_state = "cult"
item_state = "cult"
force = 5
siemens_coefficient = 0
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
+2
View File
@@ -432,6 +432,8 @@
addtimer(thecallback, offset)
offset += rand(5, 15)
playsound(src.loc, 'sound/effects/light_flicker.ogg', 75, 1)
addtimer(CALLBACK(src, .proc/end_flicker), offset)
/obj/machinery/light/proc/handle_flicker()
@@ -2,18 +2,19 @@
name = "blood packs bags"
desc = "This box contains blood packs."
icon_state = "sterile"
New()
..()
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
/obj/item/weapon/storage/box/bloodpacks/fill()
..()
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
/obj/item/weapon/reagent_containers/blood
name = "BloodPack"
name = "blood pack"
desc = "Contains blood used for transfusion."
icon = 'icons/obj/bloodpack.dmi'
icon_state = "empty"
@@ -21,11 +22,12 @@
var/blood_type = null
var/vampire_marks = null
var/being_feed = FALSE
/obj/item/weapon/reagent_containers/blood/Initialize()
. = ..()
if(blood_type != null)
name = "BloodPack [blood_type]"
name = "blood pack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
@@ -41,8 +43,12 @@
/obj/item/weapon/reagent_containers/blood/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob, var/target_zone)
if (user == M && (user.mind.vampire))
if (being_feed)
user << "<span class='notice'>You are already feeding on \the [src].</span>"
return
if (reagents.get_reagent_amount("blood"))
user.visible_message("<span class='warning'>[user] raises \the [src] up to their mouth and bites into it.</span>", "<span class='notice'>You raise \the [src] up to your mouth and bite into it, starting to drain its contents.<br>You need to stand still.</span>")
being_feed = TRUE
vampire_marks = TRUE
if (!LAZYLEN(src.other_DNA))
LAZYADD(src.other_DNA, M.dna.unique_enzymes)
@@ -61,7 +67,7 @@
if (reagents.get_reagent_amount("blood") < 1)
break
user.visible_message("<span class='warning'>[user] licks \his fangs dry, lowering \the [src].</span>", "<span class='notice'>You lick your fangs clean of the tasteless blood.</span>")
being_feed = FALSE
else
..()
@@ -73,14 +79,14 @@
/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/P as obj, mob/user as mob)
..()
if (istype(P, /obj/item/weapon/pen))
if (reagents.get_reagent_amount("blood") && name != "Empty BloodPack") //Stops people mucking with bloodpacks that are filled
if (reagents.get_reagent_amount("blood") && name != "empty blood pack") //Stops people mucking with bloodpacks that are filled
usr << "<span class='notice'>You can't relabel [name] until it is empty!</span>"
return
var/blood_name = input(usr, "What blood type would you like to label it as?", "Blood Types") in list("A+", "A-", "B+", "B-", "O+", "O-", "AB+", "AB-", "Cancel")
if (blood_name == "Cancel") return
var/obj/item/i = usr.get_active_hand()
if (!istype(i, /obj/item/weapon/pen) || !in_range(user, src)) return //Checks to see if pen is still held or bloodback is in range
name = "BloodPack [blood_name]"
name = "blood pack [blood_name]"
desc = "Contains blood used for transfusion."
usr << "<span class='notice'>You label the blood pack as [blood_name].</span>"
return
@@ -167,12 +173,12 @@
blood_type = "O-"
/obj/item/weapon/reagent_containers/blood/empty
name = "Empty BloodPack"
name = "empty blood pack"
desc = "Seems pretty useless... Maybe if there were a way to fill it?"
icon_state = "empty"
/obj/item/weapon/reagent_containers/blood/ripped
name = "Ripped BloodPack"
name = "ripped blood pack"
desc = "It's torn up and useless."
icon = 'icons/obj/bloodpack.dmi'
icon_state = "ripped"
+14
View File
@@ -17,6 +17,10 @@
user << "You can't contract with yourself!"
return
if(iscultist(user))
user << "Your soul already belongs to other powers!"
return
var/ans = alert(user,"The contract clearly states that signing this contract will bind your soul to \the [contract_master]. Are you sure you want to continue?","[src]","Yes","No")
if(ans == "Yes")
@@ -119,42 +123,52 @@
contract_master = "\improper Wizard Academy"
/obj/item/weapon/contract/boon/wizard/artificer
name = "artificer contract"
path = /spell/aoe_turf/conjure/construct
desc = "This contract has a passage dedicated to an entity known as 'Nar-Sie'"
/obj/item/weapon/contract/boon/wizard/fireball
name = "fireball contract"
path = /spell/targeted/projectile/dumbfire/fireball
desc = "This contract feels warm to the touch."
/obj/item/weapon/contract/boon/wizard/smoke
name = "smoke contract"
path = /spell/aoe_turf/smoke
desc = "This contract smells as dank as they come."
/obj/item/weapon/contract/boon/wizard/mindswap
name = "mindswap contract"
path = /spell/targeted/mind_transfer
desc = "This contract looks ragged and torn."
/obj/item/weapon/contract/boon/wizard/forcewall
name = "forcewall contract"
path = /spell/aoe_turf/conjure/forcewall
contract_master = "\improper Mime Federation"
desc = "This contract has a dedication to mimes everywhere at the top."
/obj/item/weapon/contract/boon/wizard/knock
name = "knock contract"
path = /spell/aoe_turf/knock
desc = "This contract is hard to hold still."
/obj/item/weapon/contract/boon/wizard/horsemask
name = "horsemask contract"
path = /spell/targeted/equip_item/horsemask
desc = "This contract is more horse than your mind has room for."
/obj/item/weapon/contract/boon/wizard/charge
name = "charge contract"
path = /spell/aoe_turf/charge
desc = "This contract is made of 100% post-consumer wizard."
/obj/item/weapon/contract/boon/wizard/gestalt
name = "conjure gestalt contract"
path = /spell/aoe_turf/conjure/grove/gestalt
desc = "This contract is a druid's favorite."
/obj/item/weapon/contract/boon/wizard/statue
name = "flesh to stone contract"
path = /spell/targeted/flesh_to_stone
desc = "This contract is truly petrifying."
+7
View File
@@ -0,0 +1,7 @@
author: Alberyk
delete-after: True
changes:
- soundadd: "Added new sounds to some cult runes."
- tweak: "Cultists can not accept wizard contracts anymore."
Binary file not shown.
Binary file not shown.
Binary file not shown.