Merge pull request #5447 from Citadel-Station-13/upstream-merge-35433
[MIRROR] Cult Update? Cult Update!
This commit is contained in:
@@ -80,8 +80,10 @@
|
||||
return ..()
|
||||
|
||||
/datum/action/innate/cult/mastervote/Activate()
|
||||
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
||||
pollCultists(owner,C.cult_team)
|
||||
var/choice = alert(owner, "The mantle of leadership is a heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, "Yes", "No")
|
||||
if(choice == "Yes" && IsAvailable())
|
||||
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
||||
pollCultists(owner,C.cult_team)
|
||||
|
||||
/proc/pollCultists(var/mob/living/Nominee,datum/team/cult/team) //Cult Master Poll
|
||||
if(world.time < CULT_POLL_WAIT)
|
||||
|
||||
@@ -503,7 +503,19 @@
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
|
||||
var/cursetime = 1800
|
||||
var/timer = SSshuttle.emergency.timeLeft(1) + cursetime
|
||||
var/security_num = seclevel2num(get_security_level())
|
||||
var/set_coefficient = 1
|
||||
switch(security_num)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
set_coefficient = 2
|
||||
if(SEC_LEVEL_BLUE)
|
||||
set_coefficient = 1
|
||||
else
|
||||
set_coefficient = 0.5
|
||||
var/surplus = timer - (SSshuttle.emergencyCallTime * set_coefficient)
|
||||
SSshuttle.emergency.setTimer(timer)
|
||||
if(surplus > 0)
|
||||
SSshuttle.block_recall(surplus)
|
||||
to_chat(user, "<span class='danger'>You shatter the orb! A dark essence spirals into the air, then disappears.</span>")
|
||||
playsound(user.loc, 'sound/effects/glassbr1.ogg', 50, 1)
|
||||
qdel(src)
|
||||
@@ -511,18 +523,20 @@
|
||||
var/global/list/curses
|
||||
if(!curses)
|
||||
curses = list("A fuel technician just slit his own throat and begged for death. The shuttle will be delayed by three minutes.",
|
||||
"The shuttle's navigation programming was replaced by a file containing two words, IT COMES. The shuttle will be delayed by three minutes.",
|
||||
"The shuttle's custodian tore out his guts and began painting strange shapes on the floor. The shuttle will be delayed by three minutes.",
|
||||
"A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh. The shuttle will be delayed by three minutes.",
|
||||
"A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine. The shuttle will be delayed by three minutes.",
|
||||
"The shuttle dispatcher was found dead with bloody symbols carved into their flesh. The shuttle will be delayed by three minutes.")
|
||||
"The shuttle's navigation programming was replaced by a file containing just two words: IT COMES.",
|
||||
"The shuttle's custodian was found washing the windows with their own blood.",
|
||||
"A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh.",
|
||||
"A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine.",
|
||||
"The shuttle dispatcher was found dead with bloody symbols carved into their flesh.",
|
||||
"The shuttle's transponder is emitting the encoded message 'FEAR THE OLD BLOOD' in lieu of its assigned identification signal.")
|
||||
var/message = pick_n_take(curses)
|
||||
message += "<br>The shuttle will be delayed by three minutes."
|
||||
priority_announce("[message]", "System Failure", 'sound/misc/notice1.ogg')
|
||||
curselimit++
|
||||
|
||||
/obj/item/device/cult_shift
|
||||
name = "veil shifter"
|
||||
desc = "This relic teleports you forward a medium distance."
|
||||
desc = "This relic instantly teleports you, and anything you're pulling, forward by a moderate distance."
|
||||
icon = 'icons/obj/cult.dmi'
|
||||
icon_state ="shifter"
|
||||
var/uses = 4
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
/obj/structure/destructible/cult/attackby(obj/I, mob/user, params)
|
||||
if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))
|
||||
anchored = !anchored
|
||||
density = !density
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.</span>")
|
||||
if(!anchored)
|
||||
icon_state = "[initial(icon_state)]_off"
|
||||
|
||||
@@ -68,6 +68,9 @@ This file contains the cult dagger and rune list code
|
||||
A = get_area(src)
|
||||
if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user))
|
||||
return
|
||||
if(ispath(rune_to_scribe, /obj/effect/rune/summon) && (!is_station_level(Turf.z) || A.map_name == "Space"))
|
||||
to_chat(user, "<span class='cultitalic'><b>The veil is not weak enough here to summon a cultist, you must be on station!</b></span>")
|
||||
return
|
||||
if(ispath(rune_to_scribe, /obj/effect/rune/apocalypse))
|
||||
if((world.time - SSticker.round_start_time) <= 6000)
|
||||
var/wait = 6000 - (world.time - SSticker.round_start_time)
|
||||
|
||||
@@ -426,22 +426,19 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
else
|
||||
var/area/A = get_area(T)
|
||||
if(A.map_name == "Space")
|
||||
actual_selected_rune.handle_portal("space")
|
||||
actual_selected_rune.handle_portal("space", T)
|
||||
target.visible_message("<span class='warning'>There is a boom of outrushing air as something appears above the rune!</span>", null, "<i>You hear a boom.</i>")
|
||||
else
|
||||
fail_invoke()
|
||||
|
||||
/obj/effect/rune/teleport/proc/handle_portal(portal_type)
|
||||
/obj/effect/rune/teleport/proc/handle_portal(portal_type, turf/origin)
|
||||
var/turf/T = get_turf(src)
|
||||
if(inner_portal)
|
||||
qdel(inner_portal) //We need fresh effects/animations
|
||||
if(outer_portal)
|
||||
qdel(outer_portal)
|
||||
close_portal() // To avoid stacking descriptions/animations
|
||||
playsound(T, pick('sound/effects/sparks1.ogg', 'sound/effects/sparks2.ogg', 'sound/effects/sparks3.ogg', 'sound/effects/sparks4.ogg'), 100, TRUE, 14)
|
||||
inner_portal = new /obj/effect/temp_visual/cult/portal(T)
|
||||
if(portal_type == "space")
|
||||
light_color = RUNE_COLOR_TELEPORT
|
||||
desc += "<br><b>A tear in reality reveals a black void interspersed with dots of light... something recently teleported here from space!</b>"
|
||||
light_color = color
|
||||
desc += "<br><b>A tear in reality reveals a black void interspersed with dots of light... something recently teleported here from space.<br><u>The void feels like it's trying to pull you to the [dir2text(get_dir(T, origin))]!</u></b>"
|
||||
else
|
||||
inner_portal.icon_state = "lava"
|
||||
light_color = LIGHT_COLOR_FIRE
|
||||
@@ -452,6 +449,8 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
addtimer(CALLBACK(src, .proc/close_portal), 600, TIMER_UNIQUE)
|
||||
|
||||
/obj/effect/rune/teleport/proc/close_portal()
|
||||
qdel(inner_portal)
|
||||
qdel(outer_portal)
|
||||
desc = initial(desc)
|
||||
light_range = 0
|
||||
update_light()
|
||||
@@ -842,9 +841,13 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
var/turf/T = get_turf(src)
|
||||
var/choice = alert(user,"You tear open a connection to the spirit realm...",,"Summon a Cult Ghost","Ascend as a Dark Spirit","Cancel")
|
||||
if(choice == "Summon a Cult Ghost")
|
||||
var/area/A = get_area(T)
|
||||
if(A.map_name == "Space" || is_mining_level(T.z))
|
||||
to_chat(user, "<span class='cultitalic'><b>The veil is not weak enough here to manifest spirits, you must be on station!</b></span>")
|
||||
return
|
||||
notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
|
||||
var/list/ghosts_on_rune = list()
|
||||
for(var/mob/dead/observer/O in get_turf(src))
|
||||
for(var/mob/dead/observer/O in T)
|
||||
if(O.client && !jobban_isbanned(O, ROLE_CULTIST))
|
||||
ghosts_on_rune += O
|
||||
if(!ghosts_on_rune.len)
|
||||
@@ -853,7 +856,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
log_game("Manifest rune failed - no nearby ghosts")
|
||||
return list()
|
||||
var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune)
|
||||
var/mob/living/carbon/human/cult_ghost/new_human = new(get_turf(src))
|
||||
var/mob/living/carbon/human/cult_ghost/new_human = new(T)
|
||||
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
|
||||
|
||||
@@ -125,19 +125,19 @@
|
||||
response_harm = "harmlessly punches"
|
||||
harm_intent_damage = 0
|
||||
obj_damage = 90
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attacktext = "smashes their armored gauntlet into"
|
||||
speed = 2.5
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
attack_sound = 'sound/weapons/punch3.ogg'
|
||||
status_flags = 0
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
force_threshold = 11
|
||||
force_threshold = 10
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult,
|
||||
/obj/effect/proc_holder/spell/dumbfire/juggernaut)
|
||||
runetype = /datum/action/innate/cult/create_rune/wall
|
||||
playstyle_string = "<b>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \
|
||||
playstyle_string = "<b>You are a Juggernaut. Though slow, your shell can withstand heavy punishment, \
|
||||
create shield walls, rip apart enemies and walls alike, and even deflect energy weapons.</b>"
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
var/reflectchance = 80 - round(P.damage/3)
|
||||
var/reflectchance = 60 - round(P.damage/3)
|
||||
if(prob(reflectchance))
|
||||
apply_damage(P.damage * 0.5, P.damage_type)
|
||||
visible_message("<span class='danger'>The [P.name] is reflected by [src]'s armored shell!</span>", \
|
||||
@@ -184,8 +184,8 @@
|
||||
icon_living = "floating"
|
||||
maxHealth = 65
|
||||
health = 65
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
retreat_distance = 2 //AI wraiths will move in and out of combat
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -280,9 +280,9 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/dumbfire/juggernaut
|
||||
name = "Gauntlet Echo"
|
||||
desc = "Channels energy into your gauntlet - firing its essence forward in a slow-moving but devastating blow."
|
||||
proj_icon_state = "cursehand0"
|
||||
proj_name = "Shadowfist"
|
||||
desc = "Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack."
|
||||
proj_icon_state = "cultfist"
|
||||
proj_name = "gauntlet echo"
|
||||
proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/juggernaut" //IMPORTANT use only subtypes of this
|
||||
proj_lifespan = 15
|
||||
proj_step_delay = 7
|
||||
|
||||
Reference in New Issue
Block a user