Skip to content

Commit

Permalink
Cult 2020 Rework #1: Seer (#27950)
Browse files Browse the repository at this point in the history
* seer propension

* text

* colors

* implant distinction

* debug HUD

* revert

* language fixes
  • Loading branch information
DeityLink authored Oct 11, 2020
1 parent e62ffb5 commit 73b8f94
Show file tree
Hide file tree
Showing 9 changed files with 151 additions and 17 deletions.
7 changes: 7 additions & 0 deletions __DEFINES/role_datums_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@
#define CONVERSION_NOCHOICE 0
#define CONVERSION_ACCEPT 1

#define CONVERTIBLE_ALWAYS 1
#define CONVERTIBLE_CHOICE 2
#define CONVERTIBLE_NEVER 3
#define CONVERTIBLE_NOMIND 4
#define CONVERTIBLE_ALREADY 5
#define CONVERTIBLE_IMPLANT 6

////////////////////////////////////////////////////////////////////////////////

// -- Objectives flags
Expand Down
1 change: 1 addition & 0 deletions __DEFINES/setup.dm
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,7 @@ SEE_PIXELS 256
#define DIAG_HEALTH_HUD "diag_health" // Diagnostic HUD - health bar
#define DIAG_CELL_HUD "diag_cell" // Diagnostic HUD - power cell status for cyborgs, mechs
#define CONSTRUCT_HUD "const_health" // Artificer HUD
#define CONVERSION_HUD "convertibility" // Convertibility HUD

