Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit e07921d

Browse files
committed
can run
1 parent 6116720 commit e07921d

File tree

13 files changed

+241
-229
lines changed

13 files changed

+241
-229
lines changed

code/__DEFINES/bloodsuckers.dm

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
#define BLOODSUCKER_DRINK_NORMAL "bloodsucker_drink_normal"
1919
///Drinks blood but is snobby, refusing to drink from mindless
2020
#define BLOODSUCKER_DRINK_SNOBBY "bloodsucker_drink_snobby"
21-
///Drinks blood from disgusting creatures without Humanity consequences.
22-
#define BLOODSUCKER_DRINK_INHUMANELY "bloodsucker_drink_imhumanely"
23-
///Drinks blood only from aggressive or higher grabs, no silent feeding.
21+
///Drinks blood only from grabs, no silent feeding.
2422
#define BLOODSUCKER_DRINK_PAINFUL "bloodsucker_drink_painful"
2523

2624
///Controls blood, just like all Bloodsuckers do
@@ -32,8 +30,6 @@
3230
///Controls the inner machinations of one's being, being able to use the vassalrack and sculpt flesh monsters
3331
#define BLOODSUCKER_CONTROL_FLESH 8
3432

35-
#define BLOODSUCKER_RANK_UP_NORMAL "bloodsucker_rank_up_normal"
36-
3733
#define DANGER_LEVEL_FIRST_WARNING 1
3834
#define DANGER_LEVEL_SECOND_WARNING 2
3935
#define DANGER_LEVEL_THIRD_WARNING 3
@@ -61,7 +57,7 @@
6157
/**
6258
* Clan defines
6359
*/
64-
#define CLAN_NONE "Caitiff"
60+
#define CLAN_CAITIFF "Caitiff"
6561
#define CLAN_BRUJAH "Brujah Clan"
6662
#define CLAN_NOSFERATU "Nosferatu Clan"
6763
#define CLAN_TREMERE "Tremere Clan"
@@ -136,11 +132,12 @@
136132
///Called when a new Vassal is successfully made: (datum/bloodsucker_datum)
137133
#define BLOODSUCKER_MADE_VASSAL "bloodsucker_made_vassal"
138134

139-
///Called when a Bloodsucker exits Torpor.
140-
#define BLOODSUCKER_EXIT_TORPOR "bloodsucker_exit_torpor"
141135
///Called when a Bloodsucker reaches Final Death.
142136
#define BLOODSUCKER_FINAL_DEATH "bloodsucker_final_death"
143137

138+
///Called when a Bloodsucker reaches low enough blood to trigger frenzy
139+
#define BLOODSUCKER_TRIGGER_FRENZY "bloodsucker_trigger_frenzy"
140+
144141
#define COMSIG_BLOODSUCKER_BROKE_MASQUERADE "comsig_bloodsucker_broke_masquerade"
145142

146143
///Whether the Bloodsucker should not be dusted when arriving Final Death

code/modules/antagonists/_common/antag_datum.dm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ GLOBAL_LIST_EMPTY(antagonists)
77
var/prevent_roundtype_conversion = TRUE //If false, the roundtype will still convert with this antag active
88
var/datum/mind/owner //Mind that owns this datum
99
var/silent = FALSE //Silent will prevent the gain/lose texts to show
10-
var/can_coexist_with_others = TRUE //Whether or not the person will be able to have more than one datum
1110
var/list/typecache_datum_blacklist = list() //List of datums this type can't coexist with
1211
var/job_rank
1312
var/replace_banned = TRUE //Should replace jobbanned player with ghosts if granted.

code/modules/antagonists/bloodsuckers/bloodsucker_flavour.dm

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
/datum/antagonist/bloodsucker
2-
///Used for assigning your name
3-
var/bloodsucker_name
42
///Used for assigning your title
53
var/bloodsucker_title
64
///Used for assigning your reputation
75
var/bloodsucker_reputation
86

