Skip to content

draft: (not ready) basic goliaths #6769

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 32 commits into
base: master220
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
ce5d0c6
временное
NightDawnFox Apr 1, 2025
a99bfce
Базик майнинг готов нахууу
NightDawnFox Apr 2, 2025
28d3fe7
Merge remote-tracking branch 'upstream/master220' into basic-mining
NightDawnFox Apr 6, 2025
134cde4
брошено
NightDawnFox Apr 6, 2025
055fe85
брошено 2
NightDawnFox Apr 6, 2025
e56aa04
ебаный РЕФ
NightDawnFox Apr 8, 2025
d56f66c
бросаем еще раз
NightDawnFox Apr 8, 2025
0d7ef47
пиздец блядь
NightDawnFox Apr 8, 2025
7dcaf59
новый тип компонента
NightDawnFox Apr 9, 2025
cd9cd93
компонент дружбы
NightDawnFox Apr 9, 2025
61e5dec
пиздец
NightDawnFox Apr 10, 2025
c64e9a4
paradise.dmb - 0 errors, 0 warnings
NightDawnFox Apr 10, 2025
49aabef
рантаймфикс
NightDawnFox Apr 10, 2025
d6755bc
пара фиксов (?)
NightDawnFox Apr 10, 2025
39e2f98
все еще не работает
NightDawnFox Apr 11, 2025
2293149
обновленный аи контроллер
NightDawnFox Apr 11, 2025
f9700e5
еще одно улучшение
NightDawnFox Apr 11, 2025
cc7ee08
голиафы теперь атакуют (опять все переписано)
NightDawnFox Apr 11, 2025
01ba801
gbpltw
NightDawnFox Apr 11, 2025
0776681
увы
NightDawnFox Apr 12, 2025
e2b7b1c
криво
NightDawnFox Apr 13, 2025
f17b68f
секондс пер тик
NightDawnFox Apr 14, 2025
7250707
боже
NightDawnFox Apr 14, 2025
ce94942
боже наконец-то всё РАБОТАЕТ БЛЯДЬ
NightDawnFox Apr 14, 2025
16a4a99
временное
NightDawnFox Apr 14, 2025
0d0e326
пиздец
NightDawnFox Apr 15, 2025
01c1b45
I FUCKING HATE YOU AND HOPE YOU DIE
NightDawnFox Apr 15, 2025
b79d9b6
временно
NightDawnFox Apr 17, 2025
19b3b2a
быстрофикс
NightDawnFox Apr 17, 2025
41758f1
Еще немного
NightDawnFox Apr 19, 2025
d2336b6
Финальные (нет) правки
NightDawnFox Apr 19, 2025
59cee74
увы
NightDawnFox Apr 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions code/__DEFINES/MC.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,10 @@
/datum/controller/subsystem/verb_manager/##X/fire() {..() /*just so it shows up on the profiler*/} \
/datum/controller/subsystem/verb_manager/##X

#define AI_CONTROLLER_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/ai_controllers/##X);\
/datum/controller/subsystem/ai_controllers/##X/New(){\
NEW_SS_GLOBAL(SS##X);\
PreInit();\
}\
/datum/controller/subsystem/ai_controllers/##X/fire() {..() /*just so it shows up on the profiler*/} \
/datum/controller/subsystem/ai_controllers/##X
95 changes: 89 additions & 6 deletions code/__DEFINES/ai.dm
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
#define GET_AI_BEHAVIOR(behavior_type) SSai_behaviors.ai_behaviors[behavior_type]
#define GET_TARGETING_STRATEGY(targeting_type) SSai_behaviors.targeting_strategies[targeting_type]
#define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type)

#define AI_STATUS_ON 1
#define AI_STATUS_OFF 2

//AI controller flags
//If you add a new status, be sure to add it to the ai_controllers subsystem's ai_controllers_by_status list.
///The AI is currently active.
#define AI_STATUS_ON "ai_on"
///The AI is currently offline for any reason.
#define AI_STATUS_OFF "ai_off"
///The AI is currently in idle mode.
#define AI_STATUS_IDLE "ai_idle"

