diff --git a/code/__DEFINES/cult.dm b/code/__DEFINES/cult.dm
index ec5e9b4ba8f..6acb3f314f2 100644
--- a/code/__DEFINES/cult.dm
+++ b/code/__DEFINES/cult.dm
@@ -27,3 +27,7 @@
//misc
#define SOULS_TO_REVIVE 3
#define BLOODCULT_EYE "f00"
+//soulstone & construct themes
+#define THEME_WIZARD "wizard"
+#define THEME_CULT "cult"
+#define THEME_HOLY "holy"
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index c4cf97d02c0..6b9cb3841a8 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -358,7 +358,7 @@
/obj/item/storage/belt/soulstone/full/PopulateContents()
for(var/i in 1 to 6)
- new /obj/item/soulstone(src)
+ new /obj/item/soulstone/mystic(src)
/obj/item/storage/belt/soulstone/full/chappy/PopulateContents()
for(var/i in 1 to 6)
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index ba157f1bf6f..693c636b34e 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -229,14 +229,14 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
qdel(sword)
else if(istype(A, /obj/item/soulstone) && !iscultist(user))
var/obj/item/soulstone/SS = A
- if(SS.purified)
+ if(SS.theme == THEME_HOLY)
return
to_chat(user, "You begin to exorcise [SS].")
playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
if(do_after(user, 40, target = SS))
playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
SS.usability = TRUE
- SS.purified = TRUE
+ SS.theme = THEME_HOLY
SS.icon_state = "purified_soulstone"
for(var/mob/M in SS.contents)
if(M.mind)
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index b6fcaf143dc..89eb45eb492 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -473,6 +473,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
icon = 'icons/obj/wizard.dmi'
icon_state = "angelplasm"
+/obj/item/ectoplasm/mystic
+ icon_state = "revenantEctoplasm"
+
+
/obj/item/mounted_chainsaw
name = "mounted chainsaw"
desc = "A chainsaw that has replaced your arm."
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 6fe41cb6f3e..077328c5ca6 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -1,3 +1,4 @@
+
/obj/item/soulstone
name = "soulstone shard"
icon = 'icons/obj/wizard.dmi'
@@ -13,7 +14,8 @@
var/old_shard = FALSE
var/spent = FALSE
- var/purified = FALSE
+///this controlls the color of the soulstone as well as restrictions for who can use it. THEME_CULT is red and is the default of cultist THEME_WIZARD is purple and is the default of wizard and THEME_HOLY is for purified soul stone
+ var/theme = THEME_CULT
/obj/item/soulstone/proc/was_used()
if(old_shard)
@@ -26,13 +28,17 @@
/obj/item/soulstone/anybody
usability = TRUE
+/obj/item/soulstone/mystic
+ icon_state = "mystic_soulstone"
+ theme = THEME_CULT
+
/obj/item/soulstone/anybody/revolver
old_shard = TRUE
/obj/item/soulstone/anybody/purified
icon = 'icons/obj/wizard.dmi'
icon_state = "purified_soulstone"
- purified = TRUE
+ theme = THEME_HOLY
/obj/item/soulstone/anybody/chaplain
name = "mysterious old shard"
@@ -83,7 +89,7 @@
if(iscultist(user))
to_chat(user, "\"Come now, do not capture your bretheren's soul.\"")
return
- if(purified && iscultist(user))
+ if(theme == THEME_HOLY && iscultist(user))
hot_potato(user)
return
log_combat(user, M, "captured [M.name]'s soul", src)
@@ -98,7 +104,7 @@
user.Unconscious(100)
to_chat(user, "Your body is wracked with debilitating pain!")
return
- if(purified && iscultist(user))
+ if(theme == THEME_HOLY && iscultist(user))
hot_potato(user)
return
release_shades(user)
@@ -107,12 +113,18 @@
for(var/mob/living/simple_animal/shade/A in src)
A.forceMove(get_turf(user))
A.cancel_camera()
- if(purified)
- icon_state = "purified_soulstone"
- A.icon_state = "shade_angelic"
- A.name = "Purified [initial(A.name)]"
- else
- icon_state = "soulstone"
+ switch(theme)
+ if(THEME_HOLY)
+ icon_state = "purified_soulstone"
+ A.icon_state = "shade_angelic"
+ A.name = "Purified [initial(A.name)]"
+ A.loot = list(/obj/item/ectoplasm/angelic)
+ if(THEME_WIZARD)
+ icon_state = "mystic_soulstone"
+ A.icon_state = "shade_mystic"
+ A.loot = list(/obj/item/ectoplasm/mystic)
+ if(THEME_CULT)
+ icon_state = "soulstone"
name = initial(name)
if(!silent)
if(iswizard(user) || usability)
@@ -127,7 +139,7 @@
if(!occupant || !istype(target_toolbox) || target_toolbox.has_soul)
return ..()
- if(purified && iscultist(user))
+ if(theme == THEME_HOLY && iscultist(user))
hot_potato(user)
return
if(!iscultist(user) && !iswizard(user) && !usability)
@@ -169,11 +181,11 @@
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
- if(!iscultist(user) && !iswizard(user) && !SS.purified)
+ if(!iscultist(user) && !iswizard(user) && !SS.theme == THEME_HOLY)
to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place [SS] into the shell. It would be wise to be rid of this quickly.")
user.Dizzy(30)
return
- if(SS.purified && iscultist(user))
+ if(SS.theme == THEME_HOLY && iscultist(user))
SS.hot_potato(user)
return
SS.transfer_soul("CONSTRUCT",src,user)
@@ -231,11 +243,13 @@
to_chat(user, "Capture failed!: [src] is full! Free an existing soul to make room.")
else
T.AddComponent(/datum/component/soulstoned, src)
- if(purified)
+ if(theme == THEME_HOLY)
icon_state = "purified_soulstone2"
if(iscultist(T))
SSticker.mode.remove_cultist(T.mind, FALSE, FALSE)
- else
+ if(theme == THEME_WIZARD)
+ icon_state = "mystic_soulstone2"
+ if(theme == THEME_CULT)
icon_state = "soulstone2"
name = "soulstone: Shade of [T.real_name]"
to_chat(T, "Your soul has been captured by [src]. Its arcane energies are reknitting your ethereal form.")
@@ -256,26 +270,35 @@
return
switch(construct_class)
if("Juggernaut")
- if(iscultist(user) || iswizard(user))
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut, A, user, 0, T.loc)
+ if(iscultist(user))
+ if(theme == THEME_WIZARD)
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut/mystic, A, user, 0, T.loc)
+ else
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut, A, user, 0, T.loc)
else
- if(purified)
+ if(theme == THEME_HOLY)
makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut/angelic, A, user, 0, T.loc)
else
makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut/noncult, A, user, 0, T.loc)
if("Wraith")
- if(iscultist(user) || iswizard(user))
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc)
+ if(iscultist(user))
+ if(theme == THEME_WIZARD)
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/mystic, A, user, 0, T.loc)
+ else
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc)
else
- if(purified)
+ if((theme == THEME_HOLY))
makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/angelic, A, user, 0, T.loc)
else
makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, A, user, 0, T.loc)
if("Artificer")
- if(iscultist(user) || iswizard(user))
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer, A, user, 0, T.loc)
+ if(iscultist(user))
+ if(theme == THEME_WIZARD)
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer/mystic, A, user, 0, T.loc)
+ else
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer, A, user, 0, T.loc)
else
- if(purified)
+ if((theme == THEME_HOLY))
makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer/angelic, A, user, 0, T.loc)
else
makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer/noncult, A, user, 0, T.loc)
@@ -301,7 +324,7 @@
return
var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target)))
var/makeicon = newstruct.icon_state
- var/holyness = newstruct.holy
+ var/holyness = newstruct.theme
flick("make_[makeicon][holyness]", newstruct)
playsound(newstruct, 'sound/effects/constructform.ogg', 50)
if(stoner)
@@ -347,10 +370,13 @@
SSticker.mode.add_cultist(S.mind, 0)
S.cancel_camera()
name = "soulstone: Shade of [T.real_name]"
- if(purified)
- icon_state = "purified_soulstone2"
- else
- icon_state = "soulstone2"
+ switch(theme)
+ if(THEME_HOLY)
+ icon_state = "purified_soulstone2"
+ if(THEME_WIZARD)
+ icon_state = "mystic_soulstone2"
+ if(THEME_CULT)
+ icon_state = "soulstone2"
if(user && (iswizard(user) || usability))
to_chat(S, "Your soul has been captured! You are now bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.")
else if(user && iscultist(user))
@@ -380,3 +406,4 @@
init_shade(T, user , shade_controller = chosen_ghost)
qdel(T)
return TRUE
+
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index a5f1af571cb..c5c9f4eca73 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -1,3 +1,4 @@
+
/mob/living/simple_animal/hostile/construct
name = "Construct"
real_name = "Construct"
@@ -42,7 +43,8 @@
var/can_repair_constructs = FALSE
var/can_repair_self = FALSE
var/runetype
- var/holy = FALSE
+ /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue
+ var/theme = THEME_CULT
/mob/living/simple_animal/hostile/construct/Initialize()
. = ..()
@@ -65,7 +67,7 @@
var/pos = 2+spellnum*31
CR.button.screen_loc = "6:[pos],4:-2"
CR.button.moved = "6:[pos],4:-2"
- add_overlay("glow_[icon_state][holy]")
+ add_overlay("glow_[icon_state]_[theme]")
/mob/living/simple_animal/hostile/construct/Login()
. = ..()
@@ -89,7 +91,7 @@
var/mob/living/simple_animal/hostile/construct/C = M
if(!C.can_repair_constructs || (C == src && !C.can_repair_self))
return ..()
- if(holy != C.holy)
+ if(theme != C.theme)
return ..()
if(health < maxHealth)
adjustHealth(-5)
@@ -181,11 +183,15 @@
return ..()
-//////////////////////////Angelic-Juggernaut////////////////////////////
+//////////////////////////Juggernaut-alts////////////////////////////
/mob/living/simple_animal/hostile/construct/juggernaut/angelic
- holy = TRUE
+ theme = THEME_HOLY
loot = list(/obj/item/ectoplasm/angelic)
+/mob/living/simple_animal/hostile/construct/juggernaut/mystic
+ theme = THEME_WIZARD
+ loot = list(/obj/item/ectoplasm/mystic)
+
/mob/living/simple_animal/hostile/construct/juggernaut/noncult
////////////////////////Wraith/////////////////////////////////////////////
@@ -234,12 +240,16 @@
/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things
AIStatus = AI_ON
-//////////////////////////Angelic-Wraith////////////////////////////
+//////////////////////////Wraith-alts////////////////////////////
/mob/living/simple_animal/hostile/construct/wraith/angelic
- holy = TRUE
+ theme = THEME_HOLY
construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/angelic)
loot = list(/obj/item/ectoplasm/angelic)
+/mob/living/simple_animal/hostile/construct/wraith/mystic
+ theme = THEME_WIZARD
+ loot = list(/obj/item/ectoplasm/mystic)
+
/mob/living/simple_animal/hostile/construct/wraith/noncult
/////////////////////////////Artificer/////////////////////////
@@ -324,15 +334,19 @@
AIStatus = AI_ON
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP
-/////////////////////////////Angelic Artificer/////////////////////////
+/////////////////////////////Artificer-alts/////////////////////////
/mob/living/simple_animal/hostile/construct/artificer/angelic
desc = "A bulbous construct dedicated to building and maintaining holy armies."
- holy = TRUE
+ theme = THEME_HOLY
loot = list(/obj/item/ectoplasm/angelic)
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified,
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
+/mob/living/simple_animal/hostile/construct/artificer/mystic
+ theme = THEME_WIZARD
+ loot = list(/obj/item/ectoplasm/mystic)
+
/mob/living/simple_animal/hostile/construct/artificer/noncult
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
diff --git a/icons/mob/cult.dmi b/icons/mob/cult.dmi
index 112057874a0..a468be63519 100644
Binary files a/icons/mob/cult.dmi and b/icons/mob/cult.dmi differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index 2509eed61a5..1c6b8fa8f10 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