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