Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29

# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
This commit is contained in:
nevimer
2025-11-29 22:49:21 -05:00
1185 changed files with 39068 additions and 32028 deletions
+31 -28
View File
@@ -105,52 +105,55 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
/// This atom is a pseudo-floor that blocks map generation's checkPlaceAtom() from placing things like trees ontop of it.
#define TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES (1<<8)
////////////////Area flags\\\\\\\\\\\\\\
/// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn
#define VALID_TERRITORY (1<<0)
/// If blobs can spawn there and if it counts towards their score.
#define BLOBS_ALLOWED (1<<1)
/// If mining tunnel generation is allowed in this area
#define CAVES_ALLOWED (1<<2)
/// If flora are allowed to spawn in this area randomly through tunnel generation
#define FLORA_ALLOWED (1<<3)
/// If mobs can be spawned by natural random generation
#define MOB_SPAWN_ALLOWED (1<<4)
/// If megafauna can be spawned by natural random generation
#define MEGAFAUNA_SPAWN_ALLOWED (1<<5)
/// Are you forbidden from teleporting to the area? (centcom, mobs, wizard, hand teleporter)
#define NOTELEPORT (1<<6)
#define NOTELEPORT (1<<2)
/// Hides area from player Teleport function.
#define HIDDEN_AREA (1<<7)
/// If false, loading multiple maps with this area type will create multiple instances.
#define UNIQUE_AREA (1<<8)
#define HIDDEN_AREA (1<<3)
/// If people are allowed to suicide in it. Mostly for OOC stuff like minigames
#define BLOCK_SUICIDE (1<<9)
#define BLOCK_SUICIDE (1<<5)
/// If set, this area will be innately traversable by Xenobiology camera consoles.
#define XENOBIOLOGY_COMPATIBLE (1<<10)
#define XENOBIOLOGY_COMPATIBLE (1<<6)
/// If blood cultists can draw runes or build structures on this AREA.
#define CULT_PERMITTED (1<<11)
/// If engravings are persistent in this area
#define PERSISTENT_ENGRAVINGS (1<<12)
#define CULT_PERMITTED (1<<7)
/// Mobs that die in this area don't produce a dead chat message
#define NO_DEATH_MESSAGE (1<<13)
#define NO_DEATH_MESSAGE (1<<8)
/// This area should have extra shielding from certain event effects
#define EVENT_PROTECTED (1<<14)
#define EVENT_PROTECTED (1<<9)
/// This Area Doesn't have Flood or Bomb Admin Messages, but will still log
#define QUIET_LOGS (1<<15)
/// This area does not allow virtual entities to enter.
#define VIRTUAL_SAFE_AREA (1<<16)
#define QUIET_LOGS (1<<10)
/// This area does not allow the Binary channel
#define BINARY_JAMMING (1<<17)
#define BINARY_JAMMING (1<<11)
/// This area prevents Bag of Holding rifts from being opened.
#define NO_BOH (1<<18)
#define NO_BOH (1<<12)
/// This area prevents fishing from removing unique/limited loot from sources that're also used outside of it.
#define UNLIMITED_FISHING (1<<19)
#define UNLIMITED_FISHING (1<<13)
/// This area is prevented from having gravity (ie. space, nearstation, or outside solars)
#define NO_GRAVITY (1<<20)
#define NO_GRAVITY (1<<14)
/// This area can be teleported in, but -only- to locations within that same area.
#define LOCAL_TELEPORT (1<<21)
#define LOCAL_TELEPORT (1<<15)
////////////////Area Mapping Flags\\\\\\\\\\\\\\
/// If false, loading multiple maps with this area type will create multiple instances.
#define UNIQUE_AREA (1<<0)
/// If mining tunnel generation is allowed in this area
#define CAVES_ALLOWED (1<<1)
/// If flora are allowed to spawn in this area randomly through tunnel generation
#define FLORA_ALLOWED (1<<2)
/// If mobs can be spawned by natural random generation
#define MOB_SPAWN_ALLOWED (1<<3)
/// If megafauna can be spawned by natural random generation
#define MEGAFAUNA_SPAWN_ALLOWED (1<<4)
/// If engravings are persistent in this area
#define PERSISTENT_ENGRAVINGS (1<<5)
/// This is a virtual/bitrunning area
#define VIRTUAL_AREA (1<<6)
/// This area does not allow virtual entities to enter.
#define VIRTUAL_SAFE_AREA (1<<7)
/*
These defines are used specifically with the atom/pass_flags bitmask
+2
View File
@@ -184,6 +184,7 @@
#define ACCESS_CENT_TELEPORTER "cent_teleporter"
#define ACCESS_CENT_CAPTAIN "cent_captain"
#define ACCESS_CENT_BAR "cent_bar"
#define ACCESS_CENT_OFFICER "cent_officer"
/// Special Ops. Captain's display case, Marauder and Seraph mechs.
#define ACCESS_CENT_SPECOPS "cent_specops"
@@ -389,6 +390,7 @@
ACCESS_CENT_STORAGE, \
ACCESS_CENT_TELEPORTER, \
ACCESS_CENT_THUNDER, \
ACCESS_CENT_OFFICER, \
)
/// Syndicate areas off station. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_SYNDICATE)
+2
View File
@@ -76,6 +76,8 @@
//Generic subtree defines
/// default search range (tiles, passed to oview) when using find_and_set
#define SEARCH_TACTIC_DEFAULT_RANGE 7
/// probability that the pawn should try resisting out of restraints
#define RESIST_SUBTREE_PROB 50
///macro for whether it's appropriate to resist right now, used by resist subtree
+1
View File
@@ -32,6 +32,7 @@
#define OPERATIVE_CAMERA_NET "operative"
#define CAMERANET_NETWORK_CURATOR "curator"
#define CAMERANET_NETWORK_FILMSTUDIO "filmstudio"
#define CAMERANET_NETWORK_MONASTERY "monastery"
// Ruins/Away missiosn/Misc camera nets
#define CAMERANET_NETWORK_MOON19_XENO "mo19x"
+4 -4
View File
@@ -31,19 +31,19 @@
//debug printing macros (for development and testing)
/// Used for debug messages to the world
#define debug_world(msg) if (GLOB.Debug2) to_chat(world, \
#define debug_world(msg) if (GLOB.debugging_enabled) to_chat(world, \
type = MESSAGE_TYPE_DEBUG, \
text = "DEBUG: [msg]")
/// Used for debug messages to the player
#define debug_usr(msg) if (GLOB.Debug2 && usr) to_chat(usr, \
#define debug_usr(msg) if (GLOB.debugging_enabled && usr) to_chat(usr, \
type = MESSAGE_TYPE_DEBUG, \
text = "DEBUG: [msg]")
/// Used for debug messages to the admins
#define debug_admins(msg) if (GLOB.Debug2) to_chat(GLOB.admins, \
#define debug_admins(msg) if (GLOB.debugging_enabled) to_chat(GLOB.admins, \
type = MESSAGE_TYPE_DEBUG, \
text = "DEBUG: [msg]")
/// Used for debug messages to the server
#define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]")
#define debug_world_log(msg) if (GLOB.debugging_enabled) log_world("DEBUG: [msg]")
/// Adds a generic box around whatever message you're sending in chat. Really makes things stand out.
#define boxed_message(str) ("<div class='boxed_message'>" + str + "</div>")
/// Adds a box around whatever message you're sending in chat. Can apply color and/or additional classes. Available colors: red, green, blue, purple. Use it like red_box
+1
View File
@@ -125,6 +125,7 @@
#define COLOR_MOSTLY_PURE_PINK "#E4005B"
#define COLOR_ADMIN_PINK "#D100D1"
#define COLOR_TONGUE_PINK "#ff6ea0"
#define COLOR_PUCE "#cc8899"
#define COLOR_BLUSH_PINK "#DE5D83"
#define COLOR_FADED_PINK "#ff80d5"
#define COLOR_MAGENTA "#FF00FF"
@@ -14,7 +14,7 @@
#define COMPONENT_NO_AFTERATTACK (1<<0)
///from base of atom/attack_hulk(): (/mob/living/carbon/human)
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack"
///from base of atom/animal_attack(): (/mob/user)
///from base of atom/animal_attack(): (/mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal"
//from base of atom/attack_basic_mob(): (/mob/user)
#define COMSIG_ATOM_ATTACK_BASIC_MOB "attack_basic_mob"
@@ -43,16 +43,18 @@
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost"
///from base of atom/attack_hand(): (mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand"
///from base of atom/attack_paw(): (mob/user)
///from base of atom/attack_paw(): (mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
///from base of atom/mech_melee_attack(): (obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user)
#define COMSIG_ATOM_ATTACK_MECH "atom_attack_mech"
/// from base of atom/attack_robot(): (mob/user)
/// from base of atom/attack_robot(): (mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
/// from base of atom/attack_robot_secondary(): (mob/user)
#define COMSIG_ATOM_ATTACK_ROBOT_SECONDARY "atom_attack_robot_secondary"
/// from base of atom/attack_ai(): (mob/user, params)
#define COMSIG_ATOM_ATTACK_AI "atom_attack_ai"
/// from base of atom/attack_larva(): (mob/user, list/modifiers)
#define COMSIG_ATOM_ATTACK_LARVA "atom_attack_larva"
///from relay_attackers element: (atom/attacker, attack_flags)
#define COMSIG_ATOM_WAS_ATTACKED "atom_was_attacked"
///Called before a atom gets something tilted on them. If [COMPONENT_IMMUNE_TO_TILT_AND_CRUSH] is returned in a signal, the atom will be unaffected: (atom/target, atom/source)
@@ -197,6 +197,9 @@
#define TREAT_TTS_FILTER_ARG 3
#define TREAT_CAPITALIZE_MESSAGE 4
/// From mob/living/send_speech(): (atom/source, list/listeners)
#define COMSIG_LIVING_SEND_SPEECH "living_send_speech"
///From obj/item/toy/crayon/spraycan
#define COMSIG_LIVING_MOB_PAINTED "living_mob_painted"
@@ -374,3 +377,6 @@
/// From /mob/living/proc/mob_pickup() : (mob/living/user, obj/item/mob_holder/holder)
#define COMSIG_LIVING_SCOOPED_UP "living_scooped_up"
/// From /mob/living/proc/update_blood_status(), sent when the return value of /mob/living/proc/can_have_blood() changes : (had_blood, has_blood, old_blood_volume, new_blood_volume)
#define COMSIG_LIVING_UPDATE_BLOOD_STATUS "living_update_blood_status"
@@ -9,3 +9,9 @@
//from base of /proc/expand_shuttle() : (list/turfs)
#define COMSIG_SHUTTLE_EXPANDED "shuttle_expanded"
//from base of /turf/fromShuttleMove() : (turf/new_turf, move_mode)
#define COMSIG_SHUTTLE_TURF_SHOULD_MOVE_SPECIAL "shuttle_turf_should_move_special"
//from base of /obj/docking_port/mobile/proc/takeoff() : (turf/new_turf, movement_force, movement_direction, /obj/docking_port/stationary/old_dock, /obj/docking_port/mobile/shuttle)
#define COMSIG_SHUTTLE_TURF_ON_MOVE_SPECIAL "shuttle_turf_on_move_special"
+2
View File
@@ -39,3 +39,5 @@
#define EXPERIMENT_CONFIG_SILENT_FAIL (1 << 2)
/// Experiment handlers with this flag will bypass any delay when trying to scan something
#define EXPERIMENT_CONFIG_IMMEDIATE_ACTION (1 << 3)
/// Experiment handlers with this flag will announce when an experiment is completed even if it isn't compatible with them.
#define EXPERIMENT_CONFIG_ALWAYS_ANNOUNCE (1 << 4)
+1
View File
@@ -350,3 +350,4 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list(
#define is_multi_tile_object(atom) (atom.bound_width > ICON_SIZE_X || atom.bound_height > ICON_SIZE_Y)
#define is_area_nearby_station(checked_area) (istype(checked_area, /area/space) || istype(checked_area, /area/space/nearstation) || istype(checked_area, /area/station/asteroid))
#define is_area_virtual(checked_area) (GLOB.virtual_areas && GLOB.virtual_areas[(checked_area).type])
+4
View File
@@ -0,0 +1,4 @@
#define CONFIG_JUKEBOX_SOUNDS "[global.config.directory]/jukebox_music/sounds/"
#define JUKEBOX_NAME 1
#define JUKEBOX_BEATS 2
+3
View File
@@ -159,6 +159,9 @@
// NOTICE: we break from the pattern of increasing in steps of like 0.01 here
// Because TOPDOWN_LAYER is 10000 and that's enough to floating point our modifications away
/// Used to shift all topdown layer emissives to a the game plane equivalent layers, as otherwise they render above everything else due to being KEEP_APART
#define TOPDOWN_TO_EMISSIVE_LAYER(layer) LERP(FLOOR_EMISSIVE_START_LAYER, FLOOR_EMISSIVE_END_LAYER, (layer - (TOPDOWN_LAYER + 1)) / TOPDOWN_LAYER_COUNT)
// Must be equal to the offset of the highest topdown layer
#define TOPDOWN_LAYER_COUNT 18
+6
View File
@@ -12,9 +12,15 @@
#define STOP_OVERLAY_UPDATE_BODY_PARTS (1<<2)
/// Nutrition changed last life tick, so we should bulk update this tick
#define QUEUE_NUTRITION_UPDATE (1<<3)
/// Blood volume has changed since the last [proc/update_blood_effects] call
#define QUEUE_BLOOD_UPDATE (1<<4)
/// This mob can have blood, cached value of [proc/can_have_blood]
#define LIVING_CAN_HAVE_BLOOD (1<<5)
/// Getter for a mob/living's lying angle, otherwise protected
#define GET_LYING_ANGLE(mob) (UNLINT(mob.lying_angle))
/// Checks if the mob can have blood
#define CAN_HAVE_BLOOD(mob) (mob.living_flags & LIVING_CAN_HAVE_BLOOD)
// Used in living mob offset list for determining pixel offsets
#define PIXEL_W_OFFSET "w"
+9
View File
@@ -2,3 +2,12 @@
#define CORPSE_INSTANT 1
///this mob spawn creates the corpse during GAME_STATE_PLAYING
#define CORPSE_ROUNDSTART 2
// Flags for using your static for a ghost role
/// Ghost role will take on the player's species
#define GHOSTROLE_TAKE_PREFS_SPECIES (1<<0)
/// Ghost role will take on the player's apperance (though exlcuding name)
#define GHOSTROLE_TAKE_PREFS_APPEARANCE (1<<1)
/// Return from create to stop the spawn process. Falsy value so one can just check !create()
#define CANCEL_SPAWN FALSE
+4 -2
View File
@@ -673,7 +673,7 @@
#define AI_EMOTION_UNSURE "Unsure"
#define AI_EMOTION_CONFUSED "Confused"
#define AI_EMOTION_SAD "Sad"
#define AI_EMOTION_BSOD "BSOD"
#define AI_EMOTION_BSOD "BSOD" //It is used only on EMP pulse displays.
#define AI_EMOTION_BLANK "Blank"
#define AI_EMOTION_PROBLEMS "Problems?"
#define AI_EMOTION_AWESOME "Awesome"
@@ -683,6 +683,8 @@
#define AI_EMOTION_DORFY "Dorfy"
#define AI_EMOTION_BLUE_GLOW "Blue Glow"
#define AI_EMOTION_RED_GLOW "Red Glow"
#define AI_EMOTION_DEAD "Dead" //This one is used when deactivating the AI
#define AI_EMOTION_DOWNLOAD "Download"
// Defines for AI holograms
#define AI_HOLOGRAM_CATEGORY_ANIMAL "Animal"
@@ -1095,7 +1097,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
#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)
#define AT_TOXIN_VOMIT_THRESHOLD(mob) (mob.get_tox_loss() > 45 && mob.nutrition > 20)
/// The duration of the flip emote animation
#define FLIP_EMOTE_DURATION 0.7 SECONDS
+4 -1
View File
@@ -30,6 +30,8 @@
#define CONDUCTS_ELECTRICITY (1<<13)
/// Atoms don't spawn anything when deconstructed (they just vanish)
#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<14)
/// Flag which tells an object to hang onto an support atom on late initialize. Usefull only during mapload and supported by some atoms only
#define MOUNT_ON_LATE_INITIALIZE (1<<15)
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
@@ -44,7 +46,6 @@
#define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
#define DROPDEL (1<<6) // When dropped, it calls qdel on itself
#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
#define DO_NOT_WARDROBE (1<<8) // Used to denote anything that should not be stashed by SSwardrobe
/**
* for all things that are technically items but don't want to be treated as such, given on a case-by-case basis
* examples of use are hand items, omni-toolsets, non-limb limbs (hand eater, mounted chainsaw, many null rods), borg modules, bodyparts, organs, etc.
@@ -112,6 +113,8 @@
#define INTERNALS_ADJUST_EXEMPT (1<<17)
/// Indicates that the piece of clothing contributes towards Sleeping Carp's style factor, which determines evasion probabilities. See /datums/martial/sleeping_carp/carp_style_check().
#define CARP_STYLE_FACTOR (1<<18)
/// Prevents clothing from losing bodyparts coverage when shredded
#define NO_ZONE_DISABLING (1<<19)
/// Integrity defines for clothing (not flags but close enough)
#define CLOTHING_PRISTINE 0 // We have no damage on the clothing
+42
View File
@@ -205,6 +205,48 @@
#define REACTION_TAG_PLANT (1<<19)
/// This reaction is produces a product that affects plants
#define REACTION_TAG_COMPETITIVE (1<<20)
/// Reaction produces a reagent that is a common component for other reactions
#define REACTION_TAG_COMPONENT (1<<21)
/// Denotes reactions that will immediately do something on reaction, like an explosion, smoke, etc.
#define REACTION_TAG_ACTIVE (1<<22)
/// Readable list of reagent reaction tags (in the same order as they are defined!)
#define REACTION_TAG_READABLE list(\
"BRUTE" = REACTION_TAG_BRUTE,\
"BURN" = REACTION_TAG_BURN,\
"TOXIN" = REACTION_TAG_TOXIN,\
"OXY" = REACTION_TAG_OXY,\
"HEALING" = REACTION_TAG_HEALING,\
"DAMAGING" = REACTION_TAG_DAMAGING,\
"EXPLOSIVE" = REACTION_TAG_EXPLOSIVE,\
"OTHER" = REACTION_TAG_OTHER,\
"DANGEROUS" = REACTION_TAG_DANGEROUS,\
"EASY" = REACTION_TAG_EASY,\
"MODERATE" = REACTION_TAG_MODERATE,\
"HARD" = REACTION_TAG_HARD,\
"ORGAN" = REACTION_TAG_ORGAN,\
"DRINK" = REACTION_TAG_DRINK,\
"FOOD" = REACTION_TAG_FOOD,\
"SLIME" = REACTION_TAG_SLIME,\
"DRUG" = REACTION_TAG_DRUG,\
"UNIQUE" = REACTION_TAG_UNIQUE,\
"CHEMICAL" = REACTION_TAG_CHEMICAL,\
"PLANT" = REACTION_TAG_PLANT,\
"COMPETITIVE" = REACTION_TAG_COMPETITIVE,\
"COMPONENT" = REACTION_TAG_COMPONENT,\
"ACTIVE" = REACTION_TAG_ACTIVE,\
)
/// Reaction tags for basic damgae types
#define DAMAGE_HEALING_REACTION_TAGS (REACTION_TAG_BRUTE | REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY)
/// Reaction tags for medication
#define MEDICATION_REACTION_TAGS (REACTION_TAG_HEALING | REACTION_TAG_DAMAGING | REACTION_TAG_ORGAN | REACTION_TAG_DRUG)
/// Reaction tags for things the chemist would make
#define CHEMIST_REACTION_TAGS (REACTION_TAG_EXPLOSIVE | REACTION_TAG_CHEMICAL | REACTION_TAG_COMPETITIVE | REACTION_TAG_EXPLOSIVE | REACTION_TAG_COMPONENT)
/// Reaction tags for botanist stuff
#define BOTANIST_REACTION_TAGS (REACTION_TAG_PLANT | REACTION_TAG_COMPONENT)
/// Reaction tags for food and drink mainly
#define KITCHEN_REACTION_TAGS (REACTION_TAG_FOOD | REACTION_TAG_DRINK | REACTION_TAG_COMPONENT)
//flags used by holder.dm to locate an reagent
///Direct type
+1
View File
@@ -80,6 +80,7 @@
#define SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER 0.01
/// How much money is one point of gain worth.
#define SCIPAPER_GAIN_TO_MONEY 125
#define SCIPAPER_ALREADY_BOUGHT 2
///Connects the 'server_var' to a valid research server on your Z level.
///Used for machines in LateInitialize, to ensure that RND servers are loaded first.
+18
View File
@@ -168,6 +168,9 @@
*/
#define rustg_dmi_inject_metadata(path, metadata) RUSTG_CALL(RUST_G, "dmi_inject_metadata")(path, metadata)
#define rustg_create_qr_code_png(path, data) RUSTG_CALL(RUST_G, "create_qr_code_png")(path, data)
#define rustg_create_qr_code_svg(data) RUSTG_CALL(RUST_G, "create_qr_code_svg")(data)
#define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname)
#define rustg_file_exists(fname) (RUSTG_CALL(RUST_G, "file_exists")(fname) == "true")
#define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname)
@@ -280,6 +283,21 @@
#define rustg_iconforge_generate(file_path, spritesheet_name, sprites, hash_icons, generate_dmi, flatten) RUSTG_CALL(RUST_G, "iconforge_generate")(file_path, spritesheet_name, sprites, "[hash_icons]", "[generate_dmi]", "[flatten]")
/// Returns a job_id for use with rustg_iconforge_check()
#define rustg_iconforge_generate_async(file_path, spritesheet_name, sprites, hash_icons, generate_dmi, flatten) RUSTG_CALL(RUST_G, "iconforge_generate_async")(file_path, spritesheet_name, sprites, "[hash_icons]", "[generate_dmi]", "[flatten]")
/// Creates a single DMI or PNG using 'sprites' as a list of icon states / images.
/// This function is intended for generating icons with only a few states that have little in common with each other, and only one size.
/// For icons with a large number of states, potentially variable sizes, that re-use sets of transforms more than once, or that benefit from caching, use rustg_iconforge_generate.
/// sprites - follows the same format as rustg_iconforge_generate.
/// file_path - the full relative path at which the PNG or DMI will be written. It must be a full filepath such as tmp/my_icon.dmi or my_icon.png
/// flatten - boolean (0 or 1) determines if the DMI output will be flattened to a single frame/dir if unscoped (null/0 dir or frame values).
///
/// Returns a HeadlessResult, decoded to a BYOND list (always, it's not possible for this to panic unless rustg itself has an issue) containing the following fields:
/// list(
/// "file_path" = "tmp/my_icon.dmi" // [whatever you input returned back to you, null if there was a fatal error]
/// "width" = 32 // the width, which is determined by the first entry of 'sprites', null if there was a fatal error
/// "height" = 32 // the height, which is determined by the first entry of 'sprites', null if there was a fatal error
/// "error" = "[A string, null if there were no errors.]"
/// )
#define rustg_iconforge_generate_headless(file_path, sprites, flatten) json_decode(RUSTG_CALL(RUST_G, "iconforge_generate_headless")(file_path, sprites, "[flatten]"))
/// Returns the status of an async job_id, or its result if it is completed. See RUSTG_JOB DEFINEs.
#define rustg_iconforge_check(job_id) RUSTG_CALL(RUST_G, "iconforge_check")("[job_id]")
/// Clears all cached DMIs and images, freeing up memory.
+4 -3
View File
@@ -81,9 +81,10 @@
#define DOCKING_NULL_SOURCE (1<<4)
//Docking turf movements
#define MOVE_TURF 1
#define MOVE_AREA 2
#define MOVE_CONTENTS 4
#define MOVE_TURF (1<<0)
#define MOVE_AREA (1<<1)
#define MOVE_CONTENTS (1<<2)
#define MOVE_SPECIAL (1<<3)
//Rotation params
#define ROTATE_DIR 1
-1
View File
@@ -57,7 +57,6 @@
// Grouped effect sources, see also code/__DEFINES/traits.dm
#define STASIS_MACHINE_EFFECT "stasis_machine"
#define STASIS_CHEMICAL_EFFECT "stasis_chemical"
#define STASIS_SHAPECHANGE_EFFECT "stasis_shapechange"
#define STASIS_ADMIN "stasis_admin"
#define STASIS_LEGION_EATEN "stasis_eaten"
+5 -1
View File
@@ -222,7 +222,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NO_AUGMENTS "no_augments"
/// This carbon doesn't get hungry
#define TRAIT_NOHUNGER "no_hunger"
/// This carbon doesn't bleed
/// This carbon doesn't have blood
#define TRAIT_NOBLOOD "noblood"
/// This just means that the carbon will always have functional liverless metabolism
#define TRAIT_LIVERLESS_METABOLISM "liverless_metabolism"
@@ -1606,4 +1606,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Mob is artificially spawned rather than being created through more natural means - applied to monkey cubes and such
#define TRAIT_SPAWNED_MOB "spawned_mob"
/// Turf is one that ai mobs will generally avoid pathing through
/// Doesn't need to be applied to any turfs that override can_cross_safely
#define TRAIT_AI_AVOID_TURF "warning_turf"
// END TRAIT DEFINES
+5 -3
View File
@@ -79,12 +79,14 @@ GLOBAL_LIST_INIT(wound_severities_chronological, list(
#define BIO_FLESH (1<<1)
/// Has metal - allows the victim to suffer robotic blunt and burn wounds
#define BIO_METAL (1<<2)
/// Has wood - should probably be able to catch on fire, or something
#define BIO_WOOD (1<<3)
/// Is wired internally - allows the victim to suffer electrical wounds (robotic T1-T3 slash/pierce)
#define BIO_WIRED (1<<3)
#define BIO_WIRED (1<<4)
/// Has bloodflow - can suffer bleeding wounds and can bleed
#define BIO_BLOODED (1<<4)
#define BIO_BLOODED (1<<5)
/// Is connected by a joint - can suffer T1 bone blunt wounds (dislocation)
#define BIO_JOINTED (1<<5)
#define BIO_JOINTED (1<<6)
/// Robotic - can suffer all metal/wired wounds, such as: UNIMPLEMENTED PLEASE UPDATE ONCE SYNTH WOUNDS 9/5/2023 ~Niko
#define BIO_ROBOTIC (BIO_METAL|BIO_WIRED)
/// Has flesh and bone - See BIO_BONE and BIO_FLESH
+2 -2
View File
@@ -45,7 +45,7 @@
if(istype(buckled, /obj/vehicle/ridden))
buckled.unbuckle_mob(src)
KnockToFloor(TRUE, ignore_canknockdown, knockdown_amt)
adjustStaminaLoss(stamina_damage)
adjust_stamina_loss(stamina_damage)
if(disarm)
drop_all_held_items()
if(brief_stun)
@@ -163,7 +163,7 @@
// wound bonus because if you're doing this you probably really don't like the other guy so you're looking forward to inconveniencing them (with a fracture)
var/fun_times_at_the_headbash_factory = (head_knock ? 8 : 3)
if(head_knock)
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 15)
target.apply_damage(15, BRUTE, affecting, armor_block, wound_bonus = fun_times_at_the_headbash_factory, exposed_wound_bonus = fun_times_at_the_headbash_factory)
playsound(target, 'sound/effects/hit_kick.ogg', 70)
log_combat(user, target, "headsmashes", "against the floor")