Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
ae614db
Quietus changes
ta3754859-max May 6, 2026
e1c81a0
Adds button to the clan menu for increasing coven level
ta3754859-max May 6, 2026
16b17fe
updates to interface
ta3754859-max May 6, 2026
f475849
Dagon's call no longer costs vitae without a proper target
ta3754859-max May 8, 2026
66dc825
Diablerism changes
ta3754859-max May 9, 2026
4230259
Forces bloodheal for custom clan, eoran coven is now restricted
ta3754859-max May 9, 2026
b2babfd
Allows vampire spawn to change slot + fixes undead eyes removing on s…
ta3754859-max May 9, 2026
374bf75
buffs cooldown recharge time for enslaving mortals, replaces transfix…
ta3754859-max May 9, 2026
4d85d6d
fixes lack of undead eyes for new spawn
ta3754859-max May 9, 2026
79721be
All eorans properly get transfix
ta3754859-max May 9, 2026
e616c08
Comments out second level of auspex as it was bugged
ta3754859-max May 9, 2026
8e4a53f
actually comments out level 2 of auspex
ta3754859-max May 9, 2026
57c5c5f
Removes vitae check from using the teleporter and confusing choice op…
ta3754859-max May 10, 2026
0dc84ae
Unsued variable
ta3754859-max May 10, 2026
56b575b
Merge https://github.com/Monkestation/Vanderlin into Quietus-fixes
ta3754859-max May 10, 2026
4f3f72d
world anchors can now be used to summon a portal
ta3754859-max May 11, 2026
565f65f
Buffs vitae upkeep time for potence and celerity + adds tutorial desc…
ta3754859-max May 11, 2026
432aa2a
Adds autoassigment to positiions
ta3754859-max May 12, 2026
06935b4
Adds organ fixing to higher levels of bloodheal
ta3754859-max May 12, 2026
a2e7051
Small visual and sound change for encode thought
ta3754859-max May 12, 2026
01a5e9b
Presence no longer works on dead people
ta3754859-max May 19, 2026
7b5f0e9
Fixes Baal's carress poison, deletes outdated element
ta3754859-max May 19, 2026
afdd8fd
Fix
ta3754859-max May 19, 2026
62bd029
Turns thralls into proper ghouls
ta3754859-max May 19, 2026
2f754f2
Adds antag datum for ghouls
ta3754859-max May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/traits/definitions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_KNOWBANDITS "knowbandits"
#define TRAIT_VAMPMANSION "vampiremansion"
#define TRAIT_VAMP_DREAMS "vamp_dreams"
#define TRAIT_VAMP_OFFERED "offered_vampirism"
#define TRAIT_INHUMENCAMP "inhumencamp"
#define TRAIT_INTRAINING "intraining" //allows certain roles to bypass the average skill limitation of training dummies
#define TRAIT_STEELHEARTED "steelhearted" //no bad mood from dismembering or seeing this
Expand Down
33 changes: 0 additions & 33 deletions code/datums/elements/one_time_poison.dm

This file was deleted.

23 changes: 21 additions & 2 deletions code/modules/antagonists/villain/neu_vampires/bloodsuck.dm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,16 @@
message_admins("[ADMIN_LOOKUPFLW(src)] successfully Diablerized [ADMIN_LOOKUPFLW(victim)]")
log_attack("[key_name(src)] successfully Diablerized [key_name(victim)].")
to_chat(src, span_danger("I have consumed my kindred!"))
to_chat(victim, span_userdanger("One of the kindred have consumed me! I share part of their mind now."))
victim.death()
//copied from the profane dagger
var/mob/living/simple_animal/shade/soulstone_spirit = new /mob/living/simple_animal/shade(src)
soulstone_spirit.AddComponent(/datum/component/soulstoned, src)
soulstone_spirit.name = src.real_name //To imitate a vampire going insane through diablerism, the spirit of the consumed can still speak out loud
soulstone_spirit.real_name = victim.real_name
soulstone_spirit.PossessByPlayer(victim.key)
soulstone_spirit.cancel_camera()
src.maxbloodpool += 500 //increase bloodpool from diablerism
return 0
else
to_chat(src, span_userdanger("<b>YOU TRY TO COMMIT DIABLERIE ON [victim].</b>"))
Expand Down Expand Up @@ -74,7 +83,7 @@
return drink_amt

