diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm
index b8ba7cbc94e..8632b89df12 100644
--- a/code/datums/spells/construct_spells.dm
+++ b/code/datums/spells/construct_spells.dm
@@ -74,7 +74,7 @@
invocation_type = "none"
range = 0
- summon_type = list(/obj/structure/cult/itemspawner/pylon)
+ summon_type = list(/obj/structure/cult/functional/pylon)
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index a06f7b27740..edf0912c4d6 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -45,7 +45,7 @@
/obj/item/weapon/melee/cultblade/dagger/afterattack(mob/living/target as mob, mob/living/carbon/human/user as mob)
..()
var/mob/living/carbon/human/bleeder = target
- if(!(cooldown > world.time) && ((bleeder.stat != DEAD) || !(bleeder.species.flags & NO_BLOOD)))
+ if(!(cooldown > world.time) && ((bleeder.stat != DEAD) && !(bleeder.species.flags & NO_BLOOD)))
user.visible_message("The runes on the blade absorb the blood of [target]!")
bleeder.drip(5000)
cooldown = world.time + 2400
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 73ffb2c7e5d..ceddb9b85af 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -28,24 +28,32 @@
icon_state = "tomealtar"
//Cult versions cuase fuck map conflicts
-/obj/structure/cult/itemspawner/
+/obj/structure/cult/functional
var/cooldowntime = 0
var/health = 100
var/death_message = "The structure falls apart." //The message shown when the structure is destroyed
var/death_sound = 'sound/items/bikehorn.ogg'
+ var/heathen_message = "You're a huge nerd, go away. Also, a coder forgot to put a message here."
+ var/selection_title = "Oops"
+ var/selection_prompt = "Choose your weapon, nerdwad"
+ var/creation_delay = 2400
+ var/list/choosable_items = list(
+ "A coder forgot to set this" = /obj/item/weapon/bananapeel
+ )
+ var/creation_message = "A dank smoke comes out, and you pass out. When you come to, you notice a %ITEM%!"
-/obj/structure/cult/itemspawner/proc/destroy_structure()
+/obj/structure/cult/functional/proc/destroy_structure()
visible_message(death_message)
playsound(src, death_sound, 50, 1)
qdel(src)
-/obj/structure/cult/itemspawner/examine(mob/user)
+/obj/structure/cult/functional/examine(mob/user)
. = ..()
if(iscultist(user) && cooldowntime > world.time)
to_chat(user, "The magic in [src] is weak, it will be ready to use again in [getETA()].")
to_chat(user, "\The [src] is [anchored ? "":"not "]secured to the floor.")
-/obj/structure/cult/attackby(obj/I, mob/user, params)
+/obj/structure/cult/functional/attackby(obj/I, mob/user, params)
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
anchored = !anchored
to_chat(user, "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.")
@@ -57,26 +65,9 @@
else
return ..()
-
-/obj/structure/cult/itemspawner/proc/getETA()
- var/time = (cooldowntime - world.time)/600
- var/eta = "[round(time, 1)] minutes"
- if(time <= 1)
- time = (cooldowntime - world.time)*0.1
- eta = "[round(time, 1)] seconds"
- return eta
-
-/obj/structure/cult/itemspawner/talisman
- name = "altar"
- desc = "A bloodstained altar dedicated to a cult."
- icon_state = "talismanaltar"
- health = 150 //Sturdy
- death_message = "The altar breaks into splinters, releasing a cascade of spirits into the air!"
- death_sound = 'sound/effects/altar_break.ogg'
-
-/obj/structure/cult/itemspawner/talisman/attack_hand(mob/living/user)
+/obj/structure/cult/functional/attack_hand(mob/living/user)
if(!iscultist(user))
- to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it.")
+ to_chat(user, "[heathen_message]")
return
if(!anchored)
to_chat(user, "You need to anchor [src] to the floor with a tome first.")
@@ -84,32 +75,51 @@
if(cooldowntime > world.time)
to_chat(user, "The magic in [src] is weak, it will be ready to use again in [getETA()].")
return
- var/choice = input(user,"You study the rituals on the altar...","Altar") as null|anything in list("Cultist Dagger", "Eldritch Whetstone","Zealot's Blindfold","Flask of Unholy Water")
- var/pickedtype
- switch(choice)
- if("Eldritch Whetstone")
- pickedtype = /obj/item/weapon/whetstone/cult
- if("Zealot's Blindfold")
- pickedtype = /obj/item/clothing/glasses/night/cultblind
- if("Flask of Unholy Water")
- pickedtype = /obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater
- if("Cultist Dagger")
- pickedtype = /obj/item/weapon/melee/cultblade/dagger
+ var/choice = input(user, selection_prompt, selection_title) as null|anything in choosable_items
+ var/pickedtype = choosable_items[choice]
if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
- cooldowntime = world.time + 2400
+ cooldowntime = world.time + creation_delay
var/obj/item/N = new pickedtype(get_turf(src))
- to_chat(user, "You kneel before the altar and your faith is rewarded with an [N]!")
+ to_chat(user, replacetext("[creation_message]", "%ITEM%", "[N]"))
+/obj/structure/cult/functional/proc/getETA()
+ var/time = (cooldowntime - world.time)/600
+ var/eta = "[round(time, 1)] minutes"
+ if(time <= 1)
+ time = (cooldowntime - world.time)*0.1
+ eta = "[round(time, 1)] seconds"
+ return eta
-/obj/structure/cult/itemspawner/forge
+/obj/structure/cult/functional/talisman
+ name = "altar"
+ desc = "A bloodstained altar dedicated to a cult."
+ icon_state = "talismanaltar"
+ health = 150 //Sturdy
+ death_message = "The altar breaks into splinters, releasing a cascade of spirits into the air!"
+ death_sound = 'sound/effects/altar_break.ogg'
+ heathen_message = "There is a forboding aura to the alter and you want nothing to do with it."
+ selection_prompt = "You study the rituals on the altar..."
+ selection_title = "Altar"
+ creation_message = "You kneel before the altar and your faith is rewarded with an %ITEM%!"
+ choosable_items = list("Eldritch Whetstone"= /obj/item/weapon/whetstone/cult, "Zealot's Blindfold" = /obj/item/clothing/glasses/night/cultblind, \
+ "Flask of Unholy Water" = /obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater, "Cultist Dagger" = /obj/item/weapon/melee/cultblade/dagger)
+
+/obj/structure/cult/functional/forge
name = "daemon forge"
desc = "A forge used in crafting the unholy weapons used by the armies of a cult."
icon_state = "forge"
health = 300 //Made of metal
death_message = "The forge falls apart, its lava cooling and winking away!"
death_sound = 'sound/effects/forge_destroy.ogg'
+ heathen_message = "Your hand feels like its melting off as you try to touch the forge."
+ selection_prompt = "You study the schematics etched on the forge..."
+ selection_title = "Forge"
+ creation_message = "You work the forge as dark knowledge guides your hands, creating %ITEM%!"
+ choosable_items = list("Shielded Robe" = /obj/item/clothing/suit/hooded/cultrobes/cult_shield, "Flagellant's Robe" = /obj/item/clothing/suit/hooded/cultrobes/berserker, \
+ "Cultist Hardsuit" = /obj/item/weapon/storage/box/cult)
-/obj/structure/cult/itemspawner/forge/attackby(obj/item/I, mob/user, params)
+
+/obj/structure/cult/functional/forge/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
if(!iscarbon(G.affecting))
@@ -133,35 +143,6 @@
head.disfigure("burn") //Your face is unrecognizable because it's FUCKING LAVA
return 1
-/obj/structure/cult/itemspawner/forge/attack_hand(mob/living/user)
- if(!iscultist(user))
- to_chat(user, "The heat radiating from [src] pushes you back.")
- return
- if(!anchored)
- to_chat(user, "You need to anchor [src] to the floor with a tome first.")
- return
- if(cooldowntime > world.time)
- to_chat(user, "The magic in [src] is weak, it will be ready to use again in [getETA()].")
- return
- var/choice = input(user,"You study the schematics etched on the force...","Forge") as null|anything in list("Shielded Robe", "Flagellant's Robe","Cultist Hardsuit")
- var/pickedtype
- var/otheritem //ie:helmet..
- switch(choice)
- if("Shielded Robe")
- pickedtype = /obj/item/clothing/suit/hooded/cultrobes/cult_shield
- if("Flagellant's Robe")
- pickedtype = /obj/item/clothing/suit/hooded/cultrobes/berserker
- if("Cultist Hardsuit")
- pickedtype = /obj/item/clothing/suit/space/cult
- otheritem = /obj/item/clothing/head/helmet/space/cult
- if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
- cooldowntime = world.time + 2400
- var/obj/item/N = new pickedtype(get_turf(src))
- if(otheritem)
- new otheritem(get_turf(src))
- to_chat(user, "You work the forge as dark knowledge guides your hands, creating [N]!")
-
-
var/list/blacklisted_pylon_turfs = typecacheof(list(
/turf/simulated/floor/engine/cult,
/turf/space,
@@ -170,7 +151,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
/turf/simulated/wall,
))
-/obj/structure/cult/itemspawner/pylon
+/obj/structure/cult/functional/pylon
name = "pylon"
desc = "A floating crystal that slowly heals those faithful to a cult."
icon_state = "pylon"
@@ -179,20 +160,24 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
health = 50 //Very fragile
death_message = "The pylon's crystal vibrates and glows fiercely before violently shattering!"
death_sound = 'sound/effects/pylon_shatter.ogg'
+
var/heal_delay = 25
var/last_heal = 0
var/corrupt_delay = 50
var/last_corrupt = 0
-/obj/structure/cult/itemspawner/pylon/New()
+/obj/structure/cult/functional/pylon/attack_hand(mob/living/user)//override as it should not create anything
+ return
+
+/obj/structure/cult/functional/pylon/New()
processing_objects |= src
..()
-/obj/structure/cult/itemspawner/pylon/Destroy()
+/obj/structure/cult/functional/pylon/Destroy()
processing_objects.Remove(src)
return ..()
-/obj/structure/cult/itemspawner/pylon/process()
+/obj/structure/cult/functional/pylon/process()
if(!anchored)
return
if(last_heal <= world.time)
@@ -237,38 +222,19 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
-/obj/structure/cult/itemspawner/tome
+/obj/structure/cult/functional/tome
name = "archives"
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl."
icon_state = "tomealtar"
health = 125 //Slightly sturdy
death_message = "The desk breaks apart, its books falling to the floor."
death_sound = 'sound/effects/wood_break.ogg'
-
-/obj/structure/cult/itemspawner/tome/attack_hand(mob/living/user)
- if(!iscultist(user))
- to_chat(user, "All of these books seem to be gibberish.")
- return
- if(!anchored)
- to_chat(user, "You need to anchor [src] to the floor with a tome first.")
- return
- if(cooldowntime > world.time)
- to_chat(user, "The magic in [src] is weak, it will be ready to use again in [getETA()].")
- return
- var/choice = input(user,"You flip through the black pages of the archives...","Archives") as null|anything in list("Supply Talisman","Shuttle Curse","Veil Shifter")
- 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")
- pickedtype = /obj/item/device/cult_shift
- if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time)
- cooldowntime = world.time + 2400
- var/obj/item/N = new pickedtype(get_turf(src))
- to_chat(user, "You summon [N] from the archives!")
-
+ heathen_message = "What do you hope to seek?"
+ selection_prompt = "You flip through the black pages of the archives..."
+ selection_title = "Archives"
+ creation_message = "You invoke the dark magic of the tomes creating %ITEM%!"
+ choosable_items = list("Supply Talisman" = /obj/item/weapon/paper/talisman/supply/weak, "Shuttle Curse" = /obj/item/device/shuttle_curse, \
+ "Veil Shifter" = /obj/item/device/cult_shift)
/obj/effect/gateway
name = "gateway"
@@ -287,4 +253,18 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
/obj/effect/gateway/Crossed(AM as mob|obj)
spawn(0)
return
+ return
+
+
+//Armor kit
+
+/obj/item/weapon/storage/box/cult
+ name = "Dark Forge Cache"
+ can_hold = list("/obj/item/clothing/suit/space/cult", "/obj/item/clothing/head/helmet/space/cult")
+ max_w_class = 3
+
+/obj/item/weapon/storage/box/cult/New()
+ ..()
+ new /obj/item/clothing/suit/space/cult(src)
+ new /obj/item/clothing/head/helmet/space/cult(src)
return
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 73a9f40feca..e019eebeb62 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -214,10 +214,10 @@ 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, 1, 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/itemspawner/pylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("forge", /obj/structure/cult/itemspawner/forge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("archives", /obj/structure/cult/itemspawner/tome, 2, time = 40, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("altar", /obj/structure/cult/itemspawner/talisman, 5, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("pylon", /obj/structure/cult/functional/pylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("forge", /obj/structure/cult/functional/forge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("archives", /obj/structure/cult/functional/tome, 2, time = 40, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("altar", /obj/structure/cult/functional/talisman, 5, time = 40, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/runed_metal