//Flags returned by get_able_to_run()
///pauses AI processing
#define AI_UNABLE_TO_RUN (1<<1)
///bypass canceling our actions on set_ai_status()
#define AI_PREVENT_CANCEL_ACTIONS (1<<2)

///Monkey checks
#define SHOULD_RESIST(source) (source.on_fire || source.buckled || HAS_TRAIT(source, TRAIT_RESTRAINED) || (source.pulledby && source.pulledby.grab_state > GRAB_PASSIVE))
Expand All @@ -12,6 +24,9 @@
///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on
#define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles

// How far should we, by default, be looking for interesting things to de-idle?
#define AI_DEFAULT_INTERESTING_DIST 14

///Cooldown on planning if planning failed last time

#define AI_FAILED_PLANNING_COOLDOWN 1.5 SECONDS
Expand All @@ -21,11 +36,18 @@

///Does this task require movement from the AI before it can be performed?
#define AI_BEHAVIOR_REQUIRE_MOVEMENT (1<<0)
///Does this require the current_movement_target to be adjacent and in reach?
#define AI_BEHAVIOR_REQUIRE_REACH (1<<1)
///Does this task let you perform the action while you move closer? (Things like moving and shooting)
#define AI_BEHAVIOR_MOVE_AND_PERFORM (1<<1)
#define AI_BEHAVIOR_MOVE_AND_PERFORM (1<<2)
///Does this behavior NOT block planning?
#define AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION (1<<2)


///AI flags
#define STOP_MOVING_WHEN_PULLED (1<<0)
/// Continue processing even if dead
#define CAN_ACT_WHILE_DEAD (1<<1)

///Subtree defines

Expand Down Expand Up @@ -181,7 +203,68 @@

///Basic Mob Keys

///Targetting subtrees
///Targeting subtrees
#define BB_BASIC_MOB_CURRENT_TARGET "BB_basic_current_target"
#define BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION "BB_basic_current_target_hiding_location"
#define BB_TARGETTING_DATUM "targetting_datum"
#define BB_TARGETING_STRATEGY "targeting_strategy"

/// Key where we store the tentacleing ability
#define BB_GOLIATH_TENTACLES "BB_goliath_tentacles"
/// Key where goliath stores a hole it wants to get into
#define BB_GOLIATH_HOLE_TARGET "BB_goliath_hole"

///List of mobs who have damaged us
#define BB_BASIC_MOB_RETALIATE_LIST "BB_basic_mob_shitlist"

/// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them
#define BB_FRIENDS_LIST "BB_friends_list"

/// Generic key for a non-specific targeted action
#define BB_TARGETED_ACTION "BB_TARGETED_action"

///key holding a range to look for stuff in
#define BB_SEARCH_RANGE "BB_search_range"

///key holding our eating cooldown
#define BB_EAT_FOOD_COOLDOWN "BB_eat_food_cooldown"

///hunger cooldown for basic mobs
#define EAT_FOOD_COOLDOWN 45 SECONDS

///list of foods this mob likes
#define BB_BASIC_FOODS "BB_basic_foods"

///key holding any food we've found
#define BB_TARGET_FOOD "BB_TARGET_FOOD"

///key holding emotes we play after eating
#define BB_EAT_EMOTES "BB_eat_emotes"

///key holding the next time we eat
#define BB_NEXT_FOOD_EAT "BB_next_food_eat"

///Blackboard key for a whitelist typecache of "things we can target while trying to move"
#define BB_OBSTACLE_TARGETING_WHITELIST "BB_targeting_whitelist"
/// What typepath the holding object targeting strategy should look for
#define BB_TARGET_HELD_ITEM "BB_target_held_item"

/// Blackboard key storing how long your targeting strategy has held a particular target
#define BB_BASIC_MOB_HAS_TARGET_TIME "BB_basic_mob_has_target_time"