/mob/living/carbon/human/proc/vampire_conversion_prompt(mob/living/carbon/sire)
if(HAS_TRAIT(src, "offered_vampirism"))
if(HAS_TRAIT(src, TRAIT_VAMP_OFFERED))
return // my testing allowed to double up the prompts, so just incase
if(!istype(sire?.mind?.has_antag_datum(/datum/antagonist/vampire), /datum/antagonist/vampire) || !sire.clan)
return
Expand All @@ -88,7 +97,7 @@
to_chat(sire, span_warning("[src]'s soul is beyond your grasp."))
return

ADD_TRAIT(src, "offered_vampirism", INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_VAMP_OFFERED, INNATE_TRAIT)
if(is_antag_banned(client_victim.ckey, ROLE_VAMPIRE))
to_chat(sire, span_warning("[src] could not be sired."))
return
Expand All @@ -107,7 +116,17 @@
return
grab_ghost(TRUE, TRUE)
revive((HEAL_DAMAGE|HEAL_AFFLICTIONS|HEAL_LIMBS|HEAL_WOUNDS|HEAL_ORGANS), 500, TRUE)
if(src.mind.has_antag_datum(/datum/antagonist/ghoul)) //removing old covens for thralls

Check failure on line 119 in code/modules/antagonists/villain/neu_vampires/bloodsuck.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0404: Path /datum/antagonist/ghoul does not exist

Check failure on line 119 in code/modules/antagonists/villain/neu_vampires/bloodsuck.dm

View workflow job for this annotation

GitHub Actions / Run Linters

failed to resolve path /datum/antagonist/ghoul
var/obj/item/bodypart/chest = src.get_bodypart(BODY_ZONE_CHEST)
if(chest)
for (var/datum/bodypart_feature/F in chest.bodypart_features)
if (istype(F, /datum/bodypart_feature/vamprire_seal))
chest.remove_bodypart_feature(F)
src.mind.remove_antag_datum(/datum/antagonist/ghoul)

Check failure on line 125 in code/modules/antagonists/villain/neu_vampires/bloodsuck.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0404: Path /datum/antagonist/ghoul does not exist

Check failure on line 125 in code/modules/antagonists/villain/neu_vampires/bloodsuck.dm

View workflow job for this annotation

GitHub Actions / Run Linters

failed to resolve path /datum/antagonist/ghoul
mind.add_antag_datum(new /datum/antagonist/vampire(C, TRUE))
var/datum/clan_hierarchy_node/new_clan_position = C.create_position(pick(C.new_members_titles), "A new member of clan [C.name]", sire.clan_position, 1)
new_clan_position.assign_member(src)
set_bloodpool(500)
grant_undead_eyes()
visible_message(span_danger("Some dark energy begins to flow into [src]..."))
visible_message(span_red("[src] rises as a new spawn!"))
25 changes: 21 additions & 4 deletions code/modules/antagonists/villain/neu_vampires/clan/_base_clan.dm
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
TRAIT_NOAMBUSH,
TRAIT_DARKVISION,
TRAIT_LIMBATTACHMENT,
TRAIT_VAMP_OFFERED
)
var/silent_join = FALSE

Expand All @@ -52,10 +53,11 @@

