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

Commit 6116720

Browse files
committed
more
1 parent 9ec69ea commit 6116720

File tree

15 files changed

+372
-517
lines changed

15 files changed

+372
-517
lines changed

code/__DEFINES/bloodsuckers.dm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
#define ARMMY_MONSTER "Armmy (100 Blood)"
8383
#define CALCIUM_MONSTER "Calcium (150 Blood)"
8484
#define HUSK_MONSTER "Husk"
85-
#define TOREADOR_MAX_HUMANITY_LOSS 10
8685

8786
/**
8887
* Power defines

code/game/alternate_appearance.dm

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -168,19 +168,19 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
168168
seer = M
169169
show_to(seer)
170170

171-
/datum/atom_hud/alternate_appearance/basic/scent_hunter
172-
173-
/datum/atom_hud/alternate_appearance/basic/scent_hunter/New()
174-
..()
175-
for(var/mob in GLOB.player_list)
176-
if(mobShouldSee(mob))
177-
show_to(mob)
178-
179-
/datum/atom_hud/alternate_appearance/basic/scent_hunter/mobShouldSee(mob/M)
180-
if(isliving(M))
181-
var/mob/living/L = M
182-
if(L.has_status_effect(STATUS_EFFECT_SCENT_HUNTER) || L.has_status_effect(STATUS_EFFECT_BLOOD_HUNTER))
183-
return TRUE
184-
if(isobserver(M))
185-
return TRUE
186-
return FALSE
171+
// /datum/atom_hud/alternate_appearance/basic/scent_hunter
172+
173+
// /datum/atom_hud/alternate_appearance/basic/scent_hunter/New()
174+
// ..()
175+
// for(var/mob in GLOB.player_list)
176+
// if(mobShouldSee(mob))
177+
// show_to(mob)
178+
179+
// /datum/atom_hud/alternate_appearance/basic/scent_hunter/mobShouldSee(mob/M)
180+
// if(isliving(M))
181+
// var/mob/living/L = M
182+
// if(L.has_status_effect(STATUS_EFFECT_SCENT_HUNTER) || L.has_status_effect(STATUS_EFFECT_BLOOD_HUNTER))
183+
// return TRUE
184+
// if(isobserver(M))
185+
// return TRUE
186+
// return FALSE

code/game/objects/items/dna_injector.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,11 +389,11 @@
389389

390390
/obj/item/dnainjector/olfaction
391391
name = "\improper DNA injector (Olfaction)"
392-
add_mutations = list(OLFACTION)
392+
//add_mutations = list(OLFACTION)
393393

394394
/obj/item/dnainjector/antiolfaction
395395
name = "\improper DNA injector (Anti-Olfaction)"
396-
remove_mutations = list(OLFACTION)
396+
//remove_mutations = list(OLFACTION)
397397

398398
/obj/item/dnainjector/insulated
399399
name = "\improper DNA injector (Insulated)"
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/datum/antagonist/bloodsucker
2+
///Used for assigning your name
3+
var/bloodsucker_name
4+
///Used for assigning your title
5+
var/bloodsucker_title
6+
///Used for assigning your reputation
7+
var/bloodsucker_reputation
8+
9+
////////////////////////////////////////////////////////////////////////////////////
10+
//--------------------------------Credits flavour---------------------------------//
11+
////////////////////////////////////////////////////////////////////////////////////
12+
/// Evaluates the conditions of the bloodsucker at the end of each round to pick a flavor message to add
13+
/datum/antagonist/bloodsucker/proc/get_flavor(objectives_complete, optional_objectives_complete)
14+
var/list/flavor = list()
15+
var/flavor_message
16+
var/alive = owner?.current?.stat != DEAD //Technically not necessary because of Final Death objective?
17+
var/escaped = ((owner.current.onCentCom() || owner.current.onSyndieBase()) && alive)
18+
flavor += "<div><font color='#6d6dff'>Epilogue: </font>"
19+
var/message_color = "#ef2f3c"
20+
21+
flavor_message += "flavour texts are a work in progress, stay tuned."
22+
// if(objectives_complete)
23+
// if(optional_objectives_complete)
24+
// message_color = "#008000"
25+
// if(broke_masquerade)
26+
// if(escaped)
27+
// flavor_message += pick(list(
28+
// "What matters of the Masquerade to you? Let it crumble into dust as your tyranny whips forward to dine on more stations.
29+
// News of your butchering exploits will quickly spread, and you know what will encompass the minds of mortals and undead alike. Fear."
30+
// ))
31+
// else if(alive)
32+
// flavor_message += pick(list(
33+
// "Blood still pumps in your veins as you lay stranded on the station. No doubt the wake of chaos left in your path will attract danger, but greater power than you've ever felt courses through your body.
34+
// Let the Camarilla and the witchers come. You will be waiting."
35+
// ))
36+
// else
37+
// if(escaped)
38+
// flavor_message += pick(list(
39+
// "You step off the spacecraft with a mark of pride at a superbly completed mission. Upon arriving back at CentCom, an unassuming assistant palms you an invitation stamped with the Camarilla seal.
40+
// High society awaits: a delicacy you have earned."
41+
// ))
42+
// else if(alive)
43+
// flavor_message += pick(list(
44+
// "This station has become your own slice of paradise. Your mission completed, you turn on the others who were stranded, ripe for your purposes.
45+
// Who knows? If they prove to elevate your power enough, perhaps a new bloodline might be founded here."
46+
// ))
47+
// else
48+
// message_color = "#517fff"
49+
// if(broke_masquerade)
50+
// if(escaped)
51+
// flavor_message += pick(list(
52+
// "Your mission accomplished, you step off the spacecraft, feeling the mark of exile on your neck. Your allies gone, your veins thrum with a singular purpose: survival."
53+
// ))
54+
// else if(alive)
55+
// flavor_message += pick(list(
56+
// "You survived, but you broke the Masquerade, your blood-stained presence clear and your power limited. No doubt death in the form of claw or stake hails its approach. Perhaps it's time to understand the cattles' fascinations with the suns."
57+
// ))
58+
// else
59+
// if(escaped)
60+
// flavor_message += pick(list(
61+
// "A low profile has always suited you best, conspiring enough to satiate the clan and keep your head low. It's not luxorious living, though death is a less kind alternative. On to the next station."
62+
// ))
63+
// else if(alive)
64+
// flavor_message += pick(list(
65+
// "You completed your mission and kept your identity free of heresy, though your mark here is not strong enough to lay a claim. Best stow away when the next shuttle comes around."
66+
// ))
67+
68+
if(!message_color || (!alive && !escaped)) //perish or just fuck up and fail your primary objectives
69+
message_color = "#ef2f3c"
70+
flavor_message += pick(list(
71+
"Thus ends the story of [return_full_name(TRUE)]. No doubt future generations will look back on your legacy and reflect on the lessons of the past. If they remember you at all."
72+
))
73+
74+
flavor += "<font color=[message_color]>[flavor_message]</font></div>"
75+
return "<div>[flavor.Join("<br>")]</div>"
76+
77+
78+
/*
79+
* # Bloodsucker Names
80+
*
81+
* All Bloodsuckers get a name, and gets a better one when they hit Rank 4.
82+
*/
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+
111+
/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced = FALSE)
112+
// Already have Title
113+
if(!forced && bloodsucker_title != null)
114+
return
115+
// Titles [Master]
116+
if(!am_fledgling)
117+
if(owner.current.gender == MALE)
118+
bloodsucker_title = pick ("Count","Baron","Viscount","Prince","Duke","Tzar","Dreadlord","Lord","Master")
119+
else
120+
bloodsucker_title = pick ("Countess","Baroness","Viscountess","Princess","Duchess","Tzarina","Dreadlady","Lady","Mistress")
121+
to_chat(owner, span_announce("You have earned a title! You are now known as <i>[return_full_name(TRUE)]</i>!"))
122+
// Titles [Fledgling]
123+
else
124+
bloodsucker_title = null
125+
126+
127+
128+
/datum/antagonist/bloodsucker/proc/AmFledgling()
129+
return !bloodsucker_title
130+
131+
/datum/antagonist/bloodsucker/proc/return_full_name(include_rep = FALSE)
132+
133+
var/fullname
134+
// Name First
135+
fullname = (bloodsucker_name ? bloodsucker_name : owner.current.name)
136+
// Title
137+
if(bloodsucker_title)
138+
fullname = bloodsucker_title + " " + fullname
139+
// Rep
140+
if(include_rep && bloodsucker_reputation)
141+
fullname = fullname + " the " + bloodsucker_reputation
142+
143+
return fullname
144+
145+
/datum/antagonist/bloodsucker/proc/SelectReputation(am_fledgling = FALSE, forced = FALSE)
146+
// Already have Reputation
147+
if(!forced && bloodsucker_reputation != null)
148+
return
149+
150+
if(am_fledgling)
151+
bloodsucker_reputation = pick(
152+
"Crude","Callow","Unlearned","Neophyte","Novice","Unseasoned",
153+
"Fledgling","Young","Neonate","Scrapling","Untested","Unproven",
154+
"Unknown","Newly Risen","Born","Scavenger","Unknowing","Unspoiled",
155+
"Disgraced","Defrocked","Shamed","Meek","Timid","Broken","Fresh",
156+
)
157+
else if(owner.current.gender == MALE && prob(10))
158+
bloodsucker_reputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King")
159+
else if(owner.current.gender == FEMALE && prob(10))
160+
bloodsucker_reputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen")
161+
else
162+
bloodsucker_reputation = pick(
163+
"Butcher","Blood Fiend","Crimson","Red","Black","Terror",
164+
"Nightman","Feared","Ravenous","Fiend","Malevolent","Wicked",
165+
"Ancient","Plaguebringer","Sinister","Forgotten","Wretched","Baleful",
166+
"Inqisitor","Harvester","Reviled","Robust","Betrayer","Destructor",
167+
"Damned","Accursed","Terrible","Vicious","Profane","Vile",
168+
"Depraved","Foul","Slayer","Manslayer","Sovereign","Slaughterer",
169+
"Forsaken","Mad","Dragon","Savage","Villainous","Nefarious",
170+
"Inquisitor","Marauder","Horrible","Immortal","Undying","Overlord",
171+
"Corrupt","Hellspawn","Tyrant","Sanguineous",
172+
)
173+
174+
to_chat(owner, span_announce("You have earned a reputation! You are now known as <i>[return_full_name(TRUE)]</i>!"))