///Targetting keys for something to run away from, if you need to store this separately from current target
///Targeting keys for something to run away from, if you need to store this separately from current target
#define BB_BASIC_MOB_FLEE_TARGET "BB_basic_flee_target"
#define BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION "BB_basic_flee_target_hiding_location"

#define BB_FLEE_TARGETING_STRATEGY "flee_targeting_strategy"
#define BB_BASIC_MOB_FLEE_DISTANCE "BB_basic_flee_distance"
#define DEFAULT_BASIC_FLEE_DISTANCE 9

///should we skip the faction check for the targeting strategy?
#define BB_ALWAYS_IGNORE_FACTION "BB_always_ignore_factions"

///are we in some kind of temporary state of ignoring factions when targeting? can result in volatile results if multiple behaviours touch this
#define BB_TEMPORARILY_IGNORE_FACTION "BB_temporarily_ignore_factions"

/// Key for the minimum status at which we want to target mobs (does not need to be specified if CONSCIOUS)
#define BB_TARGET_MINIMUM_STAT "BB_target_minimum_stat"
19 changes: 19 additions & 0 deletions code/__DEFINES/basic_mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,22 @@

///Basic mob flags
#define DEL_ON_DEATH (1<<0)
/// Rotate mob 180 degrees while it is dead
#define FLIP_ON_DEATH (1<<1)
/// Mob remains dense while dead
#define REMAIN_DENSE_WHILE_DEAD (1<<2)
// Mob can be set on fire
#define FLAMMABLE_MOB (1<<3)
/// Mob never takes damage from unarmed attacks
#define IMMUNE_TO_FISTS (1<<4)

/// Sent from /mob/living/basic/proc/look_dead() : ()
#define COMSIG_BASICMOB_LOOK_DEAD "basicmob_look_dead"
/// Sent from /mob/living/basic/proc/look_alive() : ()
#define COMSIG_BASICMOB_LOOK_ALIVE "basicmob_look_alive"

/// Temporary trait applied when an attack forecast animation has completed
#define TRAIT_BASIC_ATTACK_FORECAST "trait_basic_attack_forecast"
#define INTERACTION_BASIC_ATTACK_FORCEAST "interaction_basic_attack_forecast"

#define DOING_INTERACTION(user, interaction_key) (LAZYACCESS(user.do_afters, interaction_key))
11 changes: 9 additions & 2 deletions code/__DEFINES/dcs/flags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,17 @@
#define COMPONENT_DUPE_ALLOWED 1
/// new component is deleted
#define COMPONENT_DUPE_UNIQUE 2
/**
* Component uses source tracking to manage adding and removal logic.
* Add a source/spawn to/the component by using AddComponentFrom(source, component_type, args...)
* Removing the last source will automatically remove the component from the parent.
* Arguments will be passed to on_source_add(source, args...); ensure that Initialize and on_source_add have the same signature.
*/
#define COMPONENT_DUPE_SOURCES 3
/// old component is given the initialization args of the new
#define COMPONENT_DUPE_UNIQUE_PASSARGS 3
#define COMPONENT_DUPE_UNIQUE_PASSARGS 4
/// each component of the same type is consulted as to whether the duplicate should be allowed
#define COMPONENT_DUPE_SELECTIVE 4
#define COMPONENT_DUPE_SELECTIVE 5

//Redirection component init flags
#define REDIRECT_TRANSFER_WITH_TURF 1
Expand Down
4 changes: 4 additions & 0 deletions code/__DEFINES/dcs/helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@

/// A wrapper for _LoadComponent that allows us to pretend we're using normal named arguments
#define LoadComponent(arguments...) _LoadComponent(list(##arguments))