7+
///Called when you get the antag datum, called only ONCE per antagonist.
8+
/datum/antagonist/bloodsucker/on_gain()
9+
. = ..()
10+
SelectTitle(am_fledgling = TRUE)
11+
SelectReputation(am_fledgling = TRUE)
12+
913
////////////////////////////////////////////////////////////////////////////////////
1014
//--------------------------------Credits flavour---------------------------------//
1115
////////////////////////////////////////////////////////////////////////////////////
@@ -80,34 +84,6 @@
8084
*
8185
* All Bloodsuckers get a name, and gets a better one when they hit Rank 4.
8286
*/
83-
84-
/// Names
85-
/datum/antagonist/bloodsucker/proc/SelectFirstName()
86-
if(owner.current.gender == MALE)
87-
bloodsucker_name = pick(
88-
"Desmond","Rudolph","Dracula","Vlad","Pyotr","Gregor",
89-
"Cristian","Christoff","Marcu","Andrei","Constantin",
90-
"Gheorghe","Grigore","Ilie","Iacob","Luca","Mihail","Pavel",
91-
"Vasile","Octavian","Sorin","Sveyn","Aurel","Alexe","Iustin",
92-
"Theodor","Dimitrie","Octav","Damien","Magnus","Caine","Abel", // Romanian/Ancient
93-
"Lucius","Gaius","Otho","Balbinus","Arcadius","Romanos","Alexios","Vitellius", // Latin
94-
"Melanthus","Teuthras","Orchamus","Amyntor","Axion", // Greek
95-
"Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra", // Egyptian
96-
"Dio",
97-
)
98-
else
99-
bloodsucker_name = pick(
100-
"Islana","Tyrra","Greganna","Pytra","Hilda",
101-
"Andra","Crina","Viorela","Viorica","Anemona",
102-
"Camelia","Narcisa","Sorina","Alessia","Sophia",
103-
"Gladda","Arcana","Morgan","Lasarra","Ioana","Elena",
104-
"Alina","Rodica","Teodora","Denisa","Mihaela",
105-
"Svetla","Stefania","Diyana","Kelssa","Lilith", // Romanian/Ancient
106-
"Alexia","Athanasia","Callista","Karena","Nephele","Scylla","Ursa", // Latin
107-
"Alcestis","Damaris","Elisavet","Khthonia","Teodora", // Greek
108-
"Nefret","Ankhesenpep", // Egyptian
109-
)
110-
11187
/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced = FALSE)
11288
// Already have Title
11389
if(!forced && bloodsucker_title != null)
@@ -130,9 +106,8 @@
130106

131107
/datum/antagonist/bloodsucker/proc/return_full_name(include_rep = FALSE)
132108

133-
var/fullname
109+
var/fullname = owner.current.name
134110
// Name First
135-
fullname = (bloodsucker_name ? bloodsucker_name : owner.current.name)
136111
// Title
137112
if(bloodsucker_title)
138113
fullname = bloodsucker_title + " " + fullname

code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
. += ""
1111
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER]"
1212
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT]"
13-
if(bloodsuckerdatum.has_task)
14-
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
13+
// if(bloodsuckerdatum.has_task)
14+
// . += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
1515

1616
// EXAMINING
1717
/mob/living/carbon/proc/return_vamp_examine(mob/living/viewer)

code/modules/antagonists/bloodsuckers/bloodsuckers.dm

Lines changed: 35 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
show_in_antagpanel = TRUE
44
roundend_category = "bloodsuckers"
55
antagpanel_category = "Bloodsucker"
6-
job_rank = ROLE_BLOODSUCKER
76
antag_hud_name = "bloodsucker"
7+
job_rank = ROLE_BLOODSUCKER
88
show_to_ghosts = TRUE
99
show_name_in_check_antagonists = TRUE
10-
can_coexist_with_others = FALSE
1110
ui_name = "AntagInfoBloodsucker"
1211
preview_outfit = /datum/outfit/bloodsucker_outfit
1312
count_towards_antag_cap = TRUE
@@ -20,13 +19,10 @@
2019

2120
///If we are currently in a Frenzy
2221
var/frenzied = FALSE
23-
///If we have a task assigned
24-
var/has_task = FALSE
22+
///The current task we have assigned, if any
23+
var/datum/altar_task/current_task
2524
///How many times have we used a blood altar
2625
var/altar_uses = 0
27-
var/task_heart_required = 0
28-
var/task_blood_required = 0
29-
var/task_blood_drank = 0
3026

3127
// give TRAIT_STRONG_GRABBER during frenzy
3228

@@ -42,8 +38,9 @@
4238

