Spelling and Grammar Fixes (#86022)

## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
This commit is contained in:
klorpa
2024-08-23 14:49:46 -05:00
committed by GitHub
parent 9a8c99cf8f
commit e1bf793264
108 changed files with 249 additions and 249 deletions
+2 -2
View File
@@ -16,8 +16,8 @@
#define MINOR_NEGATIVE 4
//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you dont want people to fuck with like wizard mutate
/// A mutation that can be activated and deactived by completing a sequence
//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you don't want people to fuck with like wizard mutate
/// A mutation that can be activated and deactivated by completing a sequence
#define MUT_NORMAL 1
/// A mutation that is in the mutations tab, and can be given and taken away through though the DNA console. Has a 0 before its name in the mutation section of the dna console
#define MUT_EXTRA 2
+2 -2
View File
@@ -19,7 +19,7 @@
///creates a running average of "things elapsed" per time period when you need to count via a smaller time period.
///eg you want an average number of things happening per second but you measure the event every tick (50 milliseconds).
///make sure both time intervals are in the same units. doesnt work if current_duration > total_duration or if total_duration == 0
///make sure both time intervals are in the same units. doesn't work if current_duration > total_duration or if total_duration == 0
#define MC_AVG_OVER_TIME(average, current, total_duration, current_duration) ((((total_duration) - (current_duration)) / (total_duration)) * (average) + (current))
#define MC_AVG_MINUTES(average, current, current_duration) (MC_AVG_OVER_TIME(average, current, 1 MINUTES, current_duration))
@@ -32,7 +32,7 @@
#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum;Processor.currentrun -= Datum
/// Returns true if the MC is initialized and running.
/// Optional argument init_stage controls what stage the mc must have initializted to count as initialized. Defaults to INITSTAGE_MAX if not specified.
/// Optional argument init_stage controls what stage the mc must have initialized to count as initialized. Defaults to INITSTAGE_MAX if not specified.
#define MC_RUNNING(INIT_STAGE...) (Master && Master.processing > 0 && Master.current_runlevel && Master.init_stage_completed == (max(min(INITSTAGE_MAX, ##INIT_STAGE), 1)))
#define MC_LOOP_RTN_NEWSTAGES 1
+6 -6
View File
@@ -25,7 +25,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define NO_SCREENTIPS_1 (1<<2)
/// Prevent clicking things below it on the same turf eg. doors/ fulltile windows
#define PREVENT_CLICK_UNDER_1 (1<<3)
///specifies that this atom is a hologram that isnt real
///specifies that this atom is a hologram that isn't real
#define HOLOGRAM_1 (1<<4)
///Whether /atom/Initialize() has already run for the object
#define INITIALIZED_1 (1<<5)
@@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
/// Whether or not this atom is storing contents for a disassociated storage object
#define HAS_DISASSOCIATED_STORAGE_1 (1<<16)
/// If this atom has experienced a decal element "init finished" sourced appearance update
/// We use this to ensure stacked decals don't double up appearance updates for no rasin
/// We use this to ensure stacked decals don't double up appearance updates for no reason
/// Flag as an optimization, don't make this a trait without profiling
/// Yes I know this is a stupid flag, no you can't take him from me
#define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<17)
@@ -81,9 +81,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define RICOCHET_HARD (1<<1)
//TURF FLAGS
/// If a turf cant be jaunted through.
/// If a turf can't be jaunted through.
#define NOJAUNT (1<<0)
/// If a turf is an usused reservation turf awaiting assignment
/// If a turf is an unused reservation turf awaiting assignment
#define UNUSED_RESERVATION_TURF (1<<1)
/// If a turf is a reserved turf
#define RESERVATION_TURF (1<<2)
@@ -281,8 +281,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define RELIGION_TOOL_SACRIFICE (1<<1)
#define RELIGION_TOOL_SECTSELECT (1<<2)
// ---- Skillchip incompatability flags ---- //
// These flags control which skill chips are compatible with eachother.
// ---- Skillchip incompatibility flags ---- //
// These flags control which skill chips are compatible with each other.
// By default, skillchips are incompatible with themselves and multiple of the same istype() cannot be implanted together. Set this flag to disable that check.
#define SKILLCHIP_ALLOWS_MULTIPLE (1<<0)
// This skillchip is incompatible with other skillchips from the incompatible_category list.
+1 -1
View File
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(syndicate_employers, list(
"Waffle Corporation Terrorist",
"Waffle Corporation",
))
///employers that are from nanotrasen
///employers that are from Nanotrasen
GLOBAL_LIST_INIT(nanotrasen_employers, list(
"Champions of Evil",
"Corporate Climber",
+2 -2
View File
@@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
turf.archived_cycle = SSair.times_fired;\
turf.temperature_archived = turf.temperature;
/* Fetch the energy transferred when two gas mixtures's temperature equalize.
/* Fetch the energy transferred when two gas mixtures' temperature equalize.
*
* To equalize two gas mixtures, we simply pool the energy and divide it by the pooled heat capacity.
* T' = (W1+W2) / (C1+C2)
@@ -109,7 +109,7 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
* Not immediately obvious, but saves us operation time.
*
* We put a lot of parentheses here because the numbers get really really big.
* By prioritizing the division we try to tone the number down so we dont get overflows.
* By prioritizing the division we try to tone the number down so we don't get overflows.
*
* Arguments:
* * temperature_delta: T2 - T1. [/datum/gas_mixture/var/temperature]
+3 -3
View File
@@ -13,14 +13,14 @@
#define OXY "oxygen"
/// Exhaustion and nonlethal damage.
#define STAMINA "stamina"
/// Brain damage. Should probably be decomissioned and replaced with proper organ damage.
/// Brain damage. Should probably be decommissioned and replaced with proper organ damage.
#define BRAIN "brain"
//Damage flag defines //
/// Involves corrosive substances.
#define ACID "acid"
/// Involved in checking wheter a disease can infect or spread. Also involved in xeno neurotoxin.
/// Involved in checking whether a disease can infect or spread. Also involved in xeno neurotoxin.
#define BIO "bio"
/// Involves a shockwave, usually from an explosion.
#define BOMB "bomb"
@@ -36,7 +36,7 @@
#define LASER "laser"
/// Involves a melee attack or a thrown object.
#define MELEE "melee"
/// Involved in checking the likelyhood of applying a wound to a mob.
/// Involved in checking the likelihood of applying a wound to a mob.
#define WOUND "wound"
#define ARMOR_ALL "all_damage_types"
+1 -1
View File
@@ -1,4 +1,4 @@
//Defines for amount of material retrived from sheets & other items
//Defines for amount of material retrieved from sheets & other items
/// The amount of materials you get from a sheet of mineral like iron/diamond/glass etc. 100 Units.
#define SHEET_MATERIAL_AMOUNT 100
/// The amount of materials you get from half a sheet. Used in standard object quantities. 50 units.
+1 -1
View File
@@ -7,7 +7,7 @@
#define RCD_WINDOWGRILLE (1 << 1)
/// Windoors & Airlocks
#define RCD_AIRLOCK (1 << 2)
/// Literarly anything that is spawned on top of a turf such as tables, machines etc
/// Literally anything that is spawned on top of a turf such as tables, machines etc
#define RCD_STRUCTURE (1 << 3)
/// For wallmounts like air alarms, fire alarms & apc
#define RCD_WALLFRAME (1 << 4)
+1 -1
View File
@@ -2,7 +2,7 @@
///from base of datum/action/proc/Trigger(): (datum/action)
#define COMSIG_ACTION_TRIGGER "action_trigger"
// Return to block the trigger from occuring
// Return to block the trigger from occurring
#define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0)
/// From /datum/action/Grant(): (mob/grant_to)
#define COMSIG_ACTION_GRANTED "action_grant"
@@ -74,7 +74,7 @@
#define COMSIG_MOVABLE_DISPOSING "movable_disposing"
// called when movable is expelled from a disposal pipe, bin or outlet on obj/pipe_eject: (direction)
#define COMSIG_MOVABLE_PIPE_EJECTING "movable_pipe_ejecting"
///called when the movable sucessfully has its anchored var changed, from base atom/movable/set_anchored(): (value)
///called when the movable successfully has its anchored var changed, from base atom/movable/set_anchored(): (value)
#define COMSIG_MOVABLE_SET_ANCHORED "movable_set_anchored"
///from base of atom/movable/setGrabState(): (newstate)
#define COMSIG_MOVABLE_SET_GRAB_STATE "living_set_grab_state"
+1 -1
View File
@@ -57,7 +57,7 @@
#define COMSIG_GLOB_NEW_MACHINE "!new_machine"
/// a client (re)connected, after all /client/New() checks have passed : (client/connected_client)
#define COMSIG_GLOB_CLIENT_CONNECT "!client_connect"
/// a weather event of some kind occured (all pass the datum/weather that changed state)
/// a weather event of some kind occurred (all pass the datum/weather that changed state)
#define COMSIG_WEATHER_TELEGRAPH(event_type) "!weather_telegraph [event_type]"
#define COMSIG_WEATHER_START(event_type) "!weather_start [event_type]"
#define COMSIG_WEATHER_WINDDOWN(event_type) "!weather_winddown [event_type]"
@@ -3,14 +3,14 @@
/// Stops the rest of the help
#define COMPONENT_BLOCK_HELP_ACT (1<<0)
///Called from /mob/living/carbon/help_shake_act, before any hugs have ocurred. (mob/living/helper)
///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 occuring
/// Stops the rest of help act (hugging, etc) from occurring
#define COMPONENT_BLOCK_MISC_HELP (1<<0)
///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have ocurred. (mob/living/helper)
///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have occurred. (mob/living/helper)
#define COMSIG_CARBON_HELP_ACT "carbon_help"
///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have ocurred. (mob/living/helped)
///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have occurred. (mob/living/helped)
#define COMSIG_CARBON_HELPED "carbon_helped_someone"
///When a carbon slips. Called on /turf/open/handle_slip()
@@ -95,11 +95,11 @@
#define COMPONENT_OVERRIDE_HEALTH_HUD (1<<0)
///Called when a carbon updates their sanity (source = carbon)
#define COMSIG_CARBON_SANITY_UPDATE "carbon_sanity_update"
///Called when a carbon attempts to breath, before the breath has actually occured
///Called when a carbon attempts to breath, before the breath has actually occurred
#define COMSIG_CARBON_ATTEMPT_BREATHE "carbon_attempt_breathe"
// Prevents the breath
#define COMSIG_CARBON_BLOCK_BREATH (1 << 0)
///Called when a carbon breathes, before the breath has actually occured
///Called when a carbon breathes, before the breath has actually occurred
#define COMSIG_CARBON_PRE_BREATHE "carbon_pre_breathe"
///Called when a carbon updates their mood
#define COMSIG_CARBON_MOOD_UPDATE "carbon_mood_update"
@@ -133,9 +133,9 @@
#define VISIBLE_NAME_FACE 1
//Index for the name of the id
#define VISIBLE_NAME_ID 2
//Index for whether their name is being overriden instead of obsfuscated
//Index for whether their name is being overridden instead of obfuscated
#define VISIBLE_NAME_FORCED 3
///from /mob/living/carbon/human/get_id_name; only returns if the mob has TRAIT_UNKNOWN and it's being overriden: (identity)
///from /mob/living/carbon/human/get_id_name; only returns if the mob has TRAIT_UNKNOWN and it's being overridden: (identity)
#define COMSIG_HUMAN_GET_FORCED_NAME "human_get_forced_name"
// Mob transformation signals
@@ -159,10 +159,10 @@
#define HANDLE_BLOOD_HANDLED (1<<0)
/// Return to skip default nutrition -> blood conversion
#define HANDLE_BLOOD_NO_NUTRITION_DRAIN (1<<1)
/// Return to skip oxyloss and similar effecst from blood level
/// Return to skip oxyloss and similar effects from blood level
#define HANDLE_BLOOD_NO_OXYLOSS (1<<2)
/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it shuld go
/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it should go
#define COMSIG_CARBON_LIMPING "mob_limp_check"
#define COMPONENT_CANCEL_LIMP (1<<0)
@@ -50,7 +50,7 @@
#define COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE
/// The argument of move_args which corresponds to the loc we're moving to
#define MOVE_ARG_NEW_LOC 1
/// The arugment of move_args which dictates our movement direction
/// The argument of move_args which dictates our movement direction
#define MOVE_ARG_DIRECTION 2
/// From base of /client/Move(): (direction, old_dir)
#define COMSIG_MOB_CLIENT_MOVED "mob_client_moved"
@@ -72,7 +72,7 @@
#define COMSIG_MOB_MIND_TRANSFERRED_INTO "mob_mind_transferred_into"
///from mind/transfer_from. Sent to the mob the mind is being transferred out of.
#define COMSIG_MOB_MIND_TRANSFERRED_OUT_OF "mob_mind_transferred_out_of"
/// From /mob/proc/ghostize() Called when a mob sucessfully ghosts
/// From /mob/proc/ghostize() Called when a mob successfully ghosts
#define COMSIG_MOB_GHOSTIZED "mob_ghostized"
///from base of obj/allowed(mob/M): (/obj) returns ACCESS_ALLOWED if mob has id access to the obj
+2 -2
View File
@@ -153,12 +153,12 @@
/// Sebt from obj/item/ui_action_click(): (mob/user, datum/action)
#define COMSIG_ITEM_UI_ACTION_CLICK "item_action_click"
/// Return to prevent the default behavior (attack_selfing) from ocurring.
/// Return to prevent the default behavior (attack_selfing) from occurring.
#define COMPONENT_ACTION_HANDLED (1<<0)
/// Sent from obj/item/item_action_slot_check(): (mob/user, datum/action, slot)
#define COMSIG_ITEM_UI_ACTION_SLOT_CHECKED "item_action_slot_checked"
/// Return to prevent the default behavior (attack_selfing) from ocurring.
/// Return to prevent the default behavior (attack_selfing) from occurring.
#define COMPONENT_ITEM_ACTION_SLOT_INVALID (1<<0)
///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone)
+1 -1
View File
@@ -113,7 +113,7 @@
// Charge
/// Sent from /datum/action/cooldown/spell/charge/cast(), to the item in hand being charged: (datum/action/cooldown/spell/spell, mob/user)
#define COMSIG_ITEM_MAGICALLY_CHARGED "item_magic_charged"
/// Return if an item was successfuly recharged
/// Return if an item was successful recharged
#define COMPONENT_ITEM_CHARGED (1 << 0)
/// Return if the item had a negative side effect occur while recharging
#define COMPONENT_ITEM_BURNT_OUT (1 << 1)
+1 -1
View File
@@ -1,6 +1,6 @@
// Notifies tools that something is happening.
// Sucessful actions against an atom.
// Successful actions against an atom.
///Called from /atom/proc/tool_act (atom)
#define COMSIG_TOOL_ATOM_ACTED_PRIMARY(tooltype) "tool_atom_acted_[tooltype]"
///Called from /atom/proc/tool_act (atom)
+1 -1
View File
@@ -22,7 +22,7 @@
#define EVENT_CATEGORY_FRIENDLY "Friendly"
///Events that affect the body and mind
#define EVENT_CATEGORY_HEALTH "Health"
///Events reserved for special occassions
///Events reserved for special occasions
#define EVENT_CATEGORY_HOLIDAY "Holiday"
///Events with enemy groups with a more complex plan
#define EVENT_CATEGORY_INVASION "Invasion"
+2 -2
View File
@@ -33,13 +33,13 @@
#define FACTION_HELL "hell"
/// Hivebots
#define FACTION_HIVEBOT "hivebot"
/// Illusionary creaturs
/// Illusionary creatures
#define FACTION_ILLUSION "illusion"
/// Creatures of the never finished jungle planet, and gorillas
#define FACTION_JUNGLE "jungle"
/// Small lizards
#define FACTION_LIZARD "lizard"
/// Maint creatures have mutual respect for eachother.
/// Maint creatures have mutual respect for each other.
#define FACTION_MAINT_CREATURES "maint_creatures"
/// Animated objects and statues
#define FACTION_MIMIC "mimic"
+4 -4
View File
@@ -308,7 +308,7 @@
#define BRUTE_DAMAGE_REQUIRED_TO_STOP_CRYSTALIZATION 30
#define CRYSTALIZE_STAGE_ENGULFING 100 //Cant use second defines
#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
@@ -511,7 +511,7 @@
#define WABBAJACK_HUMAN "humanoid"
#define WABBAJACK_ANIMAL "animal"
// Reasons a defibrilation might fail
// Reasons a defibrillation might fail
#define DEFIB_POSSIBLE (1<<0)
#define DEFIB_FAIL_SUICIDE (1<<1)
#define DEFIB_FAIL_HUSK (1<<2)
@@ -716,7 +716,7 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list(
/// Glasses layer
#define GLASSES_LAYER 17
/// Belt layer
#define BELT_LAYER 16 //Possible make this an overlay of somethign required to wear a belt?
#define BELT_LAYER 16 //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 15
/// Neck layer (for wearing capes and bedsheets)
@@ -847,7 +847,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
#define NEED_VENTCRAWL (1<<8)
/// Skips adjacency checks
#define BYPASS_ADJACENCY (1<<9)
/// Skips reccursive loc checks
/// Skips recursive loc checks
#define NOT_INSIDE_TARGET (1<<10)
/// Checks for base adjacency, but silences the error
#define SILENT_ADJACENCY (1<<11)
+10 -10
View File
@@ -39,7 +39,7 @@
* Timing should be based on how timing progresses on clients, not the server.
*
* Tracking this is more expensive,
* should only be used in conjuction with things that have to progress client side, such as
* should only be used in conjunction with things that have to progress client side, such as
* animate() or sound()
*/
#define TIMER_CLIENT_TIME (1<<2)
@@ -81,15 +81,15 @@
///Nothing happens
#define INITIALIZE_HINT_NORMAL 0
/**
* call LateInitialize at the end of all atom Initalization
* call LateInitialize at the end of all atom Initialization
*
* The item will be added to the late_loaders list, this is iterated over after
* initalization of subsystems is complete and calls LateInitalize on the atom
* initialization of subsystems is complete and calls LateInitalize on the atom
* see [this file for the LateIntialize proc](atom.html#proc/LateInitialize)
*/
#define INITIALIZE_HINT_LATELOAD 1
///Call qdel on the atom after intialization
///Call qdel on the atom after initialization
#define INITIALIZE_HINT_QDEL 2
///type and all subtypes should always immediately call Initialize in New()
@@ -106,23 +106,23 @@
//! ### SS initialization hints
/**
* Negative values incidate a failure or warning of some kind, positive are good.
* 0 and 1 are unused so that TRUE and FALSE are guarenteed to be invalid values.
* Negative values indicate a failure or warning of some kind, positive are good.
* 0 and 1 are unused so that TRUE and FALSE are guaranteed to be invalid values.
*/
/// Subsystem failed to initialize entirely. Print a warning, log, and disable firing.
#define SS_INIT_FAILURE -2
/// The default return value which must be overriden. Will succeed with a warning.
/// The default return value which must be overridden. Will succeed with a warning.
#define SS_INIT_NONE -1
/// Subsystem initialized sucessfully.
/// Subsystem initialized successfully.
#define SS_INIT_SUCCESS 2
/// If your system doesn't need to be initialized (by being disabled or something)
#define SS_INIT_NO_NEED 3
/// Succesfully initialized, BUT do not announce it to players (generally to hide game mechanics it would otherwise spoil)
/// Successfully initialized, BUT do not announce it to players (generally to hide game mechanics it would otherwise spoil)
#define SS_INIT_NO_MESSAGE 4
//! ### SS initialization load orders
@@ -137,7 +137,7 @@
#define INIT_ORDER_BLACKBOX 94
#define INIT_ORDER_SERVER_MAINT 93
#define INIT_ORDER_INPUT 85
#define INIT_ORDER_ADMIN_VERBS 84 // needs to be pretty high, admins cant do much without it
#define INIT_ORDER_ADMIN_VERBS 84 // needs to be pretty high, admins can't do much without it
#define INIT_ORDER_SOUNDS 83
#define INIT_ORDER_INSTRUMENTS 82
#define INIT_ORDER_GREYSCALE 81
+8 -8
View File
@@ -24,7 +24,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_PULL_BLOCKED "pullblocked"
/// Abstract condition that prevents movement if being pulled and might be resisted against. Handcuffs and straight jackets, basically.
#define TRAIT_RESTRAINED "restrained"
/// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this!
/// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sources of undesity will still apply. Always define a unique source when adding a new instance of this!
#define TRAIT_UNDENSE "undense"
/// Expands our FOV by 30 degrees if restricted
#define TRAIT_EXPANDED_FOV "expanded_fov"
@@ -50,7 +50,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_DEAF "deaf"
#define TRAIT_FAT "fat"
#define TRAIT_HUSK "husk"
///Blacklisted from being revived via defibrilator
///Blacklisted from being revived via defibrillator
#define TRAIT_DEFIB_BLACKLISTED "defib_blacklisted"
#define TRAIT_BADDNA "baddna"
#define TRAIT_CLUMSY "clumsy"
@@ -169,7 +169,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NO_ZOMBIFY "no_zombify"
/// Carbons with this trait can't have their DNA copied by diseases nor changelings
#define TRAIT_NO_DNA_COPY "no_dna_copy"
/// Carbons with this trait cant have their dna scrambled by genetics or a disease retrovirus.
/// Carbons with this trait can't have their DNA scrambled by genetics or a disease retrovirus.
#define TRAIT_NO_DNA_SCRAMBLE "no_dna_scramble"
/// Carbons with this trait can eat blood to regenerate their own blood volume, instead of injecting it
#define TRAIT_DRINKS_BLOOD "drinks_blood"
@@ -253,7 +253,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Stop the mob from sliding around from being slipped, but not the slip part.
/// DOES NOT include ice slips.
#define TRAIT_NO_SLIP_SLIDE "noslip_slide"
/// Stops all slipping and sliding from ocurring
/// Stops all slipping and sliding from occurring
#define TRAIT_NO_SLIP_ALL "noslip_all"
/// Unlinks gliding from movement speed, meaning that there will be a delay between movements rather than a single move movement between tiles
@@ -363,13 +363,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Increases chance of getting special traumas, makes them harder to cure
#define TRAIT_SPECIAL_TRAUMA_BOOST "special_trauma_boost"
#define TRAIT_SPACEWALK "spacewalk"
/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent
/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we weren't
#define TRAIT_HYPERSPACED "hyperspaced"
///Gives the movable free hyperspace movement without being pulled during shuttle transit
#define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement"
///Lets the movable move freely in the soft-cordon area of transit space, which would otherwise teleport them away just before they got to see the true cordon
#define TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT "free_hyperspace_softcordon_movement"
///Deletes the object upon being dumped into space, usually from exiting hyperspace. Useful if you're spawning in a lot of stuff for hyperspace events that dont need to flood the entire game
///Deletes the object upon being dumped into space, usually from exiting hyperspace. Useful if you're spawning in a lot of stuff for hyperspace events that don't need to flood the entire game
#define TRAIT_DEL_ON_SPACE_DUMP "del_on_hyperspace_leave"
/// We can walk up or around cliffs, or at least we don't fall off of it
#define TRAIT_CLIFF_WALKER "cliff_walker"
@@ -436,7 +436,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_BLOODSHOT_EYES "bloodshot_eyes"
/// This mob should never close UI even if it doesn't have a client
#define TRAIT_PRESERVE_UI_WITHOUT_CLIENT "preserve_ui_without_client"
/// This mob overrides certian SSlag_switch measures with this special trait
/// This mob overrides certain SSlag_switch measures with this special trait
#define TRAIT_BYPASS_MEASURES "bypass_lagswitch_measures"
/// Someone can safely be attacked with honorbound with ONLY a combat mode check, the trait is assuring holding a weapon and hitting won't hurt them..
#define TRAIT_ALLOWED_HONORBOUND_ATTACK "allowed_honorbound_attack"
@@ -677,7 +677,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///This mob is currently blocking a projectile.
#define TRAIT_BLOCKING_PROJECTILES "blocking_projectiles"
/// This turf contains something using split visiblity
/// This turf contains something using split visibility
#define TRAIT_CONTAINS_SPLITVIS "contains_splitvis"
///Lava will be safe to cross while it has this trait.
+4 -4
View File
@@ -105,13 +105,13 @@ GLOBAL_LIST_EMPTY(gas_handbook)
factor_info["factor_name"] = factor
factor_info["factor_type"] = "misc"
if(factor == "Temperature" || factor == "Pressure")
factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring."
factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occurring."
else if(factor == "Energy")
factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors."
else if(factor == "Radiation")
factor_info["tooltip"] = "This reaction emits dangerous radiation! Take precautions."
else if (factor == "Location")
factor_info["tooltip"] = "This reaction has special behaviour when occuring in specific locations."
factor_info["tooltip"] = "This reaction has special behaviour when occurring in specific locations."
else if(factor == "Hot Ice")
factor_info["tooltip"] = "Hot ice are solidified stacks of plasma. Ignition of one will result in a raging fire."
reaction_info["factors"] += list(factor_info)
@@ -138,13 +138,13 @@ GLOBAL_LIST_EMPTY(gas_handbook)
factor_info["factor_name"] = factor
factor_info["factor_type"] = "misc"
if(factor == "Temperature" || factor == "Pressure")
factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring."
factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occurring."
else if(factor == "Energy")
factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors."
else if(factor == "Radiation")
factor_info["tooltip"] = "This reaction emits dangerous radiation! Take precautions."
else if (factor == "Location")
factor_info["tooltip"] = "This reaction has special behaviour when occuring in specific locations."
factor_info["tooltip"] = "This reaction has special behaviour when occurring in specific locations."
reaction_info["factors"] += list(factor_info)
GLOB.reaction_handbook += list(reaction_info)
qdel(reaction)
+2 -2
View File
@@ -61,7 +61,7 @@
. = new target.type(target.drop_location(), amount, FALSE, target.mats_per_unit)
/**
* divides a list of materials uniformly among all contents of the target_object reccursively
* divides a list of materials uniformly among all contents of the target_object recursively
* Used to set materials of printed items with their design cost by taking into consideration their already existing materials
* e.g. if 12 iron is to be divided uniformly among 2 objects A, B who's current iron contents are 3 & 7
* Then first we normalize those values i.e. find their weights to decide who gets an higher share of iron
@@ -81,7 +81,7 @@
target_object.set_custom_materials(custom_materials, multiplier)
return
//Step 1: Get reccursive contents of all objects, only filter obj cause that what's material container accepts
//Step 1: Get recursive contents of all objects, only filter obj cause that what's material container accepts
var/list/reccursive_contents = target_object.get_all_contents_type(/obj/item)
//Step 2: find the sum of each material type per object and record their amounts into an 2D list
+1 -1
View File
@@ -26,7 +26,7 @@
swim(length(L))
//removes and returns the first element of the heap
//(i.e the max or the min dependant on the comparison function)
//(i.e the max or the min dependent on the comparison function)
/datum/heap/proc/pop()
if(!length(L))
return 0
+10 -10
View File
@@ -272,7 +272,7 @@ world
Blend(mask_icon, ICON_ADD)
/// Converts an rgb color into a list storing hsva
/// Exists because it's useful to have a guarenteed alpha value
/// Exists because it's useful to have a guaranteed alpha value
/proc/rgb2hsv(rgb)
var/list/hsv = rgb2num(rgb, COLORSPACE_HSV)
if(length(hsv) < 4)
@@ -815,11 +815,11 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
/// generates a filename for a given asset.
/// like generate_asset_name(), except returns the rsc reference and the rsc file hash as well as the asset name (sans extension)
/// used so that certain asset files dont have to be hashed twice
/// used so that certain asset files don't have to be hashed twice
/proc/generate_and_hash_rsc_file(file, dmi_file_path)
var/rsc_ref = fcopy_rsc(file)
var/hash
//if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesnt have the bug described in http://www.byond.com/forum/post/2611357
//if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesn't have the bug described in http://www.byond.com/forum/post/2611357
if(dmi_file_path)
hash = md5(rsc_ref)
else //otherwise, we need to do the expensive fcopy() workaround
@@ -845,7 +845,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
fdel(savefile_path)
return new /savefile(savefile_path)
catch(var/exception/error)
// if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldnt have
// if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldn't have
if(from_failure) // this *is* the retry, something fucked up
CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'")
return get_dummy_savefile(from_failure = TRUE)
@@ -890,18 +890,18 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
var/atom/atom_icon = icon
icon = atom_icon.icon
//atom icons compiled in from 'icons/path/to/dmi_file.dmi' are weird and not really icon objects that you generate with icon().
//if theyre unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi"
//if they're unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi"
if(isicon(icon) && isfile(icon))
//icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and arent really /icon objects,
///but they pass both isicon() and isfile() checks. theyre the easiest case since stringifying them gives us the path we want
//icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and aren't really /icon objects,
///but they pass both isicon() and isfile() checks. they're the easiest case since stringifying them gives us the path we want
var/icon_ref = text_ref(icon)
var/locate_icon_string = "[locate(icon_ref)]"
icon_path = locate_icon_string
else if(isicon(icon) && "[icon]" == "/icon")
// icon objects generated from icon() at runtime are icons, but they ARENT files themselves, they represent icon files.
// icon objects generated from icon() at runtime are icons, but they AREN'T files themselves, they represent icon files.
// if the files they represent are compile time dmi files in the rsc, then
// the rsc reference returned by fcopy_rsc() will be stringifiable to "icons/path/to/dmi_file.dmi"
var/rsc_ref = fcopy_rsc(icon)
@@ -960,7 +960,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
if(!length(targets))
return
//check if the given object is associated with a dmi file in the icons folder. if it is then we dont need to do a lot of work
//check if the given object is associated with a dmi file in the icons folder. if it is then we don't need to do a lot of work
//for asset generation to get around byond limitations
var/icon_path = get_icon_dmi_path(thing)
@@ -1004,7 +1004,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
var/list/name_and_ref = generate_and_hash_rsc_file(icon2collapse, icon_path)//pretend that tuples exist
var/rsc_ref = name_and_ref[1] //weird object thats not even readable to the debugger, represents a reference to the icons rsc entry
var/rsc_ref = name_and_ref[1] //weird object that's not even readable to the debugger, represents a reference to the icons rsc entry
var/file_hash = name_and_ref[2]
key = "[name_and_ref[3]].png"
+1 -1
View File
@@ -56,5 +56,5 @@
// Syndicate recon outpost is on some moon or something
return TRUE
// Finally, more specific checks are ran for edge cases, such as lazyily loaded map templates or away missions. Not perfect.
// Finally, more specific checks are ran for edge cases, such as lazily loaded map templates or away missions. Not perfect.
return istype(what_turf) && what_turf.planetary_atmos && what_turf.has_gravity()
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Logs a mesage to the mob_tags log, including the mobs tag
* Logs a message to the mob_tags log, including the mobs tag
* Arguments:
* * text - text to log.
*/
+2 -2
View File
@@ -542,8 +542,8 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
* When passed the difference between two temperatures returns the amount of change to temperature to apply.
* The change rate should be kept at a low value tween 0.16 and 0.02 for optimal results.
* vars:
* * temp_diff (required) The differance between two temperatures
* * change_rate (optional)(Default: 0.06) The rate of range multiplyer
* * temp_diff (required) The difference between two temperatures
* * change_rate (optional)(Default: 0.06) The rate of range multiplier
*/
/proc/get_temp_change_amount(temp_diff, change_rate = 0.06)
if(temp_diff < 0)
+3 -3
View File
@@ -16,7 +16,7 @@
*/
/proc/get_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
// We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
if(!SSpathfinder.pathfind(caller, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await))
return list()
@@ -49,7 +49,7 @@
*/
/proc/get_swarm_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
// We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
if(!SSpathfinder.swarmed_pathfind(caller, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await))
return list()
@@ -62,7 +62,7 @@
/proc/get_sssp(atom/movable/caller, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
// We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
if(!SSpathfinder.build_map(caller, get_turf(caller), max_distance, access, simulated_only, exclude, await))
return null
+2 -2
View File
@@ -130,7 +130,7 @@
/// Returns a new /datum/pathfind/sssp based off our settings
/// Will have an invalid source mob, no max distance, and no ending callback
/datum/path_map/proc/settings_to_path()
// Default creation to not set any vars incidentially
// Default creation to not set any vars incidentally
var/static/mob/jeremy = new()
var/datum/pathfind/sssp/based_on_what = new()
based_on_what.setup(pass_info, null, INFINITY, pass_space, avoid)
@@ -155,7 +155,7 @@
working_index -= 1
var/list/hand_around = list()
// We're guarenteed that hand_around will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
// We're guaranteed that hand_around will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)
// We're gonna build a pathfind datum from our settings and set it running
+1 -1
View File
@@ -192,7 +192,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
if(human_mob.mind && (length(human_mob.mind.antag_datums) > 0))
for(var/datum/antagonist/antag_datums as anything in human_mob.mind.antag_datums)
if(!antag_datums.hardcore_random_bonus) //dont give bonusses to dumb stuff like revs or hypnos
if(!antag_datums.hardcore_random_bonus) //don't give bonuses to dumb stuff like revs or hypnos
continue
if(initial(antag_datums.can_assign_self_objectives) && !antag_datums.can_assign_self_objectives)
continue // You don't get a prize if you picked your own objective, you can't fail those
+4 -4
View File
@@ -392,7 +392,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new())
var/count1 = 0 //# of times in a row that first run won
var/count2 = 0 // " " " " " " second run won
//do the straightfoward thin until one run starts winning consistently
//do the straightforward thin until one run starts winning consistently
do
//ASSERT(len1 > 1 && len2 > 0)
@@ -417,7 +417,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new())
while((count1 | count2) < minGallop)
//one run is winning consistently so galloping may provide huge benifits
//one run is winning consistently so galloping may provide huge benefits
//so try galloping, until such time as the run is no longer consistently winning
do
//ASSERT(len1 > 1 && len2 > 0)
@@ -493,7 +493,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new())
var/count1 = 0 //# of times in a row that first run won
var/count2 = 0 // " " " " " " second run won
//do the straightfoward thing until one run starts winning consistently
//do the straightforward thing until one run starts winning consistently
do
//ASSERT(len1 > 0 && len2 > 1)
if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
@@ -516,7 +516,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new())
break outer
while((count1 | count2) < minGallop)
//one run is winning consistently so galloping may provide huge benifits
//one run is winning consistently so galloping may provide huge benefits
//so try galloping, until such time as the run is no longer consistently winning
do
//ASSERT(len1 > 0 && len2 > 1)
+3 -3
View File
@@ -76,7 +76,7 @@ Turf and target are separate in case you want to teleport some distance from a t
//destination_list = new()
/*This will draw a block around the target turf, given what the error is.
Specifying the values above will basically draw a different sort of block.
If the values are the same, it will be a square. If they are different, it will be a rectengle.
If the values are the same, it will be a square. If they are different, it will be a rectangle.
In either case, it will center based on offset. Offset is position from center.
Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport,
the offset should remain positioned in relation to destination.*/
@@ -206,7 +206,7 @@ Turf and target are separate in case you want to teleport some distance from a t
* NOTE: if your atom has non-standard bounds then this proc
* will handle it, but:
* if the bounds are even, then there are an even amount of "middle" turfs, the one to the EAST, NORTH, or BOTH is picked
* this may seem bad, but you're atleast as close to the center of the atom as possible, better than byond's default loc being all the way off)
* this may seem bad, but you're at least as close to the center of the atom as possible, better than byond's default loc being all the way off)
* if the bounds are odd, the true middle turf of the atom is returned
**/
/proc/get_turf_pixel(atom/checked_atom)
@@ -217,7 +217,7 @@ Turf and target are separate in case you want to teleport some distance from a t
return atom_turf
var/list/offsets = get_visual_offset(checked_atom)
// If we're on the upper half of a turf lower our y offset by 16 to hopefully better acount for like, sidemap rendering and such
// If we're on the upper half of a turf lower our y offset by 16 to hopefully better account for like, sidemap rendering and such
if(offsets[2] >= 16 && (checked_atom.layer < TOPDOWN_LAYER || checked_atom.layer > BACKGROUND_LAYER))
offsets[2] -= 16
return pixel_offset_turf(atom_turf, offsets)
+1 -1
View File
@@ -19,7 +19,7 @@
/// We'll use another define to convert uses of the proc over. That'll be all
// #define APPEARANCE_SUCCESS_TRACKING
///Used to find the sources of harddels, quite laggy, don't be surpised if it freezes your client for a good while
///Used to find the sources of harddels, quite laggy, don't be surprised if it freezes your client for a good while
//#define REFERENCE_TRACKING
#ifdef REFERENCE_TRACKING
+2 -2
View File
@@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(chemical_reagents_list, init_chemical_reagent_list())
GLOBAL_LIST(chemical_reactions_results_lookup_list)
/// list of all reagents that are parent types used to define a bunch of children - but aren't used themselves as anything.
GLOBAL_LIST(fake_reagent_blacklist)
/// Turfs metalgen cant touch
/// Turfs metalgen can't touch
GLOBAL_LIST_INIT(blacklisted_metalgen_types, typecacheof(list(
/turf/closed/indestructible, //indestructible turfs should be indestructible, metalgen transmutation to plasma allows them to be destroyed
/turf/open/indestructible
@@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist())
/proc/build_name2reagentlist()
. = list()
//build map with keys stored seperatly
//build map with keys stored separately
var/list/name_to_reagent = list()
var/list/only_names = list()
for (var/datum/reagent/reagent as anything in GLOB.chemical_reagents_list)
+1 -1
View File
@@ -1,5 +1,5 @@
//please store common type caches here.
//type caches should only be stored here if used in mutiple places or likely to be used in mutiple places.
//type caches should only be stored here if used in multiple places or likely to be used in multiple places.
//Note: typecache can only replace istype if you know for sure the thing is at least a datum.
+2 -2
View File
@@ -273,7 +273,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer)
/atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, template = FALSE)
. = ..()
// Parallax layers are independant of hud, they care about client
// Parallax layers are independent of hud, they care about client
// Not doing this will just create a bunch of hard deletes
set_new_hud(hud_owner = null)
@@ -335,7 +335,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer)
/atom/movable/screen/parallax_layer/planet
icon_state = "planet"
blend_mode = BLEND_OVERLAY
absolute = TRUE //Status of seperation
absolute = TRUE //Status of separation
speed = 3
layer = 30
@@ -8,11 +8,11 @@
## Byond internal functionality
This part of the guide will assume that you have read the byond reference entry for rendering at www.byond.com/docs/ref//#/{notes}/renderer
When you create an atom, this will always create an internal byond structure called an "appearance". This appearance you will likely be familiar with, as it is exposed through the /atom/var/appearance var. This appearance var holds data on how to render the object, ie what icon/icon_state/color etc it is using. Note that appearance vars will always copy, and do not hold a reference. When you update a var, for example lets pretend we add a filter, the appearance will be updated to include the filter. Note that, however, vis_contents objets are uniquely excluded from appearances. Then, when the filter is updated, the appearance will be recreated, and the atom marked as "dirty". After it has been updated, the SendMaps() function (sometimes also called maptick), which is a internal byond function that iterates over all objects in a clients view and in the clients.mob.contents, checks for "dirty" atoms, then resends any "dirty" appearances to clients as needed and unmarks them as dirty. This function is notoriosly slow, but we can see its tick usage through the world.map_cpu var. We can also avoid more complex checks checking whether an object is visible on a clients screen by using the TILE_BOUND appearance flag.
When you create an atom, this will always create an internal byond structure called an "appearance". This appearance you will likely be familiar with, as it is exposed through the /atom/var/appearance var. This appearance var holds data on how to render the object, ie what icon/icon_state/color etc it is using. Note that appearance vars will always copy, and do not hold a reference. When you update a var, for example lets pretend we add a filter, the appearance will be updated to include the filter. Note that, however, vis_contents objets are uniquely excluded from appearances. Then, when the filter is updated, the appearance will be recreated, and the atom marked as "dirty". After it has been updated, the SendMaps() function (sometimes also called maptick), which is a internal byond function that iterates over all objects in a clients view and in the clients.mob.contents, checks for "dirty" atoms, then resends any "dirty" appearances to clients as needed and unmarks them as dirty. This function is notoriously slow, but we can see its tick usage through the world.map_cpu var. We can also avoid more complex checks checking whether an object is visible on a clients screen by using the TILE_BOUND appearance flag.
Finally, we arrive at clientside behavior, where we have two main clientside functions: GetMapIcons, and Render. GetMapIcons is repsonsible for actual rendering calculations on the clientside, such as "Group Icons and Set bounds", which performs clientside calculations for transform matrixes. Note that particles here are handled in a separate thread and are not diplayed in the clientside profiler. Render handles the actual drawing of the screen.
Finally, we arrive at clientside behavior, where we have two main clientside functions: GetMapIcons, and Render. GetMapIcons is responsible for actual rendering calculations on the clientside, such as "Group Icons and Set bounds", which performs clientside calculations for transform matrixes. Note that particles here are handled in a separate thread and are not displayed in the clientside profiler. Render handles the actual drawing of the screen.
For debugging rendering issues its reccomended you do two things:
For debugging rendering issues its recommended you do two things:
A) Talk to someone who has inside knowledge(like lummox) about it, most of this is undocumented and bugs often
B) Use the undocumented debug printer which reads of data on icons rendering, this is very dense but can be useful in some cases. To use: Right click top tab -> Options & Messages -> Client -> Command -> Enter ".debug profile mapicons" and press Enter -> go to your Byond directory and find BYOND/cfg/mapicons.json . Yes this is one giant one-line json.
@@ -22,9 +22,9 @@ The following is an incomplete list of pitfalls that come from byond snowflake t
1. Transforms are very slow on clientside. This is not usually noticable, but if you start using large amounts of them it will grind you to a halt quickly, regardless of whether its on overlays or objs
2. The darkness plane. This is unused, as it doesn't work with our rendering format, so this section is purely academic. The darkness plane has specific variables it needs to render correctly, and these can be found in the plane masters file. it is composed internally of two parts, a black mask over the clients screen, and a non rendering mask that blocks all luminosity=0 turfs and their contents from rendering if the SEE_BLACKNESS flag is set properly. The blocker will always block rendering but the mask can be layered under other objects.
3. render_target/source. Render_target/source will only copy certain rendering instructions, and these are only defined as "etc." in the byond reference. Known non copied appearance vars include: blend_mode, plane, layer, vis_contents, mouse_opacity...
4. Large icons on the screen that peek over the edge will instead of only rendering partly like you would expect will instead stretch the screen while not adgusting the render buffer, which means that you can actively see as tiles and map objects are rendered. You can use this for an easy "offscreen" UI.
4. Large icons on the screen that peek over the edge will instead of only rendering partly like you would expect will instead stretch the screen while not adjusting the render buffer, which means that you can actively see as tiles and map objects are rendered. You can use this for an easy "offscreen" UI.
5. Numerically large filters on objects of any size will torpedo performance, even though large objects with small filters will perform massively better. (ie blur(size=20) BAD)
6. Texture Atlas: the texture atlas byond uses to render icons is very susceptible to corruption and can regularily replace icons with other icons or just not render at all. This can be exasperated by alt tabbing or pausing the dreamseeker process.
6. Texture Atlas: the texture atlas byond uses to render icons is very susceptible to corruption and can regularly replace icons with other icons or just not render at all. This can be exasperated by alt tabbing or pausing the dreamseeker process.
7. The renderer is awful code and lummox said he will try changing a large part of it for 515 so keep an eye on that
8. Byond uses DirectX 9 (Lummox said he wants to update to DirectX 11)
9. Particles are just fancy overlays and are not independent of their owner
@@ -32,7 +32,7 @@ The following is an incomplete list of pitfalls that come from byond snowflake t
11. Displacement filter: The byond "displacement filter" does not, as the name would make you expect, use displacement maps, but instead uses normal maps.
## The rendering solution
One of the main issues with making pretty effects is how objects can only render to one plane, and how filters can only be applied to single objects. Quite simply it means we cant apply effects to multiple planes at once, and an effect to one plane only by treating it as a single unit:
One of the main issues with making pretty effects is how objects can only render to one plane, and how filters can only be applied to single objects. Quite simply it means we can't apply effects to multiple planes at once, and an effect to one plane only by treating it as a single unit:
![](https://raw.githubusercontent.com/tgstation/documentation-assets/main/rendering/renderpipe_old.png)
@@ -50,8 +50,8 @@ Through these this allows us to treat planes as single objects, and lets us dist
## Render plates
The rendering system uses two objects to unify planes: render_relay and render_plates. Render relays use render_target/source and the relay_render_to_plane proc to replicate the plane master on the render relay. This render relay is then rendered onto a render_plate, which is a plane master that renders the render_relays onto itself. This plate can then be hierachically rendered with the same process until it reaches the master render_plate, which is the plate that will actually render to the player. These plates naturally in the byond style have quirks. For example, rendering to two plates will double any effects such as color or filters, and as such you need to carefully manage how you render them. Keep in mind as well that when sorting the layers for rendering on a plane that they should not be negative, this is handled automatically in relay_render_to_plane. When debugging note that mouse_opacity can act bizzarly with this method, such as only allowing you to click things that are layered over objects on a certain plane but auomatically setting the mouse_opacity should be handling this. Note that if you decide to manipulate a plane with internal byond objects that you will have to manually extrapolate the vars that are set if you want to render them to another plane (See blackness plane for example), and that this is not documented anywhere.
The rendering system uses two objects to unify planes: render_relay and render_plates. Render relays use render_target/source and the relay_render_to_plane proc to replicate the plane master on the render relay. This render relay is then rendered onto a render_plate, which is a plane master that renders the render_relays onto itself. This plate can then be hierarchically rendered with the same process until it reaches the master render_plate, which is the plate that will actually render to the player. These plates naturally in the byond style have quirks. For example, rendering to two plates will double any effects such as color or filters, and as such you need to carefully manage how you render them. Keep in mind as well that when sorting the layers for rendering on a plane that they should not be negative, this is handled automatically in relay_render_to_plane. When debugging note that mouse_opacity can act bizarrely with this method, such as only allowing you to click things that are layered over objects on a certain plane but automatically setting the mouse_opacity should be handling this. Note that if you decide to manipulate a plane with internal byond objects that you will have to manually extrapolate the vars that are set if you want to render them to another plane (See blackness plane for example), and that this is not documented anywhere.
Goodluck and godspeed with coding
Good luck and godspeed with coding
- Just another contributor
+1 -1
View File
@@ -575,7 +575,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
//Anti-tick-contention heuristics:
if (init_stage == INITSTAGE_MAX)
//if there are mutiple sleeping procs running before us hogging the cpu, we have to run later.
//if there are multiple sleeping procs running before us hogging the cpu, we have to run later.
// (because sleeps are processed in the order received, longer sleeps are more likely to run first)
if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit.
sleep_delta *= 2
+2 -2
View File
@@ -19,7 +19,7 @@
/// Time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
var/wait = 20
/// Priority Weight: When mutiple subsystems need to run in the same tick, higher priority subsystems will be given a higher share of the tick before MC_TICK_CHECK triggers a sleep, higher priority subsystems also run before lower priority subsystems
/// Priority Weight: When multiple subsystems need to run in the same tick, higher priority subsystems will be given a higher share of the tick before MC_TICK_CHECK triggers a sleep, higher priority subsystems also run before lower priority subsystems
var/priority = FIRE_PRIORITY_DEFAULT
/// [Subsystem Flags][SS_NO_INIT] to control binary behavior. Flags must be set at compile time or before preinit finishes to take full effect. (You can also restart the mc to force them to process again)
@@ -272,7 +272,7 @@
/datum/controller/subsystem/proc/OnConfigLoad()
/**
* Used to initialize the subsystem. This is expected to be overriden by subtypes.
* Used to initialize the subsystem. This is expected to be overridden by subtypes.
*/
/datum/controller/subsystem/Initialize()
return SS_INIT_NONE
+3 -3
View File
@@ -75,7 +75,7 @@ SUBSYSTEM_DEF(atoms)
rustg_file_write(json_encode(mapload_init_times), "[GLOB.log_directory]/init_times.json")
#endif
/// Actually creates the list of atoms. Exists soley so a runtime in the creation logic doesn't cause initalized to totally break
/// Actually creates the list of atoms. Exists solely so a runtime in the creation logic doesn't cause initialized to totally break
/datum/controller/subsystem/atoms/proc/CreateAtoms(list/atoms, list/atoms_to_return = null, mapload_source = null)
if (atoms_to_return)
LAZYINITLIST(created_atoms)
@@ -137,8 +137,8 @@ SUBSYSTEM_DEF(atoms)
return null
return initialized_state[state_length][1]
/// Use this to set initialized to prevent error states where the old initialized is overriden, and we end up losing all context
/// Accepts a state and a source, the most recent state is used, sources exist to prevent overriding old values accidentially
/// Use this to set initialized to prevent error states where the old initialized is overridden, and we end up losing all context
/// Accepts a state and a source, the most recent state is used, sources exist to prevent overriding old values accidentally
/datum/controller/subsystem/atoms/proc/set_tracked_initalized(state, source)
if(!length(initialized_state))
base_initialized = initialized
@@ -140,10 +140,10 @@ SUBSYSTEM_DEF(dynamic)
/// The maximum amount of time for antag random events to be hijacked.
var/random_event_hijack_maximum = 18 MINUTES
/// What is the lower bound of when the roundstart annoucement is sent out?
/// What is the lower bound of when the roundstart announcement is sent out?
var/waittime_l = 600
/// What is the higher bound of when the roundstart annoucement is sent out?
/// What is the higher bound of when the roundstart announcement is sent out?
var/waittime_h = 1800
/// A number between 0 and 100. The maximum amount of threat allowed to generate.
+3 -3
View File
@@ -35,7 +35,7 @@ SUBSYSTEM_DEF(materials)
///A list of dimensional themes used by the dimensional anomaly and other things, most of which require materials to function.
var/list/datum/dimension_theme/dimensional_themes
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropriate vars (See these variables for more info)
/datum/controller/subsystem/materials/proc/InitializeMaterials()
materials = list()
materials_by_type = list()
@@ -53,7 +53,7 @@ SUBSYSTEM_DEF(materials)
/** Creates and caches a material datum.
*
* Arugments:
* Arguments:
* - [arguments][/list]: The arguments to use to create the material datum
* - The first element is the type of material to initialize.
*/
@@ -134,7 +134,7 @@ SUBSYSTEM_DEF(materials)
value = arguments[key]
if(!(istext(key) || isnum(key)))
key = REF(key)
key = "[key]" // Key is stringified so numbers dont break things
key = "[key]" // Key is stringified so numbers don't break things
if(!isnull(value))
if(!(istext(value) || isnum(value)))
value = REF(value)
+1 -1
View File
@@ -17,7 +17,7 @@ SUBSYSTEM_DEF(overlays)
/// Don't have access to that type tho, so this is the best you're gonna get
/proc/overlays2text(list/overlays)
var/list/unique_overlays = list()
// As anything because we're basically doing type coerrsion, rather then actually filtering for mutable apperances
// As anything because we're basically doing type coercion, rather then actually filtering for mutable appearances
for(var/mutable_appearance/overlay as anything in overlays)
var/key = "[overlay.icon]-[overlay.icon_state]-[overlay.dir]"
unique_overlays[key] += 1
+1 -1
View File
@@ -158,7 +158,7 @@ SUBSYSTEM_DEF(pathfinder)
/// Takes a set of pathfind info, returns the first valid pathmap that would work if one exists
/// Optionally takes a max age to accept (defaults to 0 seconds) and a minimum acceptable range
/// If include_building is true and we can only find a building path, ew'll use that instead. tho we will wait for it to finish first
/// If include_building is true and we can only find a building path, we'll use that instead. tho we will wait for it to finish first
/datum/controller/subsystem/pathfinder/proc/get_valid_map(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE)
// Walk all the maps that match our caller's turf OR our target's
// Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one
@@ -104,7 +104,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST]
/// This proc just intializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
/// This proc just initializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
/datum/controller/subsystem/accessories/proc/init_hair_gradients()
hair_gradients_list = list()
facial_hair_gradients_list = list()
+2 -2
View File
@@ -524,7 +524,7 @@ SUBSYSTEM_DEF(timer)
2 = timeToRun,
3 = wait,
4 = flags,
5 = callBack, /* Safe to hold this directly becasue it's never del'd */
5 = callBack, /* Safe to hold this directly because it's never del'd */
6 = "[callBack.object]",
7 = text_ref(callBack.object),
8 = getcallingtype(),
@@ -539,7 +539,7 @@ SUBSYSTEM_DEF(timer)
2 = timeToRun,
3 = wait,
4 = flags,
5 = callBack, /* Safe to hold this directly becasue it's never del'd */
5 = callBack, /* Safe to hold this directly because it's never del'd */
6 = "[callBack.object]",
7 = getcallingtype(),
8 = callBack.delegate,
+8 -8
View File
@@ -8,15 +8,15 @@
* plus TICK_BYOND_RESERVE from the tick and uses up to that amount of time (minus the percentage of the tick used by the time it executes subsystems)
* on subsystems running cool things like atmospherics or Life or SSInput or whatever.
*
* Without this subsystem, verbs are likely to cause overtime if the MC uses all of the time it has alloted for itself in the tick, and SendMaps
* Without this subsystem, verbs are likely to cause overtime if the MC uses all of the time it has allotted for itself in the tick, and SendMaps
* uses as much as its expected to, and an expensive verb ends up executing that tick. This is because the MC is completely blind to the cost of
* verbs, it can't account for it at all. The only chance for verbs to not cause overtime in a tick where the MC used as much of the tick
* as it alloted itself and where SendMaps costed as much as it was expected to is if the verb(s) take less than TICK_BYOND_RESERVE percent of
* the tick, which isnt much. Not to mention if SendMaps takes more than 30% of the tick and the MC forces itself to take at least 70% of the
* as it allotted itself and where SendMaps costed as much as it was expected to is if the verb(s) take less than TICK_BYOND_RESERVE percent of
* the tick, which isn't much. Not to mention if SendMaps takes more than 30% of the tick and the MC forces itself to take at least 70% of the
* normal tick duration which causes ticks to naturally overrun even in the absence of verbs.
*
* With this subsystem, the MC can account for the cost of verbs and thus stop major overruns of ticks. This means that the most important subsystems
* like SSinput can start at the same time they were supposed to, leading to a smoother experience for the player since ticks arent riddled with
* like SSinput can start at the same time they were supposed to, leading to a smoother experience for the player since ticks aren't riddled with
* minor hangs over and over again.
*/
SUBSYSTEM_DEF(verb_manager)
@@ -36,17 +36,17 @@ SUBSYSTEM_DEF(verb_manager)
///if TRUE we treat usr's with holders just like usr's without holders. otherwise they always execute immediately
var/can_queue_admin_verbs = FALSE
///if this is true all verbs immediately execute and dont queue. in case the mc is fucked or something
///if this is true all verbs immediately execute and don't queue. in case the mc is fucked or something
var/FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs = FALSE
///used for subtypes to determine if they use their own stats for the stat entry
var/use_default_stats = TRUE
///if TRUE this will... message admins every time a verb is queued to this subsystem for the next tick with stats.
///for obvious reasons dont make this be TRUE on the code level this is for admins to turn on
///for obvious reasons don't make this be TRUE on the code level this is for admins to turn on
var/message_admins_on_queue = FALSE
///always queue if possible. overides can_queue_admin_verbs but not FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs
///always queue if possible. overrides can_queue_admin_verbs but not FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs
var/always_queue = FALSE
/**
@@ -87,7 +87,7 @@ SUBSYSTEM_DEF(verb_manager)
#else
if(QDELETED(usr) || isnull(usr.client))
stack_trace("_queue_verb() returned false because it wasnt called from player input!")
stack_trace("_queue_verb() returned false because it wasn't called from player input!")
return FALSE
#endif
+2 -2
View File
@@ -134,7 +134,7 @@ have ways of interacting with a specific mob and control it.
for(var/obj/item/item in oview(2, living_pawn))
nearby_items += item
for(var/obj/item/item in living_pawn.held_items) // If we've got some garbage in out hands thats going to stop us from effectivly attacking, we should get rid of it.
for(var/obj/item/item in living_pawn.held_items) // If we've got some garbage in out hands that's going to stop us from effectively attacking, we should get rid of it.
if(item.force < 2)
living_pawn.dropItemToGround(item)
@@ -151,7 +151,7 @@ have ways of interacting with a specific mob and control it.
if(!weapon || (weapon in living_pawn.held_items))
return FALSE
if(weapon.force < 2) // our bite does 2 damage on avarage, no point in settling for anything less
if(weapon.force < 2) // our bite does 2 damage on average, no point in settling for anything less
return FALSE
set_blackboard_key(BB_MONKEY_PICKUPTARGET, weapon)
+1 -1
View File
@@ -1,6 +1,6 @@
/// This component behaves similar to connect_loc_behalf, but working off clients and mobs instead of loc
/// To be clear, we hook into a signal on a tracked client's mob
/// We retain the ability to react to that signal on a seperate listener, which makes this quite powerful
/// We retain the ability to react to that signal on a separate listener, which makes this quite powerful
/datum/component/connect_mob_behalf
dupe_mode = COMPONENT_DUPE_UNIQUE
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* This component behaves similar to connect_loc_behalf but for all turfs in range, hooking into a signal on each of them.
* Just like connect_loc_behalf, It can react to that signal on behalf of a seperate listener.
* Just like connect_loc_behalf, It can react to that signal on behalf of a separate listener.
* Good for components, though it carries some overhead. Can't be an element as that may lead to bugs.
*/
/datum/component/connect_range
@@ -124,10 +124,10 @@
* Material Validation : Checks how much materials are available, Extracts materials from items if the container can hold them
* Material Removal : Removes material from the container
*
* Each Proc furthur belongs to a specific category
* Each Proc further belongs to a specific category
* LOW LEVEL: Procs that are used internally & should not be used anywhere else unless you know what your doing
* MID LEVEL: Procs that can be used by machines(like recycler, stacking machines) to bypass majority of checks
* HIGH LEVEL: Procs that can be used by anyone publically and guarentees safty checks & limits
* HIGH LEVEL: Procs that can be used by anyone publicly and guarantees safety checks & limits
*/
//================================Material Insertion procs==============================
@@ -236,7 +236,7 @@
//do the insert
var/last_inserted_id = insert_item_materials(target, multiplier, context)
if(!isnull(last_inserted_id))
if(delete_item || target != weapon) //we could have split the stack ourself
if(delete_item || target != weapon) //we could have split the stack ourselves
qdel(target) //item gone
return material_amount
else if(!isnull(item_stack) && item_stack != target) //insertion failed, merge the split stack back into the original
@@ -250,7 +250,7 @@
//===================================HIGH LEVEL===================================================
/**
* inserts an item from the players hand into the container. Loops through all the contents inside reccursively
* inserts an item from the players hand into the container. Loops through all the contents inside recursively
* Does all explicit checking for mat flags & callbacks to check if insertion is valid
* This proc is what you should be using for almost all cases
*
@@ -584,7 +584,7 @@
for(var/x in mats) //Loop through all required materials
var/wanted = OPTIMAL_COST(mats[x] * coefficient) * multiplier
if(!has_enough_of_material(x, wanted))//Not a category, so just check the normal way
testing("didnt have: [x] wanted: [wanted]")
testing("didn't have: [x] wanted: [wanted]")
return FALSE
return TRUE
@@ -605,7 +605,7 @@
//round amount
amt = OPTIMAL_COST(amt)
//get ref if nessassary
//get ref if necessary
if(!istype(mat))
mat = GET_MATERIAL_REF(mat)
+2 -2
View File
@@ -143,12 +143,12 @@
return
for(var/obj/machinery/light/evil_light in the_turf)
if((evil_light.status == LIGHT_BURNED || evil_light.status == LIGHT_BROKEN) || (HAS_TRAIT(living_guy, TRAIT_SHOCKIMMUNE))) // we cant do anything :( // Why in the world is there no get_siemens_coeff proc???
if((evil_light.status == LIGHT_BURNED || evil_light.status == LIGHT_BROKEN) || (HAS_TRAIT(living_guy, TRAIT_SHOCKIMMUNE))) // we can't do anything :( // Why in the world is there no get_siemens_coeff proc???
to_chat(living_guy, span_warning("[evil_light] sparks weakly for a second."))
do_sparks(2, FALSE, evil_light) // hey maybe it'll ignite them
return
to_chat(living_guy, span_warning("[evil_light] glows ominously...")) // omenously
to_chat(living_guy, span_warning("[evil_light] glows ominously...")) // ominously
evil_light.visible_message(span_boldwarning("[evil_light] suddenly flares brightly and sparks!"))
evil_light.break_light_tube(skip_sound_and_sparks = FALSE)
do_sparks(number = 4, cardinal_only = FALSE, source = evil_light)
+3 -3
View File
@@ -62,13 +62,13 @@
var/directional = FALSE
///Whether we're a beam light
var/beam = FALSE
///A cone overlay for directional light, its alpha and color are dependant on the light
///A cone overlay for directional light, its alpha and color are dependent on the light
var/image/cone
///Current tracked direction for the directional cast behaviour
var/current_direction
///Tracks current directional x offset so we dont update unecessarily
///Tracks current directional x offset so we don't update unnecessarily
var/directional_offset_x
///Tracks current directional y offset so we dont update unecessarily
///Tracks current directional y offset so we don't update unnecessarily
var/directional_offset_y
///Cast range for the directional cast (how far away the atom is moved)
var/cast_range = 2
+2 -2
View File
@@ -18,7 +18,7 @@
var/phylactery_color = COLOR_VERY_DARK_LIME_GREEN
// Internal vars.
/// The number of ressurections that have occured from this phylactery.
/// The number of resurrections that have occurred from this phylactery.
var/num_resurrections = 0
/// A timerid to the current revival timer.
var/revive_timer
@@ -150,7 +150,7 @@
UnregisterSignal(source, COMSIG_LIVING_REVIVE)
/**
* Actually undergo the process of reviving the lich at the site of the phylacery.
* Actually undergo the process of reviving the lich at the site of the phylactery.
*
* Arguments
* * corpse - optional, the old body of the lich. Can be QDELETED or null.
@@ -2,7 +2,7 @@
* Slightly hidden.
* Lowers resistance tremendously.
* Decreases stage speed tremendously.
* Decreases transmittablity tremendously.
* Decreases transmittability tremendously.
* Fatal level
* Bonus: Ignites infected mob.
*/
@@ -70,7 +70,7 @@ Autophagocytosis (AKA Programmed mass cell death)
Very noticable.
Lowers resistance.
Fast stage speed.
Decreases transmittablity.
Decreases transmittability.
Fatal Level.
Bonus
+2 -2
View File
@@ -4,7 +4,7 @@ If you're wanting to add easy recolors for your sprite then this is the system f
- Multiple color layers so your sprite can be generated from more than one color.
- Mixed greyscale and colored sprite layers; You can choose to only greyscale a part of the sprite or have premade filters applied to layers.
- Blend modes; Instead of just putting layers of sprites on top of eachother you can use the more advanced blend modes.
- Blend modes; Instead of just putting layers of sprites on top of each other you can use the more advanced blend modes.
- Reusable configurations; You can reference greyscale sprites from within the configuration of another, allowing you to have a bunch of styles with minimal additional configuration.
## Other Documents
@@ -31,7 +31,7 @@ This is simply some pointers in the code linking together your dmi and the json
## Json Configuration File
The json is made up of some metadata and a list of layers used while creating the sprite. Inner lists are processed as their own chunk before being applied elsewhere, this is useful when you start using more advanced blend modes. Most of the time though you're just going to want a list of icons overlaid on top of eachother.
The json is made up of some metadata and a list of layers used while creating the sprite. Inner lists are processed as their own chunk before being applied elsewhere, this is useful when you start using more advanced blend modes. Most of the time though you're just going to want a list of icons overlaid on top of each other.
```json
{
+1 -1
View File
@@ -64,7 +64,7 @@
/datum/greyscale_layer/proc/CrossVerify()
return
/// Used to actualy create the layer using the given colors
/// Used to actually create the layer using the given colors
/// Do not override, use InternalGenerate instead
/datum/greyscale_layer/proc/Generate(list/colors, list/render_steps, icon/new_icon)
var/list/processed_colors = list()
+11 -11
View File
@@ -39,11 +39,11 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
// by z level so when they change z's we can adjust what images they see from this hud.
var/list/hud_users = list()
///used for signal tracking purposes, associative list of the form: list(hud atom = TRUE) that isnt separated by z level
///used for signal tracking purposes, associative list of the form: list(hud atom = TRUE) that isn't separated by z level
var/list/atom/hud_atoms_all_z_levels = list()
///used for signal tracking purposes, associative list of the form: list(hud user = number of times this hud was added to this user).
///that isnt separated by z level
///that isn't separated by z level
var/list/mob/hud_users_all_z_levels = list()
///these will be the indexes for the atom's hud_list
@@ -53,10 +53,10 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
var/list/next_time_allowed = list()
///mobs that have triggered the cooldown and are queued to see the hud, but do not yet
var/list/queued_to_see = list()
/// huduser = list(atoms with their hud hidden) - aka everyone hates targeted invisiblity
/// huduser = list(atoms with their hud hidden) - aka everyone hates targeted invisibility
var/list/hud_exceptions = list()
///whether or not this atom_hud type updates the global huds_by_category list.
///some subtypes cant work like this since theyre supposed to "belong" to
///some subtypes can't work like this since they're supposed to "belong" to
///one target atom each. it will still go in the other global hud lists.
var/uses_global_hud_category = TRUE
@@ -175,9 +175,9 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
hud_users_all_z_levels[former_viewer] -= 1//decrement number of sources for this hud on this user (bad way to track i know)
if (absolute || hud_users_all_z_levels[former_viewer] <= 0)//if forced or there arent any sources left, remove the user
if (absolute || hud_users_all_z_levels[former_viewer] <= 0)//if forced or there aren't any sources left, remove the user
if(!hud_atoms_all_z_levels[former_viewer])//make sure we arent unregistering changes on a mob thats also a hud atom for this hud
if(!hud_atoms_all_z_levels[former_viewer])//make sure we aren't unregistering changes on a mob that's also a hud atom for this hud
UnregisterSignal(former_viewer, COMSIG_MOVABLE_Z_CHANGED)
UnregisterSignal(former_viewer, COMSIG_QDELETING)
@@ -222,7 +222,7 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
if(!hud_atom_to_remove || !hud_atoms_all_z_levels[hud_atom_to_remove])
return FALSE
//make sure we arent unregistering a hud atom thats also a hud user mob
//make sure we aren't unregistering a hud atom that's also a hud user mob
if(!hud_users_all_z_levels[hud_atom_to_remove])
UnregisterSignal(hud_atom_to_remove, COMSIG_MOVABLE_Z_CHANGED)
UnregisterSignal(hud_atom_to_remove, COMSIG_QDELETING)
@@ -278,12 +278,12 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
for(var/mob/hud_user as anything in get_hud_users_for_z_level(atom_turf.z))
if(!hud_user.client)
continue
hud_user.client.images -= hud_atom.active_hud_list[hud_category_to_remove]//by this point it shouldnt be in active_hud_list
hud_user.client.images -= hud_atom.active_hud_list[hud_category_to_remove]//by this point it shouldn't be in active_hud_list
return TRUE
///when a hud atom or hud user changes z levels this makes sure it gets the images it needs and removes the images it doesnt need.
///because of how signals work we need the same proc to handle both use cases because being a hud atom and being a hud user arent mutually exclusive
///when a hud atom or hud user changes z levels this makes sure it gets the images it needs and removes the images it doesn't need.
///because of how signals work we need the same proc to handle both use cases because being a hud atom and being a hud user aren't mutually exclusive
/datum/atom_hud/proc/on_atom_or_user_z_level_changed(atom/movable/moved_atom, turf/old_turf, turf/new_turf)
SIGNAL_HANDLER
if(old_turf)
@@ -300,7 +300,7 @@ GLOBAL_LIST_INIT(trait_to_hud, list(
if(new_turf)
if(hud_users_all_z_levels[moved_atom])
hud_users[new_turf.z][moved_atom] = TRUE //hud users is associative, hud atoms isnt
hud_users[new_turf.z][moved_atom] = TRUE //hud users is associative, hud atoms isn't
add_all_atoms_to_single_mob_hud(moved_atom, get_hud_atoms_for_z_level(new_turf.z))
+1 -1
View File
@@ -211,7 +211,7 @@
* Resets the current streak.
*
* Arguments
* * mob/living/new_target - (Optional) The mob being attacked while the reset is occuring.
* * mob/living/new_target - (Optional) The mob being attacked while the reset is occurring.
* * update_icon - If TRUE, the combo display will be updated.
*/
/datum/martial_art/proc/reset_streak(mob/living/new_target, update_icon = TRUE)
+1 -1
View File
@@ -70,7 +70,7 @@ Simple datum which is instanced once per type and is used for every object of sa
/** Handles initializing the material.
*
* Arugments:
* Arguments:
* - _id: The ID the material should use. Overrides the existing ID.
*/
/datum/material/proc/Initialize(_id, ...)
+1 -1
View File
@@ -110,7 +110,7 @@
///X-ray Vision lets you see through walls.
/datum/mutation/human/xray
name = "X Ray Vision"
desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb
desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, which might be fun for later //hmb
text_gain_indication = span_notice("The walls suddenly disappear!")
instability = POSITIVE_INSTABILITY_MAJOR
locked = TRUE
+2 -2
View File
@@ -67,7 +67,7 @@
/datum/pod_style/missile
name = "cruise missile"
ui_name = "Missile"
desc = "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."
desc = "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxiliary payload hatch on the side, though manually opening it is likely impossible."
shape = POD_SHAPE_OTHER
icon_state = "missile"
has_door = FALSE
@@ -79,7 +79,7 @@
/datum/pod_style/missile/syndicate
name = "\improper Syndicate cruise missile"
ui_name = "Syndie Missile"
desc = "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."
desc = "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxiliary payload hatch on the side, though manually opening it is likely impossible."
icon_state = "smissile"
id = "syndie_missile"
+2 -2
View File
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene
/datum/quirk_constant_data/New()
. = ..()
ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occured on: [src.type]")
ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occurred on: [src.type]")
/// Returns a list of savefile_keys derived from the preference typepaths in [customization_options]. Used in quirks middleware to supply the preferences to render.
/datum/quirk_constant_data/proc/get_customization_data()
@@ -47,7 +47,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene
var/datum/preference/pref_instance = GLOB.preference_entries[pref_type]
if (isnull(pref_instance))
stack_trace("get_customization_data was called before instantiation of [pref_type]!")
continue // just in case its a fluke and its only this one thats not instantiated, we'll check the other pref entries
continue // just in case its a fluke and its only this one that's not instantiated, we'll check the other pref entries
customization_data += pref_instance.savefile_key
+1 -1
View File
@@ -4,7 +4,7 @@
/datum/quirk/spacer_born
name = "Spacer"
desc = "You were born in space, and have never known the comfort of a planet's gravity. Your body has adapted to this. \
You are more comfortable in zero and artifical gravity and are more resistant to the effects of space, \
You are more comfortable in zero and artificial gravity and are more resistant to the effects of space, \
but travelling to a planet's surface for an extended period of time will make you feel sick."
gain_text = span_notice("You feel at home in space.")
lose_text = span_danger("You feel homesick.")
@@ -1,11 +1,11 @@
/// The damage healed per tick while sleeping without any modifiers
#define HEALING_SLEEP_DEFAULT 0.2
/// The sleep healing multipler for organ passive healing (since organs heal slowly)
/// The sleep healing multiplier for organ passive healing (since organs heal slowly)
#define HEALING_SLEEP_ORGAN_MULTIPLIER 5
/// The sleep multipler for fitness xp conversion
/// The sleep multiplier for fitness xp conversion
#define SLEEP_QUALITY_WORKOUT_MULTIPLER 10
//Largely negative status effects go here, even if they have small benificial effects
//Largely negative status effects go here, even if they have small beneficial effects
//STUN EFFECTS
/datum/status_effect/incapacitating
tick_interval = -1
@@ -732,7 +732,7 @@
status_type = STATUS_EFFECT_REPLACE
tick_interval = 0.2 SECONDS
alert_type = null
var/msg_stage = 0//so you dont get the most intense messages immediately
var/msg_stage = 0//so you don't get the most intense messages immediately
/datum/status_effect/fake_virus/on_apply()
if(HAS_TRAIT(owner, TRAIT_VIRUSIMMUNE))
@@ -66,7 +66,7 @@
if(need_mob_update)
owner.updatehealth()
if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on succesful damage adjustment
if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on successful damage adjustment
our_slime.balloon_alert(our_slime, "not food!")
our_slime.stop_feeding()
return
+1 -1
View File
@@ -52,7 +52,7 @@
owner.set_jitter_if_lower(100 SECONDS)
owner.Paralyze(duration)
owner.visible_message(span_warning("[owner] drops to the ground as [owner.p_they()] start seizing up."), \
span_warning("[pick("You can't collect your thoughts...", "You suddenly feel extremely dizzy...", "You cant think straight...","You can't move your face properly anymore...")]"))
span_warning("[pick("You can't collect your thoughts...", "You suddenly feel extremely dizzy...", "You can't think straight...","You can't move your face properly anymore...")]"))
return TRUE
/atom/movable/screen/alert/status_effect/seizure
@@ -8,7 +8,7 @@
/// How many stacks are currently accumulated.
/// Also, the default stacks number given on application.
var/stacks = 0
// Deciseconds until ticks start occuring, which removes stacks
// Deciseconds until ticks start occurring, which removes stacks
/// (first stack will be removed at this time plus tick_interval)
var/delay_before_decay
/// How many stacks are lost per tick (decay trigger)
@@ -31,11 +31,11 @@
/// Put the state name without the number in these state vars
var/overlay_state
/// Icon state for underlays applied when the status effect is applied
/// The number is concatonated onto the string based on the number of stacks to get the correct state name.
/// The number is concatenated onto the string based on the number of stacks to get the correct state name.
var/underlay_state
/// A reference to our overlay appearance
var/mutable_appearance/status_overlay
/// A referenceto our underlay appearance
/// A reference to our underlay appearance
var/mutable_appearance/status_underlay
/// Effects that occur when the stack count crosses stack_threshold
@@ -90,7 +90,7 @@
owner.underlays -= status_underlay
stacks += stacks_added
if(stacks > 0)
if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occuring if changing from above threshold to still above threshold
if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occurring if changing from above threshold to still above threshold
threshold_crossed = TRUE
on_threshold_cross()
if(consumed_on_threshold)
+5 -5
View File
@@ -1,6 +1,6 @@
// This datum is merely a singleton instance that allows for custom "can be applied" behaviors without instantiating a wound instance.
// For example: You can make a pregen_data subtype for your wound that overrides can_be_applied_to to only apply to specifically slimeperson limbs.
// Without this, youre stuck with very static initial variables.
// Without this, you're stuck with very static initial variables.
/// A singleton datum that holds pre-gen and static data about a wound. Each wound datum should have a corresponding wound_pregen_data.
/datum/wound_pregen_data
@@ -56,9 +56,9 @@
if (!abstract)
if (required_limb_biostate == null)
stack_trace("required_limb_biostate null - please set it! occured on: [src.type]")
stack_trace("required_limb_biostate null - please set it! occurred on: [src.type]")
if (wound_path_to_generate == null)
stack_trace("wound_path_to_generate null - please set it! occured on: [src.type]")
stack_trace("wound_path_to_generate null - please set it! occurred on: [src.type]")
scar_priorities = generate_scar_priorities()
@@ -82,8 +82,8 @@
* * random_roll = FALSE: If this is in the context of a random wound generation, and this wound wasn't specifically checked.
*
* Returns:
* FALSE if the limb cannot be wounded, if the wounding types dont match ours (via wounding_types_valid()), if we have a higher severity wound already in our series,
* if we have a biotype mismatch, if the limb isnt in a viable zone, or if theres any duplicate wound types.
* FALSE if the limb cannot be wounded, if the wounding types don't match ours (via wounding_types_valid()), if we have a higher severity wound already in our series,
* if we have a biotype mismatch, if the limb isn't in a viable zone, or if there's any duplicate wound types.
* TRUE otherwise.
*/
/datum/wound_pregen_data/proc/can_be_applied_to(obj/item/bodypart/limb, list/suggested_wounding_types = required_wounding_types, datum/wound/old_wound, random_roll = FALSE, duplicates_allowed = src.duplicates_allowed, care_about_existing_wounds = TRUE)
+4 -4
View File
@@ -127,7 +127,7 @@
return ..()
/// If we should have an actionspeed_mod, ensures we do and updates its slowdown. Otherwise, ensures we dont have one
/// If we should have an actionspeed_mod, ensures we do and updates its slowdown. Otherwise, ensures we don't have one
/// by qdeleting any existing modifier.
/datum/wound/proc/update_actionspeed_modifier()
if (should_have_actionspeed_modifier())
@@ -323,7 +323,7 @@
SIGNAL_HANDLER
qdel(src)
/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
/// Remove the wound from whatever it's afflicting, and cleans up whatever status effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
/datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE)
//TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff
var/old_victim = victim
@@ -341,7 +341,7 @@
if(limb && !ignore_limb)
set_limb(null, replaced) // since we're removing limb's ref to us, we should do the same
// if you want to keep the ref, do it externally, theres no reason for us to remember it
// if you want to keep the ref, do it externally, there's no reason for us to remember it
if (ismob(old_victim))
var/mob/mob_victim = old_victim
@@ -688,7 +688,7 @@
/datum/wound/proc/get_limb_examine_description()
return
/// Gets the flat percentage chance increment of a dismember occuring, if a dismember is attempted (requires mangled flesh and bone). returning 15 = +15%.
/// Gets the flat percentage chance increment of a dismember occurring, if a dismember is attempted (requires mangled flesh and bone). returning 15 = +15%.
/datum/wound/proc/get_dismember_chance_bonus(existing_chance)
SHOULD_BE_PURE(TRUE)
+5 -5
View File
@@ -128,7 +128,7 @@
* A list of teleport locations
*
* Adding a wizard area teleport list because motherfucking lag -- Urist
* I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game
* I am far too lazy to make it a proper list of areas so I'll just make it run the usual teleport routine at the start of the game
*/
GLOBAL_LIST_EMPTY(teleportlocs)
@@ -168,9 +168,9 @@ GLOBAL_LIST_EMPTY(teleportlocs)
return ..()
/*
* Initalize this area
* Initialize this area
*
* intializes the dynamic area lighting and also registers the area with the z level via
* initializes the dynamic area lighting and also registers the area with the z level via
* reg_in_areas_in_z
*
* returns INITIALIZE_HINT_LATELOAD
@@ -414,7 +414,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
/**
* Update the icon state of the area
*
* Im not sure what the heck this does, somethign to do with weather being able to set icon
* I'm not sure what the heck this does, something to do with weather being able to set icon
* states on areas?? where the heck would that even display?
*/
/area/update_icon_state()
@@ -439,7 +439,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
/**
* Returns int 1 or 0 if the area has power for the given channel
*
* evalutes a mixture of variables mappers can set, requires_power, always_unpowered and then
* evaluates a mixture of variables mappers can set, requires_power, always_unpowered and then
* per channel power_equip, power_light, power_environ
*/
/area/proc/powered(chan) // return true if the area has power to given channel
+1 -1
View File
@@ -40,7 +40,7 @@
mood_message = "I feel like I am being watched..."
/area/ruin/bughabitat
name = "\improper Entemology Outreach Center"
name = "\improper Entomology Outreach Center"
mood_bonus = 1
mood_message = "This place seems strangely serene."
+1 -1
View File
@@ -151,7 +151,7 @@
say("Requesting ID card has no job assignment registered!")
return FALSE
var/list/datum/bounty/crumbs = list(random_bounty(pot_acc.account_job.bounty_types), // We want to offer 2 bounties from their appropriate job catagories
random_bounty(pot_acc.account_job.bounty_types), // and 1 guarenteed assistant bounty if the other 2 suck.
random_bounty(pot_acc.account_job.bounty_types), // and 1 guaranteed assistant bounty if the other 2 suck.
random_bounty(CIV_JOB_BASIC))
COOLDOWN_START(pot_acc, bounty_timer, (5 MINUTES) - cooldown_reduction)
pot_acc.bounties = crumbs
@@ -1,6 +1,6 @@
/*
* Tier one entries are unlocked at the start, and are for dna mutants that are:
* - easy to aquire (rats)
* - easy to acquire (rats)
* - have a bonus for getting past a threshold
* - might serve a job purpose for others (goliath) and thus should be gainable early enough
*/
@@ -1,6 +1,6 @@
/*
* Tier two entries are unlocked after infusing someone/being infused and achieving a bonus, and are for dna mutants that are:
* - harder to aquire (gondolas) but not *necessarily* requiring job help
* - harder to acquire (gondolas) but not *necessarily* requiring job help
* - have a bonus for getting past a threshold
*
* todos for the future:
+2 -2
View File
@@ -112,7 +112,7 @@
/obj/machinery/flatpacker/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context)
SIGNAL_HANDLER
//we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it
//we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benefit from it
if(directly_use_energy(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.4 * initial(active_power_usage))))
flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), 1 SECONDS)
@@ -292,7 +292,7 @@
if(isnull(amount))
return
//we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it
//we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benefit from it
if(!directly_use_energy(ROUND_UP((amount / MAX_STACK_SIZE) * 0.4 * initial(active_power_usage))))
say("No power to dispense sheets")
return
+1 -1
View File
@@ -110,7 +110,7 @@
else
if(!user.temporarilyRemoveItemFromInventory(inserted_coin))
return ITEM_INTERACT_BLOCKING
balloon_alert(user, "coin insterted")
balloon_alert(user, "coin inserted")
balance += inserted_coin.value
qdel(inserted_coin)
return ITEM_INTERACT_SUCCESS
+1 -1
View File
@@ -188,7 +188,7 @@ GLOBAL_LIST_EMPTY(key_to_status_display)
var/matrix/working_transform = matrix()
var/working_alpha = alpha
if(dir != SOUTH)
// Translate the text seperately, since they are vis_contents.
// Translate the text separately, since they are vis_contents.
working_transform = floor_projections["[dir]"]
working_alpha = PROJECTION_TEXT_ALPHA
var/obj/effect/overlay/status_display_text/current_overlay = get_status_text(current_key)
+2 -2
View File
@@ -231,7 +231,7 @@
/obj/machinery/suit_storage_unit/update_overlays()
. = ..()
//if things arent powered, these show anyways
//if things aren't powered, these show anyways
if(panel_open)
. += "[base_icon_state]_panel"
if(state_open)
@@ -794,7 +794,7 @@
*/
/obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver)
if(screwdriver.tool_behaviour == TOOL_SCREWDRIVER && (uv || locked))
to_chat(user, span_warning("You cant open the panel while its [locked ? "locked" : "decontaminating"]"))
to_chat(user, span_warning("You can't open the panel while its [locked ? "locked" : "decontaminating"]"))
return TRUE
return ..()
+2 -2
View File
@@ -1318,7 +1318,7 @@
* Then, it checks tiny items.
* After all that, it returns TRUE if the item is set to be discovered. Otherwise, it returns FALSE.
*
* This works similarily to /suicide_act: if you want an item to have a unique interaction, go to that item
* This works similarly to /suicide_act: if you want an item to have a unique interaction, go to that item
* and give it an /on_accidental_consumption proc override. For a simple example of this, check out the nuke disk.
*
* Arguments
@@ -1343,7 +1343,7 @@
return
source_item?.reagents?.add_reagent(/datum/reagent/blood, 2)
else if(custom_materials?.len) //if we've got materials, lets see whats in it
else if(custom_materials?.len) //if we've got materials, let's see what's in it
// How many mats have we found? You can only be affected by two material datums by default
var/found_mats = 0
// How much of each material is in it? Used to determine if the glass should break
+1 -1
View File
@@ -55,7 +55,7 @@
to_chat(sender, span_warning("You should use [src] on an AI upload console or the AI core itself."))
return
if(malf_candidate.mind?.has_antag_datum(/datum/antagonist/malf_ai)) //Already malf
to_chat(sender, span_warning("Unknown error occured. Upload process aborted."))
to_chat(sender, span_warning("Unknown error occurred. Upload process aborted."))
return
var/datum/antagonist/malf_ai/infected/malf_datum = new (give_objectives = TRUE, new_boss = sender.mind)
+1 -1
View File
@@ -229,7 +229,7 @@
* Actually add current decal to the floor.
*
* Responsible for actually adding the element to the turf for maximum flexibility.area
* Can be overriden for different decal behaviors.
* Can be overridden for different decal behaviors.
* Arguments:
* * target - The turf being painted to
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/bear_armor
name = "pile of bear armor"
desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \
are written on the back of one of the plates in russian. This seems like an awful idea."
are written on the back of one of the plates in Russian. This seems like an awful idea."
icon = 'icons/obj/tools.dmi'
icon_state = "bear_armor_upgrade"
+1 -1
View File
@@ -80,7 +80,7 @@
/**
* Handles adding components to the chainsaw. Added in Initialize()
*
* Applies components to the chainsaw. Added as a seperate proc to allow for
* Applies components to the chainsaw. Added as a separate proc to allow for
* variance between subtypes
*/
/obj/item/chainsaw/proc/apply_components()
+2 -2
View File
@@ -2,7 +2,7 @@
name = "blank chromosome"
icon = 'icons/obj/science/chromosomes.dmi'
icon_state = ""
desc = "A tube holding chromosomic data."
desc = "A tube holding chromosomal data."
force = 0
w_class = WEIGHT_CLASS_SMALL
@@ -16,7 +16,7 @@
/obj/item/chromosome/proc/can_apply(datum/mutation/human/HM)
if(!HM || !(HM.can_chromosome == CHROMOSOME_NONE))
return FALSE
if((stabilizer_coeff != 1) && (HM.stabilizer_coeff != -1)) //if the chromosome is 1, we dont change anything. If the mutation is -1, we cant change it. sorry
if((stabilizer_coeff != 1) && (HM.stabilizer_coeff != -1)) //if the chromosome is 1, we don't change anything. If the mutation is -1, we can't change it. sorry
return TRUE
if((synchronizer_coeff != 1) && (HM.synchronizer_coeff != -1))
return TRUE
+1 -1
View File
@@ -202,7 +202,7 @@
/obj/item/razor/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!"))
shave(user, BODY_ZONE_PRECISE_MOUTH)
shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever
shave(user, BODY_ZONE_HEAD)//doesn't need to be BODY_ZONE_HEAD specifically, but whatever
return BRUTELOSS
/obj/item/razor/proc/shave(mob/living/carbon/human/skinhead, location = BODY_ZONE_PRECISE_MOUTH)
@@ -208,7 +208,7 @@
for(var/obj/machinery/light/target in user.loc)
replace_light(target, user)
on_a_light = TRUE
if(!on_a_light) //So we dont give a ballon alert when we just used replace_light
if(!on_a_light) //So we don't give a balloon alert when we just used replace_light
user.balloon_alert(user, "[uses] lights, [bulb_shards]/[BULB_SHARDS_REQUIRED] fragments")
/**
+1 -1
View File
@@ -580,7 +580,7 @@
/obj/item/food/burger/rib
name = "mcrib"
desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it."
desc = "An elusive rib shaped burger with limited availability across the galaxy. Not as good as you remember it."
icon_state = "mcrib"
food_reagents = list(
/datum/reagent/consumable/nutriment = 2,
+1 -1
View File
@@ -521,7 +521,7 @@
/obj/item/food/patty
name = "patty"
desc = "The nanotrasen patty is the patty for you and me!"
desc = "The Nanotrasen patty is the patty for you and me!"
icon = 'icons/obj/food/meat.dmi'
icon_state = "patty"
food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2)
+2 -2
View File
@@ -422,10 +422,10 @@
/turf/open/get_dumping_location()
return src
/turf/open/proc/ClearWet()//Nuclear option of immediately removing slipperyness from the tile instead of the natural drying over time
/turf/open/proc/ClearWet()//Nuclear option of immediately removing slipperiness from the tile instead of the natural drying over time
qdel(GetComponent(/datum/component/wet_floor))
/// Builds with rods. This doesn't exist to be overriden, just to remove duplicate logic for turfs that want
/// Builds with rods. This doesn't exist to be overridden, just to remove duplicate logic for turfs that want
/// To support floor tile creation
/// I'd make it a component, but one of these things is space. So no.
/turf/open/proc/build_with_rods(obj/item/stack/rods/used_rods, mob/user)
+1 -1
View File
@@ -3,7 +3,7 @@
/// Please do not bloat this. Love you <3
/turf/open/misc
name = "coder/mapper fucked up"
desc = "report on github please"
desc = "report on GitHub please"
flags_1 = NO_SCREENTIPS_1 | CAN_BE_DIRTY_1
turf_flags = IS_SOLID | NO_RUST
+2 -2
View File
@@ -416,7 +416,7 @@ GLOBAL_VAR(tracy_log)
hub_password = "SORRYNOPASSWORD"
/**
* Handles incresing the world's maxx var and intializing the new turfs and assigning them to the global area.
* Handles increasing the world's maxx var and initializing the new turfs and assigning them to the global area.
* If map_load_z_cutoff is passed in, it will only load turfs up to that z level, inclusive.
* This is because maploading will handle the turfs it loads itself.
*/
@@ -443,7 +443,7 @@ GLOBAL_VAR(tracy_log)
maxy = new_maxy
if(!map_load_z_cutoff)
return
var/area/global_area = GLOB.areas_by_type[world.area] // We're guarenteed to be touching the global area, so we'll just do this
var/area/global_area = GLOB.areas_by_type[world.area] // We're guaranteed to be touching the global area, so we'll just do this
LISTASSERTLEN(global_area.turfs_by_zlevel, map_load_z_cutoff, list())
for (var/zlevel in 1 to map_load_z_cutoff)
var/list/to_add = block(
@@ -156,7 +156,7 @@ GLOBAL_LIST_EMPTY(actionspeed_modification_cache)
var/amt = M.multiplicative_slowdown
if(conflict)
// Conflicting modifiers prioritize the larger slowdown or the larger speedup
// We purposefuly don't handle mixing speedups and slowdowns on the same id
// We purposefully don't handle mixing speedups and slowdowns on the same id
if(abs(conflict_tracker[conflict]) < abs(amt))
conflict_tracker[conflict] = amt
else
+2 -2
View File
@@ -64,7 +64,7 @@
"SELECT /mob/living IN (@[/area/service/bar MAP contents])[1]"
What if some dumbass admin spawned a bajillion spiders and you need to kill them all?
Oh yeah you'd rather not delete all the spiders in maintenace. Only that one room the spiders were
Oh yeah you'd rather not delete all the spiders in maintenance. Only that one room the spiders were
spawned in.
"DELETE /mob/living/carbon/superior_animal/giant_spider WHERE loc.loc == marked"
@@ -109,7 +109,7 @@
By the way, queries are slow and take a while. Be patient.
They don't hang the entire server though.
With great power comes great responsability.
With great power comes great responsibility.
Here's a slightly more formal quick reference.
+1 -1
View File
@@ -337,7 +337,7 @@ ADMIN_VERB(check_for_obstructed_atmospherics, R_DEBUG, "Check For Obstructed Atm
var/list/results = list()
results += "<h2><b>Anything that is considered to aesthetically obstruct an atmospherics machine (vent, scrubber, port) is listed below.</b> Please re-arrange to accomodate for this.</h2><br>"
results += "<h2><b>Anything that is considered to aesthetically obstruct an atmospherics machine (vent, scrubber, port) is listed below.</b> Please re-arrange to accommodate for this.</h2><br>"
// Ignore out stuff we see in normal and standard mapping that we don't care about (false alarms). Typically stuff that goes directionally off turfs or other undertile objects that we don't want to care about.
var/list/ignore_list = list(
@@ -29,7 +29,7 @@
return "[.][item]</li>"
// This is split into a seperate proc mostly to make errors that happen not break things too much
// This is split into a separate proc mostly to make errors that happen not break things too much
/proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags)
if(isappearance(value))
value = get_vv_appearance(value)
@@ -64,11 +64,11 @@
var/datum/datum_value = value
return datum_value.debug_variable_value(name, level, owner, sanitize, display_flags)
if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists arent detectable as a list through istype
if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists aren't detectable as a list through istype
var/list/list_value = value
var/list/items = list()
// This is becuse some lists either dont count as lists or a locate on their ref will return null
// This is because some lists either don't count as lists or a locate on their ref will return null
var/link_vars = "Vars=[REF(value)]"
if(name in GLOB.vv_special_lists)
link_vars = "Vars=[REF(owner)];special_varname=[name]"
@@ -52,7 +52,7 @@
var/matrix_var_name = params["var_name"]
var/matrix_var_value = params["var_value"]
if(testing_matrix.vv_edit_var(matrix_var_name, matrix_var_value) == FALSE)
to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on github.", confidential = TRUE)
to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on GitHub.", confidential = TRUE)
return
set_transform()
if("scale")
@@ -70,7 +70,7 @@
/datum/heretic_knowledge/spell/cosmic_runes
name = "Cosmic Runes"
desc = "Grants you Cosmic Runes, a spell that creates two runes linked with eachother for easy teleportation. \
desc = "Grants you Cosmic Runes, a spell that creates two runes linked with each other for easy teleportation. \
Only the entity activating the rune will get transported, and it can be used by anyone without a star mark. \
However, people with a star mark will get transported along with another person using the rune."
gain_text = "The distant stars crept into my dreams, roaring and screaming without reason. \

Some files were not shown because too many files have changed in this diff Show More