Cult 2020 Rework #1: Seer (#27950)

* seer propension

* text

* colors

* implant distinction

* debug HUD

* revert

* language fixes
This commit is contained in:
DeityLink
2020-10-11 19:27:05 +02:00
committed by GitHub
parent e62ffb5753
commit 73b8f94a92
9 changed files with 151 additions and 17 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -1709,8 +1709,8 @@ 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
@@ -1718,14 +1718,14 @@ var/list/blind_victims = list()
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
..()
@@ -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
@@ -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)
@@ -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>")
@@ -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

View File

@@ -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,

View File

@@ -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)"

View File

@@ -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
@@ -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)
@@ -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
@@ -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)=="@"))

View File

@@ -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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB