Skip to content

Commit

Permalink
initial
Browse files Browse the repository at this point in the history
base bloodsucker functionality
  • Loading branch information
mrmanlikesbt committed Dec 20, 2024
1 parent e433518 commit 6c88297
Show file tree
Hide file tree
Showing 130 changed files with 7,934 additions and 19 deletions.
49 changes: 49 additions & 0 deletions beestation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#include "code\__DEFINES\basic_mobs.dm"
#include "code\__DEFINES\bitfields.dm"
#include "code\__DEFINES\blood.dm"
#include "code\__DEFINES\bloodsuckers.dm"
#include "code\__DEFINES\bodyparts.dm"
#include "code\__DEFINES\bot_defines.dm"
#include "code\__DEFINES\callbacks.dm"
Expand Down Expand Up @@ -372,6 +373,7 @@
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\blob_overmind.dm"
#include "code\_onclick\hud\blobbernauthud.dm"
#include "code\_onclick\hud\bloodsucker.dm"
#include "code\_onclick\hud\constructs.dm"
#include "code\_onclick\hud\credits.dm"
#include "code\_onclick\hud\drones.dm"
Expand Down Expand Up @@ -489,6 +491,7 @@
#include "code\controllers\subsystem\stat.dm"
#include "code\controllers\subsystem\stickyban.dm"
#include "code\controllers\subsystem\sun.dm"
#include "code\controllers\subsystem\sunlight.dm"
#include "code\controllers\subsystem\supply.dm"
#include "code\controllers\subsystem\tgui.dm"
#include "code\controllers\subsystem\throwing.dm"
Expand Down Expand Up @@ -1621,6 +1624,7 @@
#include "code\game\objects\structures\artstuff.dm"
#include "code\game\objects\structures\barsigns.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\bloodsucker_crypt.dm"
#include "code\game\objects\structures\bot_elevator.dm"
#include "code\game\objects\structures\catwalk.dm"
#include "code\game\objects\structures\crateshelf.dm"
Expand Down Expand Up @@ -1712,6 +1716,7 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
#include "code\game\objects\structures\crates_lockers\crates\bins.dm"
#include "code\game\objects\structures\crates_lockers\crates\coffins.dm"
#include "code\game\objects\structures\crates_lockers\crates\critter.dm"
#include "code\game\objects\structures\crates_lockers\crates\large.dm"
#include "code\game\objects\structures\crates_lockers\crates\secure.dm"
Expand Down Expand Up @@ -1953,6 +1958,49 @@
#include "code\modules\antagonists\blob\structures\resource.dm"
#include "code\modules\antagonists\blob\structures\shield.dm"
#include "code\modules\antagonists\blood_contract\blood_contract.dm"
#include "code\modules\antagonists\bloodsucker\conversion_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\datum_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\daylight_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\frenzy_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\life_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\misc_procs_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\moodlets_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\names_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\objectives_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\soulstone_bloodsucker.dm"
#include "code\modules\antagonists\bloodsucker\clans\_clan.dm"
#include "code\modules\antagonists\bloodsucker\clans\assignclan.dm"
#include "code\modules\antagonists\bloodsucker\clans\clan_flavortext.dm"
#include "code\modules\antagonists\bloodsucker\clans\malkavian.dm"
#include "code\modules\antagonists\bloodsucker\clans\nosferatu.dm"
#include "code\modules\antagonists\bloodsucker\clans\tremere.dm"
#include "code\modules\antagonists\bloodsucker\clans\venture.dm"
#include "code\modules\antagonists\bloodsucker\powers\_power.dm"
#include "code\modules\antagonists\bloodsucker\powers\cloak.dm"
#include "code\modules\antagonists\bloodsucker\powers\feed.dm"
#include "code\modules\antagonists\bloodsucker\powers\fortitude.dm"
#include "code\modules\antagonists\bloodsucker\powers\gohome.dm"
#include "code\modules\antagonists\bloodsucker\powers\masquerade.dm"
#include "code\modules\antagonists\bloodsucker\powers\veil.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\_targeted.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\brawn.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\haste.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\lunge.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\mesmerize.dm"
#include "code\modules\antagonists\bloodsucker\powers\targeted\trespass.dm"
#include "code\modules\antagonists\bloodsucker\powers\tremere\auspex.dm"
#include "code\modules\antagonists\bloodsucker\powers\tremere\dominate.dm"
#include "code\modules\antagonists\bloodsucker\powers\tremere\thaumaturgey.dm"
#include "code\modules\antagonists\bloodsucker\powers\tremere\tremere_base.dm"
#include "code\modules\antagonists\bloodsucker\powers\vassal\distress.dm"
#include "code\modules\antagonists\bloodsucker\powers\vassal\recuperate.dm"
#include "code\modules\antagonists\bloodsucker\powers\vassal\vassal_fold.dm"
#include "code\modules\antagonists\bloodsucker\vassals\datum_vassal.dm"
#include "code\modules\antagonists\bloodsucker\vassals\ex_vassal.dm"
#include "code\modules\antagonists\bloodsucker\vassals\favorite_vassal.dm"
#include "code\modules\antagonists\bloodsucker\vassals\misc_procs_vassal.dm"
#include "code\modules\antagonists\bloodsucker\vassals\pinpointer_vassal.dm"
#include "code\modules\antagonists\bloodsucker\vassals\revenge_vassal.dm"
#include "code\modules\antagonists\brainwashing\brainwashing.dm"
#include "code\modules\antagonists\brother\brother.dm"
#include "code\modules\antagonists\changeling\cellular_emporium.dm"
Expand Down Expand Up @@ -2901,6 +2949,7 @@
#include "code\modules\language\sylvan.dm"
#include "code\modules\language\terrum.dm"
#include "code\modules\language\uncommon.dm"
#include "code\modules\language\vampiric.dm"
#include "code\modules\language\voltaic.dm"
#include "code\modules\language\xenocommon.dm"
#include "code\modules\library\lib_codex_gigas.dm"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/antagonists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
#define FACTION_BLOB "Blob"
#define FACTION_ALIEN "Xenomorph"
#define FACTION_WIZARD "Wizard"
#define FACTION_BLOODSUCKER "Bloodsucker"

