mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-09 16:05:07 +00:00
## About The Pull Request Adds kinetic prosthetics! These prosthetics are simple, yet elegant affairs. Offers a non-robotic alternative to surplus prosthetic limbs that are nicer looking than peg limbs. Kinetics: - Are immune to EMPs - Attach/detach easily - Cause no wounds - Don't hit hard - Don't allow you to use guns (or anything locked by big hands) - Have no feeling - Look nicer than peg limbs. Available at roundstart (via Augments+) or via cargo crate. ## Why It's Good For The Game Kinetics provide a simpler alternative to the surplus prosthetic limbs, that aren't robotic, and are more advanced than peg limbs. Offers a middle ground between pegs and surplus prosthetics. They're also available at roundstart and via cargo crate order, unlike peg limbs which need to be crafted. More variety is always a nice thing! ## Proof Of Testing <details> <summary>Screenshots/Videos</summary> <img width="71" height="72" alt="3f796af75db3578c47279e8d40a24e7b" src="https://github.com/user-attachments/assets/0e1d30bb-0d9e-4419-9d99-81738d47068d" /> <img width="68" height="67" alt="a15f7441914d6a2032160bd9319bba07" src="https://github.com/user-attachments/assets/647cb95e-6994-4f57-9ecb-eceadd807b8b" /> <img width="68" height="70" alt="506d69ae2eb0e5057291a1494c43a4d7" src="https://github.com/user-attachments/assets/3ce7da3d-7a08-487e-b9cd-ea3d3ca8d408" /> <img width="66" height="66" alt="85ad4d9c4d550d1e98050c1a1474630d" src="https://github.com/user-attachments/assets/3df9f39e-8284-44fe-abc4-cf9f25a33c07" /> <br> <img width="397" height="372" alt="f29384d507fb0dd21faff1769f9db6f3" src="https://github.com/user-attachments/assets/cb6cbee8-3dc8-4af8-b73d-53eae80bf37e" /> <img width="632" height="81" alt="f0b7048ea1c926fbe94eba55923ac1a9" src="https://github.com/user-attachments/assets/e80f8930-0678-41d7-b859-5e5c5927c480" /> </details> ## Changelog 🆑 add: Added new prosthetics: simple kinetic prosthetics! They offer a middle ground prosthetic between peg limbs and surplus robotics. add: New options to Augments+ to have roundstart kinetic prosthetics. add: Kinetic prosthetic limb cargo pack: includes two full sets of kinetics. Costs 1000cr, needs medical access. /🆑 --------- Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
1130 lines
47 KiB
Plaintext
1130 lines
47 KiB
Plaintext
/*ALL MOB-RELATED DEFINES THAT DON'T BELONG IN ANOTHER FILE GO HERE*/
|
|
|
|
//Misc mob defines
|
|
|
|
//Ready states at roundstart for mob/dead/new_player
|
|
#define PLAYER_NOT_READY 0
|
|
#define PLAYER_READY_TO_PLAY 1
|
|
|
|
//movement intent defines for the move_intent var
|
|
#define MOVE_INTENT_WALK "walk"
|
|
#define MOVE_INTENT_RUN "run"
|
|
|
|
/// Amount of oxyloss that KOs a human
|
|
#define OXYLOSS_PASSOUT_THRESHOLD 50
|
|
//Blood levels
|
|
#define BLOOD_VOLUME_MAX_LETHAL 2150
|
|
#define BLOOD_VOLUME_EXCESS 2100
|
|
#define BLOOD_VOLUME_MAXIMUM 2000
|
|
#define BLOOD_VOLUME_SLIME_SPLIT 1120
|
|
#define BLOOD_VOLUME_NORMAL 560
|
|
#define BLOOD_VOLUME_SAFE (BLOOD_VOLUME_NORMAL * (1 - 0.15)) // Latter number is percentage of blood lost, for readability!
|
|
#define BLOOD_VOLUME_OKAY (BLOOD_VOLUME_NORMAL * (1 - 0.30))
|
|
#define BLOOD_VOLUME_RISKY (BLOOD_VOLUME_NORMAL * (1 - 0.45))
|
|
#define BLOOD_VOLUME_BAD (BLOOD_VOLUME_NORMAL * (1 - 0.60))
|
|
#define BLOOD_VOLUME_SURVIVE (BLOOD_VOLUME_NORMAL * (1 - 0.80))
|
|
|
|
/// How efficiently humans regenerate blood.
|
|
#define BLOOD_REGEN_FACTOR 0.25
|
|
/// Determines the rate at which humans lose blood when they have the blood deficiency quirk. The default is BLOOD_REGEN_FACTOR + BLOOD_DEFICIENCY_MODIFIER.
|
|
#define BLOOD_DEFICIENCY_MODIFIER 0.025
|
|
|
|
/// Temperature at which blood loss and regen stops. [/mob/living/carbon/human/proc/handle_blood]
|
|
#define BLOOD_STOP_TEMP 225
|
|
|
|
// Bloodtype defines
|
|
#define BLOOD_TYPE_A_MINUS "A-"
|
|
#define BLOOD_TYPE_A_PLUS "A+"
|
|
#define BLOOD_TYPE_B_MINUS "B-"
|
|
#define BLOOD_TYPE_B_PLUS "B+"
|
|
#define BLOOD_TYPE_AB_MINUS "AB-"
|
|
#define BLOOD_TYPE_AB_PLUS "AB+"
|
|
#define BLOOD_TYPE_O_MINUS "O-"
|
|
#define BLOOD_TYPE_O_PLUS "O+"
|
|
#define BLOOD_TYPE_UNIVERSAL "U"
|
|
#define BLOOD_TYPE_LIZARD "L"
|
|
#define BLOOD_TYPE_VAMPIRE "V"
|
|
#define BLOOD_TYPE_ANIMAL "Y-"
|
|
#define BLOOD_TYPE_ETHEREAL "LE"
|
|
#define BLOOD_TYPE_TOX "TOX"
|
|
#define BLOOD_TYPE_OIL "Oil"
|
|
#define BLOOD_TYPE_MEAT "MT-"
|
|
#define BLOOD_TYPE_CLOWN "C"
|
|
#define BLOOD_TYPE_XENO "X*"
|
|
#define BLOOD_TYPE_H2O "H2O"
|
|
#define BLOOD_TYPE_SNAIL "S"
|
|
|
|
// Blood exposure behavior flag defines
|
|
/// Add our DNA to turfs/mobs/items, does not correlate with adding decals/overlays
|
|
/// mob/turf/item flags will add DNA when triggered even if this flag is false
|
|
#define BLOOD_ADD_DNA (1<<0)
|
|
/// Cover the entire mob in *visible* blood
|
|
#define BLOOD_COVER_MOBS (1<<1)
|
|
/// Create blood splashes and trails on floors, does not affect gibs creation
|
|
#define BLOOD_COVER_TURFS (1<<2)
|
|
/// Cover items in ourselves
|
|
#define BLOOD_COVER_ITEMS (1<<3)
|
|
/// Usually you want all COVER flags together or none at all
|
|
#define BLOOD_COVER_ALL (BLOOD_COVER_MOBS | BLOOD_COVER_TURFS | BLOOD_COVER_ITEMS)
|
|
/// Transfer blood immunities and viruses to exposed mobs
|
|
#define BLOOD_TRANSFER_VIRAL_DATA (1<<4)
|
|
|
|
// Bleed check results
|
|
/// We cannot bleed (here, or in general) at all
|
|
#define BLEED_NONE 0
|
|
/// We cannot make a splatter, but we can add our DNA
|
|
#define BLEED_ADD_DNA 1
|
|
/// We can bleed just fine
|
|
#define BLEED_SPLATTER 2
|
|
|
|
//Sizes of mobs, used by mob/living/var/mob_size
|
|
#define MOB_SIZE_TINY 0
|
|
#define MOB_SIZE_SMALL 1
|
|
#define MOB_SIZE_HUMAN 2
|
|
#define MOB_SIZE_LARGE 3
|
|
#define MOB_SIZE_HUGE 4 // Use this for things you don't want bluespace body-bagged
|
|
|
|
//Ventcrawling defines
|
|
#define VENTCRAWLER_NONE 0
|
|
#define VENTCRAWLER_NUDE 1
|
|
#define VENTCRAWLER_ALWAYS 2
|
|
|
|
// Flags for the mob_flags var on /mob
|
|
/// May override the names used in screentips of OTHER OBJECTS hovered over.
|
|
#define MOB_HAS_SCREENTIPS_NAME_OVERRIDE (1 << 0)
|
|
|
|
//Mob bio-types flags
|
|
///The mob is organic, can heal from medical sutures.
|
|
#define MOB_ORGANIC (1 << 0)
|
|
///The mob is of a rocky make, most likely a golem. Iron within, iron without!
|
|
#define MOB_MINERAL (1 << 1)
|
|
///The mob is a synthetic lifeform, like station borgs.
|
|
#define MOB_ROBOTIC (1 << 2)
|
|
///The mob is an shambling undead corpse. Or a halloween species. Pick your poison.
|
|
#define MOB_UNDEAD (1 << 3)
|
|
///The mob is a human-sized human-like human-creature.
|
|
#define MOB_HUMANOID (1 << 4)
|
|
///The mob is a bug/insect/arachnid/some other kind of scuttly thing.
|
|
#define MOB_BUG (1 << 5)
|
|
///The mob is a wild animal. Domestication may apply.
|
|
#define MOB_BEAST (1 << 6)
|
|
///The mob is some kind of a creature that should be exempt from certain **fun** interactions for balance reasons, i.e. megafauna or a headslug.
|
|
#define MOB_SPECIAL (1 << 7)
|
|
///The mob is some kind of a scaly reptile creature
|
|
#define MOB_REPTILE (1 << 8)
|
|
///The mob is a spooky phantasm or an evil ghast of such nature.
|
|
#define MOB_SPIRIT (1 << 9)
|
|
///The mob is a plant-based species, benefitting from light but suffering from darkness and plantkillers.
|
|
#define MOB_PLANT (1 << 10)
|
|
///The mob is a goopy creature, probably coming from xenobiology.
|
|
#define MOB_SLIME (1 << 11)
|
|
///The mob is fish or water-related.
|
|
#define MOB_AQUATIC (1 << 12)
|
|
///The mob is a mining-related mob. It's the plasma, you see. Gets in ya bones.
|
|
#define MOB_MINING (1 << 13)
|
|
///The mob is a crustacean. Like crabs. Or lobsters.
|
|
#define MOB_CRUSTACEAN (1 << 14)
|
|
// BUBBER EDIT BEGIN
|
|
///The mob is some kind of vampire, species or antag
|
|
#define MOB_VAMPIRIC (1 << 16)
|
|
// BUBBER EDIT END
|
|
|
|
|
|
//Lung respiration type flags
|
|
#define RESPIRATION_OXYGEN (1 << 0)
|
|
#define RESPIRATION_N2 (1 << 1)
|
|
#define RESPIRATION_PLASMA (1 << 2)
|
|
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human/bodyparts_greyscale.dmi'
|
|
|
|
//Bodytype defines for surgery, and other misc things.
|
|
///The limb is organic.
|
|
#define BODYTYPE_ORGANIC (1<<0)
|
|
///The limb is robotic.
|
|
#define BODYTYPE_ROBOTIC (1<<1)
|
|
///A placeholder bodytype for xeno larva, so their limbs cannot be attached to anything.
|
|
#define BODYTYPE_LARVA_PLACEHOLDER (1<<2)
|
|
///The limb is from a xenomorph.
|
|
#define BODYTYPE_ALIEN (1<<3)
|
|
///The limb is from a golem
|
|
#define BODYTYPE_GOLEM (1<<4)
|
|
//The limb is a peg limb
|
|
#define BODYTYPE_PEG (1<<5)
|
|
//The limb is plantly (and will regen if photosynthesis is active)
|
|
#define BODYTYPE_PLANT (1<<6)
|
|
//This limb is shadowy and will regen if shadowheal is active
|
|
#define BODYTYPE_SHADOW (1<<7)
|
|
//This limb is a ghost limb and can phase through walls.
|
|
#define BODYTYPE_GHOST (1<<8)
|
|
// SKYRAT EDIT ADDITION
|
|
|
|
/// Nanomachine bodypart
|
|
#define BODYTYPE_NANO (1<<9)
|
|
///The limb fits a modular custom shape
|
|
#define BODYSHAPE_CUSTOM (1<<10)
|
|
///The limb fits a taur body
|
|
#define BODYSHAPE_TAUR (1<<11)
|
|
///The limb causes shoes to no longer be displayed, useful for taurs.
|
|
#define BODYSHAPE_HIDE_SHOES (1<<12)
|
|
///The limb causes glasses and hats to be drawn on layers 5 and 4 respectively. Currently used for snouts with the (Top) suffix, which are drawn on layer 6 and would normally cover facewear
|
|
#define BODYSHAPE_ALT_FACEWEAR_LAYER (1<<13)
|
|
// BUBBER EDIT ADDITION: START - Adding the kinetic bodytype
|
|
///The limb is a kinetic prosthetic.
|
|
#define BODYTYPE_KINETIC (1<<14)
|
|
// BUBBER EDIT ADDITION: END
|
|
|
|
// SKYRAT EDIT END
|
|
|
|
|
|
// Bodyshape defines for how things can be worn, i.e., what "shape" the mob sprite is
|
|
///The limb fits the human mold. This is not meant to be literal, if the sprite "fits" on a human, it is "humanoid", regardless of origin.
|
|
#define BODYSHAPE_HUMANOID (1<<0)
|
|
///The limb fits the monkey mold.
|
|
#define BODYSHAPE_MONKEY (1<<1)
|
|
///The limb is digitigrade.
|
|
#define BODYSHAPE_DIGITIGRADE (1<<2)
|
|
///The limb is snouted.
|
|
#define BODYSHAPE_SNOUTED (1<<3)
|
|
|
|
#define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM | BODYTYPE_PEG)
|
|
#define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE))
|
|
|
|
// Defines for Species IDs. Used to refer to the name of a species, for things like bodypart names or species preferences.
|
|
#define SPECIES_ABDUCTOR "abductor"
|
|
#define SPECIES_ANDROID "android"
|
|
#define SPECIES_DULLAHAN "dullahan"
|
|
#define SPECIES_ETHEREAL "ethereal"
|
|
#define SPECIES_ETHEREAL_LUSTROUS "lustrous"
|
|
#define SPECIES_GHOST "ghost"
|
|
#define SPECIES_GOLEM "golem"
|
|
#define SPECIES_FELINE "felinid"
|
|
#define SPECIES_FLYPERSON "fly"
|
|
#define SPECIES_HUMAN "human"
|
|
#define SPECIES_JELLYPERSON "jelly"
|
|
#define SPECIES_SLIMEPERSON "slime"
|
|
#define SPECIES_LUMINESCENT "luminescent"
|
|
#define SPECIES_STARGAZER "stargazer"
|
|
#define SPECIES_LIZARD "lizard"
|
|
#define SPECIES_LIZARD_ASH "ashwalker"
|
|
#define SPECIES_LIZARD_SILVER "silverscale"
|
|
#define SPECIES_NIGHTMARE "nightmare"
|
|
#define SPECIES_MONKEY "monkey"
|
|
#define SPECIES_MOTH "moth"
|
|
#define SPECIES_MUSHROOM "mush"
|
|
#define SPECIES_PLASMAMAN "plasmaman"
|
|
#define SPECIES_PODPERSON "pod"
|
|
#define SPECIES_SHADOW "shadow"
|
|
#define SPECIES_SKELETON "skeleton"
|
|
#define SPECIES_SNAIL "snail"
|
|
#define SPECIES_VAMPIRE "vampire"
|
|
#define SPECIES_ZOMBIE "zombie"
|
|
#define SPECIES_ZOMBIE_INFECTIOUS "memezombie"
|
|
#define SPECIES_ZOMBIE_KROKODIL "krokodil_zombie"
|
|
#define SPECIES_VOIDWALKER "voidwalker"
|
|
|
|
// Like species IDs, but not specifically attached a species.
|
|
#define BODYPART_ID_ALIEN "alien"
|
|
#define BODYPART_ID_ROBOTIC "robotic"
|
|
#define BODYPART_ID_DIGITIGRADE "digitigrade"
|
|
#define BODYPART_ID_LARVA "larva"
|
|
#define BODYPART_ID_PSYKER "psyker"
|
|
#define BODYPART_ID_MEAT "meat"
|
|
#define BODYPART_ID_PEG "peg"
|
|
#define BODYPART_ID_KINETIC "kinetic" // BUBBER EDIT ADDITION: kinetic bodypart id
|
|
|
|
//See: datum/species/var/digitigrade_customization
|
|
///The species does not have digitigrade legs in generation.
|
|
#define DIGITIGRADE_NEVER 0
|
|
///The species can have digitigrade legs in generation
|
|
#define DIGITIGRADE_OPTIONAL 1
|
|
///The species is forced to have digitigrade legs in generation.
|
|
#define DIGITIGRADE_FORCED 2
|
|
|
|
// Preferences for leg types
|
|
/// Legs that are normal
|
|
#define NORMAL_LEGS "Normal Legs"
|
|
/// Digitgrade legs that are like bended and uhhh no shoes
|
|
#define DIGITIGRADE_LEGS "Digitigrade Legs"
|
|
|
|
// Health/damage defines
|
|
#define MAX_LIVING_HEALTH 100
|
|
|
|
//for determining which type of heartbeat sound is playing
|
|
///Heartbeat is beating fast for hard crit
|
|
#define BEAT_FAST 1
|
|
///Heartbeat is beating slow for soft crit
|
|
#define BEAT_SLOW 2
|
|
///Heartbeat is gone... He's dead Jim :(
|
|
#define BEAT_NONE 0
|
|
|
|
#define HUMAN_MAX_OXYLOSS 3
|
|
#define HUMAN_CRIT_MAX_OXYLOSS (SSMOBS_DT/3)
|
|
|
|
/// Combined brute and burn damage states on a human's head after which they become disfigured
|
|
#define HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES 3
|
|
|
|
#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 1.5 //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 460K point and you are on fire
|
|
|
|
#define COLD_DAMAGE_LEVEL_1 0.25 //Amount of damage applied when your body temperature just passes the 260.15k safety point
|
|
#define COLD_DAMAGE_LEVEL_2 0.75 //Amount of damage applied when your body temperature passes the 200K point
|
|
#define COLD_DAMAGE_LEVEL_3 1.5 //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.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point
|
|
#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point
|
|
#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point
|
|
|
|
//Brain Damage defines
|
|
#define BRAIN_DAMAGE_MILD 20
|
|
#define BRAIN_DAMAGE_ASYNC_BLINKING 60
|
|
#define BRAIN_DAMAGE_SEVERE 100
|
|
#define BRAIN_DAMAGE_DEATH 200
|
|
|
|
#define BRAIN_TRAUMA_MILD /datum/brain_trauma/mild
|
|
#define BRAIN_TRAUMA_SEVERE /datum/brain_trauma/severe
|
|
#define BRAIN_TRAUMA_SPECIAL /datum/brain_trauma/special
|
|
#define BRAIN_TRAUMA_MAGIC /datum/brain_trauma/magic
|
|
|
|
#define TRAUMA_RESILIENCE_BASIC 1 //Curable with chems
|
|
#define TRAUMA_RESILIENCE_SURGERY 2 //Curable with brain surgery
|
|
#define TRAUMA_RESILIENCE_LOBOTOMY 3 //Curable with lobotomy
|
|
#define TRAUMA_RESILIENCE_WOUND 4 //Curable by healing the head wound
|
|
#define TRAUMA_RESILIENCE_MAGIC 5 //Curable only with magic
|
|
#define TRAUMA_RESILIENCE_ABSOLUTE 6 //This is here to stay
|
|
|
|
//Limit of traumas for each resilience tier
|
|
#define TRAUMA_LIMIT_BASIC 3
|
|
#define TRAUMA_LIMIT_SURGERY 2
|
|
#define TRAUMA_LIMIT_WOUND 2
|
|
#define TRAUMA_LIMIT_LOBOTOMY 3
|
|
#define TRAUMA_LIMIT_MAGIC 3
|
|
#define TRAUMA_LIMIT_ABSOLUTE INFINITY
|
|
|
|
#define BRAIN_DAMAGE_INTEGRITY_MULTIPLIER 0.5
|
|
|
|
//Health hud screws for carbon mobs
|
|
#define SCREWYHUD_NONE 0
|
|
#define SCREWYHUD_CRIT 1
|
|
#define SCREWYHUD_DEAD 2
|
|
#define SCREWYHUD_HEALTHY 3
|
|
|
|
//Nutrition levels for humans
|
|
#define NUTRITION_LEVEL_FAT 600
|
|
#define NUTRITION_LEVEL_FULL 550
|
|
#define NUTRITION_LEVEL_WELL_FED 450
|
|
#define NUTRITION_LEVEL_FED 350
|
|
#define NUTRITION_LEVEL_HUNGRY 250
|
|
#define NUTRITION_LEVEL_VERY_HUNGRY 200
|
|
#define NUTRITION_LEVEL_STARVING 150
|
|
|
|
#define NUTRITION_LEVEL_START_MIN 250
|
|
#define NUTRITION_LEVEL_START_MAX 400
|
|
|
|
//Disgust levels for humans
|
|
#define DISGUST_LEVEL_MAXEDOUT 150
|
|
#define DISGUST_LEVEL_VERYDISGUSTED 100
|
|
#define DISGUST_LEVEL_DISGUSTED 75
|
|
#define DISGUST_LEVEL_VERYGROSS 50
|
|
#define DISGUST_LEVEL_GROSS 25
|
|
|
|
//Used as an upper limit for species that continuously gain nutriment
|
|
#define NUTRITION_LEVEL_ALMOST_FULL 535
|
|
|
|
// The standard charge all other Ethereal charge defines are scaled against.
|
|
#define STANDARD_ETHEREAL_CHARGE (1 * STANDARD_CELL_CHARGE)
|
|
// Charge levels for Ethereals, in joules.
|
|
#define ETHEREAL_CHARGE_NONE 0
|
|
#define ETHEREAL_CHARGE_LOWPOWER (2 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 0.4
|
|
#define ETHEREAL_CHARGE_NORMAL (5 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 1
|
|
#define ETHEREAL_CHARGE_ALMOSTFULL (7.5 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 1.5
|
|
#define ETHEREAL_CHARGE_FULL (11 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 2
|
|
#define ETHEREAL_CHARGE_OVERLOAD (11.5 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 2.5
|
|
#define ETHEREAL_CHARGE_DANGEROUS (12 * STANDARD_ETHEREAL_CHARGE) //BUBBER EDIT OG = 3
|
|
|
|
#define CRYSTALIZE_COOLDOWN_LENGTH (120 SECONDS)
|
|
#define CRYSTALIZE_PRE_WAIT_TIME (40 SECONDS)
|
|
#define CRYSTALIZE_DISARM_WAIT_TIME (120 SECONDS)
|
|
#define CRYSTALIZE_HEAL_TIME (60 SECONDS)
|
|
|
|
#define BRUTE_DAMAGE_REQUIRED_TO_STOP_CRYSTALIZATION 30
|
|
|
|
#define CRYSTALIZE_STAGE_ENGULFING 100 //Can't use second defines
|
|
#define CRYSTALIZE_STAGE_ENCROACHING 300 //In switches
|
|
#define CRYSTALIZE_STAGE_SMALL 600 //Because they're not static
|
|
|
|
//Slime evolution threshold. Controls how fast slimes can split/grow
|
|
#define SLIME_EVOLUTION_THRESHOLD 10
|
|
|
|
//Slime evolution cost in nutrition
|
|
#define SLIME_EVOLUTION_COST 100
|
|
|
|
//Slime extract crossing. Controls how many extracts is required to feed to a slime to core-cross.
|
|
#define SLIME_EXTRACT_CROSSING_REQUIRED 10
|
|
|
|
//How many slimes can be on the same tile before it can no longer reproduce.
|
|
#define SLIME_OVERCROWD_AMOUNT 2
|
|
|
|
//Slime commands defines
|
|
#define SLIME_FRIENDSHIP_FOLLOW 3 //Min friendship to order it to follow
|
|
#define SLIME_FRIENDSHIP_STOPEAT 5 //Min friendship to order it to stop eating someone
|
|
#define SLIME_FRIENDSHIP_STOPEAT_NOANGRY 7 //Min friendship to order it to stop eating someone without it losing friendship
|
|
#define SLIME_FRIENDSHIP_STOPCHASE 4 //Min friendship to order it to stop chasing someone (their target)
|
|
#define SLIME_FRIENDSHIP_STOPCHASE_NOANGRY 6 //Min friendship to order it to stop chasing someone (their target) without it losing friendship
|
|
#define SLIME_FRIENDSHIP_STAY 3 //Min friendship to order it to stay
|
|
#define SLIME_FRIENDSHIP_ATTACK 8 //Min friendship to order it to attack
|
|
|
|
//Sentience types, to prevent things like sentience potions from giving bosses sentience
|
|
#define SENTIENCE_ORGANIC 1
|
|
#define SENTIENCE_ARTIFICIAL 2
|
|
#define SENTIENCE_HUMANOID 3
|
|
#define SENTIENCE_MINEBOT 4
|
|
#define SENTIENCE_BOSS 5
|
|
#define SENTIENCE_PONY 6
|
|
|
|
//Mob AI Status
|
|
#define POWER_RESTORATION_OFF 0
|
|
#define POWER_RESTORATION_START 1
|
|
#define POWER_RESTORATION_SEARCH_APC 2
|
|
#define POWER_RESTORATION_APC_FOUND 3
|
|
|
|
//Hostile simple animals
|
|
//If you add a new status, be sure to add a list for it to the simple_animals global in _globalvars/lists/mobs.dm
|
|
#define AI_ON 1
|
|
#define AI_IDLE 2
|
|
#define AI_OFF 3
|
|
|
|
//The range at which a mob should wake up if you spawn into the z level near it
|
|
#define MAX_SIMPLEMOB_WAKEUP_RANGE 5
|
|
|
|
//determines if a mob can smash through it
|
|
#define ENVIRONMENT_SMASH_NONE 0
|
|
#define ENVIRONMENT_SMASH_STRUCTURES 1 //crates, lockers, ect
|
|
#define ENVIRONMENT_SMASH_WALLS 2 //walls
|
|
#define ENVIRONMENT_SMASH_RWALLS 3 //rwalls
|
|
|
|
// Slip flags, also known as lube flags
|
|
/// The mob will not slip if they're walking intent
|
|
#define NO_SLIP_WHEN_WALKING (1<<0)
|
|
/// Slipping on this will send them sliding a few tiles down
|
|
#define SLIDE (1<<1)
|
|
/// Ice slides only go one tile and don't knock you over, they're intended to cause a "slip chain"
|
|
/// where you slip on ice until you reach a non-slippable tile (ice puzzles)
|
|
#define SLIDE_ICE (1<<2)
|
|
/// [TRAIT_NO_SLIP_WATER] does not work on this slip. ONLY [TRAIT_NO_SLIP_ALL] will
|
|
#define GALOSHES_DONT_HELP (1<<3)
|
|
/// Slip works even if you're already on the ground
|
|
#define SLIP_WHEN_CRAWLING (1<<4)
|
|
/// the mob won't slip if the turf has the TRAIT_TURF_IGNORE_SLIPPERY trait.
|
|
#define SLIPPERY_TURF (1<<5)
|
|
/// For mobs who are slippery, this requires the mob holding it to be lying down.
|
|
#define SLIPPERY_WHEN_LYING_DOWN (1<<6)
|
|
///Like sliding, but it's short, it doesn't knockdown, it doesn't stun, it just staggers a bit.
|
|
#define WEAK_SLIDE (1<<7)
|
|
|
|
#define MAX_CHICKENS 50
|
|
|
|
///Flags used by the flags parameter of electrocute act.
|
|
|
|
///Makes it so that the shock doesn't take gloves into account.
|
|
#define SHOCK_NOGLOVES (1 << 0)
|
|
///Used when the shock is from a tesla bolt.
|
|
#define SHOCK_TESLA (1 << 1)
|
|
///Used when an illusion shocks something. Makes the shock deal stamina damage and not trigger certain secondary effects.
|
|
#define SHOCK_ILLUSION (1 << 2)
|
|
///The shock doesn't stun.
|
|
#define SHOCK_NOSTUN (1 << 3)
|
|
/// No default message is sent from the shock
|
|
#define SHOCK_SUPPRESS_MESSAGE (1 << 4)
|
|
/// No skeleton animation if a human was shocked
|
|
#define SHOCK_NO_HUMAN_ANIM (1 << 5)
|
|
/// Ignores TRAIT_STUNIMMUNE
|
|
#define SHOCK_IGNORE_IMMUNITY (1 << 6)
|
|
/// Prevents the immediate stun, instead only gives the delay
|
|
#define SHOCK_DELAY_STUN (1 << 7)
|
|
/// Makes the paralyze into a knockdown
|
|
#define SHOCK_KNOCKDOWN (1 << 8)
|
|
|
|
#define INCORPOREAL_MOVE_BASIC 1 /// normal movement, see: [/mob/living/var/incorporeal_move]
|
|
#define INCORPOREAL_MOVE_SHADOW 2 /// leaves a trail of shadows
|
|
#define INCORPOREAL_MOVE_JAUNT 3 /// is blocked by holy water/salt
|
|
|
|
#define SHADOW_SPECIES_LIGHT_THRESHOLD 0.2
|
|
|
|
#define COOLDOWN_UPDATE_SET_MELEE "set_melee"
|
|
#define COOLDOWN_UPDATE_ADD_MELEE "add_melee"
|
|
#define COOLDOWN_UPDATE_SET_RANGED "set_ranged"
|
|
#define COOLDOWN_UPDATE_ADD_RANGED "add_ranged"
|
|
#define COOLDOWN_UPDATE_SET_ENRAGE "set_enrage"
|
|
#define COOLDOWN_UPDATE_ADD_ENRAGE "add_enrage"
|
|
#define COOLDOWN_UPDATE_SET_CHASER "set_chaser"
|
|
#define COOLDOWN_UPDATE_ADD_CHASER "add_chaser"
|
|
#define COOLDOWN_UPDATE_SET_ARENA "set_arena"
|
|
#define COOLDOWN_UPDATE_ADD_ARENA "add_arena"
|
|
|
|
// Offsets defines
|
|
|
|
#define OFFSET_UNIFORM "uniform"
|
|
#define OFFSET_ID "id"
|
|
#define OFFSET_GLOVES "gloves"
|
|
#define OFFSET_GLASSES "glasses"
|
|
#define OFFSET_EARS "ears"
|
|
#define OFFSET_SHOES "shoes"
|
|
#define OFFSET_S_STORE "s_store"
|
|
#define OFFSET_FACEMASK "mask"
|
|
#define OFFSET_HEAD "head"
|
|
#define OFFSET_FACE "face"
|
|
#define OFFSET_BELT "belt"
|
|
#define OFFSET_BACK "back"
|
|
#define OFFSET_SUIT "suit"
|
|
#define OFFSET_NECK "neck"
|
|
#define OFFSET_HELD "held"
|
|
#define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition
|
|
#define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas
|
|
|
|
//MINOR TWEAKS/MISC
|
|
#define AGE_MIN 18 //youngest a character can be
|
|
#define AGE_MAX 100 //oldest a character can be //SKYRAT EDIT CHANGE - Increase max character age to 100 - ORIGINAL: #define AGE_MAX 85 //oldest a character can be
|
|
#define AGE_CHRONO_MAX 9999 //SKYRAT EDIT ADDITION - Chronological age
|
|
#define AGE_MINOR 20 //legal age of space drinking and smoking
|
|
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
|
|
#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be
|
|
|
|
#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up
|
|
#define POCKET_STRIP_DELAY (4 SECONDS) //time taken to search somebody's pockets
|
|
#define DOOR_CRUSH_DAMAGE 20 //the amount of damage that airlocks deal when they crush you
|
|
|
|
#define HUNGER_FACTOR 0.05 //factor at which mob nutrition decreases
|
|
#define ETHEREAL_DISCHARGE_RATE (1e-3 * STANDARD_ETHEREAL_CHARGE) // Rate at which ethereal stomach charge decreases
|
|
/// How much nutrition eating clothes as moth gives and drains
|
|
#define CLOTHING_NUTRITION_GAIN 15
|
|
#define REAGENTS_METABOLISM 0.2 //How many units of reagent are consumed per second, by default.
|
|
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
|
|
#define REM REAGENTS_EFFECT_MULTIPLIER //! Shorthand for the above define for ease of use in equations and the like
|
|
|
|
// Eye protection
|
|
// These values are additive to determine your overall flash protection.
|
|
#define FLASH_PROTECTION_HYPER_SENSITIVE -2
|
|
#define FLASH_PROTECTION_SENSITIVE -1
|
|
#define FLASH_PROTECTION_NONE 0
|
|
#define FLASH_PROTECTION_FLASH 1
|
|
#define FLASH_PROTECTION_WELDER 2
|
|
#define FLASH_PROTECTION_WELDER_SENSITIVE 3
|
|
#define FLASH_PROTECTION_WELDER_HYPER_SENSITIVE 4
|
|
|
|
/**
|
|
* Ear protection
|
|
* These values are additive to determine your overall ear/soundbang protection
|
|
*/
|
|
#define EAR_PROTECTION_NONE 0
|
|
#define EAR_PROTECTION_NORMAL 1
|
|
#define EAR_PROTECTION_HEAVY 2
|
|
#define EAR_PROTECTION_VACUUM 3
|
|
#define EAR_PROTECTION_FULL INFINITY
|
|
|
|
/**
|
|
* Soundbang defines
|
|
* These values are used as argument to determine the strength of the soundbang_act call
|
|
*/
|
|
///Soundbang strength for most things like flashbangs, honkblasts and harm control modules
|
|
#define SOUNDBANG_NORMAL 1
|
|
///Soundbang strength for things like flashbangs in proximity and emagged harm alarm megaphones, cannot be countered by standard ear protection equipment
|
|
#define SOUNDBANG_STRONG 2
|
|
///Soundbang strength for things like changeling shrieks, which can affect robots and aliens as well.
|
|
#define SOUNDBANG_MASSIVE 3
|
|
///Soundbang strength for anything that cannot be stopped unless you're stacked on multiple effects and equipment to counter it (or are simply deaf)
|
|
#define SOUNDBANG_OVERWHELMING 4
|
|
|
|
// AI Toggles
|
|
#define AI_CAMERA_LUMINOSITY 5
|
|
#define AI_VOX // Comment out if you don't want VOX to be enabled and have players download the voice sounds.
|
|
|
|
#define MAX_REVIVE_FIRE_DAMAGE 180
|
|
#define MAX_REVIVE_BRUTE_DAMAGE 180
|
|
|
|
#define DEFAULT_BRUTE_EXAMINE_TEXT "bruising"
|
|
#define DEFAULT_BURN_EXAMINE_TEXT "burns"
|
|
|
|
#define ROBOTIC_BRUTE_EXAMINE_TEXT "denting"
|
|
#define ROBOTIC_BURN_EXAMINE_TEXT "charring"
|
|
|
|
#define GLASSY_BRUTE_EXAMINE_TEXT "cracking"
|
|
#define GLASSY_BURN_EXAMINE_TEXT "deformation"
|
|
|
|
#define GRAB_PIXEL_SHIFT_PASSIVE 6
|
|
#define GRAB_PIXEL_SHIFT_AGGRESSIVE 12
|
|
#define GRAB_PIXEL_SHIFT_NECK 16
|
|
|
|
#define PULL_PRONE_SLOWDOWN 1.5
|
|
#define HUMAN_CARRY_SLOWDOWN 0.35
|
|
|
|
//Flags that control what things can spawn species (whitelist)
|
|
// These flags unlock the Lepton Violet shuttle, hardcoded in wabbajack()
|
|
//Standard magic mirror (wizard)
|
|
#define MIRROR_MAGIC (1<<1)
|
|
//Pride ruin mirror
|
|
#define MIRROR_PRIDE (1<<2)
|
|
//Race swap wizard event
|
|
#define RACE_SWAP (1<<3)
|
|
//Wabbacjack staff projectiles
|
|
#define WABBAJACK (1<<4)
|
|
|
|
// These flags do NOT unlock the Lepton Violet shuttle, hardcoded in wabbajack() - use for things like xenobio, admins, etc.
|
|
//Badmin magic mirror
|
|
#define MIRROR_BADMIN (1<<5)
|
|
//ERT spawn template (avoid races that don't function without correct gear)
|
|
#define ERT_SPAWN (1<<6)
|
|
//xenobio black crossbreed
|
|
#define SLIME_EXTRACT (1<<7)
|
|
|
|
// Randomization keys for calling wabbajack with.
|
|
// Note the contents of these keys are important, as they're displayed to the player
|
|
// Ex: (You turn into a "monkey", You turn into a "xenomorph")
|
|
#define WABBAJACK_MONKEY "monkey"
|
|
#define WABBAJACK_ROBOT "robot"
|
|
#define WABBAJACK_CLOWN "clown"
|
|
#define WABBAJACK_SLIME "slime"
|
|
#define WABBAJACK_XENO "xenomorph"
|
|
#define WABBAJACK_HUMAN "humanoid"
|
|
#define WABBAJACK_ANIMAL "animal"
|
|
|
|
// Reasons a defibrillation might fail
|
|
#define DEFIB_POSSIBLE (1<<0)
|
|
#define DEFIB_FAIL_SUICIDE (1<<1)
|
|
#define DEFIB_FAIL_HUSK (1<<2)
|
|
#define DEFIB_FAIL_TISSUE_DAMAGE (1<<3)
|
|
#define DEFIB_FAIL_FAILING_HEART (1<<4)
|
|
#define DEFIB_FAIL_NO_HEART (1<<5)
|
|
#define DEFIB_FAIL_FAILING_BRAIN (1<<6)
|
|
#define DEFIB_FAIL_NO_BRAIN (1<<7)
|
|
#define DEFIB_FAIL_NO_INTELLIGENCE (1<<8)
|
|
#define DEFIB_FAIL_BLACKLISTED (1<<9)
|
|
#define DEFIB_NOGRAB_AGHOST (1<<10)
|
|
|
|
// Bit mask of possible return values by can_defib that would result in a revivable patient
|
|
#define DEFIB_REVIVABLE_STATES (DEFIB_FAIL_NO_HEART | DEFIB_FAIL_FAILING_HEART | DEFIB_FAIL_HUSK | DEFIB_FAIL_TISSUE_DAMAGE | DEFIB_FAIL_FAILING_BRAIN | DEFIB_POSSIBLE)
|
|
|
|
#define SLEEP_CHECK_DEATH(X, A) \
|
|
sleep(X); \
|
|
if(QDELETED(A)) return; \
|
|
if(ismob(A)) { \
|
|
var/mob/sleep_check_death_mob = A; \
|
|
if(sleep_check_death_mob.stat == DEAD) return; \
|
|
}
|
|
|
|
|
|
#define DOING_INTERACTION(user, interaction_key) (LAZYACCESS(user.do_afters, interaction_key))
|
|
#define DOING_INTERACTION_LIMIT(user, interaction_key, max_interaction_count) ((LAZYACCESS(user.do_afters, interaction_key) || 0) >= max_interaction_count)
|
|
#define DOING_INTERACTION_WITH_TARGET(user, target) (LAZYACCESS(user.do_afters, target))
|
|
#define DOING_INTERACTION_WITH_TARGET_LIMIT(user, target, max_interaction_count) ((LAZYACCESS(user.do_afters, target) || 0) >= max_interaction_count)
|
|
|
|
// recent examine defines
|
|
/// How long it takes for an examined atom to be removed from recent_examines. Should be the max of the below time windows
|
|
#define RECENT_EXAMINE_MAX_WINDOW (2 SECONDS)
|
|
/// If you examine the same atom twice in this timeframe, we call examine_more() instead of examine()
|
|
#define EXAMINE_MORE_WINDOW (1 SECONDS)
|
|
/// If you yawn while someone nearby has examined you within this time frame, it will force them to yawn as well. Tradecraft!
|
|
#define YAWN_PROPAGATION_EXAMINE_WINDOW (2 SECONDS)
|
|
|
|
/// How far away you can be to make eye contact with someone while examining
|
|
#define EYE_CONTACT_RANGE 5
|
|
|
|
|
|
#define SILENCE_RANGED_MESSAGE (1<<0)
|
|
|
|
/// Returns whether or not the given mob can succumb
|
|
#define CAN_SUCCUMB(target) (HAS_TRAIT(target, TRAIT_CRITICAL_CONDITION) && !HAS_TRAIT(target, TRAIT_NODEATH))
|
|
|
|
// Body position defines.
|
|
/// Mob is standing up, usually associated with lying_angle value of 0.
|
|
#define STANDING_UP 0
|
|
/// Mob is lying down, usually associated with lying_angle values of 90 or 270.
|
|
#define LYING_DOWN 1
|
|
|
|
///How much a mob's sprite should be moved when they're lying down
|
|
#define PIXEL_Y_OFFSET_LYING -6
|
|
|
|
///Define for spawning megafauna instead of a mob for cave gen
|
|
#define SPAWN_MEGAFAUNA "bluh bluh huge boss"
|
|
|
|
///Squash flags. For squashable element
|
|
|
|
/// Squashing will not occur if the mob is not lying down (bodyposition is LYING_DOWN)
|
|
#define SQUASHED_SHOULD_BE_DOWN (1<<0)
|
|
/// If present, outright gibs the squashed mob instead of just dealing damage
|
|
#define SQUASHED_SHOULD_BE_GIBBED (1<<1)
|
|
/// If squashing always passes if the mob is dead
|
|
#define SQUASHED_ALWAYS_IF_DEAD (1<<2)
|
|
/// Don't squash our mob if its not located in a turf
|
|
#define SQUASHED_DONT_SQUASH_IN_CONTENTS (1<<3)
|
|
|
|
/*
|
|
* Defines for "AI emotions", allowing the AI to expression emotions
|
|
* with status displays via emotes.
|
|
*/
|
|
|
|
#define AI_EMOTION_VERY_HAPPY "Very Happy"
|
|
#define AI_EMOTION_HAPPY "Happy"
|
|
#define AI_EMOTION_NEUTRAL "Neutral"
|
|
#define AI_EMOTION_UNSURE "Unsure"
|
|
#define AI_EMOTION_CONFUSED "Confused"
|
|
#define AI_EMOTION_SAD "Sad"
|
|
#define AI_EMOTION_BSOD "BSOD"
|
|
#define AI_EMOTION_BLANK "Blank"
|
|
#define AI_EMOTION_PROBLEMS "Problems?"
|
|
#define AI_EMOTION_AWESOME "Awesome"
|
|
#define AI_EMOTION_FACEPALM "Facepalm"
|
|
#define AI_EMOTION_THINKING "Thinking"
|
|
#define AI_EMOTION_FRIEND_COMPUTER "Friend Computer"
|
|
#define AI_EMOTION_DORFY "Dorfy"
|
|
#define AI_EMOTION_BLUE_GLOW "Blue Glow"
|
|
#define AI_EMOTION_RED_GLOW "Red Glow"
|
|
|
|
// Defines for AI holograms
|
|
#define AI_HOLOGRAM_CATEGORY_ANIMAL "Animal"
|
|
#define AI_HOLOGRAM_BEAR "Bear"
|
|
#define AI_HOLOGRAM_CARP "Carp"
|
|
#define AI_HOLOGRAM_CAT "Cat"
|
|
#define AI_HOLOGRAM_CAT_2 "Cat Alternate"
|
|
#define AI_HOLOGRAM_CHICKEN "Chicken"
|
|
#define AI_HOLOGRAM_CORGI "Corgi"
|
|
#define AI_HOLOGRAM_COW "Cow"
|
|
#define AI_HOLOGRAM_CRAB "Crab"
|
|
#define AI_HOLOGRAM_FOX "Fox"
|
|
#define AI_HOLOGRAM_GOAT "Goat"
|
|
#define AI_HOLOGRAM_PARROT "Parrot"
|
|
#define AI_HOLOGRAM_PUG "Pug"
|
|
#define AI_HOLOGRAM_SPIDER "Spider"
|
|
|
|
#define AI_HOLOGRAM_CATEGORY_UNIQUE "Unique"
|
|
#define AI_HOLOGRAM_DEFAULT "Default"
|
|
#define AI_HOLOGRAM_FACE "Floating Face"
|
|
#define AI_HOLOGRAM_NARSIE "Narsie"
|
|
#define AI_HOLOGRAM_RATVAR "Ratvar"
|
|
#define AI_HOLOGRAM_XENO "Xeno Queen"
|
|
|
|
/// Icon state to use for ai displays that just turns them off
|
|
#define AI_DISPLAY_DONT_GLOW "ai_off"
|
|
/// Throw modes, defines whether or not to turn off throw mode after
|
|
#define THROW_MODE_DISABLED 0
|
|
#define THROW_MODE_TOGGLE 1
|
|
#define THROW_MODE_HOLD 2
|
|
|
|
//Saves a proc call, life is suffering. If who has no targets_from var, we assume it's just who
|
|
#define GET_TARGETS_FROM(who) (who.targets_from ? who.get_targets_from() : who)
|
|
|
|
//defines for grad_color and grad_styles list access keys
|
|
#define GRADIENT_HAIR_KEY 1
|
|
#define GRADIENT_FACIAL_HAIR_KEY 2
|
|
|
|
// /datum/sprite_accessory/gradient defines
|
|
#define GRADIENT_APPLIES_TO_HAIR (1<<0)
|
|
#define GRADIENT_APPLIES_TO_FACIAL_HAIR (1<<1)
|
|
|
|
// Height defines
|
|
// - They are numbers so you can compare height values (x height < y height)
|
|
// - They do not start at 0 for futureproofing
|
|
// - They skip numbers for futureproofing as well
|
|
// Otherwise they are completely arbitrary
|
|
#define MONKEY_HEIGHT_DWARF 2
|
|
#define MONKEY_HEIGHT_MEDIUM 4
|
|
#define MONKEY_HEIGHT_TALL HUMAN_HEIGHT_DWARF
|
|
#define HUMAN_HEIGHT_DWARF 6
|
|
#define HUMAN_HEIGHT_SHORTEST 8
|
|
#define HUMAN_HEIGHT_SHORT 10
|
|
#define HUMAN_HEIGHT_MEDIUM 12
|
|
#define HUMAN_HEIGHT_TALL 14
|
|
#define HUMAN_HEIGHT_TALLER 16
|
|
#define HUMAN_HEIGHT_TALLEST 18
|
|
|
|
/// Assoc list of all heights, cast to strings, to """"tuples"""""
|
|
/// The first """tuple""" index is the upper body offset
|
|
/// The second """tuple""" index is the lower body offset
|
|
GLOBAL_LIST_INIT(human_heights_to_offsets, list(
|
|
"[MONKEY_HEIGHT_DWARF]" = list(-9, -3),
|
|
"[MONKEY_HEIGHT_MEDIUM]" = list(-7, -4),
|
|
"[HUMAN_HEIGHT_DWARF]" = list(-5, -4),
|
|
"[HUMAN_HEIGHT_SHORTEST]" = list(-2, -1),
|
|
"[HUMAN_HEIGHT_SHORT]" = list(-1, -1),
|
|
"[HUMAN_HEIGHT_MEDIUM]" = list(0, 0),
|
|
"[HUMAN_HEIGHT_TALL]" = list(1, 1),
|
|
"[HUMAN_HEIGHT_TALLER]" = list(2, 1),
|
|
"[HUMAN_HEIGHT_TALLEST]" = list(3, 2),
|
|
))
|
|
|
|
// Mob Overlays Indexes
|
|
/// Total number of layers for mob overlays
|
|
/// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK
|
|
/// Also consider updating layers_to_offset
|
|
#define TOTAL_LAYERS 45 // SKYRAT EDIT CHANGE - ORIGINAL: 38
|
|
/// Mutations layer - Tk headglows, cold resistance glow, etc
|
|
#define MUTATIONS_LAYER 44 // SKYRAT EDIT CHANGE - ORIGINAL: 37
|
|
/// Mutantrace features (tail when looking south) that must appear behind the body parts
|
|
#define BODY_BEHIND_LAYER 43 // SKYRAT EDIT CHANGE - ORIGINAL: 36
|
|
/// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST
|
|
#define BODYPARTS_LOW_LAYER 42 // SKYRAT EDIT CHANGE - ORIGINAL: 35
|
|
/// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER
|
|
#define BODYPARTS_LAYER 41 // SKYRAT EDIT CHANGE - ORIGINAL: 34
|
|
/// Mutantrace features (snout, body markings) that must appear above the body parts
|
|
#define BODY_ADJ_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 33
|
|
/// Underwear, undershirts, socks
|
|
#define BODY_LAYER 39 // SKYRAT EDIT CHANGE - ORIGINAL: 32
|
|
/// Eyes and eyelids
|
|
#define EYES_LAYER 38 // SKYRAT EDIT CHANGE - ORIGINAL: 31
|
|
/// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
|
#define FRONT_MUTATIONS_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 30
|
|
/// Damage indicators (cuts and burns)
|
|
#define DAMAGE_LAYER 36 // SKYRAT EDIT CHANGE - ORIGINAL: 29
|
|
// SKYRAT EDIT ADDITION START
|
|
/// This layer is used for things that shouldn't be over clothes, but should be over mutations
|
|
#define BODY_FRONT_UNDER_CLOTHES 35
|
|
// SKYRAT EDIT ADDITION END
|
|
/// Jumpsuit clothing layer
|
|
#define UNIFORM_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 27
|
|
// SKYRAT EDIT ADDITION BEGIN - cursed layers under clothing
|
|
#define ANUS_LAYER 33
|
|
#define VAGINA_LAYER 32
|
|
#define PENIS_LAYER 31
|
|
#define NIPPLES_LAYER 30
|
|
#define BANDAGE_LAYER 29
|
|
//SKYRAT EDIT ADDITION END
|
|
/// ID card layer
|
|
#define ID_LAYER 28
|
|
/// ID card layer (might be deprecated)
|
|
#define ID_CARD_LAYER 27
|
|
/// Layer for bodyparts that should appear above every other bodypart - Currently only used for hands
|
|
#define BODYPARTS_HIGH_LAYER 26
|
|
/// Gloves layer
|
|
#define GLOVES_LAYER 25
|
|
/// Shoes layer
|
|
#define SHOES_LAYER 24
|
|
/// Layer for masks that are worn below ears and eyes (like Balaclavas) (layers below hair, use flagsinv=HIDEHAIR as needed)
|
|
#define LOW_FACEMASK_LAYER 23
|
|
/// Ears layer (Spessmen have ears? Wow)
|
|
#define EARS_LAYER 22
|
|
/// Layer for neck apperal that should appear below the suit slot (like neckties)
|
|
#define LOW_NECK_LAYER 21
|
|
/// Suit layer (armor, coats, etc.)
|
|
#define SUIT_LAYER 20
|
|
/// Glasses layer
|
|
#define GLASSES_LAYER 19
|
|
/// Belt layer
|
|
#define BELT_LAYER 18 //Possible make this an overlay of something required to wear a belt?
|
|
/// Suit storage layer (tucking a gun or baton underneath your armor)
|
|
#define SUIT_STORE_LAYER 17
|
|
/// Neck layer (for wearing capes and bedsheets)
|
|
#define NECK_LAYER 16
|
|
/// Back layer (for backpacks and equipment on your back)
|
|
#define BACK_LAYER 15
|
|
/// Special layer for rendering beneath hair, for special facemasks
|
|
#define BENEATH_HAIR_LAYER 14
|
|
/// Hair layer (mess with the fro and you got to go!)
|
|
#define HAIR_LAYER 13 //TODO: make part of head layer?
|
|
/// Facemask layer (gas masks, breath masks, etc.)
|
|
#define FACEMASK_LAYER 12
|
|
/// Head layer (hats, helmets, etc.)
|
|
#define HEAD_LAYER 11
|
|
/// Hair that layers out above clothing, including hats (high ponytails and such)
|
|
#define OUTER_HAIR_LAYER 10
|
|
/// Handcuff layer (when your hands are cuffed)
|
|
#define HANDCUFF_LAYER 9
|
|
/// Legcuff layer (when your feet are cuffed)
|
|
#define LEGCUFF_LAYER 8
|
|
/// Hands layer (for the actual hand, not the arm... I think?)
|
|
#define HANDS_LAYER 7
|
|
/// Body front layer. Usually used for mutant bodyparts that need to be in front of stuff (e.g. cat ears)
|
|
#define BODY_FRONT_LAYER 6
|
|
/// Special body layer that actually require to be above the hair (e.g. lifted welding goggles)
|
|
#define ABOVE_BODY_FRONT_GLASSES_LAYER 5
|
|
/// Special body layer for the rare cases where something on the head needs to be above everything else (e.g. flowers)
|
|
#define ABOVE_BODY_FRONT_HEAD_LAYER 4
|
|
/// Bleeding wound icons
|
|
#define WOUND_LAYER 3
|
|
/// Blood cult ascended halo layer, because there's currently no better solution for adding/removing
|
|
#define HALO_LAYER 2
|
|
/// The highest most layer for mob overlays. Unused
|
|
#define HIGHEST_LAYER 1
|
|
|
|
#define UPPER_BODY "upper body"
|
|
#define LOWER_BODY "lower body"
|
|
#define NO_MODIFY "do not modify"
|
|
|
|
/// Used for human height overlay adjustments
|
|
/// Certain standing overlay layers shouldn't have a filter applied and should instead just offset by a pixel y
|
|
/// This list contains all the layers that must offset, with its value being whether it's a part of the upper half of the body (TRUE) or not (FALSE)
|
|
GLOBAL_LIST_INIT(layers_to_offset, list(
|
|
// Weapons commonly cross the middle of the sprite so they get cut in half by the filter
|
|
"[HANDS_LAYER]" = LOWER_BODY,
|
|
// Very tall hats will get cut off by filter
|
|
"[HEAD_LAYER]" = UPPER_BODY,
|
|
// Hair will get cut off by filter
|
|
"[HAIR_LAYER]" = UPPER_BODY,
|
|
"[BENEATH_HAIR_LAYER]" = UPPER_BODY,
|
|
// Long belts (sabre sheathe) will get cut off by filter
|
|
"[BELT_LAYER]" = LOWER_BODY,
|
|
// Everything below looks fine with or without a filter, so we can skip it and just offset
|
|
// (In practice they'd be fine if they got a filter but we can optimize a bit by not.)
|
|
"[NECK_LAYER]" = UPPER_BODY,
|
|
"[GLASSES_LAYER]" = UPPER_BODY,
|
|
"[LOW_NECK_LAYER]" = UPPER_BODY,
|
|
"[ABOVE_BODY_FRONT_GLASSES_LAYER]" = UPPER_BODY, // currently unused
|
|
"[ABOVE_BODY_FRONT_HEAD_LAYER]" = UPPER_BODY, // only used for head stuff
|
|
"[GLOVES_LAYER]" = LOWER_BODY,
|
|
"[HALO_LAYER]" = UPPER_BODY, // above the head
|
|
"[HANDCUFF_LAYER]" = LOWER_BODY,
|
|
"[ID_CARD_LAYER]" = UPPER_BODY, // unused
|
|
"[ID_LAYER]" = UPPER_BODY,
|
|
"[FACEMASK_LAYER]" = UPPER_BODY,
|
|
"[LOW_FACEMASK_LAYER]" = UPPER_BODY,
|
|
// These two are cached, and have their appearance shared(?), so it's safer to just not touch it
|
|
"[MUTATIONS_LAYER]" = NO_MODIFY,
|
|
"[FRONT_MUTATIONS_LAYER]" = NO_MODIFY,
|
|
// These DO get a filter, I'm leaving them here as reference,
|
|
// to show how many filters are added at a glance
|
|
// BACK_LAYER (backpacks are big)
|
|
// BODYPARTS_HIGH_LAYER (arms)
|
|
// BODY_LAYER (body markings (full body), underwear (full body))
|
|
// EYES_LAYER,
|
|
// BODY_ADJ_LAYER (external organs like wings)
|
|
// BODY_BEHIND_LAYER (external organs like wings)
|
|
// BODY_FRONT_LAYER (external organs like wings)
|
|
// DAMAGE_LAYER (full body)
|
|
// HIGHEST_LAYER (full body)
|
|
// UNIFORM_LAYER (full body)
|
|
// WOUND_LAYER (full body)
|
|
))
|
|
|
|
//Bitflags for the layers an external organ can draw on (organs can be drawn on multiple layers)
|
|
/// Draws organ on the BODY_FRONT_LAYER
|
|
#define EXTERNAL_FRONT (1 << 1)
|
|
/// Draws organ on the BODY_ADJ_LAYER
|
|
#define EXTERNAL_ADJACENT (1 << 2)
|
|
/// Draws organ on the BODY_BEHIND_LAYER
|
|
#define EXTERNAL_BEHIND (1 << 3)
|
|
// SKYRAT EDIT ADDITION - Customization
|
|
/// Draws organ on the BODY_FRONT_UNDER_CLOTHES
|
|
#define EXTERNAL_FRONT_UNDER_CLOTHES (1 << 4)
|
|
/// Draws organ on the ABOVE_BODY_FRONT_HEAD_LAYER
|
|
#define EXTERNAL_FRONT_OVER (1 << 5)
|
|
/// Draws organ on the HEAD_LAYER, for things that need to be above hair but below hats.
|
|
#define EXTERNAL_FRONT_ABOVE_HAIR (1 << 6)
|
|
// SKYRAT EDIT END (not touching what comes next because we don't actually have to (nor want to))
|
|
/// Draws organ on all EXTERNAL layers
|
|
#define ALL_EXTERNAL_OVERLAYS EXTERNAL_FRONT | EXTERNAL_ADJACENT | EXTERNAL_BEHIND
|
|
|
|
// Bitflags for external organs restylability
|
|
#define EXTERNAL_RESTYLE_ALL ALL
|
|
/// This organ allows restyle through plant restyling (like secateurs)
|
|
#define EXTERNAL_RESTYLE_PLANT (1 << 0)
|
|
/// This organ allows restyling with flesh restyling stuff (surgery or something idk)
|
|
#define EXTERNAL_RESTYLE_FLESH (1 << 1)
|
|
/// This organ allows restyling with enamel restyling (like a fucking file or something?). It's for horns and shit
|
|
#define EXTERNAL_RESTYLE_ENAMEL (1 << 2)
|
|
|
|
//Mob Overlay Index Shortcuts for alternate_worn_layer, layers
|
|
//Because I *KNOW* somebody will think layer+1 means "above"
|
|
//IT DOESN'T OK, IT MEANS "UNDER"
|
|
/// The layer underneath the suit
|
|
#define UNDER_SUIT_LAYER (SUIT_LAYER+1)
|
|
/// The layer underneath the head (for hats)
|
|
#define UNDER_HEAD_LAYER (HEAD_LAYER+1)
|
|
|
|
//AND -1 MEANS "ABOVE", OK?, OK!?!
|
|
/// The layer above shoes
|
|
#define ABOVE_SHOES_LAYER (SHOES_LAYER-1)
|
|
/// The layer above mutant body parts
|
|
#define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-1)
|
|
|
|
/// If gravity must be present to perform action (can't use pens without gravity)
|
|
#define NEED_GRAVITY (1<<0)
|
|
/// If reading is required to perform action (can't read a book if you are illiterate)
|
|
#define NEED_LITERACY (1<<1)
|
|
/// If lighting must be present to perform action (can't heal someone in the dark)
|
|
#define NEED_LIGHT (1<<2)
|
|
/// If other mobs (monkeys, aliens, etc) can perform action (can't use computers if you are a monkey)
|
|
#define NEED_DEXTERITY (1<<3)
|
|
/// If hands are required to perform action (can't use objects that require hands if you are a cyborg)
|
|
#define NEED_HANDS (1<<4)
|
|
/// If telekinesis is forbidden to perform action from a distance (ex. canisters are blacklisted from telekinesis manipulation)
|
|
#define FORBID_TELEKINESIS_REACH (1<<5)
|
|
/// If silicons are allowed to perform action from a distance (silicons can operate airlocks from far away)
|
|
#define ALLOW_SILICON_REACH (1<<6)
|
|
/// If resting on the floor is allowed to perform action (pAIs can play music while resting)
|
|
#define ALLOW_RESTING (1<<7)
|
|
/// If this is accessible to creatures with ventcrawl capabilities
|
|
#define NEED_VENTCRAWL (1<<8)
|
|
/// Skips adjacency checks
|
|
#define BYPASS_ADJACENCY (1<<9)
|
|
/// Skips recursive loc checks
|
|
#define NOT_INSIDE_TARGET (1<<10)
|
|
/// Checks for base adjacency, but silences the error
|
|
#define SILENT_ADJACENCY (1<<11)
|
|
/// Allows pAIs to perform an action
|
|
#define ALLOW_PAI (1<<12)
|
|
|
|
/// The default mob sprite size (used for shrinking or enlarging the mob sprite to regular size)
|
|
#define RESIZE_DEFAULT_SIZE 1
|
|
|
|
//Lying angles, which way your head points
|
|
#define LYING_ANGLE_EAST 90
|
|
#define LYING_ANGLE_WEST 270
|
|
|
|
/// Get the client from the var
|
|
#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null)))
|
|
|
|
// Various flags for carbon mob vomiting
|
|
/// Flag which makes a message send about the vomiting.
|
|
#define MOB_VOMIT_MESSAGE (1<<0)
|
|
/// Flag which makes the mob get stunned upon vomiting.
|
|
#define MOB_VOMIT_STUN (1<<1)
|
|
/// Flag which makes the mob incur damage upon vomiting.
|
|
#define MOB_VOMIT_HARM (1<<2)
|
|
/// Flag which makes the mob vomit blood
|
|
#define MOB_VOMIT_BLOOD (1<<3)
|
|
/// Flag which will cause the mob to fall over when vomiting.
|
|
#define MOB_VOMIT_KNOCKDOWN (1<<4)
|
|
/// Flag which will make the proc skip certain checks when it comes to forcing a vomit.
|
|
#define MOB_VOMIT_FORCE (1<<5)
|
|
|
|
/// The default. Gives you might typically expect to happen when you vomit.
|
|
#define VOMIT_CATEGORY_DEFAULT (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM | MOB_VOMIT_STUN)
|
|
/// The vomit you've all come to know and love, but with a little extra "spice" (blood)
|
|
#define VOMIT_CATEGORY_BLOOD (VOMIT_CATEGORY_DEFAULT | MOB_VOMIT_BLOOD)
|
|
/// The bloody vomit, but without the stunning
|
|
#define VOMIT_CATEGORY_BLOOD_STUNLESS (VOMIT_CATEGORY_BLOOD & ~MOB_VOMIT_STUN)
|
|
/// Another vomit variant that causes you to get knocked down instead of just only getting a stun. Standard otherwise.
|
|
#define VOMIT_CATEGORY_KNOCKDOWN (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM | MOB_VOMIT_KNOCKDOWN)
|
|
|
|
/// Possible value of [/atom/movable/buckle_lying]. If set to a different (positive-or-zero) value than this, the buckling thing will force a lying angle on the buckled.
|
|
#define NO_BUCKLE_LYING -1
|
|
/// Possible value of [/atom/movable/buckle_dir]. If set to a different (positive-or-zero) value than this, the buckling thing will force a dir on the buckled.
|
|
#define BUCKLE_MATCH_DIR -1
|
|
|
|
// Flags for fully_heal().
|
|
|
|
/// Special flag that means this heal is an admin heal and goes above and beyond
|
|
/// Note, this includes things like removing suicide status and handcuffs / legcuffs, use with slight caution.
|
|
#define HEAL_ADMIN (1<<0)
|
|
/// Heals all brute damage.
|
|
#define HEAL_BRUTE (1<<1)
|
|
/// Heals all burn damage.
|
|
#define HEAL_BURN (1<<2)
|
|
/// Heals all toxin damage, slime people included.
|
|
#define HEAL_TOX (1<<3)
|
|
/// Heals all oxyloss.
|
|
#define HEAL_OXY (1<<4)
|
|
/// Heals all stamina damage.
|
|
#define HEAL_STAM (1<<5)
|
|
/// Restore all limbs to their initial state.
|
|
#define HEAL_LIMBS (1<<6)
|
|
/// Heals all organs from failing.
|
|
#define HEAL_ORGANS (1<<7)
|
|
/// replaces any organ with ORGAN_HAZARDOUS in organ_flags with species defaults
|
|
#define HEAL_REFRESH_ORGANS (1<<8)
|
|
/// Removes all wounds.
|
|
#define HEAL_WOUNDS (1<<9)
|
|
/// Removes all brain traumas, not including permanent ones.
|
|
#define HEAL_TRAUMAS (1<<10)
|
|
/// Removes all reagents present.
|
|
#define HEAL_ALL_REAGENTS (1<<11)
|
|
/// Removes all non-positive diseases.
|
|
#define HEAL_NEGATIVE_DISEASES (1<<12)
|
|
/// Restores body temperature back to nominal.
|
|
#define HEAL_TEMP (1<<13)
|
|
/// Restores blood levels to normal.
|
|
#define HEAL_BLOOD (1<<14)
|
|
/// Removes all non-positive mutations (neutral included).
|
|
#define HEAL_NEGATIVE_MUTATIONS (1<<15)
|
|
/// Removes status effects with this flag set that also have remove_on_fullheal = TRUE.
|
|
#define HEAL_STATUS (1<<16)
|
|
/// Same as above, removes all CC related status effects with this flag set that also have remove_on_fullheal = TRUE.
|
|
#define HEAL_CC_STATUS (1<<17)
|
|
/// Deletes any restraints on the mob (handcuffs / legcuffs)
|
|
#define HEAL_RESTRAINTS (1<<18)
|
|
|
|
/// Combination flag to only heal the main damage types.
|
|
#define HEAL_DAMAGE (HEAL_BRUTE|HEAL_BURN|HEAL_TOX|HEAL_OXY|HEAL_STAM)
|
|
/// Combination flag to only heal things messed up things about the mob's body itself.
|
|
#define HEAL_BODY (HEAL_LIMBS|HEAL_ORGANS|HEAL_REFRESH_ORGANS|HEAL_WOUNDS|HEAL_TRAUMAS|HEAL_BLOOD|HEAL_TEMP)
|
|
/// Combination flag to heal negative things affecting the mob.
|
|
#define HEAL_AFFLICTIONS (HEAL_NEGATIVE_DISEASES|HEAL_NEGATIVE_MUTATIONS|HEAL_ALL_REAGENTS|HEAL_STATUS|HEAL_CC_STATUS)
|
|
|
|
/// Full heal that isn't admin forced
|
|
#define HEAL_ALL ~(HEAL_ADMIN|HEAL_RESTRAINTS)
|
|
/// Heals everything and is as strong as / is an admin heal
|
|
#define ADMIN_HEAL_ALL ALL
|
|
|
|
/// Checking flags for [/mob/proc/can_read()]
|
|
#define READING_CHECK_LITERACY (1<<0)
|
|
#define READING_CHECK_LIGHT (1<<1)
|
|
|
|
// Flash deviation defines
|
|
/// No deviation at all. Flashed from the front or front-left/front-right. Alternatively, flashed in direct view.
|
|
#define DEVIATION_NONE 0
|
|
/// Partial deviation. Flashed from the side. Alternatively, flashed out the corner of your eyes.
|
|
#define DEVIATION_PARTIAL 1
|
|
/// Full deviation. Flashed from directly behind or behind-left/behind-rack. Not flashed at all.
|
|
#define DEVIATION_FULL 2
|
|
|
|
/// In dynamic human icon gen we don't replace the held item.
|
|
#define NO_REPLACE 0
|
|
|
|
/// Flags for whether you can heal yourself or not or only
|
|
#define HEALING_TOUCH_ANYONE "healing_touch_anyone"
|
|
#define HEALING_TOUCH_NOT_SELF "healing_touch_not_self"
|
|
#define HEALING_TOUCH_SELF_ONLY "healing_touch_self_only"
|
|
|
|
/// Default minimum body temperature mobs can exist in before taking damage
|
|
#define NPC_DEFAULT_MIN_TEMP 250
|
|
/// Default maximum body temperature mobs can exist in before taking damage
|
|
#define NPC_DEFAULT_MAX_TEMP 350
|
|
|
|
// Flags for mobs which can't do certain things while someone is looking at them
|
|
/// Flag which stops you from moving while observed
|
|
#define NO_OBSERVED_MOVEMENT (1<<0)
|
|
/// Flag which stops you from using actions while observed
|
|
#define NO_OBSERVED_ACTIONS (1<<1)
|
|
/// Flag which stops you from attacking while observed
|
|
#define NO_OBSERVED_ATTACKS (1<<2)
|
|
|
|
/// Types of bullets that mining mobs take full damage from
|
|
#define MINING_MOB_PROJECTILE_VULNERABILITY list(BRUTE)
|
|
|
|
/// Helper macro that determines if the mob is at the threshold to start vomitting due to high toxin levels
|
|
#define AT_TOXIN_VOMIT_THRESHOLD(mob) (mob.getToxLoss() > 45 && mob.nutrition > 20)
|
|
|
|
/// The duration of the flip emote animation
|
|
#define FLIP_EMOTE_DURATION 0.7 SECONDS
|
|
///The duration of a taunt emote, so how long they can deflect projectiles
|
|
#define TAUNT_EMOTE_DURATION 0.9 SECONDS
|
|
|
|
// Sprites for photocopying butts
|
|
#define BUTT_SPRITE_HUMAN_MALE "human_male"
|
|
#define BUTT_SPRITE_HUMAN_FEMALE "human_female"
|
|
#define BUTT_SPRITE_LIZARD "lizard"
|
|
#define BUTT_SPRITE_QR_CODE "qr_code"
|
|
#define BUTT_SPRITE_XENOMORPH "xeno"
|
|
#define BUTT_SPRITE_DRONE "drone"
|
|
#define BUTT_SPRITE_CAT "cat"
|
|
#define BUTT_SPRITE_FLOWERPOT "flowerpot"
|
|
#define BUTT_SPRITE_GREY "grey"
|
|
#define BUTT_SPRITE_PLASMA "plasma"
|
|
#define BUTT_SPRITE_FUZZY "fuzzy"
|
|
#define BUTT_SPRITE_SLIME "slime"
|
|
|
|
/// Distance which you can see someone's ID card
|
|
/// Short enough that you can inspect over tables (bartender checking age)
|
|
#define ID_EXAMINE_DISTANCE 3
|
|
|
|
GLOBAL_LIST_INIT(regal_rat_minion_commands, list(
|
|
/datum/pet_command/idle,
|
|
/datum/pet_command/free,
|
|
/datum/pet_command/protect_owner,
|
|
/datum/pet_command/follow,
|
|
/datum/pet_command/attack/mouse
|
|
))
|