/// A wrapper for _AddComonent that passes in a source.
/// Necessary if dupe_mode is set to COMPONENT_DUPE_SOURCES.
#define AddComponentFrom(source, arguments...) _AddComponent(list(##arguments), source)
41 changes: 35 additions & 6 deletions code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -776,9 +776,6 @@
///Called when someone attempts to cuff a carbon
#define COMSIG_CARBON_CUFF_ATTEMPTED "carbon_attempt_cuff"

// /mob/living/simple_animal/hostile signals
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
#define COMPONENT_HOSTILE_NO_ATTACK (1<<0)

///after attackingtarget has happened, source is the attacker and target is the attacked, extra argument for if the attackingtarget was successful
#define COMSIG_HOSTILE_POST_ATTACKINGTARGET "hostile_post_attackingtarget"
Expand Down Expand Up @@ -973,8 +970,6 @@
///from the base of /obj/projectile/proc/fire(): ()
#define COMSIG_PROJECTILE_FIRE "projectile_fire"
///sent to targets during the process_hit proc of projectiles
#define COMSIG_PROJECTILE_PREHIT "com_proj_prehit"
///sent to targets during the process_hit proc of projectiles
#define COMSIG_PROJECTILE_RANGE_OUT "projectile_range_out"
///sent when trying to force an embed (mainly for projectiles, only used in the embed element)
#define COMSIG_EMBED_TRY_FORCE "item_try_embed"
Expand Down Expand Up @@ -1356,6 +1351,40 @@
///Called on /basic when updating its speed, from base of /mob/living/basic/update_basic_mob_varspeed(): ()
#define POST_BASIC_MOB_UPDATE_VARSPEED "post_basic_mob_update_varspeed"

/// from start of /mob/living/handle_breathing(): (delta_time, times_fired)
/// from start of /mob/living/handle_breathing(): (seconds_per_tick, times_fired)
#define COMSIG_LIVING_HANDLE_BREATHING "living_handle_breathing"

///from relay_attackers element: (atom/attacker, attack_flags)
#define COMSIG_ATOM_WAS_ATTACKED "atom_was_attacked"

///from base of atom/mech_melee_attack(): (obj/mecha/M)
#define COMSIG_ATOM_ATTACK_MECH "atom_attack_mech"

///sent to targets during the process_hit proc of throwing atoms
#define COMSIG_ATOM_PREHITBY "atom_pre_hitby"
#define COMSIG_HIT_PREVENTED (1<<0)

///sent to targets during the process_hit proc of projectiles
#define COMSIG_PROJECTILE_PREHIT "com_proj_prehit"
#define PROJECTILE_INTERRUPT_HIT (1<<0)

/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, proximity_flag, click_parameters)
#define COMSIG_ATOM_AFTER_ATTACKEDBY "atom_after_attackby"


// Cooldown spells signals

/// From base of /obj/effect/proc_holder/spell/proc/before_cast()
#define COMSIG_MOB_ABILITY_STARTED "mob_ability_base_started"
/// Return to block the ability from starting / activating
#define COMPONENT_BLOCK_ABILITY_START (1<<0)
/// From base of /obj/effect/proc_holder/spell/proc/before_cast(), sent to the action owner: (datum/action/cooldown/finished)
#define COMSIG_MOB_ABILITY_FINISHED "mob_ability_base_finished"

///Called from /mob/living/carbon/help_shake_act, before any hugs have occurred. (mob/living/helper)
#define COMSIG_CARBON_PRE_MISC_HELP "carbon_pre_misc_help"
/// Stops the rest of help act (hugging, etc) from occurring
#define COMPONENT_BLOCK_MISC_HELP (1<<0)

///Called from /obj/item/reagent_containers/attack, sent to target
#define COMSIG_ATOM_TRY_FEED "atom_try_feed"
32 changes: 32 additions & 0 deletions code/__DEFINES/dcs/signals_ai.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

/// Signal sent when a blackboard key is set to a new value
#define COMSIG_AI_BLACKBOARD_KEY_SET(blackboard_key) "ai_blackboard_key_set_[blackboard_key]"

