diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 23c87afb67a..db52c9cfd8e 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -215,7 +215,7 @@
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
body_parts_covered = CHEST|GROIN|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
hooded = 1
hoodtype = /obj/item/clothing/head/berserkerhood
@@ -227,7 +227,7 @@
body_parts_covered = HEAD
flags = NODROP
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
- armor = list(melee = -100, bullet = -100, laser = -100,energy = -100, bomb = -100, bio = -100, rad = -100)
+ armor = list(melee = -50, bullet = -50, laser = -50,energy = -50, bomb = -50, bio = -50, rad = -50)
/obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot)
..()
@@ -286,7 +286,7 @@
user << "We have exhausted our ability to curse the shuttle."
return
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
- var/cursetime = 1500
+ var/cursetime = 1800
var/timer = SSshuttle.emergency.timeLeft(1) + cursetime
SSshuttle.emergency.setTimer(timer)
user << "You shatter the orb! A dark essence spirals into the air, then disappears."
@@ -295,12 +295,12 @@
sleep(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 two minutes.",
- "The shuttle's navigation programming was replaced by a file containing two words, IT COMES. The shuttle will be delayed by two minutes.",
- "The shuttle's custodian tore out his guts and began painting strange shapes on the floor. The shuttle will be delayed by two 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 two minutes.",
- "A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine. The shuttle will be delayed by two minutes.",
- "The shuttle dispatcher was found dead with bloody symbols carved into their flesh. The shuttle will be delayed by two minutes.")
+ 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.")
var/message = pick_n_take(curses)
priority_announce("[message]", "System Failure", 'sound/misc/notice1.ogg')
curselimit++
@@ -310,7 +310,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)
..()
@@ -333,7 +333,7 @@
if(!iscultist(user))
user.unEquip(src, 1)
step(src, pick(alldirs))
- user << "\The [src] flickers out of your hands, too eager to move!"
+ user << "\The [src] flickers out of your hands, your connection to this dimension is too strong!"
return
var/mob/living/carbon/C = user
@@ -358,3 +358,54 @@
else
C << "The veil cannot be torn here!"
+
+/obj/item/device/flashlight/flare/culttorch
+ name = "void torch"
+ desc = "Used by veteran cultists to instantly transport items to their needful bretheren."
+ w_class = 2
+ brightness_on = 1
+ icon_state = "torch-on"
+ item_state = "torch-on"
+ color = "#ff0000"
+ on_damage = 15
+ slot_flags = null
+ on = 1
+ var/charges = 3
+
+/obj/item/device/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity)
+ if(!proximity)
+ return
+
+ if(istype(A, /obj/item))
+
+ var/list/cultists = list()
+ for(var/datum/mind/M in ticker.mode.cult)
+ if(!(user) && M.current && M.current.stat != DEAD)
+ cultists |= M.current
+ var/mob/living/cultist_to_receive = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists
+ if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated())
+ return
+ if(!cultist_to_receive)
+ user << "You require a destination!"
+ log_game("Void torch failed - no target")
+ return
+ if(cultist_to_receive.stat == DEAD)
+ user << "[cultist_to_receive] has died!"
+ log_game("Void torch failed - target died")
+ return
+ if(!iscultist(cultist_to_receive))
+ user << "[cultist_to_receive] is not a follower of the Geometer!"
+ log_game("Void torch failed - target was deconverted")
+ return
+ user << "You ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!"
+ user << "\The [src] now has [charges] charge\s."
+ cultist_to_receive.put_in_hands(A)
+ charges--
+ if(charges == 0)
+ qdel(src)
+
+ else
+ ..()
+ user << "\The [src] can only transport items!"
+ return
+
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 81cdbfd1499..ed07797e2c6 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -177,15 +177,16 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
if(cooldowntime > world.time)
user << "The magic in [src] is weak, it will be ready to use again in [getETA()]."
return
- var/choice = alert(user,"You flip through the black pages of the archives...",,"Supply Talisman","Shuttle Curse","Veil Shifter")
+ var/choice = alert(user,"You flip through the black pages of the archives...",,"Supply Talisman","Shuttle Curse","Veil Walker Set")
var/pickedtype
switch(choice)
if("Supply Talisman")
pickedtype = /obj/item/weapon/paper/talisman/supply/weak
if("Shuttle Curse")
pickedtype = /obj/item/device/shuttle_curse
- if("Veil Shifter")
+ if("Veil Walker Set")
pickedtype = /obj/item/device/cult_shift
+ pickedtype = /obj/item/device/flashlight/flare/culttorch
if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
cooldowntime = world.time + 2400
var/obj/item/N = new pickedtype(get_turf(src))
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 8962fb95af0..ddeb74770c4 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -56,6 +56,7 @@
dat += "Please choose the chant to be imbued into the fabric of reality.
"
dat += "
"
dat += "N'ath reth sh'yro eth d'raggathnor! - Summons an arcane tome, used to scribe runes and communicate with other cultists.
"
+ dat += "Ar'Tee ess! - Provides 5 runed metal.
"
dat += "Sas'so c'arta forbici! - Allows you to move to a selected teleportation rune.
"
dat += "Ta'gh fara'qha fel d'amar det! - Allows you to destroy technology in a short range.
"
dat += "Fuu ma'jin! - Allows you to stun a person by attacking them with the talisman.
"
@@ -76,6 +77,11 @@
if("newtome")
var/obj/item/weapon/tome/T = new(usr)
usr.put_in_hands(T)
+ if("metal")
+ if(istype(src, /obj/item/weapon/paper/talisman/supply/weak))
+ usr.visible_message("Lesser supply talismans lack the strength to materialize runed metal!")
+ return
+ new /obj/item/stack/sheet/runed_metal(get_turf(usr),5)
if("teleport")
var/obj/item/weapon/paper/talisman/teleport/T = new(usr)
usr.put_in_hands(T)
@@ -102,6 +108,7 @@
qdel(src)
/obj/item/weapon/paper/talisman/supply/weak
+ cultist_name = "Lesser Supply Talisman"
uses = 2
//Rite of Translocation: Same as rune
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index f499652330f..ba4e9cdce69 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -134,6 +134,24 @@
setDir(mimiced_atom.dir)
animate(src, alpha = 0, time = duration)
+/obj/effect/overlay/cult
+ mouse_opacity = 0
+ var/atom/linked
+
+/obj/effect/overlay/cult/ex_act()
+ return FALSE
+
+/obj/effect/overlay/cult/Destroy()
+ if(linked)
+ linked = null
+ ..()
+ return QDEL_HINT_PUTINPOOL
+
+/obj/effect/overlay/cult/floor
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "cult"
+ layer = TURF_LAYER
+
/obj/effect/overlay/temp/cult
randomdir = 0
duration = 10
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index c515549a37d..95a6e9909f7 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -224,12 +224,12 @@ 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 door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("pylon", /obj/structure/cult/pylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("forge", /obj/structure/cult/forge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("forge", /obj/structure/cult/forge, 4, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("archives", /obj/structure/cult/tome, 2, time = 40, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("altar", /obj/structure/cult/talisman, 5, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("altar", /obj/structure/cult/talisman, 4, time = 40, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/runed_metal
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index d72e106b393..a7895b526d4 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -150,7 +150,27 @@
/turf/open/floor/engine/cult
name = "engraved floor"
- icon_state = "cult"
+ icon_state = "plating"
+ var/obj/effect/clockwork/overlay/floor/realappearence
+
+/turf/open/floor/engine/cult/New()
+ ..()
+ PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, src)
+ realappearence = PoolOrNew(/obj/effect/overlay/cult/floor, src)
+ realappearence.linked = src
+
+/turf/open/floor/engine/cult/Destroy()
+ be_removed()
+ return ..()
+
+/turf/open/floor/engine/cult/ChangeTurf(path, defer_change = FALSE)
+ if(path != type)
+ be_removed()
+ return ..()
+
+/turf/open/floor/engine/cult/proc/be_removed()
+ qdel(realappearence)
+ realappearence = null
/turf/open/floor/engine/cult/New()
PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, src)