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