///Signal sent before a blackboard key is cleared
#define COMSIG_AI_BLACKBOARD_KEY_PRECLEAR(blackboard_key) "ai_blackboard_key_pre_clear_[blackboard_key]"

/// Signal sent when a blackboard key is cleared
#define COMSIG_AI_BLACKBOARD_KEY_CLEARED(blackboard_key) "ai_blackboard_key_clear_[blackboard_key]"

/// From /datum/element/basic_eating/try_eating()
#define COMSIG_MOB_PRE_EAT "mob_pre_eat"
///cancel eating attempt
#define COMSIG_MOB_CANCEL_EAT (1<<0)

/// From /datum/element/basic_eating/finish_eating()
#define COMSIG_MOB_ATE "mob_ate"
///cancel post eating
#define COMSIG_MOB_TERMINATE_EAT (1<<0)


// simple_animal signals
/// called when a simplemob is given sentience from a sentience potion (target = person who sentienced)
#define COMSIG_SIMPLEMOB_SENTIENCEPOTION "simplemob_sentiencepotion"
/// called when a simplemob is given sentience from a consciousness transference potion (target = person who sentienced)
#define COMSIG_SIMPLEMOB_TRANSFERPOTION "simplemob_transferpotion"

/// From /mob/living/befriend() : (mob/living/new_friend)
#define COMSIG_LIVING_BEFRIENDED "living_befriended"

/// From /mob/living/unfriend() : (mob/living/old_friend)
#define COMSIG_LIVING_UNFRIENDED "living_unfriended"
21 changes: 21 additions & 0 deletions code/__DEFINES/dcs/signals_mining.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/// Fired by a mob which has been grabbed by a goliath
#define COMSIG_GOLIATH_TENTACLED_GRABBED "comsig_goliath_tentacle_grabbed"
/// Fired by a goliath tentacle which is returning to the earth
#define COMSIG_GOLIATH_TENTACLE_RETRACTING "comsig_goliath_tentacle_retracting"
/// Fired by a mob which has triggered a brimdust explosion from itself (not the mobs that get hit)
#define COMSIG_BRIMDUST_EXPLOSION "comsig_brimdust_explosion"

///before attackingtarget has happened, source is the attacker and target is the attacked
#define COMSIG_HOSTILE_PRE_ATTACKINGTARGET "hostile_pre_attackingtarget"
#define COMPONENT_HOSTILE_NO_ATTACK COMPONENT_CANCEL_ATTACK_CHAIN //cancel the attack, only works before attack happens


// signals for use by mob spawners
/// called when a spawner spawns a mob
#define COMSIG_SPAWNER_SPAWNED "spawner_spawned"

/// Called when a spawner spawns a mob in a turf peel, but we need to use the default case.
#define COMSIG_SPAWNER_SPAWNED_DEFAULT "spawner_spawned_default"

/// called when a ghost clicks a spawner role: (mob/living)
#define COMSIG_GHOSTROLE_SPAWNED "ghostrole_spawned"
2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals_object.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,5 @@

/// from /datum/surgery_step/proc/initiate() : (&time)
#define COMSIG_SURGERY_STEP_INIT "surgery_step_init"

