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"