4339
var/bloodsucker_level = 1
4440
var/bloodsucker_level_unspent = 1
41+
4542
var/passive_blood_drain = -0.1
46-
var/additional_regen
43+
var/additional_regen = 0
4744
var/bloodsucker_regen_rate = 0.3
4845
/// How much blood we have, starting off at default blood levels.
4946
var/bloodsucker_blood_volume = BLOOD_VOLUME_GENERIC
@@ -85,7 +82,8 @@
8582
TRAIT_VIRUSIMMUNE,
8683
TRAIT_TOXIMMUNE,
8784
TRAIT_HARDLY_WOUNDED,
88-
TRAIT_RESISTDAMAGESLOWDOWN
85+
TRAIT_RESISTDAMAGESLOWDOWN,
86+
TRAIT_UNHOLY
8987
)
9088

9189
////////////////////////////////////////////////////////////////////////////////////
@@ -102,18 +100,10 @@
102100
RegisterSignal(owner, COMSIG_MIND_CHECK_ANTAG_RESOURCE, PROC_REF(has_blood))
103101
RegisterSignal(owner, COMSIG_MIND_SPEND_ANTAG_RESOURCE, PROC_REF(use_blood))
104102

105-
if(IS_FAVORITE_VASSAL(owner.current)) // Vassals shouldnt be getting the same benefits as Bloodsuckers.
106-
bloodsucker_level_unspent = 0
107-
show_in_roundend = FALSE
108-
else
109-
// Start Sunlight if first Bloodsucker
110-
check_start_sunlight()
111-
// Name and Titles
112-
SelectFirstName()
113-
SelectTitle(am_fledgling = TRUE)
114-
SelectReputation(am_fledgling = TRUE)
115-
// Objectives
116-
forge_bloodsucker_objectives()
103+
// Start Sunlight if first Bloodsucker
104+
check_start_sunlight()
105+
// Objectives
106+
forge_bloodsucker_objectives()
117107

118108
return ..()
119109

