Merge pull request #8284 from Aurorablade/CultPassBug

Cult pass split: Bugs and runes
This commit is contained in:
tigercat2000
2018-03-19 13:28:36 -07:00
committed by GitHub
8 changed files with 128 additions and 39 deletions
+1 -1
View File
@@ -49,7 +49,7 @@
//#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath.
//#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes
#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes
//#define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage
+41 -3
View File
@@ -121,10 +121,10 @@
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
/obj/item/clothing/suit/space/cult
name = "cult armour"
name = "cult armor"
icon_state = "cult_armour"
item_state = "cult_armour"
desc = "A bulky suit of armour, bristling with spikes. It looks space proof."
desc = "A bulky suit of armor, bristling with spikes. It looks space proof."
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank)
slowdown = 1
@@ -343,7 +343,6 @@
else
to_chat(C, "<span class='danger'>The veil cannot be torn here!</span>")
/obj/item/clothing/suit/space/eva/plasmaman/cultist
name = "plasmaman cultist armor"
icon_state = "plasmaman_cult"
@@ -358,3 +357,42 @@
base_state = "plasmamanCult_helmet"
desc = "A helmet designed by cultists. It glows menacingly with unearthly flames."
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
/obj/item/weapon/melee/cultblade/ghost
name = "eldritch sword"
force = 15
flags = NODROP
/obj/item/weapon/melee/cultblade/ghost/dropped(mob/living/carbon/human/user)
..()
qdel(src)
/obj/item/clothing/head/culthood/alt/ghost
flags = NODROP
/obj/item/clothing/head/culthood/alt/ghost/dropped(mob/living/carbon/human/user)
..()
qdel(src)
/obj/item/clothing/suit/cultrobes/alt/ghost
flags = NODROP
/obj/item/clothing/suit/cultrobes/alt/ghost/dropped(mob/living/carbon/human/user)
..()
qdel(src)
/obj/item/clothing/shoes/cult/ghost
flags = NODROP
/obj/item/clothing/shoes/cult/ghost/dropped(mob/living/carbon/human/user)
..()
qdel(src)
/datum/outfit/ghost_cultist
name = "Cultist Ghost"
uniform = /obj/item/clothing/under/color/black
suit = /obj/item/clothing/suit/cultrobes/alt/ghost
shoes = /obj/item/clothing/shoes/cult/ghost
head = /obj/item/clothing/head/culthood/alt/ghost
r_hand = /obj/item/weapon/melee/cultblade/ghost
+22 -18
View File
@@ -21,10 +21,10 @@
if("convert")
explanation = "We must increase our influence before we can summon [ticker.mode.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions."
if("bloodspill")
spilltarget = 70 + rand(0,player_list.len * 3)
spilltarget = 100 + rand(0,player_list.len * 3)
explanation = "We must prepare this place for [ticker.mode.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles."
if("sacrifice")
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
for(var/datum/mind/cult_mind in cult)
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
@@ -47,7 +47,7 @@
message_admins("Picking a new Cult objective.")
var/new_objective = "eldergod"
//the idea here is that if the cult performs well, the should get more objectives before they can summon Nar-Sie.
if(cult.len >= 4)//if there are less than 4 remaining cultists, they get a free pass to the summon objective.
if(cult.len >= 4) //if there are less than 4 remaining cultists, they get a free pass to the summon objective.
if(current_objective <= prenarsie_objectives)
var/list/unconvertables = get_unconvertables()
if(unconvertables.len <= (cult.len * 2))//if cultists are getting radically outnumbered, they get a free pass to the summon objective.
@@ -81,12 +81,13 @@
spilltarget = 100 + rand(0,player_list.len * 3)
explanation = "We must prepare this place for [ticker.mode.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles."
if("sacrifice")
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for their blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
for(var/datum/mind/cult_mind in cult)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes have completed your task, but this place requires yet more preparation!</span>")
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
if(cult_mind)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes have completed your task, but this place requires yet more preparation!</span>")
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
message_admins("New Cult Objective: [new_objective]")
log_admin("New Cult Objective: [new_objective]")
@@ -95,12 +96,13 @@
/datum/game_mode/cult/proc/gtfo_phase()//YOU HAD ONE JOB
var/explanation
objectives +="survive"
objectives += "survive"
explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station."
for(var/datum/mind/cult_mind in cult)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes suddenly feel the urge to do your best, but survive!</span>")
to_chat(cult_mind.current, "<B>Objective Survive</B>: [explanation]")
cult_mind.memory += "<B>Objective Survive</B>: [explanation]<BR>"
if(cult_mind)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes suddenly feel the urge to do your best, but survive!</span>")
to_chat(cult_mind.current, "<B>Objective Survive</B>: [explanation]")
cult_mind.memory += "<B>Objective Survive</B>: [explanation]<BR>"
/datum/game_mode/cult/proc/second_phase()
@@ -115,9 +117,10 @@
explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
for(var/datum/mind/cult_mind in cult)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes have succeeded in preparing the station for the ultimate ritual!</span>")
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
if(cult_mind)
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes have succeeded in preparing the station for the ultimate ritual!</span>")
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
/datum/game_mode/cult/proc/third_phase()
current_objective++
@@ -132,15 +135,16 @@
switch(last_objective)
if("harvest")
explanation = "[ticker.mode.cultdat.entity_title1] hungers for his first meal of this never-ending day. Offer him [harvest_target] humans in sacrifice."
explanation = "[ticker.mode.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice."
if("hijack")
explanation = "[ticker.mode.cultdat.entity_name] wishes for his troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it."
explanation = "[ticker.mode.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it."
if("massacre")
explanation = "[ticker.mode.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)."
for(var/datum/mind/cult_mind in cult)
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
if(cult_mind)
to_chat(cult_mind.current, "<B>Objective #[current_objective]</B>: [explanation]")
cult_mind.memory += "<B>Objective #[current_objective]</B>: [explanation]<BR>"
message_admins("Last Cult Objective: [last_objective]")
log_admin("Last Cult Objective: [last_objective]")
+2 -1
View File
@@ -109,6 +109,7 @@
target cultists!). If this creature has a mind, a soulstone will be created and the creature's soul transported to it. Sacrificing the dead can be done alone, but sacrificing living crew <b>or your cult's target</b> will require 3 cultists. \
Soulstones used on construct shells will move that soul into a powerful construct of your choice.<br><br>"
text += "<font color='red'><b>Rite of Resurrection</b></font><br>This rune requires two corpses. To perform the ritual, place the corpse you wish to revive onto \
the rune and the offering body adjacent to it. When the rune is invoked, the body to be sacrificed will turn to dust, the life force flowing into the revival target. Assuming the target is not moved \
within a few seconds, they will be brought back to life, healed of all ailments.<br><br>"
@@ -293,7 +294,7 @@
var/mob/living/carbon/human/H = user
var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot")
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
user.visible_message("<span class='warning'>[user] cuts open their \The [affecting] and begins writing in their own blood!</span>", "<span class='cult'>You slice open your [affecting] and begin drawing a sigil of [ticker.mode.cultdat.entity_title3].</span>")
user.visible_message("<span class='warning'>[user] cuts open their [affecting] and begins writing in their own blood!</span>", "<span class='cult'>You slice open your [affecting] and begin drawing a sigil of [ticker.mode.cultdat.entity_title3].</span>")
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE , affecting)
if(!do_after(user, initial(rune_to_scribe.scribe_delay)-scribereduct, target = get_turf(user)))
for(var/V in shields)
+61 -15
View File
@@ -36,6 +36,8 @@ To draw a rune, use an arcane tome.
var/req_keyword = 0 //If the rune requires a keyword - go figure amirite
var/keyword //The actual keyword for the rune
var/invoke_damage = 0 //how much damage invokers take when invoking it
/obj/effect/rune/New(loc, set_keyword)
..()
@@ -118,6 +120,8 @@ structure_check() searches for nearby cultist structures required for the invoca
//This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists.
var/list/invokers = list() //people eligible to invoke the rune
var/list/chanters = list() //people who will actually chant the rune when passed to invoke()
if(invisibility == INVISIBILITY_OBSERVER)//hidden rune
return
if(user)
chanters |= user
invokers |= user
@@ -146,11 +150,14 @@ structure_check() searches for nearby cultist structures required for the invoca
/obj/effect/rune/proc/invoke(var/list/invokers)
//This proc contains the effects of the rune as well as things that happen afterwards. If you want it to spawn an object and then delete itself, have both here.
if(invocation)
for(var/M in invokers)
var/mob/living/L = M
for(var/M in invokers)
var/mob/living/L = M
if(invocation)
L.say(invocation)
L.changeNext_move(CLICK_CD_MELEE)//THIS IS WHY WE CAN'T HAVE NICE THINGS
if(invoke_damage)
L.apply_damage(invoke_damage, BRUTE)
to_chat(L, "<span class='cultitalic'>[src] saps your strength!</span>")
do_invoke_glow()
/obj/effect/rune/proc/burn_invokers(var/list/mobstoburn)
@@ -181,13 +188,13 @@ structure_check() searches for nearby cultist structures required for the invoca
cultist_name = "malformed rune"
cultist_desc = "a senseless rune written in gibberish. No good can come from invoking this."
invocation = "Ra'sha yoka!"
invoke_damage = 30
/obj/effect/rune/malformed/invoke(var/list/invokers)
..()
for(var/M in invokers)
var/mob/living/L = M
to_chat(M, "<span class='cultitalic'><b>You feel your life force draining. [ticker.mode.cultdat.entity_title3] is displeased.</b></span>")
L.apply_damage(30, BRUTE)
to_chat(L, "<span class='cultitalic'><b>You feel your life force draining. [ticker.mode.cultdat.entity_title3] is displeased.</b></span>")
qdel(src)
/mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes
@@ -252,6 +259,7 @@ var/list/teleport_runes = list()
icon_state = "2"
req_keyword = 1
var/listkey
invoke_damage = 6 //but theres some checks for z-level
/obj/effect/rune/teleport/New(loc, set_keyword)
..()
@@ -316,6 +324,12 @@ var/list/teleport_runes = list()
to_chat(user, "<span class='cult'>You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].</span>")
if(moveuserlater)
user.forceMove(get_turf(actual_selected_rune))
var/mob/living/carbon/human/H = user
if(user.z != T.z)
H.bleed(5)
user.apply_damage(5, BRUTE)
else
H.bleed(rand(5,10))
else
fail_invoke()
@@ -458,6 +472,8 @@ var/list/teleport_runes = list()
T.gib()
rune_in_use = 0
//Ritual of Dimensional Rending: Calls forth the avatar of Nar-Sie upon the station.
/obj/effect/rune/narsie
cultist_name = "Tear Reality (God)"
@@ -806,6 +822,7 @@ var/list/teleport_runes = list()
cultist_desc = "when invoked, makes an invisible wall to block passage. Can be invoked again to reverse this."
invocation = "Khari'd! Eske'te tannin!"
icon_state = "1"
invoke_damage = 2
/obj/effect/rune/wall/examine(mob/user)
..()
@@ -831,6 +848,8 @@ var/list/teleport_runes = list()
req_cultists = 2
allow_excess_invokers = 1
icon_state = "5"
invoke_damage = 5
var/summontime = 0
/obj/effect/rune/summon/invoke(var/list/invokers)
var/mob/living/user = invokers[1]
@@ -856,13 +875,24 @@ var/list/teleport_runes = list()
fail_invoke()
log_game("Summon Cultist rune failed - target in away mission")
return
cultist_to_summon.visible_message("<span class='warning'>[cultist_to_summon] suddenly disappears in a flash of red light!</span>", \
"<span class='cultitalic'><b>Overwhelming vertigo consumes you as you are hurled through the air!</b></span>")
if((cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained()) && invokers < 3)
to_chat(user, "<span class='cultitalic'>The summoning of [cultist_to_summon] is being blocked somehow! You need 3 chanters to counter it!</span>")
fail_invoke()
new /obj/effect/temp_visual/cult/sparks(get_turf(cultist_to_summon)) //observer warning
log_game("Summon Cultist rune failed - holywater in target")
return
..()
visible_message("<span class='warning'>A foggy shape materializes atop [src] and solidifes into [cultist_to_summon]!</span>")
user.apply_damage(10, BRUTE, "head")
cultist_to_summon.forceMove(get_turf(src))
qdel(src)
if(cultist_to_summon.reagents.has_reagent("holywater") || cultist_to_summon.restrained())
summontime = 20
if(do_after(user, summontime, target = loc))
cultist_to_summon.visible_message("<span class='warning'>[cultist_to_summon] suddenly disappears in a flash of red light!</span>", \
"<span class='cultitalic'><b>Overwhelming vertigo consumes you as you are hurled through the air!</b></span>")
visible_message("<span class='warning'>A foggy shape materializes atop [src] and solidifies into [cultist_to_summon]!</span>")
cultist_to_summon.forceMove(get_turf(src))
qdel(src)
//Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby
/obj/effect/rune/blood_boil
@@ -872,6 +902,7 @@ var/list/teleport_runes = list()
icon_state = "4"
construct_invoke = 0
req_cultists = 3
invoke_damage = 15
/obj/effect/rune/blood_boil/do_invoke_glow()
return
@@ -889,10 +920,6 @@ var/list/teleport_runes = list()
to_chat(C, "<span class='cultlarge'>Your blood boils in your veins!</span>")
C.take_overall_damage(45,45)
C.Stun(7)
for(var/M in invokers)
var/mob/living/L = M
L.apply_damage(15, BRUTE, pick("l_arm", "r_arm"))
to_chat(L,"<span class='cultitalic'>[src] saps your strength!</span>")
qdel(src)
explosion(T, -1, 0, 1, 5)
@@ -942,6 +969,9 @@ var/list/teleport_runes = list()
construct_invoke = 0
color = rgb(200, 0, 0)
var/list/summoned_guys = list()
var/ghost_limit = 5
var/ghosts = 0
invoke_damage = 10
/obj/effect/rune/manifest/New(loc)
..()
@@ -950,11 +980,21 @@ var/list/teleport_runes = list()
notify_ghosts("Manifest rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
/obj/effect/rune/manifest/can_invoke(mob/living/user)
if(ghosts >= ghost_limit)
to_chat(user, "<span class='cultitalic'>You are sustaining too many ghosts to summon more!</span>")
fail_invoke()
log_game("Manifest rune failed - too many summoned ghosts")
return list()
if(!(user in get_turf(src)))
to_chat(user,"<span class='cultitalic'>You must be standing on [src]!</span>")
fail_invoke()
log_game("Manifest rune failed - user not standing on rune")
return list()
if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST))
to_chat(user, "<span class='cult italic'>Ghosts can't summon more ghosts!</span>")
fail_invoke()
log_game("Manifest rune failed - user is a ghost")
return list()
var/list/ghosts_on_rune = list()
for(var/mob/dead/observer/O in get_turf(src))
if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE))
@@ -976,8 +1016,12 @@ var/list/teleport_runes = list()
var/mob/living/carbon/human/new_human = new(get_turf(src))
new_human.real_name = ghost_to_spawn.real_name
new_human.alpha = 150 //Makes them translucent
new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor
new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts
new_human.color = "grey" //heh..cult greytide...litterly...
..()
playsound(src, 'sound/misc/exit_blood.ogg', 50, 1)
visible_message("<span class='warning'>A cloud of red mist forms above [src], and from within steps... a man.</span>")
to_chat(user, "<span class='cultitalic'>Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...</span>")
var/obj/machinery/shield/N = new(get_turf(src))
@@ -989,6 +1033,7 @@ var/list/teleport_runes = list()
new_human.key = ghost_to_spawn.key
ticker.mode.add_cultist(new_human.mind, 0)
summoned_guys |= new_human
ghosts++
to_chat(new_human, "<span class='cultitalic'><b>You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.</b></span>")
while(user in get_turf(src))
@@ -1004,6 +1049,7 @@ var/list/teleport_runes = list()
for(var/obj/I in new_human)
new_human.unEquip(I)
summoned_guys -= new_human
ghosts--
new_human.dust()
/obj/effect/rune/manifest/Destroy()
@@ -181,7 +181,7 @@
/mob/living/simple_animal/hostile/construct/builder
name = "Artificer"
real_name = "Artificer"
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
desc = "A bulbous construct dedicated to building and maintaining Cult armies."
icon = 'icons/mob/mob.dmi'
icon_state = "artificer"
icon_living = "artificer"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 443 KiB

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 136 KiB