Comments done mostly...Slughter demon whispers runtimes.

This commit is contained in:
Aurorablade
2016-10-27 20:44:54 -04:00
parent f587cadb0f
commit 1a6803c7bb
16 changed files with 144 additions and 96 deletions
+11 -1
View File
@@ -1766,4 +1766,14 @@ var/global/list/g_fancy_list_of_types = null
. += 4
sleep(world.tick_lag*4)
//you might be thinking of adding more steps to this, or making it use a loop and a counter var
// not worth it.
// not worth it.
/proc/make_bit_triplet()
var/list/num_sample = list(1, 2, 3, 4, 5, 6, 7, 8, 9)
var/result = 0
for(var/i = 0, i < 3, i++)
var/num = pick(num_sample)
num_sample -= num
result += (1 << num)
return result
+6 -6
View File
@@ -41,9 +41,9 @@ var/global/list/all_cults = list()
config_tag = "cult"
restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer")
protected_jobs = list()
required_players = 1//30
required_enemies = 1//3
recommended_enemies = 1//4
required_players = 30
required_enemies = 3
recommended_enemies = 4
var/datum/mind/sacrifice_target = null
var/finished = 0
@@ -198,7 +198,7 @@ var/global/list/all_cults = list()
/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1)
if(cult_mind in cult)
cult -= cult_mind
to_chat(cult_mind.current, "\red <FONT size = 3><B>An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it.</B></FONT>")
to_chat(cult_mind.current, "<span class='danger'>An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it.</span>")
cult_mind.current.faction -= "cult"
cult_mind.memory = ""
cult_mind.special_role = null
@@ -279,11 +279,11 @@ var/global/list/all_cults = list()
if(!check_cult_victory())
feedback_set_details("round_end_result","win - cult win")
feedback_set("round_end_result",acolytes_survived)
to_chat(world, "\red <FONT size = 3><B> The cult wins! It has succeeded in serving its dark masters!</B></FONT>")
to_chat(world, "<span class='danger'> <FONT size = 3> The cult wins! It has succeeded in serving its dark masters!</FONT></span>")
else
feedback_set_details("round_end_result","loss - staff stopped the cult")
feedback_set("round_end_result",acolytes_survived)
to_chat(world, "\red <FONT size = 3><B> The staff managed to stop the cult!</B></FONT>")
to_chat(world, "<span class='warning'> <FONT size = 3>The staff managed to stop the cult!</FONT></span>")
var/text = "<b>Cultists escaped:</b> [acolytes_survived]"
+2 -2
View File
@@ -2,7 +2,7 @@
name = "Communion"
button_icon_state = "cult_comms"
background_icon_state = "bg_cult"
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING
check_flags = AB_CHECK_STUNNED|AB_CHECK_LYING
/datum/action/innate/cultcomm/IsAvailable()
if(!iscultist(owner))
@@ -34,6 +34,6 @@
if(iscultist(M))
to_chat(M, my_message)
else if(M in dead_mob_list)
to_chat(M, "<a href='?src=\ref[M];follow=\ref[user]'>(F)</a> [my_message]")
to_chat(M, "<span class='cultspeech'> <a href='?src=\ref[M];follow=\ref[user]'>(F)</a> [my_message] </span>")
log_say("[user.real_name]/[user.key] : [message]")
-2
View File
@@ -3,7 +3,6 @@
/datum/cult_info
var/name = "Cult of Nar'Sie"
var/theme = "blood"
var/dam_type = BRUTE
var/tome_icon = "tome"
//God Entity
var/entity_name = "Nar'Sie"
@@ -50,7 +49,6 @@
/datum/cult_info/fire
name = "Cult of Pyr'Kaeus"
theme = "fire"
dam_type = BURN
tome_icon = "firetome"
entity_name = "Pyr'Kaeus"
+6 -6
View File
@@ -159,7 +159,7 @@
if(current_charges)
owner.visible_message("<span class='danger'>\The [attack_text] is deflected in a burst of blood-red sparks!</span>")
current_charges--
new /obj/effect/overlay/temp/cult/sparks(get_turf(owner))
PoolOrNew( /obj/effect/overlay/temp/cult/sparks, get_turf(owner))
if(!current_charges)
owner.visible_message("<span class='danger'>The runed shield around [owner] suddenly disappears!</span>")
owner.update_inv_wear_suit()
@@ -174,7 +174,7 @@
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
armor = list(melee = -100, bullet = -100, laser = -100,energy = -100, bomb = -100, bio = -100, rad = -100)
armor = list(melee = -50, bullet = -50, laser = -100,energy = -50, bomb = -50, bio = -50, rad = -50)
slowdown = -1
hoodtype = /obj/item/clothing/head/berserkerhood
@@ -239,7 +239,7 @@
to_chat(user, "<span class='notice'>We have exhausted our ability to curse the shuttle.</span>")
return
if(shuttle_master.emergency.mode == SHUTTLE_CALL)
var/cursetime = 1500
var/cursetime = 1800
var/timer = shuttle_master.emergency.timeLeft(1) + cursetime
shuttle_master.emergency.setTimer(timer)
to_chat(user,"<span class='danger'>You shatter the orb! A dark essence spirals into the air, then disappears.</span>")
@@ -264,7 +264,7 @@
desc = "This relic teleports you forward a medium distance."
icon = 'icons/obj/cult.dmi'
icon_state ="shifter"
var/uses = 2
var/uses = 4
/obj/item/device/cult_shift/examine(mob/user)
..()
@@ -317,14 +317,14 @@
if(uses <= 0)
icon_state ="shifter_drained"
playsound(mobloc, "sparks", 50, 1)
new /obj/effect/overlay/temp/cult/phase/out(mobloc)
PoolOrNew(/obj/effect/overlay/temp/cult/phase/out, mobloc)
var/atom/movable/pulled = handle_teleport_grab(destination, C)
C.forceMove(destination)
if(pulled)
C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull
new /obj/effect/overlay/temp/cult/phase(destination)
PoolOrNew(/obj/effect/overlay/temp/cult/phase, destination)
playsound(destination, 'sound/effects/phasein.ogg', 25, 1)
playsound(destination, "sparks", 50, 1)
+33 -13
View File
@@ -14,8 +14,6 @@
playsound(src, death_sound, 50, 1)
qdel(src)
/obj/structure/cult/attackby(obj/item/I, mob/user, params)
//Noncult As we may have this on maps
/obj/structure/cult/talisman
@@ -53,17 +51,14 @@
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
anchored = !anchored
to_chat(user, "<span class='notice'>You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.</span>")
playsound(loc, 'sound/hallucinations/wail.ogg', 75, 1)
if(!anchored)
icon_state = "[initial(icon_state)]_off"
else
icon_state = initial(icon_state)
else
return ..()
..()
if(I.force)
health = Clamp(health - I.force, 0, initial(health))
user.changeNext_move(CLICK_CD_MELEE)
if(health <= 0)
destroy_structure()
/obj/structure/cult/proc/getETA()
var/time = (cooldowntime - world.time)/600
@@ -122,6 +117,9 @@
if(!iscarbon(G.affecting))
to_chat(user, "<span class='warning'>You may only dunk carbon-based creatures!</span>")
return 0
if(G.affecting == LAVA_PROOF)
to_chat(user, "<span class='warning'>Is immune to the lava!</span>")
return 0
if(G.affecting.stat == DEAD)
to_chat(user, "<span class='warning'>[G.affecting] is dead!</span>")
return 0
@@ -164,6 +162,14 @@
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating [N]!</span>")
var/list/blacklisted_pylon_turfs = typecacheof(list(
/turf/simulated/floor/engine/cult,
/turf/space,
/turf/unsimulated/floor/lava,
/turf/unsimulated/floor/chasm,
/turf/simulated/wall,
))
/obj/structure/cult/cultpylon
name = "pylon"
desc = "A floating crystal that slowly heals those faithful to a cult."
@@ -194,7 +200,7 @@
for(var/mob/living/L in range(5, src))
if(iscultist(L) || istype(L, /mob/living/simple_animal/shade) || istype(L, /mob/living/simple_animal/hostile/construct))
if(L.health != L.maxHealth)
new /obj/effect/overlay/temp/heal(get_turf(src), "#960000")//not working
PoolOrNew(/obj/effect/overlay/temp/heal, list(get_turf(src)), "#960000")
if(ishuman(L))
L.adjustBruteLoss(-1, 0)
L.adjustFireLoss(-1, 0)
@@ -206,16 +212,30 @@
//CHECK_TICK
if(last_corrupt <= world.time)
var/list/validturfs = list()
var/list/cultturfs = list()
for(var/T in circleviewturfs(src, 5))
if(istype(T, /turf/simulated/floor/engine/cult) || istype(T, /turf/space) || istype(T, /turf/simulated/wall) || istype(T, /turf/simulated/shuttle))
if(istype(T, /turf/simulated/floor/engine/cult))
cultturfs |= T
continue
validturfs |= T
if(is_type_in_typecache(T, blacklisted_pylon_turfs))
continue
else
validturfs |= T
last_corrupt = world.time + corrupt_delay
var/turf/T = safepick(validturfs)
if(T)
T.ChangeTurf(/turf/simulated/floor/engine/cult)
last_corrupt = world.time + corrupt_delay
else
last_corrupt = world.time + corrupt_delay*2
var/turf/simulated/floor/engine/cult/F = safepick(cultturfs)
if(F)
PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, F)
else
// Are we in space or something? No cult turfs or
// convertable turfs?
last_corrupt = world.time + corrupt_delay*2
/obj/structure/cult/culttome
+18 -2
View File
@@ -10,7 +10,7 @@
return
/obj/effect/rune/proc/check_icon()
icon = get_uristrune_cult(invocation)
icon = get_rune_cult(invocation)
/obj/item/weapon/tome
name = "arcane tome"
@@ -242,7 +242,7 @@
if(!("eldergod" in cult_mode.objectives) || !("slughter" in cult_mode.objectives))
to_chat(user, "<span class='warning'>[cult_mode.cultdat.entity_name]'s power does not wish to be unleashed!</span>")
return
var/confirm_final = alert(user, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No")
var/confirm_final = alert(user, "This is the FINAL step to summon your dietys power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No")
if(confirm_final == "No")
to_chat(user, "<span class='cult'>You decide to prepare further before scribing the rune.</span>")
return
@@ -255,6 +255,22 @@
N.icon_state = "shield-cult"
N.health = 60
shields |= N
else//the game mode is not cult..but we ARE a cultist...ALL ON THE ADMINBUS
if(!canbypass == 1)//not an admin-tome, check things
var/confirm_final = alert(user, "This is the FINAL step to summon your dietys power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No")
if(confirm_final == "No")
to_chat(user, "<span class='cult'>You decide to prepare further before scribing the rune.</span>")
return
command_announcement.Announce("Figments from an eldritch god are being summoned somwhere on the station from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg')
for(var/B in spiral_range_turfs(1, user, 1))
var/turf/T = B
var/obj/machinery/shield/N = new(T)
N.name = "Rune-Scriber's Shield"
N.desc = "A potent shield summoned by cultists to protect them while they prepare the final ritual"
N.icon_state = "shield-cult"
N.health = 60
shields |= N
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))
+36
View File
@@ -884,6 +884,42 @@ var/list/teleport_runes = list()
qdel(src)
explosion(T, -1, 0, 1, 5)
//Deals brute damage to all targets on the rune and heals the invoker for each target drained.
/obj/effect/rune/leeching
cultist_name = "Drain Life"
cultist_desc = "drains the life of all targets on the rune, restoring life to the user."
invocation = "Yu'gular faras desdae. Umathar uf'kal thenar!"
icon_state = "3"
/obj/effect/rune/leeching/can_invoke(mob/living/user)
if(world.time <= user.next_move)
return list()
var/turf/T = get_turf(src)
var/list/potential_targets = list()
for(var/mob/living/carbon/M in T.contents - user)
if(M.stat != DEAD)
potential_targets += M
if(!potential_targets.len)
to_chat(user, "<span class='cultitalic'>There must be at least one valid target on the rune!</span>")
log_game("Leeching rune failed - no valid targets")
return list()
return ..()
/obj/effect/rune/leeching/invoke(var/list/invokers)
var/mob/living/user = invokers[1]
user.changeNext_move(CLICK_CD_MELEE)
..()
var/turf/T = get_turf(src)
for(var/mob/living/carbon/M in T.contents - user)
if(M.stat != DEAD)
var/drained_amount = rand(10,20)
M.apply_damage(drained_amount, BRUTE, "chest")
user.adjustBruteLoss(-drained_amount)
to_chat(M, "<span class='cultitalic'>You feel extremely weak.</span>")
user.Beam(T,icon_state="drainbeam",icon='icons/effects/effects.dmi',time=5)
user.visible_message("<span class='warning'>Blood flows from the rune into [user]!</span>", \
"<span class='cult'>Blood flows into you, healing your wounds and revitalizing your spirit.</span>")
//Rite of Spectral Manifestation: Summons a ghost on top of the rune as a cultist human with no items. User must stand on the rune at all times, and takes damage for each summoned ghost.
/obj/effect/rune/manifest
+8 -5
View File
@@ -304,17 +304,18 @@
cultist_name = "Talisman of Construction"
cultist_desc = "Use this talisman on at least twenty-five metal sheets to create an empty construct shell or on plasteel to make runed metal"
invocation = "Ethra p'ni dedol!"
uses = 25
/obj/item/weapon/paper/talisman/construction/attack_self(mob/living/user)
if(iscultist(user))
to_chat(user, "<span class='warning'>To use this talisman, place it upon a stack of metal sheets.</span>")
to_chat(user, "<span class='warning'>To use this talisman, place it upon a stack of metal sheets or plasteel sheets!.</span>")
else
to_chat(user, "<span class='warning'>You see strange symbols on the paper. Are they supposed to mean something?</span>")
/obj/item/weapon/paper/talisman/construction/attack(obj/M,mob/living/user)
if(iscultist(user))
to_chat(user, "<span class='cultitalic'>This talisman will only work on a stack of metal sheets!</span>")
to_chat(user, "<span class='cultitalic'>This talisman will only work on a stack of metal sheets or plasteel sheets!!</span>")
log_game("Construct talisman failed - not a valid target")
/obj/item/weapon/paper/talisman/construction/afterattack(obj/item/stack/sheet/target, mob/user, proximity_flag, click_parameters)
@@ -328,13 +329,15 @@
user << sound('sound/magic/Staff_Chaos.ogg',0,1,25)
qdel(src)
if(istype(target, /obj/item/stack/sheet/plasteel))
var/quantity = target.amount
var/turf/T = get_turf(target)
var/quantity = min(target.amount, uses)
uses -= quantity
new /obj/item/stack/sheet/runed_metal(T,quantity)
target.use(quantity)
to_chat(user, "<span class='warning'>The talisman clings to the plasteel, transforming it into runed metal!</span>")
user << sound('sound/magic/Staff_Chaos.ogg',0,1,25)
qdel(src)
invoke(user, 1)
if(uses <= 0)
qdel(src)
else
to_chat(user, "<span class='warning'>The talisman must be used on metal or plasteel!</span>")
@@ -52,18 +52,21 @@
del_on_death = 1
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
var/datum/action/innate/demon/whisper/whisper_action
/mob/living/simple_animal/slaughter/New()
..()
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
whisper_action = new()
whisper_action.Grant(src)
if(istype(loc, /obj/effect/dummy/slaughter))
bloodspell.phased = 1
if(mind)
to_chat(src, src.playstyle_string)
to_chat(src, "<B><span class ='notice'>You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.</span></B>")
src << 'sound/misc/demon_dies.ogg'
mind.current.verbs += /mob/living/simple_animal/slaughter/verb/slaughterWhisper
if(!(vialspawned))
var/datum/objective/slaughter/objective = new
var/datum/objective/demonFluff/fluffObjective = new
@@ -171,17 +174,21 @@
//Paradise Port:I added this cuase..SPOOPY DEMON IN YOUR BRAIN
/mob/living/simple_animal/slaughter/verb/slaughterWhisper()
set name = "Whisper"
set desc = "Whisper to a mortal"
set category = "Daemon"
/datum/action/innate/demon/whisper
name = "Demonic Whisper"
button_icon_state = "cult_comms"
background_icon_state = "bg_demon"
/datum/action/innate/demon/whisper/IsAvailable()
return ..()
/datum/action/innate/demon/whisper/Activate()
var/list/choices = list()
for(var/mob/living/carbon/C in living_mob_list)
if(C.stat != 2 && C.client && C.stat != DEAD)
choices += C
var/mob/living/carbon/M = input(src,"Who do you wish to talk to?") in null|choices
var/mob/living/carbon/M = input(src,"Who do you wish to talk to?") in null|choices //runtime happens here.
spawn(0)
var/msg = stripped_input(usr, "What do you wish to tell [M]?", null, "")
if(!(msg))
+1 -1
View File
@@ -156,6 +156,6 @@
if(!picked_cult)//shouldn't happen BUT JUST TO BE SURE LET US KNOW
log_startup_progress(" Failed to select a cult datum, Shank a coder!")
else
log_startup_progress(" Crab'sie has risen!")
log_startup_progress(" [picked_cult] has risen!")
//todo:add adminonly datum var, check for said var here...
return picked_cult
+9 -18
View File
@@ -1,38 +1,29 @@
/proc/make_bit_triplet()
var/list/num_sample = list(1, 2, 3, 4, 5, 6, 7, 8, 9)
var/result = 0
for(var/i = 0, i < 3, i++)
var/num = pick(num_sample)
num_sample -= num
result += (1 << num)
return result
/proc/get_uristrune_cult(word)
/proc/get_rune_cult(word)
var/animated
if(word)
if(word && !(ticker.mode.cultdat.theme == "fire"))
animated = 1
else
animated = 0
var/bits = make_bit_triplet()
return get_uristrune(bits, animated)
return get_rune(bits, animated)
var/list/uristrune_cache = list()
var/list/rune_cache = list()
var/runetype = "rune"
/proc/get_uristrune(symbol_bits, animated = 0)
/proc/get_rune(symbol_bits, animated = 0)
var/lookup = "[symbol_bits]-[animated]"
if(ticker.mode.cultdat.theme == "fire")
runetype = "fire-rune"
if(lookup in uristrune_cache)
return uristrune_cache[lookup]
if(lookup in rune_cache)
return rune_cache[lookup]
var/icon/I = icon('icons/effects/uristrunes.dmi', "blank")
var/icon/I = icon('icons/effects/uristrunes.dmi', "[runetype]-179")
for(var/i = 0, i < 10, i++)
if(symbol_bits & (1 << i))
@@ -93,6 +84,6 @@ var/runetype = "rune"
result.Insert(I3, "", frame = 7, delay = 2)
result.Insert(I2, "", frame = 8, delay = 2)
uristrune_cache[lookup] = result
rune_cache[lookup] = result
return result
+1 -2
View File
@@ -12,7 +12,6 @@
if(ticker.mode)//game hasn't started offically don't do shit..
new /obj/effect/overlay/temp/cult/turf(src)
icon_state = ticker.mode.cultdat.cult_wall_icon_state
walltype = ticker.mode.cultdat.cult_wall_icon_state
/turf/simulated/wall/cult/artificer
name = "runed stone wall"
@@ -21,7 +20,7 @@
/turf/simulated/wall/cult/narsie_act()
return
/turf/simulated/wall/cult/break_wall()
new /obj/effect/decal/cleanable/blood(src)
return (new /obj/structure/cultgirder(src))
-1
View File
@@ -37,7 +37,6 @@ var/list/admin_verbs_admin = list(
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
/client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/
/client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/
///client/proc/check_words, /*displays cult-words*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/manage_silicon_laws, /* Allows viewing and editing silicon laws. */
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
@@ -328,37 +328,6 @@
overlays += image(icon,"glow-[icon_state]",overlay_layer)
set_light(2, -2, l_color = "#FFFFFF")
////////////////Powers//////////////////
/*
/client/proc/summon_cultist()
set category = "Behemoth"
set name = "Summon Cultist (300)"
set desc = "Teleport a cultist to your location"
if (istype(usr,/mob/living/simple_animal/hostile/constructbehemoth))
if(usr.energy<300)
to_chat(usr, "\red You do not have enough power stored!")
return
if(usr.stat)
return
usr.energy -= 300
var/list/mob/living/cultists = new
for(var/datum/mind/H in ticker.mode.cult)
if (istype(H.current,/mob/living))
cultists+=H.current
var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr)
if(!cultist)
return
if (cultist == usr) //just to be sure.
return
cultist.loc = usr.loc
usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/
///ui stuff
/mob/living/simple_animal/hostile/construct/armoured/handle_hud_icons_health()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 80 KiB