var/list/clan_members = list()
var/list/non_vampire_members = list()
var/list/new_members_titles = list("Neonate", "Fledgling", "Youngblood", "Progeny")
/// Whether this clan allows non-vampire members
var/allows_non_vampires = TRUE
/// Title for non-vampire members
var/non_vampire_title = "Slave"
var/non_vampire_title = "Thrall"
var/has_hierarchy = TRUE
var/datum/clan_hierarchy_node/hierarchy_root
var/list/datum/clan_hierarchy_node/all_positions = list()
Expand Down Expand Up @@ -93,6 +95,17 @@
var/wanted_blood = (blood_types & blood_preference)
var/unwanted_blood = (blood_types & blood_disgust)


if(drinker.mind.has_antag_datum(/datum/antagonist/ghoul)) //thrall drinking

Check failure on line 99 in code/modules/antagonists/villain/neu_vampires/clan/_base_clan.dm

View workflow job for this annotation

GitHub Actions / Run Linters

OD0404: Path /datum/antagonist/ghoul does not exist

Check failure on line 99 in code/modules/antagonists/villain/neu_vampires/clan/_base_clan.dm

View workflow job for this annotation

GitHub Actions / Run Linters

failed to resolve path /datum/antagonist/ghoul
if(!(blood_types & BLOOD_PREFERENCE_KIN) && !wanted_blood) //shares drinking habits with their master's clan
to_chat(drinker, span_userdanger("THIS BLOOD DOESN'T SATIATE ME! I NEED SOME OF MY MASTER'S BLOOD!"))
vitae *= 0.1
return vitae
else
vitae *= 2
return vitae


if(wanted_blood && !unwanted_blood)
drinker.apply_status_effect(/datum/status_effect/debuff/blood_preference)
vitae *= 1.5
Expand Down Expand Up @@ -303,7 +316,9 @@

var/list/spells_to_remove = list(
/datum/action/clan_menu,
/datum/action/cooldown/spell/undirected/transfix,
/datum/action/cooldown/spell/undirected/list_target/encode_thoughts/vampire,
/datum/action/cooldown/spell/enslave_mortal,
/datum/action/cooldown/spell/undirected/transfix
)
for(var/spell_type in spells_to_remove)
var/datum/action/spell_instance = locate(spell_type) in vampire.actions
Expand Down Expand Up @@ -382,8 +397,10 @@

H.attributes?.add_sheet(/datum/attribute_holder/sheet/job/clan)
H.update_age_stats(H.age, TRUE)
var/datum/action/cooldown/spell/undirected/transfix/transfix = new(H.mind)
transfix.Grant(H)
var/datum/action/cooldown/spell/undirected/list_target/encode_thoughts/vampire/encode_thoughts = new(H.mind)
encode_thoughts.Grant(H)
var/datum/action/cooldown/spell/enslave_mortal/enslave_mortal = new(H.mind)
enslave_mortal.Grant(H)


/datum/clan/proc/apply_vampire_look(mob/living/carbon/human/H)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

/datum/clan_leader/lord
lord_spells = list(
/datum/action/cooldown/spell/enslave_mortal,
/datum/action/cooldown/spell/undirected/shapeshift/bat,
/datum/action/cooldown/spell/undirected/mansion_portal,
/datum/action/cooldown/spell/undirected/shapeshift/mist,
Expand Down
61 changes: 58 additions & 3 deletions code/modules/antagonists/villain/neu_vampires/clan/clan_menu.dm
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
/datum/clan_menu_interface/proc/generate_welcome_screen_html()
var/clan_downside = "burn in sunlight"
var/blood_preference = "any blood"
var/reproduce_string = {"<div class="tip-item"><strong>Creating Progeny:</strong> Drain someone's blood to critical levels to gain the option to embrace them as a new vampire.</div>"}
var/reproduce_string = {"<div class="tip-item"><strong>Creating Progeny:</strong> Bite someone's neck and then their blood to critical levels to gain the option to embrace them as a new vampire using the "sire mortal" verb.</div>"}
if(!user.clan_position?.can_assign_positions)
reproduce_string = {"<div class="tip-item"><strong>Creating Progeny:</strong> You are unable to sire new vampires.</div>"}

Expand All @@ -54,7 +54,8 @@

<div class="intro-section">
<p>Select a coven from the sidebar to view its research tree and manage your powers.
Each coven represents a different aspect of your vampiric abilities.</p>
Each coven represents a different aspect of your vampiric abilities.
You can input a number of vitae you wish to spend under a coven to increase the experience on it. Any vitae amount will be divived in half.</p>
</div>

<div class="vampire-mechanics">
Expand Down Expand Up @@ -101,7 +102,8 @@
<div class="coven-progress">
<div class="coven-progress-fill" style="width: [experience_percent]%"></div>
</div>
<div class="research-points">RP: [coven.research_points]</div>
<input class='exp-input' type="number" id="xp_input_[coven_name]" value="" min="10" step="10" max="[coven.experience_needed * 2]" onclick="event.stopPropagation();">
<button class='exp-button' onclick="addXP('[coven_name]')">+</button>
</li>
"}

Expand Down Expand Up @@ -805,6 +807,45 @@
color: #FFD700;
margin-bottom: 30px;
}

