-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathvassal_fold.dm
91 lines (80 loc) · 3.14 KB
/
vassal_fold.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/datum/action/cooldown/bloodsucker/vassal_blood
name = "Help Vassal"
desc = "Bring an ex-Vassal back into the fold."
button_icon_state = "power_torpor"
power_explanation = "Help Vassal:\n\
Use this power while you have an ex-Vassal grabbed to bring them back into the fold. \
Right-Click will show the status of all Vassals."
power_flags = NONE
check_flags = NONE
purchase_flags = NONE
bloodcost = 10
cooldown_time = 10 SECONDS
///Bloodbag we have in our hands.
var/obj/item/reagent_containers/blood/bloodbag
///Weakref to a target we're bringing into the fold.
var/datum/weakref/target_ref
///If we are analyze or helping
var/analyzing
/datum/action/cooldown/bloodsucker/vassal_blood/CanUse(mob/living/carbon/user)
. = ..()
if(!.)
return FALSE
var/datum/antagonist/vassal/revenge/revenge_vassal = owner.mind.has_antag_datum(/datum/antagonist/ex_vassal)
if(revenge_vassal)
return FALSE
if(tgui_alert(owner, "What would you like to do?", "Lost and Found", list("Analyze", "Help")) == "Analyze")
if(!revenge_vassal.ex_vassals.len)
owner.balloon_alert(owner, "no vassals!")
return FALSE
analyzing = TRUE
return TRUE
if(owner.pulling && isliving(owner.pulling))
var/mob/living/pulled_target = owner.pulling
var/datum/antagonist/ex_vassal/former_vassal = pulled_target.mind.has_antag_datum(/datum/antagonist/ex_vassal)
if(!former_vassal)
owner.balloon_alert(owner, "not a former vassal!")
return FALSE
target_ref = WEAKREF(owner.pulling)
return TRUE
var/blood_bag = locate(/obj/item/reagent_containers/blood) in user.held_items
if(!blood_bag)
owner.balloon_alert(owner, "blood bag needed!")
return FALSE
if(istype(blood_bag, /obj/item/reagent_containers/blood/o_minus/bloodsucker))
owner.balloon_alert(owner, "already bloodsucker blood!")
bloodbag = blood_bag
return TRUE
/datum/action/cooldown/bloodsucker/vassal_blood/ActivatePower()
. = ..()
var/datum/antagonist/vassal/revenge/revenge_vassal = owner.mind.has_antag_datum(/datum/antagonist/vassal/revenge)
if(analyzing)
for(var/datum/antagonist/ex_vassal/former_vassals as anything in revenge_vassal.ex_vassals)
var/information = "[former_vassals.owner.current]"
information += " - has [round(COOLDOWN_TIMELEFT(former_vassals, blood_timer) / 600)] minutes left of Blood"
var/turf/open/floor/target_area = get_area(owner)
if(target_area)
information += " - currently at [target_area]."
if(former_vassals.owner.current.stat >= DEAD)
information += " - DEAD."
to_chat(owner, "[information]")
DeactivatePower()
return
if(target_ref)
var/mob/living/target = target_ref.resolve()
var/datum/antagonist/ex_vassal/former_vassal = target.mind.has_antag_datum(/datum/antagonist/ex_vassal)
if(!former_vassal || former_vassal.revenge_vassal)
target_ref = null
return
if(do_after(owner, 5 SECONDS, target))
former_vassal.return_to_fold(revenge_vassal)
target_ref = null
DeactivatePower()
return
if(bloodbag)
var/mob/living/living_owner = owner
living_owner.blood_volume -= 150
QDEL_NULL(bloodbag)
var/obj/item/reagent_containers/blood/o_minus/bloodsucker/new_bag = new(owner.loc)
owner.put_in_active_hand(new_bag)
DeactivatePower()