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."