diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index ec035c4e288..c8e6617a852 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -1089,11 +1089,6 @@
#define COMSIG_XENOABILITY_PLASMA_SCREECH "xenoability_plasma_screech"
#define COMSIG_XENOABILITY_FRENZY_SCREECH "xenoability_frenzy_screech"
-#define COMSIG_XENOABILITY_CHIMERA_PHANTOM "xenoability_chimera_phantom"
-#define COMSIG_XENOABILITY_CHIMERA_ABDUCTION "xenoability_chimera_abduction"
-#define COMSIG_XENOABILITY_CHIMERA_BLINK "xenoability_chimera_blink"
-#define COMSIG_XENOABILITY_CHIMERA_WARP_BLAST "xenoability_chimera_warp_blast"
-#define COMSIG_XENOABILITY_CHIMERA_BODYSWAP "xenoability_chimera_bodyswap"
#define COMSIG_XENOABILITY_CHIMERA_CRIPPLING_STRIKE "xenoability_chimera_crippling_strike"
//Preds
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 45ebbf713dc..e69de29bb2d 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -1,911 +0,0 @@
-//Some mob defines below
-#define AI_CAMERA_LUMINOSITY 6
-
-//Mob movement define
-
-///Speed mod for walk intent
-#define MOB_WALK_MOVE_MOD 4
-///Speed mod for run intent
-#define MOB_RUN_MOVE_MOD 3
-///Move mod for going diagonally
-#define DIAG_MOVEMENT_ADDED_DELAY_MULTIPLIER (sqrt(2))
-
-//Mob swap modes, for mobs bumping other mobs
-
-///Mode for bumpint into the bumped mob
-#define NO_SWAP 0
-///Mode for swapping through the bumped mob
-#define SWAPPING 1
-///Mode for phasing through the bumped mob
-#define PHASING 2
-
-//Pain or shock reduction for different reagents
-#define PAIN_REDUCTION_VERY_LIGHT -5 //alkysine
-#define PAIN_REDUCTION_LIGHT -15 //inaprovaline
-#define PAIN_REDUCTION_MEDIUM -25 //synaptizine
-#define PAIN_REDUCTION_HEAVY -35 //paracetamol
-#define PAIN_REDUCTION_VERY_HEAVY -50 //tramadol
-#define PAIN_REDUCTION_SUPER_HEAVY -100 //oxycodone
-
-
-#define PAIN_REACTIVITY 0.15
-
-
-//Nutrition
-
-#define NUTRITION_STARVING 150
-#define NUTRITION_HUNGRY 250
-#define NUTRITION_WELLFED 400
-#define NUTRITION_OVERFED 450
-
-//=================================================
-/*
- Germs and infections
-*/
-
-#define GERM_LEVEL_AMBIENT 110 //maximum germ level you can reach by standing still
-#define GERM_LEVEL_MOVE_CAP 200 //maximum germ level you can reach by running around
-
-#define INFECTION_LEVEL_ONE 100
-#define INFECTION_LEVEL_TWO 500
-#define INFECTION_LEVEL_THREE 800
-
-#define MIN_ANTIBIOTICS 0.1
-
-
-#define LIVING_PERM_COEFF 0
-#define XENO_PERM_COEFF 0.8
-//=================================================
-
-#define HUMAN_STRIP_DELAY 40 //takes 40ds = 4s to strip someone.
-#define POCKET_STRIP_DELAY 20
-
-#define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien.
-
-//Life variables
-#define CARBON_BREATH_DELAY 2 // The interval in life ticks between breathe()
-
-///The amount of damage you'll take per tick when you can't breath. Default value is 1
-#define CARBON_CRIT_MAX_OXYLOSS (round(SSmobs.wait/5, 0.1))
-///the amount of oxyloss recovery per successful breath tick.
-#define CARBON_RECOVERY_OXYLOSS -5
-
-#define CARBON_KO_OXYLOSS 50
-#define HUMAN_CRITDRAG_OXYLOSS 3 //the amount of oxyloss taken per tile a human is dragged by a xeno while unconscious
-
-#define HEAT_DAMAGE_LEVEL_1 1 //Amount of damage applied when your body temperature just passes the 360.15k safety point
-#define HEAT_DAMAGE_LEVEL_2 2 //Amount of damage applied when your body temperature passes the 400K point
-#define HEAT_DAMAGE_LEVEL_3 4 //Amount of damage applied when your body temperature passes the 1000K point
-
-#define COLD_DAMAGE_LEVEL_1 0.2 //Amount of damage applied when your body temperature just passes the 260.15k safety point
-#define COLD_DAMAGE_LEVEL_2 1.0 //Amount of damage applied when your body temperature passes the 200K point
-#define COLD_DAMAGE_LEVEL_3 2 //Amount of damage applied when your body temperature passes the 120K point
-
-//Note that gas heat damage is only applied once every FOUR ticks.
-#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point
-#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point
-#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point
-
-#define COLD_GAS_DAMAGE_LEVEL_1 0.2 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point
-#define COLD_GAS_DAMAGE_LEVEL_2 0.6 //Amount of damage applied when the current breath's temperature passes the 200K point
-#define COLD_GAS_DAMAGE_LEVEL_3 1.2 //Amount of damage applied when the current breath's temperature passes the 120K point
-
-//=================================================
-
-//disabilities
-#define BLIND (1<<0)
-#define DEAF (1<<1)
-#define NEARSIGHTED (1<<2)
-//=================================================
-
-//mob/var/stat things
-#define CONSCIOUS 0
-#define UNCONSCIOUS 1
-#define DEAD 2
-
-//Damage things
-//Way to waste perfectly good damagetype names (BRUTE) on this... If you were really worried about case sensitivity, you could have just used lowertext(damagetype) in the proc...
-#define BRUTE "brute"
-#define BURN "fire"
-#define TOX "tox"
-#define OXY "oxy"
-#define CLONE "clone"
-#define CUT "cut"
-#define BRUISE "bruise"
-#define STAMINA "stamina"
-//=================================================
-
-#define STUN "stun"
-#define WEAKEN "weaken"
-#define PARALYZE "paralyze"
-#define STAGGER "stagger"
-#define AGONY "agony" // Added in PAIN!
-#define STUTTER "stutter"
-#define EYE_BLUR "eye_blur"
-#define DROWSY "drowsy"
-#define SLUR "slur"
-//=================================================
-
-//damagetype
-#define BRUTELOSS (1<<0)
-#define FIRELOSS (1<<1)
-#define TOXLOSS (1<<2)
-#define OXYLOSS (1<<3)
-#define STAMINALOSS (1<<4)
-//=================================================
-
-//status_flags
-#define CANSTUN (1<<0)
-#define CANKNOCKDOWN (1<<1)
-#define CANKNOCKOUT (1<<2)
-#define CANPUSH (1<<3)
-#define GODMODE (1<<4)
-#define FAKEDEATH (1<<5) //Unused
-#define DISFIGURED (1<<6) //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system
-#define XENO_HOST (1<<7) //Tracks whether we're gonna be a baby alien's mummy.
-#define TK_USER (1<<8)
-#define CANUNCONSCIOUS (1<<9)
-#define CANCONFUSE (1<<10)
-#define INCORPOREAL (1<<11) // Whether not this unit should be detectable by automated means (like turrets). Used by hivemind
-
-// =============================
-// hive types
-
-#define XENO_HIVE_NONE "none_hive"
-#define XENO_HIVE_NORMAL "normal_hive"
-#define XENO_HIVE_CORRUPTED "corrupted_hive"
-#define XENO_HIVE_ALPHA "alpha_hive"
-#define XENO_HIVE_BETA "beta_hive"
-#define XENO_HIVE_ZETA "zeta_hive"
-#define XENO_HIVE_ADMEME "admeme_hive"
-#define XENO_HIVE_FALLEN "fallen_hive"
-#define XENO_HIVE_YAUTJA "yautja_hive"
-
-// =============================
-// xeno tiers
-
-#define XENO_TIER_MINION "ai"
-#define XENO_TIER_ZERO "zero" // god forgive me because i wont forgive myself
-#define XENO_TIER_ONE "one"
-#define XENO_TIER_TWO "two"
-#define XENO_TIER_THREE "three"
-#define XENO_TIER_FOUR "four"
-
-GLOBAL_LIST_INIT(xenotiers, list(XENO_TIER_MINION, XENO_TIER_ZERO, XENO_TIER_ONE, XENO_TIER_TWO, XENO_TIER_THREE, XENO_TIER_FOUR))
-GLOBAL_LIST_INIT(tier_as_number, list(XENO_TIER_MINION = -1, XENO_TIER_ZERO = 0, XENO_TIER_ONE = 1, XENO_TIER_TWO = 2, XENO_TIER_THREE = 3, XENO_TIER_FOUR = 4))
-
-// =============================
-// xeno upgrades
-
-#define XENO_UPGRADE_BASETYPE "basetype"
-#define XENO_UPGRADE_INVALID "invalid" // not applicable, the old -1
-#define XENO_UPGRADE_NORMAL "zero" // god forgive me again
-#define XENO_UPGRADE_PRIMO "one"
-
-#define XENO_UPGRADE_MANIFESTATION "manifestation" //just for the hivemind
-
-GLOBAL_LIST_INIT(xenoupgradetiers, list(XENO_UPGRADE_BASETYPE, XENO_UPGRADE_INVALID, XENO_UPGRADE_NORMAL, XENO_UPGRADE_PRIMO, XENO_UPGRADE_MANIFESTATION))
-
-//=================================================
-
-///////////////////HUMAN BLOODTYPES///////////////////
-
-#define HUMAN_BLOODTYPES list("O-","O+","A-","A+","B-","B+","AB-","AB+")
-
-//limb_status
-#define LIMB_BLEEDING (1<<0)
-#define LIMB_BROKEN (1<<1)
-#define LIMB_DESTROYED (1<<2) //limb is missing
-#define LIMB_ROBOT (1<<3)
-#define LIMB_SPLINTED (1<<4)
-#define LIMB_NECROTIZED (1<<5) //necrotizing limb, nerves are dead.
-#define LIMB_AMPUTATED (1<<6) //limb was amputated cleanly or destroyed limb was cleaned up, thus causing no pain
-#define LIMB_REPAIRED (1<<7) //we just repaired the bone, stops the gelling after setting
-#define LIMB_STABILIZED (1<<8) //certain suits will support a broken limb while worn such as the b18
-#define LIMB_BIOTIC (1<<9) //limb is biotic
-
-//limb_wound_status
-#define LIMB_WOUND_BANDAGED (1<<0)
-#define LIMB_WOUND_SALVED (1<<1)
-#define LIMB_WOUND_DISINFECTED (1<<2)
-#define LIMB_WOUND_CLAMPED (1<<3)
-
-/////////////////MOVE DEFINES//////////////////////
-#define MOVE_INTENT_WALK 0
-#define MOVE_INTENT_RUN 1
-#define XENO_HUMAN_PUSHED_DELAY 5
-
-///////////////////INTERNAL ORGANS DEFINES///////////////////
-
-//organ slots
-#define ORGAN_SLOT_APPENDIX "appendix"
-#define ORGAN_SLOT_BRAIN "brain"
-#define ORGAN_SLOT_EARS "ears"
-#define ORGAN_SLOT_EYES "eyes"
-#define ORGAN_SLOT_HEART "heart"
-#define ORGAN_SLOT_LIVER "liver"
-#define ORGAN_SLOT_STOMACH "stomach"
-#define ORGAN_SLOT_LUNGS "lungs"
-#define ORGAN_SLOT_KIDNEYS "kidneys"
-
-#define ORGAN_HEALTHY 0
-#define ORGAN_BRUISED 1
-#define ORGAN_BROKEN 2
-
-//Brain Damage defines
-#define BRAIN_DAMAGE_MILD 20
-#define BRAIN_DAMAGE_SEVERE 100
-#define BRAIN_DAMAGE_DEATH 200
-
-///////////////SURGERY DEFINES///////////////
-#define SURGERY_CANNOT_USE 0
-#define SURGERY_CAN_USE 1
-#define SURGERY_INVALID 2
-
-#define NECRO_TREAT_MIN_DURATION 40
-#define NECRO_TREAT_MAX_DURATION 60
-
-#define NECRO_REMOVE_MIN_DURATION 60
-#define NECRO_REMOVE_MAX_DURATION 80
-
-#define HEMOSTAT_REMOVE_MIN_DURATION 40
-#define HEMOSTAT_REMOVE_MAX_DURATION 60
-
-#define BONESETTER_MIN_DURATION 60
-#define BONESETTER_MAX_DURATION 80
-
-#define BONEGEL_REPAIR_MIN_DURATION 40
-#define BONEGEL_REPAIR_MAX_DURATION 60
-
-#define FIXVEIN_MIN_DURATION 60
-#define FIXVEIN_MAX_DURATION 80
-
-#define FIX_ORGAN_MIN_DURATION 60
-#define FIX_ORGAN_MAX_DURATION 80
-
-#define BONEGEL_CLOSE_ENCASED_MIN_DURATION 40
-#define BONEGEL_CLOSE_ENCASED_MAX_DURATION 60
-
-#define RETRACT_CLOSE_ENCASED_MIN_DURATION 30
-#define RETRACT_CLOSE_ENCASED_MAX_DURATION 40
-
-#define RETRACT_OPEN_ENCASED_MIN_DURATION 30
-#define RETRACT_OPEN_ENCASED_MAX_DURATION 40
-
-#define SAW_OPEN_ENCASED_MIN_DURATION 60
-#define SAW_OPEN_ENCASED_MAX_DURATION 80
-
-#define INCISION_MANAGER_MIN_DURATION 60
-#define INCISION_MANAGER_MAX_DURATION 80
-
-#define CAUTERY_MIN_DURATION 60
-#define CAUTERY_MAX_DURATION 80
-
-#define BONECHIPS_REMOVAL_MIN_DURATION 40
-#define BONECHIPS_REMOVAL_MAX_DURATION 60
-#define BONECHIPS_MAX_DAMAGE 20
-
-#define HEMOTOMA_MIN_DURATION 60
-#define HEMOTOMA_MAX_DURATION 80
-
-#define ROBOLIMB_CUT_MIN_DURATION 60
-#define ROBOLIMB_CUT_MAX_DURATION 80
-
-#define ROBOLIMB_MEND_MIN_DURATION 60
-#define ROBOLIMB_MEND_MAX_DURATION 80
-
-#define ROBOLIMB_PREPARE_MIN_DURATION 60
-#define ROBOLIMB_PREPARE_MAX_DURATION 80
-
-#define ROBOLIMB_ATTACH_MIN_DURATION 60
-#define ROBOLIMB_ATTACH_MAX_DURATION 80
-
-#define EYE_CUT_MIN_DURATION 60
-#define EYE_CUT_MAX_DURATION 80
-
-#define EYE_LIFT_MIN_DURATION 30
-#define EYE_LIFT_MAX_DURATION 40
-
-#define EYE_MEND_MIN_DURATION 40
-#define EYE_MEND_MAX_DURATION 60
-
-#define EYE_CAUTERISE_MIN_DURATION 60
-#define EYE_CAUTERISE_MAX_DURATION 80
-
-#define FACIAL_CUT_MIN_DURATION 60
-#define FACIAL_CUT_MAX_DURATION 80
-
-#define FACIAL_MEND_MIN_DURATION 40
-#define FACIAL_MEND_MAX_DURATION 60
-
-#define FACIAL_FIX_MIN_DURATION 30
-#define FACIAL_FIX_MAX_DURATION 40
-
-#define FACIAL_CAUTERISE_MIN_DURATION 60
-#define FACIAL_CAUTERISE_MAX_DURATION 80
-
-#define SUTURE_MIN_DURATION 80
-#define SUTURE_MAX_DURATION 90
-
-#define DEFAT_MIN_DURATION 120
-#define DEFAT_MAX_DURATION 150
-
-#define LIMB_PRINTING_TIME 30
-#define LIMB_METAL_AMOUNT 125
-#define LIMB_MATTER_AMOUNT 100
-
-//How long it takes for a human to become undefibbable
-#define TIME_BEFORE_DNR 150 //In life ticks, multiply by 2 to have seconds
-
-
-//species_flags
-#define NO_BLOOD (1<<0)
-#define NO_BREATHE (1<<1)
-#define NO_SCAN (1<<2)
-#define NO_PAIN (1<<3)
-#define NO_OVERDOSE (1<<4)
-#define NO_POISON (1<<5)
-#define NO_CHEM_METABOLIZATION (1<<6)
-#define HAS_SKIN_TONE (1<<7)
-#define HAS_SKIN_COLOR (1<<8)
-#define HAS_LIPS (1<<9)
-#define HAS_UNDERWEAR (1<<10)
-#define HAS_NO_HAIR (1<<11)
-#define IS_SYNTHETIC (1<<12)
-#define NO_STAMINA (1<<13)
-#define DETACHABLE_HEAD (1<<14)
-#define USES_ALIEN_WEAPONS (1<<15)
-#define NO_DAMAGE_OVERLAY (1<<16)
-#define HEALTH_HUD_ALWAYS_DEAD (1<<17)
-#define PARALYSE_RESISTANT (1<<18)
-#define ROBOTIC_LIMBS (1<<19)
-#define GREYSCALE_BLOOD (1<<20)
-#define IS_INSULATED (1<<21)
-
-//=================================================
-
-//Some on_mob_life() procs check for alien races.
-#define IS_HUMAN (1<<0)
-#define IS_XENO (1<<1)
-#define IS_MOTH (1<<3)
-#define IS_SECTOID (1<<4)
-#define IS_MONKEY (1<<5)
-#define IS_YAUTJA (1<<6)
-//=================================================
-
-//AFK status
-#define MOB_CONNECTED 0
-#define MOB_RECENTLY_DISCONNECTED 1 //Still within the grace period.
-#define MOB_DISCONNECTED 2
-#define MOB_AGHOSTED 3 //This body was just aghosted, do not offer it
-
-//Mob sizes
-#define MOB_SIZE_SMALL 0
-#define MOB_SIZE_HUMAN 1
-#define MOB_SIZE_XENO 2
-#define MOB_SIZE_BIG 3
-
-//taste sensitivity defines, used in mob/living/proc/taste
-#define TASTE_HYPERSENSITIVE 5 //anything below 5% is not tasted
-#define TASTE_SENSITIVE 10 //anything below 10%
-#define TASTE_NORMAL 15 //anything below 15%
-#define TASTE_DULL 30 //anything below 30%
-#define TASTE_NUMB 101 //no taste
-
-
-//defins for datum/hud
-
-#define HUD_STYLE_STANDARD 1
-#define HUD_STYLE_REDUCED 2
-#define HUD_STYLE_NOHUD 3
-#define HUD_VERSIONS 3
-#define HUD_SL_LOCATOR_COOLDOWN 0.5 SECONDS
-#define HUD_SL_LOCATOR_PROCESS_COOLDOWN 10 SECONDS
-
-
-//Blood levels
-#define BLOOD_VOLUME_MAXIMUM 600
-#define BLOOD_VOLUME_NORMAL 560
-#define BLOOD_VOLUME_SAFE 501
-#define BLOOD_VOLUME_OKAY 336
-#define BLOOD_VOLUME_BAD 224
-#define BLOOD_VOLUME_SURVIVE 122
-
-#define HUMAN_MAX_PALENESS 30 //this is added to human skin tone to get value of pale_max variable
-
-
-// Overlay Indexes
-#define PRED_LASER_LAYER 32
-#define LASER_LAYER 31
-#define WOUND_LAYER 30
-#define MOTH_WINGS_LAYER 29
-#define MUTATIONS_LAYER 28
-#define DAMAGE_LAYER 27
-#define FLAY_LAYER 26
-#define UNIFORM_LAYER 25
-#define TAIL_LAYER 24 //bs12 specific. this hack is probably gonna come back to haunt me
-#define ID_LAYER 23
-#define SHOES_LAYER 22
-#define GLOVES_LAYER 21
-#define BELT_LAYER 20
-#define GLASSES_LAYER 19
-#define SUIT_LAYER 18 //Possible make this an overlay of somethign required to wear a belt?
-#define HAIR_LAYER 17 //TODO: make part of head layer?
-#define EARS_LAYER 16
-#define FACEMASK_LAYER 15
-#define GOGGLES_LAYER 14 //For putting Ballistic goggles and potentially other things above masks
-#define HEAD_LAYER 13
-#define COLLAR_LAYER 12
-#define SUIT_STORE_LAYER 11
-#define KAMA_LAYER 10
-#define BACK_LAYER 9
-#define CAPE_LAYER 8
-#define HANDCUFF_LAYER 7
-#define L_HAND_LAYER 6
-#define R_HAND_LAYER 5
-#define BURST_LAYER 4 //Chestburst overlay
-#define OVERHEALTH_SHIELD_LAYER 3
-#define TARGETED_LAYER 2 //for target sprites when held at gun point, and holo cards.
-#define FIRE_LAYER 1 //If you're on fire
-
-#define TOTAL_LAYERS 32
-
-#define MOTH_WINGS_BEHIND_LAYER 1
-
-#define TOTAL_UNDERLAYS 1
-
-#define ANTI_CHAINSTUN_TICKS 2
-
-#define BASE_GRAB_SLOWDOWN 3 //Slowdown called by /mob/setGrabState(newstate) in mob.dm when grabbing a target aggressively.
-
-///Stamina exhaustion
-
-#define LIVING_STAMINA_EXHAUSTION_COOLDOWN 10 SECONDS //Amount of time between 0 stamina exhaustion events
-#define STAMINA_EXHAUSTION_STAGGER_DURATION 10 SECONDS //Amount of stagger applied on stamina exhaustion events
-#define STAMINA_EXHAUSTION_DEBUFF_STACKS 6 //Amount of slow and eyeblur stacks applied on stamina exhaustion events
-
-
-//Shock defines
-
-#define LIVING_SHOCK_EFFECT_COOLDOWN 10 SECONDS
-
-
-//Xeno Defines
-//Xeno flags
-///Xeno is currently performing a leap/dash attack
-#define XENO_LEAPING (1<<0)
-
-#define HIVE_CAN_COLLAPSE_FROM_SILO (1<<1)
-
-#define XENO_WEAK_ACID_PUDDLE_DAMAGE 8 //Weak acid damage dealt by acid puddles
-#define XENO_HIGH_ACID_PUDDLE_DAMAGE 20 //Strong acid damage dealt by acid puddles
-
-#define XENO_DEFAULT_VENT_ENTER_TIME 4.5 SECONDS //Standard time for a xeno to enter a vent.
-#define XENO_DEFAULT_VENT_EXIT_TIME 2 SECONDS //Standard time for a xeno to exit a vent.
-#define XENO_DEFAULT_ACID_PUDDLE_DAMAGE 14 //Standard damage dealt by acid puddles
-#define XENO_ACID_WELL_FILL_TIME 2 SECONDS //How long it takes to add a charge to an acid pool
-#define XENO_ACID_WELL_FILL_COST 150 //Cost in plasma to apply a charge to an acid pool
-#define XENO_ACID_WELL_MAX_CHARGES 5 //Maximum number of charges for the acid well
-#define XENO_ACID_CHARGE_DAMAGE 30
-
-#define HIVE_CAN_HIJACK (1<<0)
-
-#define XENO_PULL_CHARGE_TIME 2 SECONDS
-#define XENO_SLOWDOWN_REGEN 0.4
-
-#define XENO_DEADHUMAN_DRAG_SLOWDOWN 2
-
-#define KING_SUMMON_TIMER_DURATION 5 MINUTES
-
-#define SPIT_UPGRADE_BONUS(Xenomorph) (Xenomorph.upgrade_as_number() ? 0.6 : 0.45 ) //Primo damage increase
-
-#define PLASMA_TRANSFER_AMOUNT 100
-
-#define XENO_NEURO_AMOUNT_RECURRING 5
-#define XENO_NEURO_CHANNEL_TIME 0.25 SECONDS
-
-#define XENO_HEALTH_ALERT_TRIGGER_PERCENT 0.25 //If a xeno is damaged while its current hit points are less than this percent of its maximum, we send out an alert to the hive
-#define XENO_HEALTH_ALERT_TRIGGER_THRESHOLD 50 //If a xeno is damaged while its current hit points are less than this amount, we send out an alert to the hive
-#define XENO_HEALTH_ALERT_COOLDOWN 60 SECONDS //The cooldown on these xeno damage alerts
-#define XENO_SILO_HEALTH_ALERT_COOLDOWN 30 SECONDS //The cooldown on these xeno damage alerts
-#define XENO_HEALTH_ALERT_POINTER_DURATION 6 SECONDS //How long the alert directional pointer lasts.
-#define XENO_RALLYING_POINTER_DURATION 15 SECONDS //How long the rally hive pointer lasts
-#define XENO_SILO_DAMAGE_POINTER_DURATION 10 SECONDS //How long the alert directional pointer lasts when silos are damaged
-#define XENO_SILO_DETECTION_COOLDOWN 1 MINUTES
-#define XENO_SILO_DETECTION_RANGE 10//How far silos can detect hostiles
-#define XENO_HIVEMIND_DETECTION_RANGE 10 //How far out (in tiles) can the hivemind detect hostiles
-#define XENO_HIVEMIND_DETECTION_COOLDOWN 1 MINUTES
-
-#define XENO_RESTING_COOLDOWN 2 SECONDS
-#define XENO_UNRESTING_COOLDOWN 1 SECONDS
-
-#define XENO_PARALYZE_NORMALIZATION_MULTIPLIER 5 //Multiplies an input to normalize xeno paralyze duration times.
-#define XENO_STUN_NORMALIZATION_MULTIPLIER 2 //Multiplies an input to normalize xeno stun duration times.
-
-#define CANNOT_HOLD_EGGS 0
-#define CAN_HOLD_TWO_HANDS 1
-#define CAN_HOLD_ONE_HAND 2
-
-//TODO a lot of caste and caste_can flags should just be traits using caste_traits instead
-#define CASTE_INNATE_HEALING (1<<0) // Xenomorphs heal outside of weeds. Larvas, for example.
-#define CASTE_FIRE_IMMUNE (1<<1) //Are we immune to fire
-#define CASTE_EVOLUTION_ALLOWED (1<<2) //If we're allowed to evolve (also affects the gain of evo points)
-#define CASTE_IS_INTELLIGENT (1<<3) // A hive leader or able to use more human controls
-#define CASTE_DO_NOT_ALERT_LOW_LIFE (1<<4) //Doesn't alert the hive when at low life, and is quieter when dying
-#define CASTE_HIDE_IN_STATUS (1<<5)
-#define CASTE_QUICK_HEAL_STANDING (1<<6) // Xenomorphs heal standing same if they were resting.
-#define CASTE_INNATE_PLASMA_REGEN (1<<7) // Xenos get full plasma regardless if they are on weeds or not
-#define CASTE_ACID_BLOOD (1<<8) //The acid blood effect which damages humans near xenos that take damage
-#define CASTE_IS_STRONG (1<<9)//can tear open acided walls without being big
-#define CASTE_IS_BUILDER (1<<10) //whether we are classified as a builder caste
-#define CASTE_IS_A_MINION (1<<11) //That's a dumb ai
-#define CASTE_PLASMADRAIN_IMMUNE (1<<12)
-#define CASTE_NOT_IN_BIOSCAN (1<<13) // xenos with this flag aren't registered towards bioscan
-#define CASTE_DO_NOT_ANNOUNCE_DEATH (1<<14) // xenos with this flag wont be announced to hive when dying
-#define CASTE_STAGGER_RESISTANT (1<<15) //Resistant to some forms of stagger, such as projectiles
-#define CASTE_HAS_WOUND_MASK (1<<16) //uses an alpha mask for wounded states
-#define CASTE_EXCLUDE_STRAINS (1<<17) // denotes castes/basetypes that should be excluded from being evoable as a strain
-
-// Xeno defines that affect evolution, considering making a new var for these
-#define CASTE_LEADER_TYPE (1<<16) //Whether we are a leader type caste, such as the queen, shrike or ?king?, and is affected by queen ban and playtime restrictions
-#define CASTE_CANNOT_EVOLVE_IN_CAPTIVITY (1<<17) //Whether we cannot evolve in the research lab
-#define CASTE_REQUIRES_FREE_TILE (1<<18) //Whether we require a free tile to evolve
-#define CASTE_INSTANT_EVOLUTION (1<<19) //Whether we require no evolution progress to evolve to this caste
-
-#define CASTE_CAN_HOLD_FACEHUGGERS (1<<0)
-#define CASTE_CAN_BE_QUEEN_HEALED (1<<1)
-#define CASTE_CAN_BE_GIVEN_PLASMA (1<<2)
-#define CASTE_CAN_BE_LEADER (1<<3)
-#define CASTE_CAN_HEAL_WITHOUT_QUEEN (1<<4) // Xenomorphs can heal even without a queen on the same z level
-#define CASTE_CAN_HOLD_JELLY (1<<5)//whether we can hold fireproof jelly in our hands
-#define CASTE_CAN_CORRUPT_GENERATOR (1<<6) //Can corrupt a generator
-#define CASTE_CAN_RIDE_CRUSHER (1<<7) //Can ride a crusher
-
-#define HIVE_STATUS_SHOW_EMPTY (1<<0)
-#define HIVE_STATUS_COMPACT_MODE (1<<1)
-#define HIVE_STATUS_SHOW_GENERAL (1<<2)
-#define HIVE_STATUS_SHOW_POPULATION (1<<3)
-#define HIVE_STATUS_SHOW_XENO_LIST (1<<4)
-#define HIVE_STATUS_SHOW_STRUCTURES (1<<5)
-#define HIVE_STATUS_DEFAULTS (HIVE_STATUS_SHOW_EMPTY | HIVE_STATUS_SHOW_GENERAL | HIVE_STATUS_SHOW_POPULATION | HIVE_STATUS_SHOW_XENO_LIST | HIVE_STATUS_SHOW_STRUCTURES)
-
-//Charge-Crush
-#define CHARGE_OFF 0
-#define CHARGE_BUILDINGUP 1
-#define CHARGE_ON 2
-#define CHARGE_MAX 3
-
-//Hunter Defines
-#define HUNTER_STEALTH_COOLDOWN 50 //5 seconds
-#define HUNTER_STEALTH_WALK_PLASMADRAIN 2
-#define HUNTER_STEALTH_RUN_PLASMADRAIN 5
-#define HUNTER_STEALTH_STILL_ALPHA 12 //95% transparency
-#define HUNTER_STEALTH_WALK_ALPHA 25 //90% transparency
-#define HUNTER_STEALTH_RUN_ALPHA 128 //50% transparency
-#define HUNTER_STEALTH_STEALTH_DELAY 30 //3 seconds before 95% stealth
-#define HUNTER_STEALTH_INITIAL_DELAY 20 //2 seconds before we can increase stealth
-#define HUNTER_POUNCE_SNEAKATTACK_DELAY 30 //3 seconds before we can sneak attack
-#define HUNTER_SNEAK_SLASH_ARMOR_PEN 15 //bonus AP
-#define HUNTER_SNEAK_ATTACK_RUN_DELAY 2 SECONDS
-#define HUNTER_PSYCHIC_TRACE_COOLDOWN 5 SECONDS //Cooldown of the Hunter's Psychic Trace, and duration of its arrow
-#define HUNTER_SILENCE_STAGGER_STACKS 1 //Silence imposes this many stagger stacks
-#define HUNTER_SILENCE_SENSORY_STACKS 7 //Silence imposes this many eyeblur and deafen stacks.
-#define HUNTER_SILENCE_MUTE_DURATION 10 SECONDS //Silence imposes this many seconds of the mute status effect.
-#define HUNTER_SILENCE_RANGE 5 //Range in tiles of the Hunter's Silence.
-#define HUNTER_SILENCE_AOE 2 //AoE size of Silence in tiles
-#define HUNTER_SILENCE_MULTIPLIER 1.5 //Multiplier of stacks vs Hunter's Mark targets
-#define HUNTER_SILENCE_WHIFF_COOLDOWN 3 SECONDS //If we fail to target anyone with Silence, partial cooldown to prevent spam.
-#define HUNTER_SILENCE_COOLDOWN 30 SECONDS //Silence's cooldown
-#define HUNTER_VENT_CRAWL_TIME 2 SECONDS //Hunters can enter vents fast
-
-//Ravager defines:
-#define RAV_CHARGESPEED 2
-#define RAV_CHARGEDISTANCE 4
-
-#define RAV_RAVAGE_THROW_RANGE 1
-
-#define RAVAGER_ENDURE_DURATION 10 SECONDS
-#define RAVAGER_ENDURE_DURATION_WARNING 0.7
-#define RAVAGER_ENDURE_HP_LIMIT -125
-
-#define RAVAGER_RAGE_DURATION 10 SECONDS
-#define RAVAGER_RAGE_WARNING 0.7
-#define RAVAGER_RAGE_MIN_HEALTH_THRESHOLD 0.75 //The maximum % of HP we can have to trigger Rage
-#define RAVAGER_RAGE_STAGGERSTUN_IMMUNE_THRESHOLD 0.5
-#define RAVAGER_RAGE_ENDURE_INCREASE_PER_SLASH 2 SECONDS //The amount of time each slash during Rage increases Endure's duration
-#define RAVAGER_RAGE_HEALTH_RECOVERY_PER_SLASH 40 //Base amount of healing from slash during Rage
-#define RAVAGER_IMMORTALITY_DURATION 5 SECONDS
-
-//crusher defines
-#define CRUSHER_STOMP_LOWER_DMG 40
-#define CRUSHER_STOMP_UPPER_DMG 60
-#define CRUSHER_CHARGE_BARRICADE_MULTI 60
-#define CRUSHER_CHARGE_RAZORWIRE_MULTI 100
-#define CRUSHER_CHARGE_TANK_MULTI 100
-
-//gorger defines
-#define GORGER_REGURGITATE_DELAY 1 SECONDS
-#define GORGER_DEVOUR_DELAY 2 SECONDS
-#define GORGER_DRAIN_INSTANCES 2 // amuont of times the target is drained
-#define GORGER_DRAIN_DELAY 1 SECONDS // time needed to drain a marine once
-#define GORGER_DRAIN_HEAL 40 // overheal gained each time the target is drained
-#define GORGER_DRAIN_BLOOD_DRAIN 20 // amount of plasma drained when feeding on something
-#define GORGER_TRANSFUSION_HEAL 0.3 // in %
-#define GORGER_REJUVENATE_DURATION -1
-#define GORGER_REJUVENATE_COST 20
-#define GORGER_REJUVENATE_SLOWDOWN 6
-#define GORGER_REJUVENATE_HEAL 0.05 //in %
-#define GORGER_REJUVENATE_THRESHOLD 0.10 //in %
-#define GORGER_PSYCHIC_LINK_CHANNEL 10 SECONDS
-#define GORGER_PSYCHIC_LINK_RANGE 7
-#define GORGER_PSYCHIC_LINK_REDIRECT 0.5 //in %
-#define GORGER_PSYCHIC_LINK_MIN_HEALTH 0.2 //in %
-#define GORGER_CARNAGE_HEAL 0.2
-#define GORGER_CARNAGE_MOVEMENT -0.5
-#define GORGER_FEAST_DURATION -1 // lasts indefinitely, self-cancelled when insufficient plasma left
-
-//carrier defines
-#define CARRIER_HUGGER_THROW_SPEED 2
-#define CARRIER_HUGGER_THROW_DISTANCE 5
-#define CARRIER_SLASH_HUGGER_DAMAGE 25
-
-//Defiler defines
-#define DEFILER_GAS_CHANNEL_TIME 0.5 SECONDS
-#define DEFILER_GAS_DELAY 1 SECONDS
-#define DEFILER_REAGENT_SLASH_COUNT 3
-#define DEFILER_REAGENT_SLASH_INJECT_AMOUNT 7
-#define DEFILER_REAGENT_SLASH_DURATION 4 SECONDS
-#define DEFILER_TRANSVITOX_CAP 180 //Max toxin damage transvitox will allow
-#define DEFILER_TRANSVITOX_DAMAGE 2 //Damage dealt per tick per xeno toxin by the transvitox toxin
-#define DEFILER_DEFILE_CHANNEL_TIME 0.5 SECONDS //Wind up time for the Defile ability
-#define DEFILER_DEFILE_FAIL_COOLDOWN 5 SECONDS //Time Defile goes on cooldown for when it fails
-#define DEFILER_DEFILE_STRENGTH_MULTIPLIER 0.5 //Base multiplier for determining the power of Defile
-#define DEFILER_SANGUINAL_DAMAGE 1 //Damage dealt per tick per xeno toxin by the sanguinal toxin
-#define DEFILER_SANGUINAL_SMOKE_MULTIPLIER 0.03 //Amount the defile power is multiplied by which determines sanguinal smoke strength/size
-#define TENTACLE_ABILITY_RANGE 5
-
-//Drone defines
-#define DRONE_HEAL_RANGE 1
-#define AUTO_WEEDING_MIN_DIST 4 //How far the xeno must be from the last spot to auto weed
-#define RESIN_SELF_TIME 2 SECONDS //Time it takes to apply resin jelly on themselves
-#define RESIN_OTHER_TIME 1 SECONDS //Time it takes to apply resin jelly to other xenos
-
-//Boiler defines
-#define BOILER_GAS_DELAY 0.5 SECONDS
-#define BOILER_DUMP_SPEED -1.5
-#define BOILER_LUMINOSITY_BASE 0
-#define BOILER_LUMINOSITY_BASE_COLOR LIGHT_COLOR_GREEN
-#define BOILER_LUMINOSITY_AMMO 0.5 //don't set this to 0. How much each 'piece' of ammo in reserve glows by.
-#define BOILER_LUMINOSITY_AMMO_NEUROTOXIN_COLOR LIGHT_COLOR_YELLOW
-#define BOILER_LUMINOSITY_AMMO_CORROSIVE_COLOR LIGHT_COLOR_GREEN
-#define BOILER_BOMBARD_COOLDOWN_REDUCTION 1.5 //Amount of seconds each glob stored reduces bombard cooldown by
-#define BOILER_LUMINOSITY_THRESHOLD 2 //Amount of ammo needed to start glowing
-
-//Panther defines
-#define PANTHER_EVASION_COOLDOWN 2.5 SECONDS // how close a nearby human has to be in order to be targeted
-#define PANTHER_EVASION_PLASMADRAIN 3
-#define PANTHER_EVASION_LOW_PLASMADRAIN 1.5
-#define PANTHER_TEARING_TAIL_REAGENT_AMOUNT 5
-
-//Hivelord defines
-#define HIVELORD_TUNNEL_DISMANTLE_TIME 3 SECONDS
-#define HIVELORD_TUNNEL_MIN_TRAVEL_TIME 2 SECONDS
-#define HIVELORD_TUNNEL_SMALL_MAX_TRAVEL_TIME 4 SECONDS
-#define HIVELORD_TUNNEL_LARGE_MAX_TRAVEL_TIME 6 SECONDS
-#define HIVELORD_TUNNEL_DIG_TIME 10 SECONDS
-#define HIVELORD_TUNNEL_SET_LIMIT 8
-#define HIVELORD_HEAL_RANGE 3
-#define HIVELORD_HEALING_INFUSION_DURATION 60 SECONDS
-#define HIVELORD_HEALING_INFUSION_TICKS 10
-
-//Shrike defines
-#define SHRIKE_FLAG_PAIN_HUD_ON (1<<0)
-#define SHRIKE_CURE_HEAL_MULTIPLIER 10
-#define SHRIKE_HEAL_RANGE 3
-
-//Drone defines
-#define DRONE_BASE_SALVE_HEAL 50
-#define DRONE_ESSENCE_LINK_WINDUP 3 SECONDS
-#define DRONE_ESSENCE_LINK_RANGE 6 // How far apart the linked xenos can be, in tiles. Going past this deactivates the buff.
-#define DRONE_ESSENCE_LINK_REGEN 0.012 // Amount of health regen given as a percentage.
-#define DRONE_ESSENCE_LINK_SHARED_HEAL 0.1 // The effectiveness of heals when applied to the other linked xeno, as a percentage
-
-//Defender defines
-#define DEFENDER_CHARGE_RANGE 4
-
-//Sentinel defines
-#define SENTINEL_TOXIC_SPIT_STACKS_PER 2 //Amount of debuff stacks to be applied per spit.
-#define SENTINEL_TOXIC_SLASH_COUNT 3 //Amount of slashes before the buff runs out
-#define SENTINEL_TOXIC_SLASH_DURATION 4 SECONDS //Duration of the buff
-#define SENTINEL_TOXIC_SLASH_STACKS_PER 2 //Amount of debuff stacks to be applied per slash.
-#define SENTINEL_TOXIC_GRENADE_STACKS_PER 10 //Amount of debuff stacks to be applied for every tick spent inside the toxic gas.
-#define SENTINEL_TOXIC_GRENADE_GAS_DAMAGE 20 //Amount of damage dealt for every tick spent in the Toxic Grenade's gas.
-#define SENTINEL_DRAIN_STING_CRIT_REQUIREMENT 20 //Amount of stacks needed to activate Drain Sting's critical effect.
-#define SENTINEL_DRAIN_MULTIPLIER 6 //Amount to multiply Drain Sting's restoration by
-#define SENTINEL_DRAIN_SURGE_ARMOR_MOD 20 //Amount to modify the Sentinel's armor by when under the effects of Drain Surge.
-#define SENTINEL_INTOXICATED_BASE_DAMAGE 1 //Amount of damage per tick dealt by the Intoxicated debuff
-#define SENTINEL_INTOXICATED_RESIST_REDUCTION 8 //Amount of stacks removed every time the Intoxicated debuff is Resisted against.
-#define SENTINEL_INTOXICATED_SANGUINAL_INCREASE 3 //Amount of debuff stacks applied for every tick of Sanguinal.
-
-//Larva defines
-#define LARVA_VENT_CRAWL_TIME 1 SECONDS //Larva can crawl into vents fast
-
-//Praetorian defines
-#define PRAE_CHARGEDISTANCE 6
-
-// Chimera defines
-//Stagger and slowdown stacks applied to adjacent living hostiles before/after a teleport
-#define CHIMERA_TELEPORT_DEBUFF_STAGGER_STACKS 2 SECONDS
-#define CHIMERA_TELEPORT_DEBUFF_SLOWDOWN_STACKS 3
-
-//Spiderling defines
-#define TIME_TO_DISSOLVE 5 SECONDS
-
-//misc
-
-#define STANDARD_SLOWDOWN_REGEN 0.3
-
-#define HYPERVENE_REMOVAL_AMOUNT 8
-
-#define GAS_INHALE_REAGENT_TRANSFER_AMOUNT 7
-
-// Squad ID defines moved from game\jobs\job\squad.dm
-#define NO_SQUAD "no_squad"
-#define ALPHA_SQUAD "alpha_squad"
-#define BRAVO_SQUAD "bravo_squad"
-#define CHARLIE_SQUAD "charlie_squad"
-#define DELTA_SQUAD "delta_squad"
-
-#define TYPING_INDICATOR_LIFETIME 3 SECONDS //Grace period after which typing indicator disappears regardless of text in chatbar.
-
-
-#define BODY_ZONE_HEAD "head"
-#define BODY_ZONE_CHEST "chest"
-#define BODY_ZONE_L_ARM "l_arm"
-#define BODY_ZONE_R_ARM "r_arm"
-#define BODY_ZONE_L_LEG "l_leg"
-#define BODY_ZONE_R_LEG "r_leg"
-
-
-#define BODY_ZONE_PRECISE_EYES "eyes"
-#define BODY_ZONE_PRECISE_MOUTH "mouth"
-#define BODY_ZONE_PRECISE_GROIN "groin"
-#define BODY_ZONE_PRECISE_L_HAND "l_hand"
-#define BODY_ZONE_PRECISE_R_HAND "r_hand"
-#define BODY_ZONE_PRECISE_L_FOOT "l_foot"
-#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
-
-GLOBAL_LIST_INIT(human_body_parts, list(BODY_ZONE_HEAD,
- BODY_ZONE_CHEST,
- BODY_ZONE_PRECISE_GROIN,
- BODY_ZONE_L_ARM,
- BODY_ZONE_PRECISE_L_HAND,
- BODY_ZONE_R_ARM,
- BODY_ZONE_PRECISE_R_HAND,
- BODY_ZONE_L_LEG,
- BODY_ZONE_PRECISE_L_FOOT,
- BODY_ZONE_R_LEG,
- BODY_ZONE_PRECISE_R_FOOT
- ))
-
-//Hostile simple animals
-#define AI_ON 1
-#define AI_IDLE 2
-#define AI_OFF 3
-#define AI_Z_OFF 4
-
-//Stamina
-#define STAMINA_STATE_IDLE 0
-#define STAMINA_STATE_ACTIVE 1
-
-#define UPDATEHEALTH(MOB) (addtimer(CALLBACK(MOB, TYPE_PROC_REF(/mob/living, updatehealth)), 1, TIMER_UNIQUE))
-
-#define GRAB_PIXEL_SHIFT_PASSIVE 6
-#define GRAB_PIXEL_SHIFT_AGGRESSIVE 12
-#define GRAB_PIXEL_SHIFT_NECK 16
-
-#define HUMAN_CARRY_SLOWDOWN 0.35
-
-// =============================
-// Hallucinations - health hud screws for carbon mobs
-#define SCREWYHUD_NONE 0
-#define SCREWYHUD_CRIT 1
-#define SCREWYHUD_DEAD 2
-#define SCREWYHUD_HEALTHY 3
-
-// timed_action_flags parameter for `/proc/do_after`
-/// Can do the action even if mob moves location
-#define IGNORE_USER_LOC_CHANGE (1<<0)
-/// Can do the action even if the target moves location
-#define IGNORE_TARGET_LOC_CHANGE (1<<1)
-/// Can do the action even if the item is no longer being held
-#define IGNORE_HELD_ITEM (1<<2)
-/// Can do the action even if the mob is incapacitated (ex. handcuffed)
-#define IGNORE_INCAPACITATED (1<<3)
-/// Used to prevent important slowdowns from being abused by drugs like kronkaine
-#define IGNORE_SLOWDOWNS (1<<4)
-
-#define IGNORE_LOC_CHANGE (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE)
-
-// Pheromones and buff orders
-
-#define AURA_XENO_RECOVERY "Recovery"
-#define AURA_XENO_WARDING "Warding"
-#define AURA_XENO_FRENZY "Frenzy"
-
-#define AURA_HUMAN_MOVE "move"
-#define AURA_HUMAN_HOLD "hold"
-#define AURA_HUMAN_FOCUS "focus"
-
-#define AURA_XENO_BLESSWARDING "Blessing Of Warding"
-#define AURA_XENO_BLESSFRENZY "Blessing Of Frenzy"
-#define AURA_XENO_BLESSFURY "Blessing Of Fury"
-
-//slowdown defines for liquid turfs
-
-///Default slowdown for mobs moving through liquid
-#define MOB_WATER_SLOWDOWN 1.75
-///Slowdown for xenos moving through liquid
-#define XENO_WATER_SLOWDOWN 1.3
-///Slowdown for boilers moving through liquid
-#define BOILER_WATER_SLOWDOWN 0
-///Slowdown for warlocks moving through liquid
-#define WARLOCK_WATER_SLOWDOWN 0
-///Slowdown for favehuggers moving through liquid
-#define FACEHUGGER_WATER_SLOWDOWN 1.6
-
-//Species defines
-
-///Human species or those that functional behave like them. Default species
-#define SPECIES_HUMAN "species_human"
-///Combat robot species
-#define SPECIES_COMBAT_ROBOT "species_combat_robot"
-
-///Nextmove delay after performing an interaction with a grab on something
-#define GRAB_SLAM_DELAY 0.7 SECONDS
-///Default damage for slamming a mob against an object
-#define BASE_OBJ_SLAM_DAMAGE 10
-///Default damage for slamming a mob against a wall
-#define BASE_WALL_SLAM_DAMAGE 15
-///Default damage for slamming a mob against another mob
-#define BASE_MOB_SLAM_DAMAGE 8
-
-///Pixel_y offset when lying down
-#define CARBON_LYING_Y_OFFSET -6
-
-// Yautja defines
-
-//Gear select defines
-#define YAUTJA_GEAR_GLAIVE "The Lumbering Glaive"
-#define YAUTJA_GEAR_WHIP "The Rending Chain-Whip"
-#define YAUTJA_GEAR_SWORD "The Piercing Hunting Sword"
-#define YAUTJA_GEAR_SCYTHE "The Cleaving War-Scythe"
-#define YAUTJA_GEAR_STICK "The Adaptive Combi-Stick"
-#define YAUTJA_GEAR_SPEAR "The Nimble Spear"
-#define YAUTJA_GEAR_SCIMS "The Fearsome Scimitars"
-#define YAUTJA_GEAR_LAUNCHER "The Fleeting Spike Launcher"
-#define YAUTJA_GEAR_PISTOL "The Swift Plasma Pistol"
-#define YAUTJA_GEAR_DISC "The Purifying Smart-Disc"
-#define YAUTJA_GEAR_FULL_ARMOR "The Formidable Plate Armor"
-#define YAUTJA_GEAR_SHIELD "The Steadfast Shield"
-#define YAUTJA_GEAR_DRONE "The Agile Drone"
-
-#define YAUTJA_GEAR_GLAIVE_ALT "The Imposing Glaive"
-#define YAUTJA_GEAR_SCYTHE_ALT "The Ripping War-Scythe"
-
-#define YAUTJA_THRALL_GEAR_MACHETE "The Swift Machete"
-#define YAUTJA_THRALL_GEAR_RAPIER "The Dancing Rapier"
-#define YAUTJA_THRALL_GEAR_CLAYMORE "The Broad Claymore"
-#define YAUTJA_THRALL_GEAR_FIREAXE "The Purposeful Fireaxe"
-
-///Filter name for illusion impacts
-#define ILLUSION_HIT_FILTER "illusion_hit_filter"
-
-#define WARRIOR_PUNCH_SLOWDOWN 3
-#define WARRIOR_PUNCH_STAGGER 3
-#define WARRIOR_PUNCH_EMPOWER_MULTIPLIER 1.8
-#define WARRIOR_PUNCH_GRAPPLED_DAMAGE_MULTIPLIER 1.8
-#define WARRIOR_PUNCH_GRAPPLED_DEBUFF_MULTIPLIER 1.5
-#define WARRIOR_PUNCH_GRAPPLED_PARALYZE 0.5 SECONDS
-#define WARRIOR_PUNCH_KNOCKBACK_DISTANCE 1
-#define WARRIOR_PUNCH_KNOCKBACK_SPEED 1
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 0e6ec53ffec..4214c01c7a4 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -129,7 +129,6 @@ GLOBAL_LIST_INIT(playable_icons, list(
"xenominion",
"xenoqueen",
"xenoshrike",
- "chimera",
"predator",
"thrall",
"hellhound",
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 416824fdfed..cd658c515d5 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -106,10 +106,6 @@ GLOBAL_LIST_INIT(all_xeno_types, list(
/mob/living/carbon/xenomorph/warlock/primordial,
/mob/living/carbon/xenomorph/behemoth,
/mob/living/carbon/xenomorph/behemoth/primordial,
- /mob/living/carbon/xenomorph/chimera,
- /mob/living/carbon/xenomorph/chimera/primordial,
- /mob/living/carbon/xenomorph/widow,
- /mob/living/carbon/xenomorph/widow/primordial,
/mob/living/carbon/xenomorph/beetle,
/mob/living/carbon/xenomorph/mantis,
/mob/living/carbon/xenomorph/scorpion,
@@ -142,7 +138,6 @@ GLOBAL_LIST_INIT(xeno_types_tier_two, list(
GLOBAL_LIST_INIT(xeno_types_tier_three, list(
/datum/xeno_caste/behemoth,
/datum/xeno_caste/boiler,
- /datum/xeno_caste/chimera,
/datum/xeno_caste/crusher,
/datum/xeno_caste/defiler,
/datum/xeno_caste/gorger,
diff --git a/code/datums/keybinding/xeno.dm b/code/datums/keybinding/xeno.dm
index bbc16c25300..10a3a23f041 100644
--- a/code/datums/keybinding/xeno.dm
+++ b/code/datums/keybinding/xeno.dm
@@ -1060,41 +1060,6 @@
description = "Screech that increases damage for nearby xenos."
keybind_signal = COMSIG_XENOABILITY_FRENZY_SCREECH
-/datum/keybinding/xeno/phantom
- name = "phantom"
- full_name = "Chimera: Phantom"
- description = "Create a physical clone and hide in shadows."
- keybind_signal = COMSIG_XENOABILITY_CHIMERA_PHANTOM
- hotkey_keys = list("R")
-
-/datum/keybinding/xeno/abduction
- name = "abduction"
- full_name = "Chimera: Abduction"
- description = "Abduct the prey."
- keybind_signal = COMSIG_XENOABILITY_CHIMERA_ABDUCTION
- hotkey_keys = list("Q")
-
-/datum/keybinding/xeno/chimera_blink
- name = "chimera_blink"
- full_name = "Chimera: Blink"
- description = "Teleport to a space a short distance away within line of sight. Can teleport mobs you're dragging with you at the cost of higher cooldown."
- keybind_signal = COMSIG_XENOABILITY_CHIMERA_BLINK
- hotkey_keys = list("E")
-
-/datum/keybinding/xeno/warp_blast
- name = "warp_blast"
- full_name = "Chimera: Warp Blast"
- description = "Create a pure force explosion that damages and knockbacks targets around."
- keybind_signal = COMSIG_XENOABILITY_CHIMERA_WARP_BLAST
- hotkey_keys = list("F")
-
-/datum/keybinding/xeno/bodyswap
- name = "bodyswap"
- full_name = "Chimera: Bodyswap"
- description = "Swap places with another alien."
- keybind_signal = COMSIG_XENOABILITY_CHIMERA_BODYSWAP
- hotkey_keys = list("X")
-
/datum/keybinding/xeno/crippling_strike
name = "crippling_strike"
full_name = "Chimera: Crippling Strike"
diff --git a/code/datums/round_statistics.dm b/code/datums/round_statistics.dm
index 415d30f50a0..f4896a1dfe0 100644
--- a/code/datums/round_statistics.dm
+++ b/code/datums/round_statistics.dm
@@ -97,6 +97,5 @@ GLOBAL_DATUM_INIT(round_statistics, /datum/round_statistics, new)
var/psy_lances = 0
var/psy_shields = 0
var/psy_shield_blasts = 0
- var/chimera_blinks = 0
var/larva_from_xeno_core = 0
var/points_from_towers = 0
diff --git a/code/datums/wave_spawner.dm b/code/datums/wave_spawner.dm
index ea8cddc39d2..044350c76e2 100644
--- a/code/datums/wave_spawner.dm
+++ b/code/datums/wave_spawner.dm
@@ -50,7 +50,6 @@
/mob/living/carbon/xenomorph/praetorian/ai,
/mob/living/carbon/xenomorph/ravager/ai,
/mob/living/carbon/xenomorph/boiler/ai,
- /mob/living/carbon/xenomorph/chimera/ai,
)
min_time = 20 MINUTES
points_factor = 0.5
@@ -72,7 +71,6 @@
/mob/living/carbon/xenomorph/praetorian/ai,
/mob/living/carbon/xenomorph/ravager/ai,
/mob/living/carbon/xenomorph/boiler/ai,
- /mob/living/carbon/xenomorph/chimera/ai,
)
min_time = 20 MINUTES
points_factor = 0.8
diff --git a/code/game/objects/machinery/minelayer.dm b/code/game/objects/machinery/minelayer.dm
index 796b63d617e..37ba031bf75 100644
--- a/code/game/objects/machinery/minelayer.dm
+++ b/code/game/objects/machinery/minelayer.dm
@@ -41,6 +41,35 @@
addtimer(CALLBACK(src, PROC_REF(throw_mine), turf_list), 2 SECONDS)
///this proc is used to check for valid turfs and throw mines
+/proc/turf_block_check(atom/subject, atom/target, ignore_can_pass = FALSE, ignore_density = FALSE, ignore_closed_turf = FALSE, ignore_invulnerable = FALSE, ignore_objects = FALSE, ignore_mobs = FALSE, ignore_space = FALSE)
+ var/turf/T = get_turf(target)
+ if(isspaceturf(T) && !ignore_space)
+ return TRUE
+ if(isclosedturf(T) && !ignore_closed_turf) //If we care about closed turfs
+ return TRUE
+ for(var/atom/blocker AS in T)
+ if((blocker.flags_atom & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care
+ continue
+ if(!blocker.CanPass(subject, T) && !ignore_can_pass) //If the subject atom can't pass and we care about that, we have a block
+ return TRUE
+ if(!blocker.density) //Check if we're dense
+ continue
+ if(!ignore_density) //If we care about all dense atoms or only certain types of dense atoms
+ return TRUE
+ if((blocker.resistance_flags & INDESTRUCTIBLE) && !ignore_invulnerable) //If we care about dense invulnerable objects
+ return TRUE
+ if(isobj(blocker) && !ignore_objects) //If we care about dense objects
+ var/obj/obj_blocker = blocker
+ if(!isstructure(obj_blocker)) //If it's not a structure and we care about objects, we have a block
+ return TRUE
+ var/obj/structure/blocker_structure = obj_blocker
+ if(!blocker_structure.climbable) //If it's a structure and can't be climbed, we have a block
+ return TRUE
+ if(ismob(blocker) && !ignore_mobs) //If we care about mobs
+ return TRUE
+
+ return FALSE
+
/obj/machinery/deployable/minelayer/proc/throw_mine(list/turf/list_of_turfs)
if(!stored_amount > 0 || !length(list_of_turfs))
playsound(loc, 'sound/machines/twobeep.ogg', 25, 1)
diff --git a/code/modules/admin/panels/player_panel.dm b/code/modules/admin/panels/player_panel.dm
index 10e3e831d38..c06d8416323 100644
--- a/code/modules/admin/panels/player_panel.dm
+++ b/code/modules/admin/panels/player_panel.dm
@@ -494,7 +494,6 @@
Warlock |
Widow |
Behemoth |
- Chimera
Alien Tier 4:
Queen |
Shrike |
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index ab5ec796610..6ee96c37c7c 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -472,8 +472,6 @@ Status: [status ? status : "Unknown"] | Damage: [health ? health : "None"]
newmob = M.change_mob_type(/mob/living/carbon/xenomorph/facehugger, location, null, delmob)
if("panther")
newmob = M.change_mob_type(/mob/living/carbon/xenomorph/panther, location, null, delmob)
- if("chimera")
- newmob = M.change_mob_type(/mob/living/carbon/xenomorph/chimera, location, null, delmob)
//PREDS
if("hellhound")
newmob = M.change_mob_type(/mob/living/carbon/xenomorph/hellhound, location, null, delmob)
diff --git a/code/modules/ai/presets/xeno_presets.dm b/code/modules/ai/presets/xeno_presets.dm
index 6ad5548906e..d773b8e1bf1 100644
--- a/code/modules/ai/presets/xeno_presets.dm
+++ b/code/modules/ai/presets/xeno_presets.dm
@@ -107,8 +107,3 @@
GLOB.hive_datums[hivenumber].facehuggers -= src
AddComponent(/datum/component/ai_controller, /datum/ai_behavior/xeno)
-/mob/living/carbon/xenomorph/chimera/ai
-
-/mob/living/carbon/xenomorph/chimera/ai/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/ai_controller, /datum/ai_behavior/xeno)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm
deleted file mode 100644
index dd6a6debf1d..00000000000
--- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/abilities_chimera.dm
+++ /dev/null
@@ -1,474 +0,0 @@
-// ***************************************
-// *********** Blink
-// ***************************************
-/datum/action/ability/activable/xeno/blink
- name = "Blink"
- action_icon_state = "blink"
- desc = "We teleport ourselves a short distance to a location within line of sight."
- use_state_flags = ABILITY_TURF_TARGET
- ability_cost = 50
- cooldown_duration = 3 SECONDS
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_BLINK,
- )
-
-///Check target Blink turf to see if it can be blinked to
-/datum/action/ability/activable/xeno/blink/proc/check_blink_tile(turf/T, ignore_blocker = FALSE, silent = FALSE)
- if(isclosedturf(T) || isspaceturf(T) || isspacearea(T))
- if(!silent)
- to_chat(owner, span_xenowarning("We cannot blink here!"))
- return FALSE
-
- if(!line_of_sight(owner, T)) //Needs to be in line of sight.
- if(!silent)
- to_chat(owner, span_xenowarning("We can't blink without line of sight to our destination!"))
- return FALSE
-
- if(IS_OPAQUE_TURF(T))
- if(!silent)
- to_chat(owner, span_xenowarning("We can't blink into this space without vision!"))
- return FALSE
-
- if(ignore_blocker) //If we don't care about objects occupying the target square, return TRUE; used for checking pathing through transparents
- return TRUE
-
- if(turf_block_check(owner, T, FALSE, TRUE, TRUE, TRUE, TRUE)) //Check if there's anything that blocks us; we only care about Canpass here
- if(!silent)
- to_chat(owner, span_xenowarning("We can't blink here!"))
- return FALSE
-
- var/area/A = get_area(src)
- if(isspacearea(A))
- if(!silent)
- to_chat(owner, span_xenowarning("We cannot blink here!"))
- return FALSE
-
- return TRUE
-
-///Check for whether the target turf has dense objects inside
-/datum/action/ability/activable/xeno/blink/proc/check_blink_target_turf_density(turf/T, silent = FALSE)
- for(var/atom/blocker AS in T)
- if(!blocker.CanPass(owner, T))
- if(!silent)
- to_chat(owner, span_xenowarning("We can't blink into a solid object!"))
- return FALSE
-
- return TRUE
-
-/datum/action/ability/activable/xeno/blink/use_ability(atom/A)
- . = ..()
- var/mob/living/carbon/xenomorph/X = owner
- var/turf/T = X.loc
- var/turf/temp_turf = X.loc
- var/check_distance = min(X.xeno_caste.blink_range, get_dist(X,A))
- var/list/fully_legal_turfs = list()
-
- for (var/x = 1 to check_distance)
- temp_turf = get_step(T, get_dir(T, A))
- if (!temp_turf)
- break
- if(!check_blink_tile(temp_turf, TRUE, TRUE)) //Verify that the turf is legal; if not we cancel out. We ignore transparent dense objects like windows here for now
- break
- if(check_blink_target_turf_density(temp_turf, TRUE)) //If we could ultimately teleport to this square, it is fully legal; add it to the list
- fully_legal_turfs += temp_turf
- T = temp_turf
-
- check_distance = min(length(fully_legal_turfs), check_distance) //Cap the check distance to the number of fully legal turfs
- T = X.loc //Reset T to be our initial position
- if(check_distance)
- T = fully_legal_turfs[check_distance]
-
- X.face_atom(T) //Face the target so we don't look like an ass
-
- var/cooldown_mod = 1
- var/mob/pulled_target = owner.pulling
- if(pulled_target) //bring the pulled target with us if applicable but at the cost of sharply increasing the next cooldown
-
- if(pulled_target.issamexenohive(X))
- cooldown_mod = X.xeno_caste.blink_drag_friendly_multiplier
- else
- if(!do_after(owner, 0.5 SECONDS, NONE, owner, BUSY_ICON_HOSTILE)) //Grap-porting hostiles has a slight wind up
- return fail_activate()
- cooldown_mod = X.xeno_caste.blink_drag_nonfriendly_living_multiplier
- if(ishuman(pulled_target))
- var/mob/living/carbon/human/H = pulled_target
- if(H.stat == UNCONSCIOUS) //Apply critdrag damage as if they were quickly pulled the same distance
- var/critdamage = HUMAN_CRITDRAG_OXYLOSS * get_dist(H.loc, T)
- if(!H.adjustOxyLoss(critdamage))
- H.adjustBruteLoss(critdamage)
-
- to_chat(X, span_xenodanger("We bring [pulled_target] with us. We won't be ready to blink again for [cooldown_duration * cooldown_mod * 0.1] seconds due to the strain of doing so."))
-
- teleport_debuff_aoe(X) //Debuff when we vanish
-
- if(pulled_target) //Yes, duplicate check because otherwise we end up with the initial teleport debuff AoE happening prior to the wind up which looks really bad and is actually exploitable via deliberate do after cancels
- pulled_target.forceMove(T) //Teleport to our target turf
-
- X.forceMove(T) //Teleport to our target turf
- teleport_debuff_aoe(X) //Debuff when we reappear
-
- succeed_activate()
- add_cooldown(cooldown_duration * cooldown_mod)
-
- GLOB.round_statistics.chimera_blinks++
- SSblackbox.record_feedback(FEEDBACK_TALLY, "round_statistics", 1, "chimera_blinks") //Statistics
-
-///Called by many of the Chimera's teleportation effects
-/datum/action/ability/activable/xeno/proc/teleport_debuff_aoe(atom/movable/teleporter, silent = FALSE)
- var/mob/living/carbon/xenomorph/ghost = owner
-
- if(!silent) //Sound effects
- playsound(teleporter, 'sound/effects/EMPulse.ogg', 25, 1) //Sound at the location we are arriving at
-
- new /obj/effect/temp_visual/blink_portal(get_turf(teleporter))
-
- new /obj/effect/temp_visual/wraith_warp(get_turf(teleporter))
-
- for(var/mob/living/living_target in range(1, teleporter.loc))
-
- if(living_target.stat == DEAD)
- continue
-
- if(isxeno(living_target))
- var/mob/living/carbon/xenomorph/X = living_target
- if(X.issamexenohive(ghost)) //No friendly fire
- continue
-
- living_target.adjust_stagger(CHIMERA_TELEPORT_DEBUFF_STAGGER_STACKS)
- living_target.add_slowdown(CHIMERA_TELEPORT_DEBUFF_SLOWDOWN_STACKS)
- to_chat(living_target, span_warning("You feel nauseous as reality warps around you!"))
-
-/datum/action/ability/activable/xeno/blink/on_cooldown_finish()
- to_chat(owner, span_xenodanger("We are able to blink again."))
- owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1)
- return ..()
-
-///Return TRUE if we have a block, return FALSE otherwise
-/proc/turf_block_check(atom/subject, atom/target, ignore_can_pass = FALSE, ignore_density = FALSE, ignore_closed_turf = FALSE, ignore_invulnerable = FALSE, ignore_objects = FALSE, ignore_mobs = FALSE, ignore_space = FALSE)
- var/turf/T = get_turf(target)
- if(isspaceturf(T) && !ignore_space)
- return TRUE
- if(isclosedturf(T) && !ignore_closed_turf) //If we care about closed turfs
- return TRUE
- for(var/atom/blocker AS in T)
- if((blocker.flags_atom & ON_BORDER) || blocker == subject) //If they're a border entity or our subject, we don't care
- continue
- if(!blocker.CanPass(subject, T) && !ignore_can_pass) //If the subject atom can't pass and we care about that, we have a block
- return TRUE
- if(!blocker.density) //Check if we're dense
- continue
- if(!ignore_density) //If we care about all dense atoms or only certain types of dense atoms
- return TRUE
- if((blocker.resistance_flags & INDESTRUCTIBLE) && !ignore_invulnerable) //If we care about dense invulnerable objects
- return TRUE
- if(isobj(blocker) && !ignore_objects) //If we care about dense objects
- var/obj/obj_blocker = blocker
- if(!isstructure(obj_blocker)) //If it's not a structure and we care about objects, we have a block
- return TRUE
- var/obj/structure/blocker_structure = obj_blocker
- if(!blocker_structure.climbable) //If it's a structure and can't be climbed, we have a block
- return TRUE
- if(ismob(blocker) && !ignore_mobs) //If we care about mobs
- return TRUE
-
- return FALSE
-
-/datum/action/ability/xeno_action/phantom
- name = "Phantom"
- action_icon_state = "phantom"
- desc = "Create a physical clone and hide in shadows."
- cooldown_duration = 30 SECONDS
- ability_cost = 100
- use_state_flags = ABILITY_USE_STAGGERED
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_PHANTOM,
- )
- var/stealth_duration = 5 SECONDS
- var/mob/living/carbon/xenomorph/chimera/ai/phantom
- var/clone_duration = 7 SECONDS
- var/obj/effect/abstract/particle_holder/warpdust
-
-/datum/action/ability/xeno_action/phantom/on_cooldown_finish()
- to_chat(owner, span_xenodanger("We gather enough strength to create a new phantom."))
- owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1)
- return ..()
-
-/datum/action/ability/xeno_action/phantom/action_activate()
- . = ..()
- var/mob/living/carbon/xenomorph/chimera/X = owner
-
- phantom = new /mob/living/carbon/xenomorph/chimera/phantom(get_turf(X))
- phantom.hivenumber = X.hivenumber
- addtimer(CALLBACK(phantom, TYPE_PROC_REF(/mob, gib)), clone_duration)
-
- succeed_activate()
- add_cooldown()
-
- new /obj/effect/temp_visual/alien_fruit_eaten(get_turf(X))
- playsound(X,'sound/effects/magic.ogg', 25, TRUE)
-
- if(X.on_fire)
- phantom.IgniteMob()
- return
-
- X.alpha = HUNTER_STEALTH_STILL_ALPHA
- addtimer(CALLBACK(src, PROC_REF(uncloak)), stealth_duration)
-
- RegisterSignals(X, list(
- COMSIG_XENOMORPH_GRAB,
- COMSIG_XENOMORPH_THROW_HIT,
- COMSIG_LIVING_IGNITED,
- COMSIG_XENOMORPH_ATTACK_OBJ,
- COMSIG_XENOMORPH_ATTACK_LIVING,
- COMSIG_XENO_LIVING_THROW_HIT,
- COMSIG_XENOMORPH_DISARM_HUMAN), PROC_REF(uncloak))
-
- ADD_TRAIT(X, TRAIT_STEALTH, TRAIT_STEALTH)
-
-/datum/action/ability/xeno_action/phantom/proc/uncloak()
- SIGNAL_HANDLER
- var/mob/living/carbon/xenomorph/chimera/X = owner
- X.alpha = 255
-
- UnregisterSignal(X, list(
- COMSIG_XENOMORPH_GRAB,
- COMSIG_XENOMORPH_THROW_HIT,
- COMSIG_LIVING_IGNITED,
- COMSIG_XENOMORPH_ATTACK_OBJ,
- COMSIG_XENOMORPH_ATTACK_LIVING,
- COMSIG_XENO_LIVING_THROW_HIT,
- COMSIG_XENOMORPH_DISARM_HUMAN,))
-
- REMOVE_TRAIT(X, TRAIT_STEALTH, TRAIT_STEALTH)
-
-/datum/action/ability/xeno_action/phantom/ai_should_start_consider()
- return FALSE
-
-/datum/action/ability/xeno_action/phantom/ai_should_use(target)
- return FALSE
-
-#define CHIMERA_POUNCE_SPEED 2
-
-/datum/action/ability/activable/xeno/pounce/abduction
- name = "Abduction"
- action_icon_state = "abduction"
- desc = "Abduct the prey."
- cooldown_duration = 20 SECONDS
- ability_cost = 100
- use_state_flags = ABILITY_MOB_TARGET
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_ABDUCTION,
- )
- use_state_flags = null
- pounce_range = 5
- var/turf/initial_turf
- var/slowdown_amount = 6
- var/stagger_duration = 3 SECONDS
-
-/datum/action/ability/activable/xeno/pounce/abduction/on_cooldown_finish()
- to_chat(owner, span_xenodanger("We gather enough strength to abduct another one."))
- owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1)
- return ..()
-
-/datum/action/ability/activable/xeno/pounce/abduction/use_ability(atom/A)
- initial_turf = get_turf(owner)
- return ..()
-
-/datum/action/ability/activable/xeno/pounce/abduction/mob_hit(datum/source, mob/living/living_target)
- . = ..()
- INVOKE_ASYNC(src, PROC_REF(abduct), living_target)
-
-/datum/action/ability/activable/xeno/pounce/abduction/proc/abduct(mob/living/target)
- var/mob/living/carbon/xenomorph/xeno_owner = owner
- RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(movement_fx))
- if(!do_after(xeno_owner, 0.5 SECONDS, IGNORE_HELD_ITEM, target, BUSY_ICON_DANGER))
- UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
- return
- xeno_owner.throw_at(initial_turf, pounce_range, CHIMERA_POUNCE_SPEED, xeno_owner)
- if(target)
- target.throw_at(initial_turf, pounce_range, CHIMERA_POUNCE_SPEED, xeno_owner)
- target.add_slowdown(slowdown_amount)
- target.adjust_stagger(stagger_duration)
- UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
-
-/datum/action/ability/activable/xeno/pounce/abduction/ai_should_start_consider()
- return FALSE
-
-/datum/action/ability/activable/xeno/pounce/abduction/ai_should_use(target)
- return FALSE
-
-/datum/action/ability/xeno_action/warp_blast
- name = "Warp Blast"
- action_icon_state = "warp_blast"
- desc = "Create a pure force explosion that damages and knockbacks targets around."
- cooldown_duration = 20 SECONDS
- ability_cost = 100
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_WARP_BLAST,
- )
- var/range = 2
- var/warp_blast_damage = 30
-
-/datum/action/ability/xeno_action/warp_blast/action_activate()
- . = ..()
- playsound(owner,'sound/effects/bamf.ogg', 75, TRUE)
- new /obj/effect/temp_visual/shockwave(get_turf(owner), range)
- for(var/mob/living/living_target in cheap_get_humans_near(get_turf(owner), range))
-
- if(living_target.stat == DEAD || living_target == owner || !line_of_sight(owner, living_target))
- continue
-
- playsound(living_target,'sound/weapons/alien_claw_block.ogg', 75, 1)
- living_target.apply_effects(0.5 SECONDS, 0.5 SECONDS)
- living_target.apply_damage(warp_blast_damage, BRUTE, blocked = BOMB)
- living_target.apply_damage(warp_blast_damage * 2, STAMINA, blocked = BOMB)
- var/throwlocation = living_target.loc
- for(var/x in 1 to 3)
- throwlocation = get_step(throwlocation, get_dir(owner, living_target))
- living_target.throw_at(throwlocation, 2, 1, owner, TRUE)
- succeed_activate()
- add_cooldown()
-
-/datum/action/ability/activable/xeno/body_swap
- name = "Body swap"
- action_icon_state = "bodyswap"
- desc = "Swap places with another alien."
- use_state_flags = ABILITY_MOB_TARGET
- cooldown_duration = 20 SECONDS
- ability_cost = 100
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_BODYSWAP,
- )
-
-/datum/action/ability/activable/xeno/body_swap/on_cooldown_finish()
- to_chat(owner, span_xenodanger("We gather enough strength to perform body swap again."))
- owner.playsound_local(owner, 'sound/effects/alien/newlarva.ogg', 25, 0, 1)
- return ..()
-
-/datum/action/ability/activable/xeno/body_swap/use_ability(atom/A)
- . = ..()
- if(!isxeno(A))
- owner.balloon_alert(owner, "We can only swap places with another alien.")
- return fail_activate()
- if(get_dist(owner, A) > 9 || owner.z != A.z)
- owner.balloon_alert(owner, "We are too far away!")
- return fail_activate()
-
- var/mob/living/carbon/xenomorph/target = A
- var/mob/living/carbon/xenomorph/chimera/X = owner
- var/turf/target_turf = get_turf(A)
- var/turf/origin_turf = get_turf(X)
-
- new /obj/effect/temp_visual/blink_portal(origin_turf)
- new /obj/effect/temp_visual/blink_portal(target_turf)
- new /obj/effect/particle_effect/sparks(origin_turf)
- new /obj/effect/particle_effect/sparks(target_turf)
- playsound(target_turf, 'sound/effects/EMPulse.ogg', 25, TRUE)
-
- X.face_atom(target_turf)
- target.forceMove(origin_turf)
- X.forceMove(target_turf)
-
- succeed_activate()
- add_cooldown()
-
-/particles/xeno_slash/vampirism/crippling_strike
- icon_state = "x"
- color = "#440088"
- count = 0
- velocity = list(50, 50)
- drift = generator(GEN_CIRCLE, 15, 15, NORMAL_RAND)
- gravity = list(0, 0)
-
-/datum/action/ability/xeno_action/crippling_strike
- name = "Toggle crippling strike"
- action_icon_state = "neuroclaws_off"
- desc = "Toggle on to enable crippling attacks"
- ability_cost = 0
- cooldown_duration = 1 SECONDS
- keybind_flags = ABILITY_KEYBIND_USE_ABILITY | ABILITY_IGNORE_SELECTED_ABILITY
- keybinding_signals = list(
- KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_CRIPPLING_STRIKE,
- )
- var/mob/living/old_target
- var/additional_damage = 2
- var/slowdown_amount = 1
- var/stagger_duration = 0.2 SECONDS
- var/heal_amount = 25
- var/plasma_gain = 30
- var/stacks = 0
- var/stacks_max = 5
- var/decay_time = 7 SECONDS
- var/obj/effect/abstract/particle_holder/particle_holder
-
-/datum/action/ability/xeno_action/crippling_strike/update_button_icon()
- var/mob/living/carbon/xenomorph/xeno = owner
- action_icon_state = xeno.vampirism ? "neuroclaws_on" : "neuroclaws_off"
- return ..()
-
-/datum/action/ability/xeno_action/crippling_strike/give_action(mob/living/L)
- . = ..()
- var/mob/living/carbon/xenomorph/xeno = L
- xeno.vampirism = TRUE
- particle_holder = new(xeno, /particles/xeno_slash/vampirism/crippling_strike)
- particle_holder.pixel_y = 18
- particle_holder.pixel_x = 18
- START_PROCESSING(SSprocessing, src)
- RegisterSignal(L, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(on_slash))
-
-/datum/action/ability/xeno_action/crippling_strike/remove_action(mob/living/L)
- . = ..()
- var/mob/living/carbon/xenomorph/xeno = L
- xeno.vampirism = FALSE
- stacks = 0
- QDEL_NULL(particle_holder)
- STOP_PROCESSING(SSprocessing, src)
- UnregisterSignal(L, COMSIG_XENOMORPH_POSTATTACK_LIVING)
-
-/datum/action/ability/xeno_action/crippling_strike/action_activate()
- . = ..()
- var/mob/living/carbon/xenomorph/xeno = owner
- xeno.vampirism = !xeno.vampirism
- if(xeno.vampirism)
- particle_holder = new(xeno, /particles/xeno_slash/vampirism/crippling_strike)
- particle_holder.pixel_y = 18
- particle_holder.pixel_x = 18
- START_PROCESSING(SSprocessing, src)
- RegisterSignal(xeno, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(on_slash))
- else
- stacks = 0
- QDEL_NULL(particle_holder)
- STOP_PROCESSING(SSprocessing, src)
- UnregisterSignal(xeno, COMSIG_XENOMORPH_POSTATTACK_LIVING)
- to_chat(xeno, span_xenonotice("You will now[xeno.vampirism ? "" : " no longer"] debuff targets"))
-
-/datum/action/ability/xeno_action/crippling_strike/process()
- particle_holder.particles.count = stacks * stacks
- if(decay_time > 0)
- decay_time -= 1 SECONDS
- return
- if(stacks > 0)
- stacks--
- if(stacks == 0)
- particle_holder.particles.count = 0
-
-/datum/action/ability/xeno_action/crippling_strike/proc/on_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod)
- SIGNAL_HANDLER
- if(target.stat == DEAD)
- return
- if(!ishuman(target))
- return
- if(old_target != target)
- old_target = target
- stacks = max(0, stacks - 2)
- var/mob/living/carbon/xenomorph/X = owner
- target.apply_damage(additional_damage * stacks, BRUTE, X.zone_selected, blocked = FALSE)
- target.add_slowdown(slowdown_amount * stacks)
- target.adjust_stagger(stagger_duration * stacks)
- if(stacks == stacks_max)
- X.heal_overall_damage(heal_amount, heal_amount, updating_health = TRUE)
- X.gain_plasma(plasma_gain)
- if(stacks < stacks_max)
- stacks++
- decay_time = initial(decay_time)
- update_button_icon()
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm
deleted file mode 100644
index 5d3a34488ab..00000000000
--- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/castedatum_chimera.dm
+++ /dev/null
@@ -1,88 +0,0 @@
-/datum/xeno_caste/chimera
- caste_name = "Chimera"
- display_name = "Chimera"
- upgrade_name = ""
- caste_type_path = /mob/living/carbon/xenomorph/chimera
- caste_desc = "A slim, deadly alien creature. It has two additional arms with mantis blades."
- tier = XENO_TIER_THREE
- upgrade = XENO_UPGRADE_BASETYPE
- wound_type = "chimera" //used to match appropriate wound overlays
-
- // *** Melee Attacks *** //
- melee_damage = 25
- attack_delay = 7
-
- // *** Speed *** //
- speed = -1
-
- // *** Plasma *** //
- plasma_max = 500
- plasma_gain = 25
-
- // *** Health *** //
- max_health = 350
-
- // *** Flags *** //
- caste_flags = CASTE_EVOLUTION_ALLOWED
- can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER
- caste_traits = null
-
- // *** Defense *** //
- soft_armor = list(MELEE = 50, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 0, BIO = 50, FIRE = 0, ACID = 50)
-
- blink_drag_nonfriendly_living_multiplier = 20
- blink_drag_friendly_multiplier = 4
- blink_range = 5
-
- minimap_icon = "chimera"
-
- // *** Abilities *** //
- actions = list(
- /datum/action/ability/xeno_action/xeno_resting,
- /datum/action/ability/xeno_action/watch_xeno,
- /datum/action/ability/activable/xeno/psydrain,
- /datum/action/ability/activable/xeno/blink,
- /datum/action/ability/xeno_action/phantom,
- /datum/action/ability/activable/xeno/pounce/abduction,
- /datum/action/ability/activable/xeno/body_swap,
- /datum/action/ability/xeno_action/warp_blast,
- )
-
-/datum/xeno_caste/chimera/normal
- upgrade = XENO_UPGRADE_NORMAL
-
-/datum/xeno_caste/chimera/primordial
- upgrade_name = "Primordial"
- upgrade = XENO_UPGRADE_PRIMO
-
- // *** Abilities *** //
- actions = list(
- /datum/action/ability/xeno_action/xeno_resting,
- /datum/action/ability/xeno_action/watch_xeno,
- /datum/action/ability/activable/xeno/psydrain,
- /datum/action/ability/activable/xeno/blink,
- /datum/action/ability/xeno_action/phantom,
- /datum/action/ability/activable/xeno/pounce/abduction,
- /datum/action/ability/activable/xeno/body_swap,
- /datum/action/ability/xeno_action/warp_blast,
- /datum/action/ability/xeno_action/crippling_strike,
- )
-
-/datum/xeno_caste/chimera/phantom
- caste_type_path = /mob/living/carbon/xenomorph/chimera/phantom
- caste_flags = CASTE_DO_NOT_ALERT_LOW_LIFE|CASTE_IS_A_MINION|CASTE_DO_NOT_ANNOUNCE_DEATH
- can_flags = CASTE_CAN_BE_QUEEN_HEALED
- caste_traits = null
-
- melee_damage = 20
-
- minimap_icon = "xenominion"
-
- tier = XENO_TIER_MINION
- upgrade = XENO_UPGRADE_BASETYPE
-
- max_health = 150
-
- soft_armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
-
- actions = null
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/chimera/chimera.dm b/code/modules/mob/living/carbon/xenomorph/castes/chimera/chimera.dm
deleted file mode 100644
index 934b37e5b51..00000000000
--- a/code/modules/mob/living/carbon/xenomorph/castes/chimera/chimera.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/mob/living/carbon/xenomorph/chimera
- caste_base_type = /datum/xeno_caste/chimera
- name = "Chimera"
- desc = "A slim, deadly alien creature. It has two additional arms with mantis blades."
- icon = 'icons/Xeno/castes/chimera/basic.dmi'
- icon_state = "Chimera Walking"
- effects_icon = 'icons/Xeno/castes/chimera/effects.dmi'
- health = 400
- maxHealth = 400
- plasma_stored = 300
- pixel_x = -16
- old_x = -16
- drag_delay = 3
- tier = XENO_TIER_THREE
- upgrade = XENO_UPGRADE_NORMAL
- mob_size = MOB_SIZE_BIG
- pass_flags = PASS_LOW_STRUCTURE
- wall_smash = FALSE
- bubble_icon = "alienroyal"
-
-/mob/living/carbon/xenomorph/chimera/Initialize(mapload)
- . = ..()
- ADD_TRAIT(src, TRAIT_SILENT_FOOTSTEPS, XENO_TRAIT)
-
-/mob/living/carbon/xenomorph/chimera/get_liquid_slowdown()
- return WARLOCK_WATER_SLOWDOWN
-
-/mob/living/carbon/xenomorph/chimera/phantom
- caste_base_type = /datum/xeno_caste/chimera/phantom
- tier = XENO_TIER_MINION
- upgrade = XENO_UPGRADE_BASETYPE
- mob_size = MOB_SIZE_XENO
-
-/mob/living/carbon/xenomorph/chimera/phantom/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/ai_controller, /datum/ai_behavior/xeno)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm
index 843d5fe9f40..e1bb75a2393 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/hunter/abilities_hunter.dm
@@ -664,5 +664,106 @@
plasma_gain = 20
decay_time = 15 SECONDS
+/particles/xeno_slash/vampirism/crippling_strike
+ icon_state = "x"
+ color = "#440088"
+ count = 0
+ velocity = list(50, 50)
+ drift = generator(GEN_CIRCLE, 15, 15, NORMAL_RAND)
+ gravity = list(0, 0)
+
+/datum/action/ability/xeno_action/crippling_strike
+ name = "Toggle crippling strike"
+ action_icon_state = "neuroclaws_off"
+ desc = "Toggle on to enable crippling attacks"
+ ability_cost = 0
+ cooldown_duration = 1 SECONDS
+ keybind_flags = ABILITY_KEYBIND_USE_ABILITY | ABILITY_IGNORE_SELECTED_ABILITY
+ keybinding_signals = list(
+ KEYBINDING_NORMAL = COMSIG_XENOABILITY_CHIMERA_CRIPPLING_STRIKE,
+ )
+ var/mob/living/old_target
+ var/additional_damage = 2
+ var/slowdown_amount = 1
+ var/stagger_duration = 0.2 SECONDS
+ var/heal_amount = 25
+ var/plasma_gain = 30
+ var/stacks = 0
+ var/stacks_max = 5
+ var/decay_time = 7 SECONDS
+ var/obj/effect/abstract/particle_holder/particle_holder
+
+/datum/action/ability/xeno_action/crippling_strike/update_button_icon()
+ var/mob/living/carbon/xenomorph/xeno = owner
+ action_icon_state = xeno.vampirism ? "neuroclaws_on" : "neuroclaws_off"
+ return ..()
+
+/datum/action/ability/xeno_action/crippling_strike/give_action(mob/living/L)
+ . = ..()
+ var/mob/living/carbon/xenomorph/xeno = L
+ xeno.vampirism = TRUE
+ particle_holder = new(xeno, /particles/xeno_slash/vampirism/crippling_strike)
+ particle_holder.pixel_y = 18
+ particle_holder.pixel_x = 18
+ START_PROCESSING(SSprocessing, src)
+ RegisterSignal(L, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(on_slash))
+
+/datum/action/ability/xeno_action/crippling_strike/remove_action(mob/living/L)
+ . = ..()
+ var/mob/living/carbon/xenomorph/xeno = L
+ xeno.vampirism = FALSE
+ stacks = 0
+ QDEL_NULL(particle_holder)
+ STOP_PROCESSING(SSprocessing, src)
+ UnregisterSignal(L, COMSIG_XENOMORPH_POSTATTACK_LIVING)
+
+/datum/action/ability/xeno_action/crippling_strike/action_activate()
+ . = ..()
+ var/mob/living/carbon/xenomorph/xeno = owner
+ xeno.vampirism = !xeno.vampirism
+ if(xeno.vampirism)
+ particle_holder = new(xeno, /particles/xeno_slash/vampirism/crippling_strike)
+ particle_holder.pixel_y = 18
+ particle_holder.pixel_x = 18
+ START_PROCESSING(SSprocessing, src)
+ RegisterSignal(xeno, COMSIG_XENOMORPH_POSTATTACK_LIVING, PROC_REF(on_slash))
+ else
+ stacks = 0
+ QDEL_NULL(particle_holder)
+ STOP_PROCESSING(SSprocessing, src)
+ UnregisterSignal(xeno, COMSIG_XENOMORPH_POSTATTACK_LIVING)
+ to_chat(xeno, span_xenonotice("You will now[xeno.vampirism ? "" : " no longer"] debuff targets"))
+
+/datum/action/ability/xeno_action/crippling_strike/process()
+ particle_holder.particles.count = stacks * stacks
+ if(decay_time > 0)
+ decay_time -= 1 SECONDS
+ return
+ if(stacks > 0)
+ stacks--
+ if(stacks == 0)
+ particle_holder.particles.count = 0
+
+/datum/action/ability/xeno_action/crippling_strike/proc/on_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod)
+ SIGNAL_HANDLER
+ if(target.stat == DEAD)
+ return
+ if(!ishuman(target))
+ return
+ if(old_target != target)
+ old_target = target
+ stacks = max(0, stacks - 2)
+ var/mob/living/carbon/xenomorph/X = owner
+ target.apply_damage(additional_damage * stacks, BRUTE, X.zone_selected, blocked = FALSE)
+ target.add_slowdown(slowdown_amount * stacks)
+ target.adjust_stagger(stagger_duration * stacks)
+ if(stacks == stacks_max)
+ X.heal_overall_damage(heal_amount, heal_amount, updating_health = TRUE)
+ X.gain_plasma(plasma_gain)
+ if(stacks < stacks_max)
+ stacks++
+ decay_time = initial(decay_time)
+ update_button_icon()
+
#undef ILUSSION_CHANCE
#undef ILLUSION_LIFETIME
diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
index eb0b5f97959..e69de29bb2d 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
@@ -1,447 +0,0 @@
-/datum/xeno_caste
- var/caste_name = ""
- var/display_name = ""
- var/upgrade_name = "Young"
- var/caste_desc = null
- var/job_type = /datum/job/xenomorph
-
- var/caste_type_path = null
-
- //for strains basetype
- var/base_caste_type_path = null
-
- ///primordial message that is shown when a caste becomes primordial
- var/primordial_message = ""
-
- var/tier = XENO_TIER_ZERO
- var/upgrade = XENO_UPGRADE_NORMAL
- ///used to match appropriate wound overlays
- var/wound_type = "alien"
- var/language = "Xenomorph"
-
- var/gib_anim = "gibbed-a-corpse"
- var/gib_flick = "gibbed-a"
-
- // *** Melee Attacks *** //
- ///The amount of damage a xenomorph caste will do with a 'slash' attack.
- var/melee_damage = 10
- ///number of ticks between attacks for a caste.
- var/attack_delay = CLICK_CD_MELEE
-
- // *** Tackle *** //
- ///The minimum amount of random paralyze applied to a human upon being 'pulled' multiplied by 20 ticks
- var/tacklemin = 1
- ///The maximum amount of random paralyze applied to a human upon being 'pulled' multiplied by 20 ticks
- var/tacklemax = 1
-
- // *** Speed *** //
- var/speed = 1
- var/weeds_speed_mod = -0.4
-
- // *** Regeneration Delay ***//
- ///Time after you take damage before a xenomorph can regen.
- var/regen_delay = 10 SECONDS
- ///Regeneration power increases by this amount evey decisecond.
- var/regen_ramp_amount = 0.005
-
- // *** Plasma *** //
- ///How much plasma a caste can have at max.
- var/plasma_max = 10
- ///How much plasma a caste gains every life tick.
- var/plasma_gain = 5
- ///up to how % much plasma regens in decimals, generally used if you have a special way of regeninng plasma.
- var/plasma_regen_limit = 1
-
- // *** Health *** //
- ///Maximum health a caste has.
- var/max_health = 100
- ///What negative health amount they die at.
- var/crit_health = -100
-
- // *** Evolution *** //
- ///Threshold amount of evo points to next evolution
- var/evolution_threshold = 0
-
- ///see_in_dark value while consicious
- var/conscious_see_in_dark = 8
- ///see_in_dark value while unconscious
- var/unconscious_see_in_dark = 5
-
- // *** Flags *** //
- ///Bitwise flags denoting things a caste is or is not. Uses defines.
- var/caste_flags = CASTE_EVOLUTION_ALLOWED
- ///Bitwise flags denoting things a caste can and cannot do. Uses defines.
- var/can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_LEADER
- ///list of traits granted to the owner by becoming this caste
- var/list/caste_traits = list(TRAIT_CAN_VENTCRAWL)
- // How long the hive must wait before a new one of this caste can evolve
- var/death_evolution_delay = 0
- ///whether or not a caste can hold eggs, and either 1 or 2 eggs at a time.
- var/can_hold_eggs = CANNOT_HOLD_EGGS
-
- // *** Defense *** //
- var/list/soft_armor
- var/list/hard_armor
-
- // *** Sunder *** //
- ///How much sunder is recovered per tick
- var/sunder_recover = 0.5
- ///What is the max amount of sunder that can be applied to a xeno (100 = 100%)
- var/sunder_max = 100
- ///Multiplier on the weapons sunder, e.g 10 sunder on a projectile is reduced to 5 with a 0.5 multiplier.
- var/sunder_multiplier = 1
-
- // *** Ranged Attack *** //
- ///Delay timer for spitting
- var/spit_delay = 6 SECONDS
- ///list of datum projectile types the xeno can use.
- var/list/spit_types
-
- // *** Acid spray *** //
- ///Number of tiles of the acid spray cone extends outward to. Not recommended to go beyond 4.
- var/acid_spray_range = 0
- ///How long the acid spray stays on floor before it deletes itself, should be higher than 0 to avoid runtimes with timers.
- var/acid_spray_duration = 1
- ///The damage acid spray causes on hit.
- var/acid_spray_damage_on_hit = 0
- ///The damage acid spray causes over time.
- var/acid_spray_damage = 0
- ///The damage acid spray causes to structure.
- var/acid_spray_structure_damage = 0
-
- // *** Secrete resin *** //
- ///The maximum number of tiles to where a xeno can build.
- var/resin_max_range = 0
-
- // *** Pheromones *** //
- ///The strength of our aura. Zero means we can't emit any.
- var/aura_strength = 0
-
- // *** Defiler Abilities *** //
- var/list/available_reagents_define = list() //reagents available for select reagent
-
- // *** Boiler Abilities *** //
- ///maximum number of 'globs' of boiler ammunition that can be stored by the boiler caste.
- var/max_ammo = 0
- ///Multiplier to the effectiveness of the boiler glob. 1 by default.
- var/bomb_strength = 0
- ///Delay between firing the bombard ability for boilers
- var/bomb_delay = 0
-
- // *** Carrier Abilities *** //
- ///maximum amount of huggers a carrier can carry at one time.
- var/huggers_max = 0
- ///delay between the throw hugger ability activation for carriers
- var/hugger_delay = 0
-
- // *** Defender Abilities *** //
- ///modifying amount to the crest defense ability for defenders. Positive integers only.
- var/crest_defense_armor = 0
- ///modifying amount to the fortify ability for defenders. Positive integers only.
- var/fortify_armor = 0
- ///amount of slowdown to apply when the crest defense is active. trading defense for speed. Positive numbers makes it slower.
- var/crest_defense_slowdown = 0
- // *** Crusher Abilities *** //
- ///The damage the stomp causes, counts armor
- var/stomp_damage = 0
- ///How many tiles the Crest toss ability throws the victim.
- var/crest_toss_distance = 0
-
- // *** Gorger Abilities *** //
- ///Maximum amount of overheal that can be gained
- var/overheal_max = 150
- ///Amount of plasma gained from draining someone
- var/drain_plasma_gain = 0
- ///Amount of plasma gained from clashing after activating carnage
- var/carnage_plasma_gain = 0
- ///Amount of plasma drained each tick while feast buff is actuve
- var/feast_plasma_drain = 0
-
- // *** Queen Abilities *** //
- ///Amount of leaders allowed
- var/queen_leader_limit = 0
-
- // *** Hunter Abilities ***
- ///Damage breakpoint to knock out of stealth
- var/stealth_break_threshold = 0
-
- // *** Warlock Abilities ***
- ///The integrity of psychic shields made by the xeno
- var/shield_strength = 350
- ///The strength of psychic crush's effects
- var/crush_strength = 35
- ///The strength of psychic blast's AOE effects
- var/blast_strength = 25
-
- // *** Sentinel Abilities ***
- /// The additional amount of stacks that the Sentinel will apply on eligible abilities.
- var/additional_stacks = 0
-
- // *** Behemoth Abilities ***
- /// The maximum amount of Wrath that we can have stored at a time.
- var/wrath_max = 0
-
- // *** Chimera Abilities ***
- ///Cooldown multiplier of Blink when used on non-friendlies
- var/blink_drag_nonfriendly_living_multiplier = 0
- ///Cooldown multiplier of Blink when used on friendlies
- var/blink_drag_friendly_multiplier = 0
- ///Base range of Blink
- var/blink_range = 0
-
- // *** Widow Abilities *** //
- ///maximum amount of spiderlings a widow can carry at one time.
- var/max_spiderlings = 0
-
- ///the 'abilities' available to a caste.
- var/list/actions
-
- ///The iconstate for the xeno on the minimap
- var/minimap_icon = "xenominion"
- ///The iconstate for leadered xenos on the minimap, added as overlay
- var/minimap_leadered_overlay = "xenoleader"
- ///The iconstate of the plasma bar, format used is "[plasma_icon_state][amount]"
- var/plasma_icon_state = "plasma"
-
- ///How quickly the caste enters vents
- var/vent_enter_speed = XENO_DEFAULT_VENT_ENTER_TIME
- ///How quickly the caste enters vents
- var/vent_exit_speed = XENO_DEFAULT_VENT_EXIT_TIME
- ///Whether the caste enters and crawls through vents silently
- var/silent_vent_crawl = FALSE
- // The amount of xenos that must be alive in the hive for this caste to be able to evolve
- var/evolve_min_xenos = 0
- // How many of this caste may be alive at once
- var/maximum_active_caste = INFINITY
-
-///Add needed component to the xeno
-/datum/xeno_caste/proc/on_caste_applied(mob/xenomorph)
- for(var/trait in caste_traits)
- ADD_TRAIT(xenomorph, trait, XENO_TRAIT)
- xenomorph.AddComponent(/datum/component/bump_attack)
- if(can_flags & CASTE_CAN_RIDE_CRUSHER)
- xenomorph.RegisterSignal(xenomorph, COMSIG_GRAB_SELF_ATTACK, TYPE_PROC_REF(/mob/living/carbon/xenomorph, grabbed_self_attack))
-
-/datum/xeno_caste/proc/on_caste_removed(mob/xenomorph)
- var/datum/component/bump_attack = xenomorph.GetComponent(/datum/component/bump_attack)
- bump_attack?.RemoveComponent()
- if(can_flags & CASTE_CAN_RIDE_CRUSHER)
- xenomorph.UnregisterSignal(xenomorph, COMSIG_GRAB_SELF_ATTACK)
- for(var/trait in caste_traits)
- REMOVE_TRAIT(xenomorph, trait, XENO_TRAIT)
-
-///returns the basetype caste to get what the base caste is (e.g base rav not primo or strain rav)
-/datum/xeno_caste/proc/get_base_caste_type()
- var/datum/xeno_caste/current_type = type
- while(initial(current_type.upgrade) != XENO_UPGRADE_BASETYPE)
- current_type = initial(current_type.parent_type)
- return current_type
-
-/// basetype = list(strain1, strain2)
-GLOBAL_LIST_INIT(strain_list, init_glob_strain_list())
-/proc/init_glob_strain_list()
- var/list/strain_list = list()
- for(var/datum/xeno_caste/root_caste AS in GLOB.xeno_caste_datums)
- if(root_caste.parent_type != /datum/xeno_caste)
- continue
- strain_list[root_caste] = list()
- for(var/datum/xeno_caste/typepath AS in subtypesof(root_caste))
- if(typepath::upgrade != XENO_UPGRADE_BASETYPE)
- continue
- if(typepath::caste_flags & CASTE_EXCLUDE_STRAINS)
- continue
- strain_list[root_caste] += typepath
- return strain_list
-
-///returns a list of strains(xeno castedatum paths) that this caste can currently evolve to
-/datum/xeno_caste/proc/get_strain_options()
- var/datum/xeno_caste/root_type = type
- while(initial(root_type.parent_type) != /datum/xeno_caste)
- root_type = root_type::parent_type
- var/list/options = GLOB.strain_list[root_type]
- return options?.Copy()
-
-/mob/living/carbon/xenomorph
- name = "Drone"
- desc = "What the hell is THAT?"
- icon = 'icons/Xeno/castes/larva.dmi'
- icon_state = "Drone Walking"
- speak_emote = list("hisses")
- melee_damage = 5 //Arbitrary damage value
- attacktext = "claws"
- attack_sound = null
- friendly = "nuzzles"
- wall_smash = FALSE
- health = 5
- maxHealth = 5
- rotate_on_lying = FALSE
- move_force = MOVE_FORCE_VERY_STRONG
- move_resist = MOVE_FORCE_VERY_STRONG
- mob_size = MOB_SIZE_XENO
- hand = 1 //Make right hand active by default. 0 is left hand, mob defines it as null normally
- see_in_dark = 8
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- sight = SEE_SELF|SEE_OBJS|SEE_TURFS|SEE_MOBS
- appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE
- see_infrared = TRUE
- hud_type = /datum/hud/alien
- hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, XENO_RANK_HUD, QUEEN_OVERWATCH_HUD, ARMOR_SUNDER_HUD, XENO_DEBUFF_HUD, XENO_FIRE_HUD, XENO_BANISHED_HUD, XENO_BLESSING_HUD, XENO_EVASION_HUD, XENO_PRIMO_HUD, HUNTER_HUD)
- buckle_flags = NONE
- faction = FACTION_XENO
- initial_language_holder = /datum/language_holder/xeno
- gib_chance = 5
- light_system = MOVABLE_LIGHT
-
- ///Hive name define
- var/hivenumber = XENO_HIVE_NORMAL
- ///Hive datum we belong to
- var/datum/hive_status/hive
- ///Xeno mob specific flags
- var/xeno_flags = NONE //TODO: There are loads of vars below that should be flags
- ///State tracking of hive status toggles
- var/status_toggle_flags = HIVE_STATUS_DEFAULTS
-
- ///Var for keeping the base icon of current skin, used for toggling to normal appearance from rouny skin, changeable with skin toggling
- var/base_icon
- ///Var for keeping the effects icon of current skin, changeable with skin toggling
- var/effects_icon = 'icons/Xeno/castes/larva.dmi'
- ///Var for keeping the rouny icon of current skin, changeable with skin toggling
- var/rouny_icon
- /// List of alternative skins to which xeno is able to change, you put only skin datums in here
- var/list/skins = list()
-
- var/atom/movable/vis_obj/xeno_wounds/wound_overlay
- var/atom/movable/vis_obj/xeno_wounds/fire_overlay/fire_overlay
- var/datum/xeno_caste/xeno_caste
- /// /datum/xeno_caste that we will be on init
- var/caste_base_type
- var/language = "Xenomorph"
- ///Plasma currently stored
- var/plasma_stored = 0
-
- ///A mob the xeno ate
- var/mob/living/carbon/eaten_mob
- ///How much evolution they have stored
- var/evolution_stored = 0
- ///How much upgrade points they have stored.
- //var/upgrade_stored = 0 // RUTGMC DELETION
- ///This will track their upgrade level.
- var/upgrade = XENO_UPGRADE_INVALID
- ///sunder affects armour values and does a % removal before dmg is applied. 50 sunder == 50% effective armour values
- var/sunder = 0
- ///The ammo datum for our spit projectiles. We're born with this, it changes sometimes.
- var/datum/ammo/xeno/ammo = null
- ///The aura we're currently emitted. Destroyed whenever we change or stop pheromones.
- var/datum/aura_bearer/current_aura
- /// If we're chosen as leader, this is the leader aura we emit.
- var/datum/aura_bearer/leader_current_aura
- ///Passive plasma cost per tick for enabled personal (not leadership) pheromones.
- var/pheromone_cost = 5
- ///Strength of aura we are affected by. NOT THE ONE WE ARE EMITTING
- var/frenzy_aura = 0
- ///Strength of aura we are affected by. NOT THE ONE WE ARE EMITTING
- var/warding_aura = 0
- ///Strength of aura we are affected by. NOT THE ONE WE ARE EMITTING
- var/recovery_aura = 0
- ///Resets to -xeno_caste.regen_delay when you take damage.
- ///Negative values act as a delay while values greater than 0 act as a multiplier.
- ///Will increase by 10 every decisecond if under 0.
- ///Increases by xeno_caste.regen_ramp_amount every decisecond. If you want to balance this, look at the xeno_caste defines mentioned above.
- var/regen_power = 0
- ///Stored biomass
- var/biomass = 0
- ///Stored upgrade effects, so we reapply them on evolve
- var/list/upgrades_holder = list()
-
- var/is_zoomed = FALSE
- var/zoom_turf = null
- var/can_walk_zoomed = FALSE
-
- ///Type of weeds the xeno is standing on, null when not on weeds
- var/obj/alien/weeds/loc_weeds_type
- ///Bonus or pen to time in between attacks. + makes slashes slower.
- var/attack_delay = 0
- ///This will track their "tier" to restrict/limit evolutions
- var/tier = XENO_TIER_ONE
- ///which resin structure to build when we secrete resin
- var/selected_resin = /turf/closed/wall/resin/regenerating
- ///which reagent to slash with using reagent slash
- var/selected_reagent = /datum/reagent/toxin/xeno_hemodile
- ///which plant to place when we use sow
- var/obj/structure/xeno/plant/selected_plant = /obj/structure/xeno/plant/heal_fruit
- ///Naming variables
- var/nicknumber = 0 //The number/name after the xeno type. Saved right here so it transfers between castes.
-
- ///This list of inherent verbs lets us take any proc basically anywhere and add them.
- ///If they're not a xeno subtype it might crash or do weird things, like using human verb procs
- ///It should add them properly on New() and should reset/readd them on evolves
- var/list/inherent_verbs = list()
-
- ///The xenomorph that this source is currently overwatching
- var/mob/living/carbon/xenomorph/observed_xeno
-
- ///Multiplicative melee damage modifier; referenced by attack_alien.dm, most notably attack_alien_harm
- var/xeno_melee_damage_modifier = 1
- ///whether the xeno mobhud is activated or not.
- var/xeno_mobhud = FALSE
- ///whether the xeno has been selected by the queen as a leader.
- var/queen_chosen_lead = FALSE
-
- //Charge vars
- ///Will the mob charge when moving ? You need the charge verb to change this
- var/is_charging = CHARGE_OFF
-
- //Pounce vars
- var/usedPounce = 0
-
- // Gorger vars
- var/overheal = 0
-
- // Warrior vars
- ///0 - upright, 1 - all fours
- var/agility = 0
-
- // Defender vars
- var/fortify = 0
- var/crest_defense = 0
-
- // *** Ravager vars *** //
- /// when true the rav will not go into crit or take crit damage.
- var/endure = FALSE
- ///when true the rav leeches healing off of hitting marines
- var/vampirism
-
- // *** Carrier vars *** //
- var/selected_hugger_type = /obj/item/clothing/mask/facehugger
-
- // *** Behemoth vars *** //
- /// Whether we are currently charging or not.
- var/behemoth_charging = FALSE
- /// The amount of Wrath currently stored.
- var/wrath_stored = 0
-
- // *** Bull vars *** //
- var/bull_charging = FALSE
-
- //Notification spam controls
- var/recent_notice = 0
- var/notice_delay = 20 //2 second between notices
-
- var/fire_luminosity = 0 //Luminosity of the current fire while burning
-
- ///The xenos/silo/nuke currently tracked by the xeno_tracker arrow
- var/atom/tracked
-
- /// The type of footstep this xeno has.
- var/footstep_type = FOOTSTEP_XENO_MEDIUM
-
- var/interference = 0 // Stagger for predator weapons. Prevents hivemind usage, queen overwatching, etc.
- var/talk_sound = "alien_talk" // sound when talking
-
- COOLDOWN_DECLARE(xeno_health_alert_cooldown)
-
- ///The resting cooldown
- COOLDOWN_DECLARE(xeno_resting_cooldown)
- ///The unresting cooldown
- COOLDOWN_DECLARE(xeno_unresting_cooldown)
-
diff --git a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm
index 5c99bc33589..4a52db295ba 100644
--- a/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xenoupgrade.dm
@@ -369,9 +369,3 @@
//----PANTHER END----//
//================//
-//----CHIMERA START----//
-
-/mob/living/carbon/xenomorph/chimera/primordial
- upgrade = XENO_UPGRADE_PRIMO
-
-//----CHIMERA END----//
diff --git a/icons/Xeno/castes/chimera/basic.dmi b/icons/Xeno/castes/chimera/basic.dmi
deleted file mode 100644
index 99f9052d400..00000000000
Binary files a/icons/Xeno/castes/chimera/basic.dmi and /dev/null differ
diff --git a/icons/Xeno/castes/chimera/effects.dmi b/icons/Xeno/castes/chimera/effects.dmi
deleted file mode 100644
index 3069d2cc83c..00000000000
Binary files a/icons/Xeno/castes/chimera/effects.dmi and /dev/null differ
diff --git a/tgmc.dme b/tgmc.dme
index 3419d877925..af8a46b0cda 100644
--- a/tgmc.dme
+++ b/tgmc.dme
@@ -1706,9 +1706,6 @@
#include "code\modules\mob\living\carbon\xenomorph\castes\carrier\abilities_carrier.dm"
#include "code\modules\mob\living\carbon\xenomorph\castes\carrier\carrier.dm"
#include "code\modules\mob\living\carbon\xenomorph\castes\carrier\castedatum_carrier.dm"
-#include "code\modules\mob\living\carbon\xenomorph\castes\chimera\abilities_chimera.dm"
-#include "code\modules\mob\living\carbon\xenomorph\castes\chimera\castedatum_chimera.dm"
-#include "code\modules\mob\living\carbon\xenomorph\castes\chimera\chimera.dm"
#include "code\modules\mob\living\carbon\xenomorph\castes\crusher\abilities_crusher.dm"
#include "code\modules\mob\living\carbon\xenomorph\castes\crusher\castedatum_crusher.dm"
#include "code\modules\mob\living\carbon\xenomorph\castes\crusher\crusher.dm"