.exp-button {
background: #d86a00;
border: 2px solid #7a3c00;
color: #fff;
padding: 5px 10px;
border-radius: 0;
cursor: pointer;
font-weight: bold;
font-size: 12px;
letter-spacing: 0;
text-transform: none;
box-shadow: inset 0 0 2px #000;
transition: background 0.1s ease-in-out, transform 0.05s;
}

.exp-button:hover {
background: #ff8a2b;
box-shadow: inset 0 0 3px #000;
transform: translateY(-1px);
}

.exp-input {
width: 60px;
background: #1a1a1a;
border: 2px solid #7a3c00;
color: #fff;
padding: 4px 6px;
border-radius: 0;
font-size: 12px;
box-shadow: inset 0 0 2px #000;
outline: none;
transition: border-color 0.1s ease-in-out, background 0.1s;
}

.exp-input:focus {
border-color: #d86a00;
background: #222;
}
</style>
</head>
<body>
Expand Down Expand Up @@ -904,6 +945,11 @@
window.location.href = 'byond://?src=[REF(src)];action=load_coven_tree;coven_name=' + encodeURIComponent(covenName);
}

function addXP(covenName) {
var amount = parseInt(document.getElementById("xp_input_" + covenName).value) || 0;
window.location = 'byond://?src=[REF(src)];action=add_xp;coven_name=' + encodeURIComponent(covenName) + ';amount=' + amount;
}

// Research tree interaction variables
let isDragging = false;
let startX, startY;
Expand Down Expand Up @@ -1153,6 +1199,15 @@
var/coven_name = href_list["coven_name"]
load_coven_research_tree(coven_name)

if("add_xp")
var/coven_name = href_list["coven_name"]
var/amount = text2num(href_list["amount"])

var/datum/coven/C = user_covens[coven_name]
if(C)
C.addButtonExp(amount)
generate_interface()

if("show_hierarchy")
show_hierarchy()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
TRAIT_DARKVISION,
TRAIT_NOBREATH,
TRAIT_NOAMBUSH,
TRAIT_VAMP_OFFERED,
)
has_hierarchy = FALSE
silent_join = TRUE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
TRAIT_DARKVISION,
TRAIT_LIMBATTACHMENT,
TRAIT_NOENERGY,
TRAIT_VAMP_OFFERED
)

/datum/clan/crimson_fang/get_blood_preference_string()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
TRAIT_NOENERGY,
TRAIT_ZJUMP,
TRAIT_IMMUNE_TO_FRENZY,
TRAIT_COVEN_RESISTANT
TRAIT_COVEN_RESISTANT,
TRAIT_VAMP_OFFERED,
)
leader_title = "Daewalker"
leader = /datum/clan_leader/daewalker
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@