// Hypothermia - using the swiss staging system. - called by the proc undergoing_hypothermia() in handle_hypothermia.dm
#define NO_HYPOTHERMIA 0 // >35C - Fine
Expand Down
65 changes: 65 additions & 0 deletions code/datums/gamemode/factions/bloodcult/bloodcult.dm
Original file line number Diff line number Diff line change
Expand Up @@ -917,6 +917,71 @@ var/static/list/valid_cultpower_slots = list(

return power

/mob/proc/get_convertibility()
if (!mind || isDead())
return CONVERTIBLE_NOMIND

if (iscultist(src))
return CONVERTIBLE_ALREADY

return 0

/mob/living/carbon/get_convertibility()
var/convertibility = ..()

if (!convertibility)
//TODO: chaplain stuff
//this'll do in the meantime
if (mind.assigned_role == "Chaplain")
return CONVERTIBLE_NEVER

var/acceptance = "Never"
if (client)
acceptance = get_role_desire_str(client.prefs.roles[CULTIST])

if (jobban_isbanned(src, CULTIST) || isantagbanned(src) || (acceptance == "Never"))
return CONVERTIBLE_NEVER

for(var/obj/item/weapon/implant/loyalty/I in src)
if(I.implanted)
return CONVERTIBLE_IMPLANT

if (acceptance == "Always" || acceptance == "Yes")
return CONVERTIBLE_ALWAYS

return CONVERTIBLE_CHOICE

return convertibility//no mind, dead, or already a cultist

/mob/living/carbon/proc/update_convertibility()
var/convertibility = get_convertibility()
var/image/I = image('icons/mob/hud.dmi', src, "hudblank")
switch(convertibility)
if (CONVERTIBLE_ALWAYS)
I.icon_state = "convertible"
if (CONVERTIBLE_CHOICE)
I.icon_state = "maybeconvertible"
if (CONVERTIBLE_IMPLANT)
I.icon_state = "unconvertible"
if (CONVERTIBLE_NEVER)
I.icon_state = "unconvertible2"

I.pixel_y = 16 * PIXEL_MULTIPLIER
I.plane = ANTAG_HUD_PLANE

//inspired from the rune color matrix because boy am I proud of it
animate(I, color = list(2,0.67,0.27,0,0.27,2,0.67,0,0.67,0.27,2,0,0,0,0,1,0,0,0,0), time = 2)//9
animate(color = list(1.875,0.56,0.19,0,0.19,1.875,0.56,0,0.56,0.19,1.875,0,0,0,0,1,0,0,0,0), time = 1.7)//8
animate(color = list(1.75,0.45,0.12,0,0.12,1.75,0.45,0,0.45,0.12,1.75,0,0,0,0,1,0,0,0,0), time = 1.4)//7
animate(color = list(1.625,0.35,0.06,0,0.06,1.625,0.35,0,0.35,0.06,1.625,0,0,0,0,1,0,0,0,0), time = 1.1)//6
animate(color = list(1.5,0.27,0,0,0,1.5,0.27,0,0.27,0,1.5,0,0,0,0,1,0,0,0,0), time = 0.8)//5
animate(color = list(1.375,0.19,0,0,0,1.375,0.19,0,0.19,0,1.375,0,0,0,0,1,0,0,0,0), time = 0.5)//4
animate(color = list(1.25,0.12,0,0,0,1.25,0.12,0,0.12,0,1.25,0,0,0,0,1,0,0,0,0), time = 0.2)//3
animate(color = list(1.125,0.06,0,0,0,1.125,0.06,0,0.06,0,1.125,0,0,0,0,1,0,0,0,0), time = 0.1)//2
animate(color = list(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0), time = 5)//1

hud_list[CONVERSION_HUD] = I

//WARNING: setting to "3" will trigger the rise of bloodstones.
/client/proc/set_veil_thickness()
set category = "Special Verbs"
Expand Down
43 changes: 29 additions & 14 deletions code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1709,23 +1709,23 @@ var/list/blind_victims = list()
//RUNE XI
/datum/rune_spell/blood_cult/seer
name = "Seer"
desc = "See the invisible, the dead, the concealed. If you give them a writing sheet, they may relay a message to you."
desc_talisman = "For a few seconds, you may see the invisible, the dead, the concealed. If you give them a writing sheet, they may relay a message to you."
desc = "See the invisible, the dead, the concealed, and the propensity of the living to serve our agenda."
desc_talisman = "For a whole minute, you may see the invisible, the dead, the concealed, and the propensity of the living to serve our agenda."
Act_restriction = CULT_ACT_I
invocation = "Rash'tla sektath mal'zua. Zasan therium viortia."
rune_flags = RUNE_STAND
talisman_uses = 5
word1 = /datum/runeword/blood_cult/see
word2 = /datum/runeword/blood_cult/hell
word3 = /datum/runeword/blood_cult/join
page = "This rune grants you the ability to see the invisible, including observers and concealed runes and structures. The talisman version has 5 uses, which grant you the ability for 8 seconds each. Remember that runes can still be activated while they are concealed! "
page = "This rune grants the ability to see invisible ghosts, runes, and structures. It also reveals the willingness of crew members to accept conversion. You can activate runes while they are concealed. In talisman form, it has five uses and lasts for a minute each. Activate the talisman before moving into a public area."
cost_invoke = 5
var/obj/effect/cult_ritual/seer/seer_ritual = null
var/talisman_duration = 80 //tenths of a second
var/talisman_duration = 60 SECONDS

/datum/rune_spell/blood_cult/seer/Destroy()
destroying_self = 1
if (seer_ritual)
if (seer_ritual && !seer_ritual.talisman)
qdel(seer_ritual)
seer_ritual = null
..()
Expand All @@ -1743,12 +1743,10 @@ var/list/blind_victims = list()
var/mob/living/M = activator
M.see_invisible_override = SEE_INVISIBLE_OBSERVER
M.apply_vision_overrides()
to_chat(M, "<span class='notice'>As the talisman disappears into dust, you find yourself able to see through the gaps in the veil. You can see and interact with the other side, for a few seconds.</span>")
anim(target = M, a_icon = 'icons/effects/160x160.dmi', a_icon_state = "rune_seer", lay = ABOVE_OBJ_LAYER, offX = -WORLD_ICON_SIZE*2, offY = -WORLD_ICON_SIZE*2, plane = OBJ_PLANE, invis = INVISIBILITY_OBSERVER, alph = 200, sleeptime = talisman_duration)
var/obj/effect/cult_ritual/seer/ritual = new (activator,activator,null,TRUE)
spawn(talisman_duration)
M.see_invisible_override = 0
M.apply_vision_overrides()
to_chat(M, "<span class='notice'>You can no longer discern through the veil.</span>")
qdel(ritual)
qdel(src)

/obj/effect/cult_ritual/seer
Expand All @@ -1765,10 +1763,13 @@ var/list/blind_victims = list()
flags = PROXMOVE
var/mob/living/caster = null
var/datum/rune_spell/blood_cult/seer/source = null
var/list/propension = list()
var/talisman = FALSE


/obj/effect/cult_ritual/seer/New(var/turf/loc, var/mob/living/user, var/datum/rune_spell/blood_cult/seer/runespell)
/obj/effect/cult_ritual/seer/New(var/turf/loc, var/mob/living/user, var/datum/rune_spell/blood_cult/seer/runespell,var/talisman_ritual = FALSE)
..()
processing_objects.Add(src)
talisman = talisman_ritual
caster = user
source = runespell
if (!caster)
Expand All @@ -1778,10 +1779,12 @@ var/list/blind_victims = list()
return
caster.see_invisible_override = SEE_INVISIBLE_OBSERVER
caster.apply_vision_overrides()
to_chat(caster, "<span class='notice'>You find yourself able to see through the gaps in the veil. You can see and interact with the other side.</span>")
to_chat(caster, "<span class='notice'>You find yourself able to see through the gaps in the veil. You can see and interact with the other side, and also find out the crew's propensity to be successfully converted, whether they are <b><font color='green'>Willing</font></b>, <b><font color='orange'>Uncertain</font></b>, or <b><font color='red'>Unconvertible</font></b>.</span>")

/obj/effect/cult_ritual/seer/Destroy()
processing_objects.Remove(src)
if (caster)
caster.client.images -= propension
caster.see_invisible_override = 0
caster.apply_vision_overrides()
to_chat(caster, "<span class='notice'>You can no longer discern through the veil.</span>")
Expand All @@ -1792,8 +1795,20 @@ var/list/blind_victims = list()
..()

/obj/effect/cult_ritual/seer/HasProximity(var/atom/movable/AM)
if (!caster || caster.loc != loc)
qdel(src)
if (!talisman)
if (!caster || caster.loc != loc)
qdel(src)

/obj/effect/cult_ritual/seer/process()
if (caster && caster.client)
caster.client.images -= propension
propension.len = 0

for(var/mob/living/carbon/C in dview(world.view, get_turf(src), INVISIBILITY_MAXIMUM))
C.update_convertibility()
propension += C.hud_list[CONVERSION_HUD]

caster.client.images += propension


//RUNE XII
Expand Down
1 change: 1 addition & 0 deletions code/modules/admin/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ var/list/admin_verbs_debug = list(
/client/proc/cure_disease,
/client/proc/check_bomb,
/client/proc/check_convertables,
/client/proc/toggle_convertibles,
/client/proc/check_spiral,
/client/proc/check_striketeams,
/client/proc/cmd_admin_find_bad_blood_tracks,
Expand Down
18 changes: 18 additions & 0 deletions code/modules/admin/verbs/debug.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1217,6 +1217,24 @@ client/proc/check_convertables()

to_chat(usr, dat)


client/proc/toggle_convertibles()
set name = "Toggle Convertibles HUD (Cult 3.0+)"
set category = "Debug"
set desc = "Displays a marker over crew members showing their propension to get converted."

var/mob/dead/observer/adminmob = mob
if (!isobserver(adminmob))
alert("Only observers can use this functionality")
return

if(adminmob.conversionHUD)
adminmob.conversionHUD = 0
to_chat(src, "<span class='notice'><B>conversionHUD Disabled</B></span>")
else
adminmob.conversionHUD = 1
to_chat(src, "<span class='notice'><B>conversionHUD Enabled</B></span>")

/client/proc/spawn_datum(var/object as text)
set category = "Debug"
set desc = "(datum path) Spawn a datum (turfs NOT supported)"
Expand Down
29 changes: 26 additions & 3 deletions code/modules/mob/dead/observer/observer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ var/creating_arena = FALSE
var/selectedHUD = HUD_NONE // HUD_NONE, HUD_MEDICAL or HUD_SECURITY
var/diagHUD = FALSE
var/antagHUD = 0
var/conversionHUD = 0
incorporeal_move = INCORPOREAL_GHOST
var/movespeed = 0.75
var/lastchairspin
Expand Down Expand Up @@ -231,13 +232,29 @@ Works together with spawning an observer, noted above.
return 0

regular_hud_updates()

//cleaning up antagHUD and conversionHUD icons
if(client)
for(var/image/hud in client.images)
if(findtext(hud.icon_state, "convertible") || findtext(hud.icon_state, "-logo"))
client.images -= hud

if(antagHUD)
var/list/target_list = list()
for(var/mob/living/target in oview(src))
if( target.mind&&(target.mind.antag_roles.len > 0 || issilicon(target) || target.hud_list[SPECIALROLE_HUD]) )
target_list += target
if(target_list.len)
assess_targets(target_list, src)
assess_antagHUD(target_list, src)

if(conversionHUD)
var/list/target_list = list()
for(var/mob/living/carbon/target in oview(src))
if(target.mind && target.hud_list[CONVERSION_HUD])
target_list += target
if(target_list.len)
assess_conversionHUD(target_list, src)

if(selectedHUD == HUD_MEDICAL)
process_medHUD(src)
else if(selectedHUD == HUD_SECURITY)
Expand Down Expand Up @@ -348,7 +365,7 @@ Works together with spawning an observer, noted above.
holder.icon_state = "hudhealthy"
C.images += holder

/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U)
/mob/dead/proc/assess_antagHUD(list/target_list, mob/dead/observer/U)
for(var/mob/living/target in target_list)
if(target.mind)
var/image/I
Expand Down Expand Up @@ -378,7 +395,13 @@ Works together with spawning an observer, noted above.
U.client.images += image('icons/mob/hud.dmi',silicon_target,"hudmalborg")
else
U.client.images += image('icons/mob/hud.dmi',silicon_target,"hudmalai")
return 1

/mob/dead/proc/assess_conversionHUD(list/target_list, mob/dead/observer/U)
for(var/mob/living/carbon/target in target_list)
if(target.mind)
U.client.images -= target.hud_list[CONVERSION_HUD]
target.update_convertibility()
U.client.images += target.hud_list[CONVERSION_HUD]

/mob/proc/ghostize(var/flags = GHOST_CAN_REENTER,var/deafmute = 0)
if(key && !(copytext(key,1,2)=="@"))
Expand Down
4 changes: 4 additions & 0 deletions code/modules/mob/living/carbon/carbon_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
status_flags = CANSTUN|CANKNOCKDOWN|CANPARALYSE|CANPUSH
var/obj/item/device/station_map/displayed_holomap = null

/mob/living/carbon/New(var/new_loc, var/new_species_name = null, var/delay_ready_dna=0)
..()
hud_list[CONVERSION_HUD] = image('icons/mob/hud.dmi', src, "hudblank")

/mob/living/carbon/Destroy()
if (mutual_handcuffs && mutual_handcuffed_to)
mutual_handcuffs.remove_mutual_cuff_events(mutual_handcuffed_to)
Expand Down
Binary file modified icons/mob/hud.dmi
Binary file not shown.

0 comments on commit 73b8f94

Please sign in to comment.