diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm
index 7c4054f35d6..afc91f922ab 100644
--- a/code/datums/spells/construct_spells.dm
+++ b/code/datums/spells/construct_spells.dm
@@ -61,6 +61,11 @@
summon_type = list(/obj/item/soulstone)
+/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/holy
+ action_icon_state = "summonsoulstone_holy"
+
+ summon_type = list(/obj/item/soulstone/anybody/purified)
+
/obj/effect/proc_holder/spell/aoe_turf/conjure/pylon
name = "Cult Pylon"
desc = "This spell conjures a fragile crystal from Nar'Sie's realm. Makes for a convenient light source."
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 49b04c9c07f..324ecae1c0a 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -145,7 +145,7 @@
return
/obj/item/soulstone/attackby(obj/item/O, mob/user)
- if(istype(O, /obj/item/storage/bible) && !iscultist(user))
+ if(istype(O, /obj/item/storage/bible) && !iscultist(user) && user.mind.isholy)
if(purified)
return
to_chat(user, "You begin to exorcise [src].")
@@ -342,7 +342,12 @@
set_light(3, 5, LIGHT_COLOR_DARK_BLUE)
name = "Holy [name]"
real_name = "Holy [real_name]"
- if(iscultist(src) && !SS.purified) // Re-grant cult actions, lost in the transfer
+
+ // Replace regular soulstone summoning with purified soulstones
+ RemoveSpell(/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone)
+ AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/holy)
+
+ else if(iscultist(src)) // Re-grant cult actions, lost in the transfer
var/datum/action/innate/cult/comm/CC = new
var/datum/action/innate/cult/check_progress/D = new
CC.Grant(src)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 96d60cdca2b..adb20e65203 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -1,7 +1,6 @@
/mob/living/simple_animal/hostile/construct
name = "Construct"
real_name = "Construct"
- desc = ""
speak_emote = list("hisses")
emote_hear = list("wails","screeches")
response_help = "thinks better of touching"
@@ -21,25 +20,25 @@
pressure_resistance = 100
universal_speak = 1
AIStatus = AI_OFF //normal constructs don't have AI
- var/const_type = "shade"
- var/list/construct_spells = list()
- var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this."
loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
deathmessage = "collapses in a shattered heap."
+ var/construct_type = "shade"
+ var/list/construct_spells = list()
+ var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this."
/mob/living/simple_animal/hostile/construct/New()
. = ..()
if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way
- name = "[const_type] ([rand(1, 1000)])"
- real_name = const_type
- icon_living = const_type
- icon_state = const_type
+ name = "[construct_type] ([rand(1, 1000)])"
+ real_name = construct_type
+ icon_living = construct_type
+ icon_state = construct_type
else
- name = "[SSticker.cultdat.get_name(const_type)] ([rand(1, 1000)])"
- real_name = SSticker.cultdat.get_name(const_type)
- icon_living = SSticker.cultdat.get_icon(const_type)
- icon_state = SSticker.cultdat.get_icon(const_type)
+ name = "[SSticker.cultdat.get_name(construct_type)] ([rand(1, 1000)])"
+ real_name = SSticker.cultdat.get_name(construct_type)
+ icon_living = SSticker.cultdat.get_icon(construct_type)
+ icon_state = SSticker.cultdat.get_icon(construct_type)
for(var/spell in construct_spells)
AddSpell(new spell(null))
@@ -113,7 +112,7 @@
environment_smash = 2
attack_sound = 'sound/weapons/punch3.ogg'
status_flags = 0
- const_type = "juggernaut"
+ construct_type = "juggernaut"
mob_size = MOB_SIZE_LARGE
construct_spells = list(/obj/effect/proc_holder/spell/targeted/night_vision, /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
force_threshold = 11
@@ -158,7 +157,7 @@
melee_damage_upper = 25
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
- const_type = "wraith"
+ construct_type = "wraith"
construct_spells = list(/obj/effect/proc_holder/spell/targeted/night_vision, /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
retreat_distance = 2 //AI wraiths will move in and out of combat
playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls."
@@ -189,14 +188,14 @@
retreat_distance = 10
minimum_distance = 10 //AI artificers will flee like fuck
attack_sound = 'sound/weapons/punch2.ogg'
- const_type = "builder"
+ construct_type = "builder"
construct_spells = list(/obj/effect/proc_holder/spell/targeted/night_vision,
+ /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser,
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
/obj/effect/proc_holder/spell/aoe_turf/conjure/pylon,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone,
- /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
+ /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone)
playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \
use magic missile, repair allied constructs (by clicking on them), \
@@ -269,7 +268,7 @@
environment_smash = 2
attack_sound = 'sound/weapons/punch4.ogg'
force_threshold = 11
- const_type = "behemoth"
+ construct_type = "behemoth"
var/energy = 0
var/max_energy = 1000
@@ -298,7 +297,7 @@
attacktext = "prods"
environment_smash = ENVIRONMENT_SMASH_RWALLS
attack_sound = 'sound/weapons/tap.ogg'
- const_type = "harvester"
+ construct_type = "harvester"
construct_spells = list(/obj/effect/proc_holder/spell/targeted/night_vision,
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi
index 643bea3d835..a8f226c2f01 100644
Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