code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,13 @@
4747
ADD_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT)
4848

4949
owner.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-0.4, blacklisted_movetypes=(FLYING|FLOATING))
50-
bloodsuckerdatum.frenzygrab.teach(user, TRUE)
5150
owner.add_client_colour(/datum/client_colour/cursed_heart_blood)
5251
var/obj/item/cuffs = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED)
5352
var/obj/item/legcuffs = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED)
5453
if(user.handcuffed || user.legcuffed)
5554
user.clear_cuffs(cuffs, TRUE, TRUE)
5655
user.clear_cuffs(legcuffs, TRUE, TRUE)
5756
// Keep track of how many times we've entered a Frenzy.
58-
bloodsuckerdatum.frenzies++
59-
bloodsuckerdatum.frenzied = TRUE
6057
return ..()
6158

6259
/datum/status_effect/frenzy/on_remove()
@@ -67,13 +64,10 @@
6764
REMOVE_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT)
6865
was_tooluser = FALSE
6966
owner.remove_movespeed_modifier(type)
70-
bloodsuckerdatum.frenzygrab.remove(user)
7167
owner.remove_client_colour(/datum/client_colour/cursed_heart_blood)
7268
owner.adjust_dizzy(3 SECONDS)
7369
owner.Paralyze(2 SECONDS)
7470
user.physiology.stamina_mod /= 0.4
75-
76-
bloodsuckerdatum.frenzied = FALSE
7771
return ..()
7872

7973
/datum/status_effect/frenzy/tick()
@@ -84,6 +78,4 @@
8478
user.clear_cuffs(cuffs, TRUE, TRUE)
8579
user.clear_cuffs(legcuffs, TRUE, TRUE)
8680
user.balloon_alert_to_viewers("snaps [user.p_their()] restraints!", "you break free of your restraints!")
87-
if(!bloodsuckerdatum.frenzied)
88-
return
89-
user.adjustFireLoss(min(0.5 + (bloodsuckerdatum.humanity_lost / 15), bloodsuckerdatum.my_clan?.get_clan() == CLAN_GANGREL ? 2 : 100)) //:D
81+
user.adjustFireLoss(0.5)

code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
. += ""
1111
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER]"
1212
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT]"
13-
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
1413
if(bloodsuckerdatum.has_task)
1514
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
1615

0 commit comments

Comments
 (0)