diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 9587a94202b..aeabb8c5f6a 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -48,7 +48,7 @@
init_subtypes(/datum/table_recipe, table_recipes)
- init_subtypes(/datum/cult_info, all_cults)
+ all_cults = typesof(/datum/cult_info)
return 1
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index 531bd2f096c..5721ac0bfd3 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -12,13 +12,6 @@
/obj/effect/rune/proc/check_icon()
icon = get_uristrune_cult(invocation)
-/obj/item/weapon/tome
- name = "arcane tome"
- icon_state ="tome"
- throw_speed = 1
- throw_range = 5
- w_class = 2.0
-
/obj/item/weapon/tome
name = "arcane tome"
desc = "An old, dusty tome with frayed edges and a sinister-looking cover."
@@ -26,6 +19,7 @@
throw_speed = 2
throw_range = 5
w_class = 2
+ var/scribereduct = 0
/obj/item/weapon/tome/examine(mob/user)
..()
@@ -218,11 +212,9 @@
if(ispath(rune_to_scribe, /obj/effect/rune/narsie))//may need to change this - Fethas
var/confirm_final = alert(usr, "This is the FINAL step to summon [ticker.mode.cultdat.entity_name], 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 [ticker.mode.cultdat.entity_name]!", "No")
if(confirm_final == "No")
- usr << "On second thought, we should prepare further for the final battle..."
+ to_chat(usr, "On second thought, we should prepare further for the final battle...")
return
- var/area/A = get_area(src)
- var/locname = initial(A.name)
- command_announcement.Announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg')
+ 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)
@@ -250,4 +242,7 @@
if(S && !qdeleted(S))
qdel(S)
new rune_to_scribe(Turf, chosen_keyword)
+ rune_to_scribe.blood_DNA = list()
+ rune_to_scribe.blood_DNA[user.dna.unique_enzymes] = user.dna.b_type
+ rune_to_scribe.add_hiddenprint(user)
to_chat(user, "The [lowertext(initial(rune_to_scribe.cultist_name))] rune [initial(rune_to_scribe.cultist_desc)]")
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index a5249e148fe..06e065c2af8 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -40,6 +40,7 @@ To draw a rune, use an arcane tome.
..()
if(set_keyword)
keyword = set_keyword
+ check_icon()
var/image/blood = image(loc = src)
blood.override = 1
for(var/mob/living/silicon/ai/AI in player_list)
@@ -153,7 +154,6 @@ structure_check() searches for nearby cultist structures required for the invoca
/obj/effect/rune/malformed/New()
..()
icon_state = "[rand(1,6)]"
- color = rgb(rand(0,255), rand(0,255), rand(0,255))
/obj/effect/rune/malformed/invoke(var/list/invokers)
..()
@@ -175,7 +175,6 @@ structure_check() searches for nearby cultist structures required for the invoca
cultist_desc = "transforms paper into powerful magic talismans."
invocation = "H'drak v'loso, mir'kanas verbot!"
icon_state = "3"
- color = rgb(0, 0, 255)
/obj/effect/rune/imbue/invoke(var/list/invokers)
var/mob/living/user = invokers[1] //the first invoker is always the user
@@ -224,7 +223,6 @@ var/list/teleport_runes = list()
cultist_desc = "warps everything above it to another chosen teleport rune."
invocation = "Sas'so c'arta forbici!"
icon_state = "2"
- color = "#551A8B"
req_keyword = 1
var/listkey
@@ -301,7 +299,6 @@ var/list/teleport_runes = list()
cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on loyalty-implanted crew."
invocation = "Mah'weyh pleggh at e'ntrath!"
icon_state = "3"
- color = rgb(200, 0, 0)
req_cultists = 2
/obj/effect/rune/convert/invoke(var/list/invokers)
@@ -341,7 +338,6 @@ var/list/teleport_runes = list()
icon_state = "3"
allow_excess_invokers = 1
invocation = "Barhah hra zar'garis!"
- color = rgb(255, 255, 255)
rune_in_use = 0
/obj/effect/rune/sacrifice/New()
@@ -510,11 +506,6 @@ var/list/teleport_runes = list()
sleep(40)
new /obj/singularity/narsie/large(T) //Causes Nar-Sie to spawn even if the rune has been removed
cult_mode.eldergod = 0
- else
- for(var/M in invokers)
- to_chat(M, "[ticker.mode.cultdat.entity_name] does not respond!")
- fail_invoke()
- log_game("Summon Nar-Sie rune failed - gametype is not cult")//May need to remove
/obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal.
if((istype(I, /obj/item/weapon/tome) && iscultist(user)))
@@ -537,7 +528,6 @@ var/list/teleport_runes = list()
cultist_desc = "requires two corpses, one on the rune and one adjacent to the rune. The one on the rune is brought to life, the other is turned to ash."
invocation = null //Depends on the name of the user - see below
icon_state = "1"
- color = rgb(200, 0, 0)
/obj/effect/rune/raise_dead/invoke(var/list/invokers)
var/turf/T = get_turf(src)
@@ -621,7 +611,6 @@ var/list/teleport_runes = list()
invocation = "Ta'gh fara'qha fel d'amar det!"
icon_state = "5"
allow_excess_invokers = 1
- color = rgb(77, 148, 255)
/obj/effect/rune/emp/invoke(var/list/invokers)
var/turf/E = get_turf(src)
@@ -651,7 +640,6 @@ var/list/teleport_runes = list()
cultist_desc = "severs the link between one's spirit and body. This effect is taxing and one's physical body will take damage while this is active."
invocation = "Fwe'sh mah erl nyag r'ya!"
icon_state = "6"
- color = rgb(126, 23, 23)
rune_in_use = 0 //One at a time, please!
var/mob/living/affecting = null
@@ -724,7 +712,6 @@ 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"
- color = rgb(255, 0, 0)
/obj/effect/rune/wall/examine(mob/user)
..()
@@ -750,7 +737,6 @@ var/list/teleport_runes = list()
req_cultists = 2
allow_excess_invokers = 1
icon_state = "5"
- color = rgb(0, 255, 0)
/obj/effect/rune/summon/invoke(var/list/invokers)
var/mob/living/user = invokers[1]
@@ -790,7 +776,6 @@ var/list/teleport_runes = list()
cultist_desc = "boils the blood of non-believers who can see the rune, dealing extreme amounts of damage. Requires 3 invokers."
invocation = "Dedo ol'btoh!"
icon_state = "4"
- color = rgb(200, 0, 0)
req_cultists = 3
/obj/effect/rune/blood_boil/invoke(var/list/invokers)
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 170107d4c67..12b2502ba6e 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -108,7 +108,6 @@
/obj/item/weapon/paper/talisman/teleport
cultist_name = "Talisman of Teleportation"
cultist_desc = "A single-use talisman that will teleport a user to a random rune of the same keyword."
- color = "#551A8B" // purple
invocation = "Sas'so c'arta forbici!"
health_cost = 5
@@ -150,7 +149,6 @@
/obj/item/weapon/paper/talisman/summon_tome
cultist_name = "Talisman of Tome Summoning"
cultist_desc = "A one-use talisman that will call an untranslated tome from the archives of a cult."
- color = "#512727" // red-black
invocation = "N'ath reth sh'yro eth d'raggathnor!"
health_cost = 1
@@ -165,7 +163,6 @@
/obj/item/weapon/paper/talisman/true_sight
cultist_name = "Talisman of Veiling"
cultist_desc = "A multi-use talisman that hides nearby runes. On its second use, will reveal nearby runes."
- color = "#9c9c9c" // grey
invocation = "Kla'atu barada nikt'o!"
health_cost = 1
uses = 2
@@ -190,7 +187,6 @@
/obj/item/weapon/paper/talisman/make_runes_fake
cultist_name = "Talisman of Disguising"
cultist_desc = "A talisman that will make nearby runes appear fake."
- color = "#ff80d5" // honk
invocation = "By'o nar'nar!"
/obj/item/weapon/paper/talisman/make_runes_fake/invoke(mob/living/user, successfuluse = 1)
@@ -205,7 +201,6 @@
/obj/item/weapon/paper/talisman/emp
cultist_name = "Talisman of Electromagnetic Pulse"
cultist_desc = "A talisman that will cause a moderately-sized electromagnetic pulse."
- color = "#4d94ff" // light blue
invocation = "Ta'gh fara'qha fel d'amar det!"
health_cost = 5
@@ -220,7 +215,6 @@
/obj/item/weapon/paper/talisman/stun
cultist_name = "Talisman of Stunning"
cultist_desc = "A talisman that will stun and inhibit speech on a single target. To use, attack target directly."
- color = "#ff0000" // red
invocation = "Dream sign:Evil sealing talisman!"
health_cost = 10
@@ -265,7 +259,6 @@
/obj/item/weapon/paper/talisman/armor
cultist_name = "Talisman of Arming"
cultist_desc = "A talisman that will equip the invoker with cultist equipment if there is a slot to equip it to."
- color = "#33cc33" // green
invocation = "N'ath reth sh'yro eth draggathnor!"
/obj/item/weapon/paper/talisman/armor/invoke(mob/living/user, successfuluse = 1)
@@ -292,7 +285,6 @@
/obj/item/weapon/paper/talisman/horror
cultist_name = "Talisman of Horrors"
cultist_desc = "A talisman that will break the mind of the victim with nightmarish hallucinations."
- color = "#ffb366" // light orange
invocation = "Lo'Nab Na'Dm!"
/obj/item/weapon/paper/talisman/horror/attack(mob/living/target, mob/living/user)
@@ -309,7 +301,6 @@
cultist_name = "Talisman of Construction"
cultist_desc = "Use this talisman on at least twenty-five metal sheets to create an empty construct shell"
invocation = "Ethra p'ni dedol!"
- color = "#000000" // black
/obj/item/weapon/paper/talisman/construction/attack_self(mob/living/user)
if(iscultist(user))
@@ -350,7 +341,6 @@
cultist_name = "Talisman of Shackling"
cultist_desc = "Use this talisman on a victim to handcuff them with dark bindings."
invocation = "In'totum Lig'abis!"
- color = "#B27300" // burnt-orange
uses = 4
/obj/item/weapon/paper/talisman/shackle/invoke(mob/living/user, successfuluse = 0)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 49566524473..232ebfef892 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -31,7 +31,7 @@
var/ert_disabled = 0
var/uplink_welcome = "Syndicate Uplink Console:"
var/uplink_uses = 10
- var/datum/cult_info/cultdat = null //here instead of cult for adminbus purposes
+ var/datum/cult_info/cultdat = new /datum/cult_info() //here instead of cult for adminbus purposes
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 5ee96bd2667..8029b136cee 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -60,26 +60,6 @@
var/boltDown = 'sound/machines/BoltsDown.ogg'
-/obj/machinery/door/airlock/narsie_act()
- var/turf/T = get_turf(src)
- var/runed = prob(20)
- if(prob(20))
- if(glass)
- if(runed)
- new /obj/machinery/door/airlock/cult/glass(T)
- else
- new /obj/machinery/door/airlock/cult/unruned/glass(T)
- else
- if(runed)
- new /obj/machinery/door/airlock/cult(T)
- else
- new /obj/machinery/door/airlock/cult/unruned(T)
- if(runed)
- new /obj/effect/overlay/temp/cult/door(T)
- else
- new /obj/effect/overlay/temp/cult/door/unruned(T)
- qdel(src)
-
/obj/machinery/door/airlock/command
name = "Airlock"
icon = 'icons/obj/doors/Doorcom.dmi'
@@ -1087,32 +1067,4 @@ About the new airlock wires panel:
src.unlock()
src.open()
src.lock()
- return
-
-
-//////////////////////////////////
-/*
- Cult Airlocks
-*/
-
-/obj/machinery/door/airlock/cult
- name = "cult airlock"
- icon = 'icons/obj/doors/cult_runed.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_cult
-
-/obj/machinery/door/airlock/cult/narsie_act()
- return
-
-/obj/machinery/door/airlock/cult/glass
- assembly_type = /obj/structure/door_assembly/door_assembly_cult/glass
- glass = 1
- opacity = 0
-
-/obj/machinery/door/airlock/cult/unruned
- icon = 'icons/obj/doors/cult.dmi'
- assembly_type = /obj/structure/door_assembly/door_assembly_cult/unruned
-
-/obj/machinery/door/airlock/cult/unruned/glass
- assembly_type = /obj/structure/door_assembly/door_assembly_cult/unruned/glass
- glass = 1
- opacity = 0
\ No newline at end of file
+ return
\ No newline at end of file
diff --git a/code/game/magic/Uristrunes.dm b/code/game/magic/Uristrunes.dm
index 09b488127bd..bb5587780b6 100644
--- a/code/game/magic/Uristrunes.dm
+++ b/code/game/magic/Uristrunes.dm
@@ -1,34 +1,21 @@
+/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
-var/list/word_to_uristrune_table = null
-
-/proc/word_to_uristrune_bit(word)
- if(word_to_uristrune_table == null)
- word_to_uristrune_table = list()
-
- var/bit = 1
-
- while(length(word))
- var/w = word
-
- word_to_uristrune_table[w] = bit
-
- word -= w
- bit <<= 1
-
-
- return word_to_uristrune_table[word]
-
-
-
-/proc/get_uristrune_cult(word1)
+/proc/get_uristrune_cult(word)
var/animated
- if(word1)
+ if(word)
animated = 1
else
animated = 0
- var/bits = word_to_uristrune_bit(word1)
+ var/bits = make_bit_triplet()
return get_uristrune(bits, animated)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 71937b50afa..75dc97b9cfe 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -209,7 +209,6 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
*/
var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
- new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 3, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("runed girder", /obj/structure/cultgirder, 1, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("pylon", /obj/structure/cult/cultpylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("forge", /obj/structure/cult/cultforge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 4c331cd70f3..fef41df80b8 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -139,24 +139,6 @@ obj/structure/door_assembly/multi_tile/Move()
bound_width = world.icon_size
bound_height = width * world.icon_size
-/obj/structure/door_assembly/door_assembly_cult
- name = "cult airlock assembly"
- icon = 'icons/obj/doors/cult_runed.dmi'
- base_name = "cult"
- airlock_type = /obj/machinery/door/airlock/cult
- anchored = 1
- state = 1
-
-/obj/structure/door_assembly/door_assembly_cult/glass
- glass = 1
-
-/obj/structure/door_assembly/door_assembly_cult/unruned
- icon = 'icons/obj/doors/cult.dmi'
-
-/obj/structure/door_assembly/door_assembly_cult/unruned/glass
- glass = 1
-
-
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/pen))
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 621f3a9d78e..952f442b4f2 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -12,6 +12,12 @@
handle_rotation()
return
+/obj/structure/stool/bed/chair/narsie_act()
+ if(prob(20))
+ var/obj/structure/stool/bed/chair/wood/W = new/obj/structure/stool/bed/chair/wood(get_turf(src))
+ W.dir = dir
+ qdel(src)
+
/obj/structure/stool/bed/chair/Move(atom/newloc, direct)
..()
handle_rotation()
@@ -70,6 +76,9 @@
/obj/structure/stool/bed/chair/wood
// TODO: Special ash subtype that looks like charred chair legs
+/obj/structure/stool/bed/chair/wood/narsie_act()
+ return
+
/obj/structure/stool/bed/chair/wood/normal
icon_state = "wooden_chair"
name = "wooden chair"
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 17a4233ffa9..07e418c7a2b 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -41,6 +41,10 @@
density = 0
qdel(src)
+/obj/structure/table/narsie_act()
+ if(prob(20))
+ new /obj/structure/table/woodentable(src.loc)
+
/obj/structure/table/update_icon()
if(smooth && !flipped)
icon_state = ""
@@ -384,6 +388,10 @@
return 1
+
+/obj/structure/table/woodentable/narsie_act()
+ return
+
/obj/structure/table/woodentable/poker //No specialties, Just a mapping object.
name = "gambling table"
desc = "A seedy table for seedy dealings in seedy places."
@@ -396,6 +404,9 @@
new /obj/item/stack/tile/grass(loc)
..()
+/obj/structure/table/woodentable/poker/narsie_act()
+ return
+
/obj/structure/glasstable_frame
name = "glass table frame"
desc = "A metal frame for a glass table."