// Heretic path defines.
#define HERETIC_PATH_START "Heretic Start Path"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/atom_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
#define ANTAG_HUD_VALENTINE 37
#define ANTAG_HUD_HEARTBREAKER 38
#define ANTAG_HUD_PRISONER 39
#define ANTAG_HUD_BLOODSUCKER 40

// Notification action types
#define NOTIFY_JUMP "jump"
Expand Down
176 changes: 176 additions & 0 deletions code/__DEFINES/bloodsuckers.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
///Uncomment this to enable testing of Bloodsucker features (such as vassalizing people with a mind instead of a client).
//#define BLOODSUCKER_TESTING

/**
* Blood-level defines
*/
/// Determines Bloodsucker regeneration rate
#define BS_BLOOD_VOLUME_MAX_REGEN 700
/// Cost to torture someone halfway, in blood. Called twice for full cost
#define TORTURE_BLOOD_HALF_COST 8
/// Cost to convert someone after successful torture, in blood
#define TORTURE_CONVERSION_COST 50
/// Once blood is this low, will enter Frenzy
#define FRENZY_THRESHOLD_ENTER 25
/// Once blood is this high, will exit Frenzyshak
#define FRENZY_THRESHOLD_EXIT 250

/**
* Vassal defines
*/
///If someone passes all checks and can be vassalized
#define VASSALIZATION_ALLOWED 0
///If someone has to accept vassalization
#define VASSALIZATION_DISLOYAL 1
///If someone is not allowed under any circimstances to become a Vassal
#define VASSALIZATION_BANNED 2

/**
* Cooldown defines
* Used in Cooldowns Bloodsuckers use to prevent spamming
*/
///Spam prevention for healing messages.
#define BLOODSUCKER_SPAM_HEALING (15 SECONDS)
///Span prevention for Sol Masquerade messages.
#define BLOODSUCKER_SPAM_MASQUERADE (60 SECONDS)