@@ -128,40 +118,23 @@
128118
RegisterSignal(current_mob, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
129119
RegisterSignal(current_mob, COMSIG_LIVING_LIFE, PROC_REF(LifeTick))
130120
RegisterSignal(current_mob, COMSIG_LIVING_DEATH, PROC_REF(on_death))
121+
current_mob.add_traits(bloodsucker_traits, type)
131122

132123
handle_clown_mutation(current_mob, mob_override ? null : "As a vampiric clown, you are no longer a danger to yourself. Your clownish nature has been subdued by your thirst for blood.")
133124
add_team_hud(current_mob)
134-
ADD_TRAIT(current_mob, TRAIT_UNHOLY, type)
135125

136126
if(current_mob.hud_used)
137127
on_hud_created()
138128
else
139129
RegisterSignal(current_mob, COMSIG_MOB_HUD_CREATED, PROC_REF(on_hud_created))
130+
140131
#ifdef BLOODSUCKER_TESTING
141132
var/turf/user_loc = get_turf(current_mob)
142133
new /obj/structure/closet/crate/coffin(user_loc)
143134
new /obj/structure/bloodsucker/vassalrack(user_loc)
144135
#endif
145136

146137

147-
////////////////////////////////////////////////////////////////////////////////////
148-
//----------------------------------Hud Handling----------------------------------//
149-
////////////////////////////////////////////////////////////////////////////////////
150-
/datum/antagonist/bloodsucker/proc/on_hud_created(datum/source)
151-
SIGNAL_HANDLER
152-
153-
var/datum/hud/bloodsucker_hud = owner.current.hud_used
154-
155-
blood_display = new /atom/movable/screen/bloodsucker/blood_counter(bloodsucker_hud)
156-
bloodsucker_hud.infodisplay += blood_display
157-
158-
vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(bloodsucker_hud)
159-
bloodsucker_hud.infodisplay += vamprank_display
160-
161-
sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(bloodsucker_hud)
162-
bloodsucker_hud.infodisplay += sunlight_display
163-
164-
INVOKE_ASYNC(bloodsucker_hud, TYPE_PROC_REF(/datum/hud/, show_hud), bloodsucker_hud.hud_version)
165138

166139
////////////////////////////////////////////////////////////////////////////////////
167140
//------------------------------------Removal-------------------------------------//
@@ -184,7 +157,7 @@
184157
. = ..()
185158
var/mob/living/current_mob = mob_override || owner.current
186159
UnregisterSignal(current_mob, list(COMSIG_LIVING_LIFE, COMSIG_ATOM_EXAMINE, COMSIG_LIVING_DEATH))
187-
REMOVE_TRAIT(current_mob, TRAIT_UNHOLY, type)
160+
current_mob.remove_traits(bloodsucker_traits, type)
188161

189162
if(current_mob.hud_used)
190163
var/datum/hud/hud_used = current_mob.hud_used
@@ -205,14 +178,31 @@
205178
var/fullname = return_full_name(TRUE)
206179
to_chat(owner, span_userdanger("You are [fullname], a strain of vampire known as a Bloodsucker!"))
207180
owner.announce_objectives()
208-
if(bloodsucker_level_unspent >= 2)
209-
to_chat(owner, span_announce("As a latejoiner, you have [bloodsucker_level_unspent] bonus Ranks, entering your claimed coffin allows you to spend a Rank."))
210181
owner.current.playsound_local(null, 'sound/ambience/antag/bloodsuckeralert.ogg', 100, FALSE, pressure_affected = FALSE)
211182
antag_memory += "Although you were born a mortal, in undeath you earned the name <b>[fullname]</b>.<br>"
212183

213184
/datum/antagonist/bloodsucker/farewell()
214185
to_chat(owner.current, span_userdanger("<FONT size = 3>With a snap, your curse has ended. You are no longer a Bloodsucker. You live once more!</FONT>"))
215186

187+
////////////////////////////////////////////////////////////////////////////////////
188+
//----------------------------------Hud Handling----------------------------------//
189+
////////////////////////////////////////////////////////////////////////////////////
190+
/datum/antagonist/bloodsucker/proc/on_hud_created(datum/source)
191+
SIGNAL_HANDLER
192+
193+
var/datum/hud/bloodsucker_hud = owner.current.hud_used
194+
195+
blood_display = new /atom/movable/screen/bloodsucker/blood_counter(bloodsucker_hud)
196+
bloodsucker_hud.infodisplay += blood_display
197+
198+
vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(bloodsucker_hud)
199+
bloodsucker_hud.infodisplay += vamprank_display
200+
201+
sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(bloodsucker_hud)
202+
bloodsucker_hud.infodisplay += sunlight_display
203+
204+
INVOKE_ASYNC(bloodsucker_hud, TYPE_PROC_REF(/datum/hud/, show_hud), bloodsucker_hud.hud_version)
205+
216206
////////////////////////////////////////////////////////////////////////////////////
217207
//-----------------------------------Ability use----------------------------------//
218208
////////////////////////////////////////////////////////////////////////////////////
@@ -360,7 +350,7 @@
360350
var/list/report = list()
361351

362352
// Vamp name
363-
report += "<br>[span_header("<b>\[[return_full_name(TRUE)]\]</b>")]</span>"
353+
report += "<br>[span_header("<b>\[name\]</b>")]</span>"
364354
report += printplayer(owner)
365355
if(my_clan)
366356
report += "They were part of the <b>[my_clan.name]</b>!"
@@ -441,27 +431,6 @@
441431
// to_chat(owner, span_boldnotice("Your Altar uses have been reset!"))
442432
// altar_uses = 0
443433

444-
/// Buying powers
445-
// /datum/antagonist/bloodsucker/proc/BuyPower(datum/action/cooldown/bloodsucker/power)
446-
// for(var/datum/action/cooldown/bloodsucker/current_powers as anything in powers)
447-
// if(current_powers.type == power.type)
448-
// return FALSE
449-
// powers += power
450-
// power.Grant(owner.current)
451-
// return TRUE
452-
453-
// /datum/antagonist/bloodsucker/proc/RemovePower(datum/action/cooldown/bloodsucker/power)
454-
// if(power.active)
455-
// power.DeactivatePower()
456-
// powers -= power
457-
// power.Remove(owner.current)
458-
459-
// /datum/antagonist/bloodsucker/proc/give_starting_powers()
460-
// for(var/datum/action/cooldown/bloodsucker/all_powers as anything in all_bloodsucker_powers)
461-
// if(!(initial(all_powers.purchase_flags) & BLOODSUCKER_DEFAULT_POWER))
462-
// continue
463-
// BuyPower(new all_powers)
464-
465434

466435
////////////////////////////////////////////////////////////////////////////////////////////////
467436

@@ -482,7 +451,7 @@
482451

483452
/// Name shown on antag list
484453
/datum/antagonist/bloodsucker/antag_listing_name()
485-
return ..() + "([return_full_name(TRUE)])"
454+
return ..() + "(name)"
486455

487456
/// Whatever interesting things happened to the antag admins should know about
488457
/// Include additional information about antag in this part

0 commit comments

Comments
 (0)