diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index c6ad076b102..418d89942ee 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -106,6 +106,7 @@
#define ui_construct_pull "EAST-1:28,SOUTH+1:10" //above the zone_sel icon
+#define ui_construct_health "EAST:00,CENTER:15" //same height as humans, hugging the right border
//Pop-up inventory
#define ui_shoes "WEST+1:8,SOUTH:5"
diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm
new file mode 100644
index 00000000000..c6c154233c5
--- /dev/null
+++ b/code/_onclick/hud/constructs.dm
@@ -0,0 +1,32 @@
+/mob/living/simple_animal/hostile/construct/create_mob_hud()
+ if(client && !hud_used)
+ hud_used = new /datum/hud/construct(src)
+
+/datum/hud/construct/New(mob/owner)
+ ..()
+
+ var/constructtype
+
+ if(istype(mymob,/mob/living/simple_animal/hostile/construct/armoured) || istype(mymob,/mob/living/simple_animal/hostile/construct/behemoth))
+ constructtype = "juggernaut"
+ else if(istype(mymob,/mob/living/simple_animal/hostile/construct/builder))
+ constructtype = "artificer"
+ else if(istype(mymob,/mob/living/simple_animal/hostile/construct/wraith))
+ constructtype = "wraith"
+ else if(istype(mymob,/mob/living/simple_animal/hostile/construct/harvester))
+ constructtype = "harvester"
+
+
+ if(constructtype)
+ mymob.healths = new /obj/screen()
+ mymob.healths.icon = 'icons/mob/screen_construct.dmi'
+ mymob.healths.icon_state = "[constructtype]_health0"
+ mymob.healths.name = "health"
+ mymob.healths.screen_loc = ui_construct_health
+ infodisplay += mymob.healths
+
+ mymob.pullin = new /obj/screen()
+ mymob.pullin.icon = 'icons/mob/screen_construct.dmi'
+ mymob.pullin.icon_state = "pull0"
+ mymob.pullin.name = "pull"
+ mymob.pullin.screen_loc = ui_construct_pull
\ No newline at end of file
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index ea478d6b9e0..b6c8365c577 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -799,8 +799,8 @@
if(!(src in ticker.mode.cult))
ticker.mode.add_cultist(src)
special_role = "Cultist"
- to_chat(current, "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.")
- to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.")
+ to_chat(current, "You catch a glimpse of the Realm of [ticker.mode.cultdat.entity_name], [ticker.mode.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.mode.cultdat.entity_name].")
+ to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [ticker.mode.cultdat.entity_title2] above all else. Bring It back.")
log_admin("[key_name(usr)] has culted [key_name(current)]")
message_admins("[key_name_admin(usr)] has culted [key_name_admin(current)]")
if("tome")
@@ -1359,17 +1359,16 @@
ticker.mode.cult += src
ticker.mode.update_cult_icons_added(src)
special_role = "Cultist"
- to_chat(current, "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.")
+ to_chat(current, "You catch a glimpse of the Realm of [ticker.mode.cultdat.entity_name], [ticker.mode.cultdat.entity_title2]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.mode.cultdat.entity_name].")
to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.")
var/datum/game_mode/cult/cult = ticker.mode
- if (istype(cult))
+ if(istype(cult))
cult.memorize_cult_objectives(src)
else
- var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it."
+ var/explanation = "Summon [ticker.mode.cultdat.entity_name] via the use of the appropriate rune. It will only work if nine cultists stand on and around it."
to_chat(current, "Objective #1: [explanation]")
current.memory += "Objective #1: [explanation]
"
- to_chat(current, "The convert rune is join blood self")
- current.memory += "The convert rune is join blood self
"
+
var/mob/living/carbon/human/H = current
if (istype(H))
@@ -1602,17 +1601,17 @@
..()
mind.assigned_role = "Shade"
-/mob/living/simple_animal/construct/builder/mind_initialize()
+/mob/living/simple_animal/hostile/construct/builder/mind_initialize()
..()
mind.assigned_role = "Artificer"
mind.special_role = "Cultist"
-/mob/living/simple_animal/construct/wraith/mind_initialize()
+/mob/living/simple_animal/hostile/construct/wraith/mind_initialize()
..()
mind.assigned_role = "Wraith"
mind.special_role = "Cultist"
-/mob/living/simple_animal/construct/armoured/mind_initialize()
+/mob/living/simple_animal/hostile/construct/armoured/mind_initialize()
..()
mind.assigned_role = "Juggernaut"
mind.special_role = "Cultist"
diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm
index 8cbc46e2f03..0aed526f5d6 100644
--- a/code/datums/spells/construct_spells.dm
+++ b/code/datums/spells/construct_spells.dm
@@ -57,6 +57,19 @@
summon_type = list(/obj/item/device/soulstone)
+/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."
+
+ school = "conjuration"
+ charge_max = 200
+ clothes_req = 0
+ invocation = "none"
+ invocation_type = "none"
+ range = 0
+
+ summon_type = list(/obj/structure/cult/cultpylon)
+
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall
name = "Shield"
@@ -68,9 +81,15 @@
invocation = "none"
invocation_type = "none"
range = 0
- summon_type = list(/obj/effect/forcefield)
+ summon_type = list(/obj/effect/forcefield/cult)
summon_lifespan = 200
+/obj/effect/forcefield/cult
+ desc = "That eerie looking obstacle seems to have been pulled from another dimension through sheer force"
+ name = "eldritch wall"
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "m_shield_cult"
+ light_color = LIGHT_COLOR_PURE_RED
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift
name = "Phase Shift"
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index dcf966cabb0..ad731f6a509 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -112,8 +112,8 @@ var/global/list/all_cults = list()
for(var/datum/mind/cult_mind in cult)
equip_cultist(cult_mind.current)
- update_cult_icons_added(cult_mind)
- to_chat(cult_mind.current, "\blue You are a member of the cult!")
+ add_cultist(cult_mind)
+ to_chat(cult_mind.current, " You are a member of the cult!")//need fluffier text here...
first_phase()
..()
@@ -159,9 +159,9 @@ var/global/list/all_cults = list()
)
var/where = mob.equip_in_one_of_slots(T, slots)
if (!where)
- to_chat(mob, "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately.")
+ to_chat(mob, " Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately.")
else
- to_chat(mob, "You have a talisman in your [where], one that will help you start the cult on this station. Use it well and remember - there are others.")
+ to_chat(mob, "You have a talisman in your [where], one that will help you start the cult on this station. Use it well and remember - there are others.")
mob.update_icons()
return 1
diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm
index 6b2dcd6edd0..1c5def6e13e 100644
--- a/code/game/gamemodes/cult/cult_objectives.dm
+++ b/code/game/gamemodes/cult/cult_objectives.dm
@@ -83,7 +83,7 @@
explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for his blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual."
for(var/datum/mind/cult_mind in cult)
- to_chat(cult_mind.current, "You and your acolytes have completed your task, but this place requires yet more preparation!")
+ to_chat(cult_mind.current, "You and your acolytes have completed your task, but this place requires yet more preparation!")
to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]")
cult_mind.memory += "Objective #[current_objective]: [explanation]
"
@@ -99,7 +99,7 @@
var/explanation = "Summon [ticker.mode.cultdat.entity_name] on the Station via the use of the Tear Reality rune."
for(var/datum/mind/cult_mind in cult)
- to_chat(cult_mind.current, "You and your acolytes have succeeded in preparing the station for the ultimate ritual!")
+ to_chat(cult_mind.current, "You and your acolytes have succeeded in preparing the station for the ultimate ritual!")
to_chat(cult_mind.current, "Objective #[current_objective]: [explanation]")
cult_mind.memory += "Objective #[current_objective]: [explanation]
"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 06e065c2af8..4b7e7ab333e 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -130,7 +130,8 @@ structure_check() searches for nearby cultist structures required for the invoca
for(var/M in invokers)
var/mob/living/L = M
if(!L.IsVocal())//MIMES
- //due emote here...
+ //do emote here...
+ L.emote("acts out the rune invocation.")//it will looks like flailing...
else
L.say(invocation)
var/oldtransform = transform
@@ -430,7 +431,7 @@ var/list/teleport_runes = list()
//Ritual of Dimensional Rending: Calls forth the avatar of Nar-Sie upon the station.
/obj/effect/rune/narsie
- cultist_name = "Summon your god"
+ cultist_name = "Tear Reality"
cultist_desc = "tears apart dimensional barriers, calling forth your god. Requires 9 invokers."
invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!"
req_cultists = 9
@@ -484,13 +485,6 @@ var/list/teleport_runes = list()
fail_invoke()
log_game("Summon Nar-Sie rune failed - off station Z level")
return
- else
- if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed))
- for(var/M in invokers)
- to_chat(M, "The sacrifice is not complete. The portal lacks the power to open!")
- fail_invoke()
- log_game("Summon Nar-Sie rune failed - sacrifice not complete")
- return
if(!cult_mode.eldergod)
for(var/M in invokers)
to_chat(M, "[ticker.mode.cultdat.entity_name] is already on this plane!")
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index ba71cfb7e02..d07fe8cc20c 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -194,6 +194,7 @@
construct_spells = list(/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)
@@ -351,3 +352,80 @@
return
cultist.loc = usr.loc
usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/
+
+
+///ui stuff
+
+/mob/living/simple_animal/hostile/construct/armoured/Life()
+
+ ..()
+ if(healths)
+ switch(health)
+ if(250 to INFINITY) healths.icon_state = "juggernaut_health0"
+ if(208 to 249) healths.icon_state = "juggernaut_health1"
+ if(167 to 207) healths.icon_state = "juggernaut_health2"
+ if(125 to 166) healths.icon_state = "juggernaut_health3"
+ if(84 to 124) healths.icon_state = "juggernaut_health4"
+ if(42 to 83) healths.icon_state = "juggernaut_health5"
+ if(1 to 41) healths.icon_state = "juggernaut_health6"
+ else healths.icon_state = "juggernaut_health7"
+
+
+/mob/living/simple_animal/hostile/construct/behemoth/Life()
+
+ ..()
+ if(healths)
+ switch(health)
+ if(750 to INFINITY) healths.icon_state = "juggernaut_health0"
+ if(625 to 749) healths.icon_state = "juggernaut_health1"
+ if(500 to 624) healths.icon_state = "juggernaut_health2"
+ if(375 to 499) healths.icon_state = "juggernaut_health3"
+ if(250 to 374) healths.icon_state = "juggernaut_health4"
+ if(125 to 249) healths.icon_state = "juggernaut_health5"
+ if(1 to 124) healths.icon_state = "juggernaut_health6"
+ else healths.icon_state = "juggernaut_health7"
+
+/mob/living/simple_animal/hostile/construct/builder/Life()
+
+ ..()
+ if(healths)
+ switch(health)
+ if(50 to INFINITY) healths.icon_state = "artificer_health0"
+ if(42 to 49) healths.icon_state = "artificer_health1"
+ if(34 to 41) healths.icon_state = "artificer_health2"
+ if(26 to 33) healths.icon_state = "artificer_health3"
+ if(18 to 25) healths.icon_state = "artificer_health4"
+ if(10 to 17) healths.icon_state = "artificer_health5"
+ if(1 to 9) healths.icon_state = "artificer_health6"
+ else healths.icon_state = "artificer_health7"
+
+
+
+/mob/living/simple_animal/hostile/construct/wraith/Life()
+
+ ..()
+ if(healths)
+ switch(health)
+ if(75 to INFINITY) healths.icon_state = "wraith_health0"
+ if(62 to 74) healths.icon_state = "wraith_health1"
+ if(50 to 61) healths.icon_state = "wraith_health2"
+ if(37 to 49) healths.icon_state = "wraith_health3"
+ if(25 to 36) healths.icon_state = "wraith_health4"
+ if(12 to 24) healths.icon_state = "wraith_health5"
+ if(1 to 11) healths.icon_state = "wraith_health6"
+ else healths.icon_state = "wraith_health7"
+
+
+/mob/living/simple_animal/hostile/construct/harvester/Life()
+
+ ..()
+ if(healths)
+ switch(health)
+ if(150 to INFINITY) healths.icon_state = "harvester_health0"
+ if(125 to 149) healths.icon_state = "harvester_health1"
+ if(100 to 124) healths.icon_state = "harvester_health2"
+ if(75 to 99) healths.icon_state = "harvester_health3"
+ if(50 to 74) healths.icon_state = "harvester_health4"
+ if(25 to 49) healths.icon_state = "harvester_health5"
+ if(1 to 24) healths.icon_state = "harvester_health6"
+ else healths.icon_state = "harvester_health7"
\ No newline at end of file
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 20f0e53c2c3..d73c0dc10af 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/screen_construct.dmi b/icons/mob/screen_construct.dmi
new file mode 100644
index 00000000000..67a37ccd738
Binary files /dev/null and b/icons/mob/screen_construct.dmi differ
diff --git a/paradise.dme b/paradise.dme
index e4d760c05ea..13b426256cd 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -104,6 +104,7 @@
#include "code\_onclick\hud\alien.dm"
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\bot.dm"
+#include "code\_onclick\hud\constructs.dm"
#include "code\_onclick\hud\fullscreen.dm"
#include "code\_onclick\hud\guardian.dm"
#include "code\_onclick\hud\hud.dm"