/datum/clan_leader/eoran
lord_spells = list(
/datum/action/cooldown/spell/enslave_mortal,
/datum/action/cooldown/spell/undirected/mansion_portal,
/datum/action/cooldown/spell/undirected/shapeshift/frog,
/datum/action/cooldown/spell/charm/vampire,
/datum/action/cooldown/spell/undirected/list_target/encode_thoughts/vampire,
/datum/action/cooldown/spell/undirected/conjure_item/vamp_sword,
)
lord_traits = list(TRAIT_HEAVYARMOR, TRAIT_NOSTAMINA)
Expand Down Expand Up @@ -34,6 +31,7 @@
TRAIT_NOAMBUSH,
TRAIT_DARKVISION,
TRAIT_LIMBATTACHMENT,
TRAIT_VAMP_OFFERED
)

clan_covens = list(
Expand All @@ -53,9 +51,7 @@
/datum/clan/eoran/apply_clan_components(mob/living/carbon/human/H)
H.AddComponent(/datum/component/vampire_disguise)







/datum/clan/eoran/setup_vampire_abilities(mob/living/carbon/human/H)
..()
var/datum/action/cooldown/spell/undirected/transfix/transfix = new(H.mind)
transfix.Grant(H)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

/datum/clan_leader/nosferatu
lord_spells = list(
/datum/action/cooldown/spell/enslave_mortal,
/datum/action/cooldown/spell/undirected/mansion_portal,
/datum/action/cooldown/spell/undirected/shapeshift/rat_vampire,
/datum/action/cooldown/spell/undirected/conjure_item/vamp_sword,
Expand Down Expand Up @@ -46,6 +45,7 @@
TRAIT_LIMBATTACHMENT,
TRAIT_NASTY_EATER,
TRAIT_POISON_RESILIENCE,
TRAIT_VAMP_OFFERED
)

/datum/clan/nosferatu/get_downside_string()
Expand All @@ -54,13 +54,13 @@
/datum/clan/nosferatu/get_blood_preference_string()
return "kindred blood, the blood of the dead, blood of vermin"

/datum/clan/nosferatu/on_gain(mob/living/carbon/human/H, is_vampire = TRUE)
. = ..()
// /datum/clan/nosferatu/on_gain(mob/living/carbon/human/H, is_vampire = TRUE)
// . = ..()

if(is_vampire)
var/obj/item/organ/eyes/night_vision/NV = new()
NV.Insert(H, TRUE, FALSE)
H.ventcrawler = VENTCRAWLER_ALWAYS //I don't think this does anything because we have no vents
// if(is_vampire)
// var/obj/item/organ/eyes/night_vision/NV = new()
// NV.Insert(H, TRUE, FALSE)
// H.ventcrawler = VENTCRAWLER_ALWAYS //I don't think this does anything because we have no vents

/datum/clan/nosferatu/apply_clan_components(mob/living/carbon/human/H)
H.AddComponent(/datum/component/sunlight_vulnerability, damage = 2, drain = 2)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,8 @@
if("roleplay")
// Encourage roleplay with XP
final_amount = amount * 0.8
if("buttonadd")
final_amount = amount * 0.5

// Apply level-based diminishing returns for power use
if(source == "power_use" && power_used)
Expand All @@ -422,6 +424,20 @@
* XP gain triggers for various game events
*/

//Used in the interface button
/datum/coven/proc/addButtonExp(amount)
if(!amount || amount <= 0)
return

if(owner.bloodpool < amount)
to_chat(owner, span_warning("You don't have enough vitae to spend"))
return
owner.adjust_bloodpool(-amount)
gain_experience_from_source(amount, "buttonadd") // exp gain from this is halved so a vampire cannot just insta buy t5 on spawn

if(owner)
to_chat(owner, span_boldnotice("You have spent [amount] vitae in [src.name]."))

// Called when a power is successfully used
/datum/coven/proc/on_power_use_success(datum/coven_power/power, is_critical = FALSE, exp_multiplier = 1, vitae_spent = 0)
var/base_xp = 0
Expand Down
Loading
Loading