#define COMSIG_ATOM_TOOL_INTERACTION "atom_item_interaction"
2 changes: 2 additions & 0 deletions code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(

#define ismineralturf(A) istype(A, /turf/simulated/mineral)

#define isasteroidturf(A) istype(A, /turf/simulated/floor/plating/asteroid)

#define isancientturf(A) istype(A, /turf/simulated/mineral/ancient)

#define islava(A) (istype(A, /turf/simulated/floor/lava))
Expand Down
7 changes: 7 additions & 0 deletions code/__DEFINES/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -517,3 +517,10 @@
#define DEADCHAT_ANARCHY_MODE (1<<1)
/// Mutes the democracy mode messages send to orbiters at the end of each cycle. Useful for when the cooldown is so low it'd get spammy.
#define MUTE_DEADCHAT_DEMOCRACY_MESSAGES (1<<2)

///The damage type of the weapon projectile is non-lethal stamina
#define ATTACKER_STAMINA_ATTACK (1<<0)
///the attacker is shoving the source
#define ATTACKER_SHOVING (1<<1)
/// The attack is a damaging-type attack
#define ATTACKER_DAMAGING_ATTACK (1<<2)
6 changes: 5 additions & 1 deletion code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@
#define SPECIES_VULPKANIN "Vulpkanin"
#define SPECIES_WRYN "Wryn"

#define isanimal(A) (istype((A), /mob/living/simple_animal) || istype(A, /mob/living/basic))
#define isanimal(A) (istype((A), /mob/living/simple_animal))
#define is_simple_or_basic_mob(A) (istype((A), /mob/living/simple_animal) || istype(A, /mob/living/basic))
#define iscat(A) (istype((A), /mob/living/simple_animal/pet/cat))
#define isdog(A) (istype((A), /mob/living/simple_animal/pet/dog))
#define iscorgi(A) (istype((A), /mob/living/simple_animal/pet/dog/corgi))
Expand Down Expand Up @@ -512,3 +513,6 @@
#define SQUASHED_SHOULD_BE_DOWN (1<<0)
///Whether or not to gib when the squashed mob is moved over
#define SQUASHED_SHOULD_BE_GIBBED (1<<0)

/// Types of bullets that mining mobs take full damage from
#define MINING_MOB_PROJECTILE_VULNERABILITY list(BRUTE)
5 changes: 3 additions & 2 deletions code/__DEFINES/subsystems.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,11 @@
#define INIT_ORDER_EVENTS 42
#define INIT_ORDER_HOLIDAY 41
#define INIT_ORDER_JOBS 40
#define INIT_ORDER_AI_MOVEMENT 36 //We need the movement setup
#define INIT_ORDER_AI_CONTROLLERS 35 //So the controller can get the ref
#define INIT_ORDER_AI_MOVEMENT 36 //We need the movement setup
#define INIT_ORDER_AI_CONTROLLERS 35 //So the controller can get the ref
#define INIT_ORDER_TICKER 30
#define INIT_ORDER_MAPPING 20
#define INIT_ORDER_AI_IDLE_CONTROLLERS 10
#define INIT_ORDER_HOLOMAP 8 // after map loads, but before atoms init
#define INIT_ORDER_EARLY_ASSETS 7
#define INIT_ORDER_FLUIDS 6 // Needs to be above atoms, as some atoms may want to start fluids/gases on init
Expand Down
9 changes: 8 additions & 1 deletion code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_MULTIZ_SUIT_SENSORS "multiz_suit_sensors"
/// This atom can ignore the "is on a turf" check for simple AI datum attacks, allowing them to attack from bags or lockers as long as any other conditions are met
#define TRAIT_AI_BAGATTACK "bagattack"

///Trait given by /datum/element/relay_attacker
#define TRAIT_RELAYING_ATTACKER "relaying_attacker"
/// Does this item bypass ranged armor checks?
#define TRAIT_BYPASS_RANGED_ARMOR "bypass_ranged_armor"
/// A trait gained by leaning against a wall
#define TRAIT_LEANING "leaning"
/// Cannot be grabbed by goliath tentacles
#define TRAIT_TENTACLE_IMMUNE "tentacle_immune"
/// Trait given to mobs that have the basic eating element
#define TRAIT_MOB_EATER "mob_eater"
6 changes: 6 additions & 0 deletions code/__DEFINES/traits/sources.dm
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,9 @@
#define BLOB_ZOMBIE_TRAIT "blob_zombie_trait"

#define ADMIN_OFFER_TRAIT "admin_offer"

/// Trait given by simple/basic mob death
#define BASIC_MOB_DEATH_TRAIT "basic_mob_death"

/// Trait applied to a mob when it gets a required "operational datum" (components/elements). Sends out the source as the type of the element.
#define TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM "element-required"
Loading