///Span prevention for Sol messages.
#define BLOODSUCKER_SPAM_SOL (30 SECONDS)

/**
* Clan defines
*/
#define CLAN_NONE "Caitiff"
#define CLAN_BRUJAH "Brujah Clan"
#define CLAN_TOREADOR "Toreador Clan"
#define CLAN_NOSFERATU "Nosferatu Clan"
#define CLAN_TREMERE "Tremere Clan"
#define CLAN_GANGREL "Gangrel Clan"
#define CLAN_VENTRUE "Ventrue Clan"
#define CLAN_MALKAVIAN "Malkavian Clan"
#define CLAN_TZIMISCE "Tzimisce Clan"

#define TREMERE_VASSAL "tremere_vassal"
#define FAVORITE_VASSAL "favorite_vassal"
#define REVENGE_VASSAL "revenge_vassal"

/**
* Power defines
*/
/// This Power can't be used in Torpor
#define BP_CANT_USE_IN_TORPOR (1<<0)
/// This Power can't be used in Frenzy.
#define BP_CANT_USE_IN_FRENZY (1<<1)
/// This Power can't be used with a stake in you
#define BP_CANT_USE_WHILE_STAKED (1<<2)
/// This Power can't be used while incapacitated
#define BP_CANT_USE_WHILE_INCAPACITATED (1<<3)
/// This Power can't be used while unconscious
#define BP_CANT_USE_WHILE_UNCONSCIOUS (1<<4)

/// This Power can be purchased by Bloodsuckers
#define BLOODSUCKER_CAN_BUY (1<<0)
/// This is a Default Power that all Bloodsuckers get.
#define BLOODSUCKER_DEFAULT_POWER (1<<1)
/// This Power can be purchased by Tremere Bloodsuckers
#define TREMERE_CAN_BUY (1<<2)
/// This Power can be purchased by Vassals
#define VASSAL_CAN_BUY (1<<3)

/// This Power is a Toggled Power
#define BP_AM_TOGGLE (1<<0)
/// This Power is a Single-Use Power
#define BP_AM_SINGLEUSE (1<<1)
/// This Power has a Static cooldown
#define BP_AM_STATIC_COOLDOWN (1<<2)
/// This Power doesn't cost bloot to run while unconscious
#define BP_AM_COSTLESS_UNCONSCIOUS (1<<3)

/**
* Bloodsucker Signals
*/
///Called when a Bloodsucker ranks up: (datum/bloodsucker_datum, mob/owner, mob/target)
#define BLOODSUCKER_RANK_UP "bloodsucker_rank_up"
///Called when a Bloodsucker interacts with a Vassal on their persuasion rack.
#define BLOODSUCKER_INTERACT_WITH_VASSAL "bloodsucker_interact_with_vassal"
///Called when a Bloodsucker makes a Vassal into their Favorite Vassal: (datum/vassal_datum, mob/master)
#define BLOODSUCKER_MAKE_FAVORITE "bloodsucker_make_favorite"
///Called when a new Vassal is successfully made: (datum/bloodsucker_datum)
#define BLOODSUCKER_MADE_VASSAL "bloodsucker_made_vassal"
///Called when a Bloodsucker exits Torpor.
#define BLOODSUCKER_EXIT_TORPOR "bloodsucker_exit_torpor"
///Called when a Bloodsucker reaches Final Death.
#define BLOODSUCKER_FINAL_DEATH "bloodsucker_final_death"
///Whether the Bloodsucker should not be dusted when arriving Final Death
#define DONT_DUST (1<<0)
///Called when a Bloodsucker breaks the Masquerade
#define COMSIG_BLOODSUCKER_BROKE_MASQUERADE "comsig_bloodsucker_broke_masquerade"
///Called when a Bloodsucker enters Frenzy
#define BLOODSUCKER_ENTERS_FRENZY "bloodsucker_enters_frenzy"
///Called when a Bloodsucker exits Frenzy
#define BLOODSUCKER_EXITS_FRENZY "bloodsucker_exits_frenzy"

/**
* Sol signals & Defines
*/
#define COMSIG_SOL_RANKUP_BLOODSUCKERS "comsig_sol_rankup_bloodsuckers"
#define COMSIG_SOL_RISE_TICK "comsig_sol_rise_tick"
#define COMSIG_SOL_NEAR_START "comsig_sol_near_start"
#define COMSIG_SOL_END "comsig_sol_end"
///Sent when a warning for Sol is meant to go out: (danger_level, vampire_warning_message, vassal_warning_message)
#define COMSIG_SOL_WARNING_GIVEN "comsig_sol_warning_given"
///Called on a Bloodsucker's Lifetick.
#define COMSIG_BLOODSUCKER_ON_LIFETICK "comsig_bloodsucker_on_lifetick"

#define DANGER_LEVEL_FIRST_WARNING 1
#define DANGER_LEVEL_SECOND_WARNING 2
#define DANGER_LEVEL_THIRD_WARNING 3
#define DANGER_LEVEL_SOL_ROSE 4
#define DANGER_LEVEL_SOL_ENDED 5

/**
* Clan defines
*
* This is stuff that is used solely by Clans for clan-related activity.
*/
///Drinks blood the normal Bloodsucker way.
#define BLOODSUCKER_DRINK_NORMAL "bloodsucker_drink_normal"
///Drinks blood but is snobby, refusing to drink from mindless
#define BLOODSUCKER_DRINK_SNOBBY "bloodsucker_drink_snobby"
///Drinks blood from disgusting creatures without Humanity consequences.
#define BLOODSUCKER_DRINK_INHUMANELY "bloodsucker_drink_imhumanely"

/**
* Traits
*/
/// Falsifies Health analyzer blood levels
#define TRAIT_MASQUERADE "masquerade"
/// Your body is literal room temperature. Does not make you immune to the temp
#define TRAIT_COLDBLOODED "coldblooded"

/**
* Sources
*/
/// Source trait for Bloodsuckers-related traits
#define BLOODSUCKER_TRAIT "bloodsucker_trait"
/// Source trait while Feeding
#define FEED_TRAIT "feed_trait"
/// Source trait during a Frenzy
#define FRENZY_TRAIT "frenzy_trait"

/**
* Macros
*/
///Whether a mob is a Bloodsucker
#define IS_BLOODSUCKER(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/bloodsucker))
///Whether a mob is a Vassal
#define IS_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal))
///Whether a mob is a Favorite Vassal
#define IS_FAVORITE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/favorite))
///Whether a mob is a Revenge Vassal
#define IS_REVENGE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/revenge))
///Whether a mob is a curator
#define IS_CURATOR(mob) (mob?.mind?.assigned_role == JOB_NAME_CURATOR)

//Used in bloodsucker_life.dm
#define MARTIALART_FRENZYGRAB "frenzy grabbing"
3 changes: 2 additions & 1 deletion code/__DEFINES/language.dm
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,6 @@ GLOBAL_LIST_INIT(multilingual_language_list, typecacheof(list(
/datum/language/sylvan,
/datum/language/terrum,
/datum/language/uncommon,
/datum/language/voltaic
/datum/language/voltaic,
/datum/language/vampiric
)))
2 changes: 2 additions & 0 deletions code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#define ROLE_PYRO_SLIME "Pyroclastic Anomaly Slime"
#define ROLE_MONKEY_HELMET "Sentient Monkey"
#define ROLE_PRISONER "Prisoner"
#define ROLE_BLOODSUCKER "Bloodsucker"

/// Roles that are antagonists, roundstart or not, and have passes to do.. antagonistry
GLOBAL_LIST_INIT(antagonist_bannable_roles, list(
Expand Down Expand Up @@ -91,6 +92,7 @@ GLOBAL_LIST_INIT(antagonist_bannable_roles, list(
ROLE_FUGITIVE_HUNTER,
ROLE_SLAUGHTER_DEMON,
ROLE_CONTRACTOR_SUPPORT_UNIT,
ROLE_BLOODSUCKER,
))

#define BAN_ROLE_FORCED_ANTAGONISTS "Forced Antagonists"
Expand Down
Loading

0 comments on commit 6c88297

Please sign in to comment.