mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-12 16:44:43 +01:00
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
## Changelog
|
||||
|
||||
<!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. -->
|
||||
<!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and its effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. -->
|
||||
|
||||
:cl:
|
||||
add: Added new mechanics or gameplay changes
|
||||
|
||||
@@ -40,7 +40,7 @@ public functions rely on to implement logic
|
||||
When documenting a proc, we give a short one line description (as this is shown
|
||||
next to the proc definition in the list of all procs for a type or global
|
||||
namespace), then a longer paragraph which will be shown when the user clicks on
|
||||
the proc to jump to it's definition
|
||||
the proc to jump to its definition
|
||||
```
|
||||
/**
|
||||
* Short description of the proc
|
||||
@@ -59,7 +59,7 @@ just going to be the typepath of the class, as dmdoc uses that by default
|
||||
|
||||
Then we give a short oneline description of the class
|
||||
|
||||
Finally we give a longer multi paragraph description of the class and it's details
|
||||
Finally we give a longer multi paragraph description of the class and its details
|
||||
```
|
||||
/**
|
||||
* # Classname (Can be omitted if it's just going to be the typepath)
|
||||
|
||||
@@ -100,11 +100,11 @@ While we normally encourage (and in some cases, even require) bringing out of da
|
||||
### RegisterSignal()
|
||||
|
||||
#### PROC_REF Macros
|
||||
When referencing procs in RegisterSignal, Callback and other procs you should use PROC_REF, TYPE_PROC_REF and GLOBAL_PROC_REF macros.
|
||||
When referencing procs in RegisterSignal, Callback and other procs you should use PROC_REF, TYPE_PROC_REF and GLOBAL_PROC_REF macros.
|
||||
They ensure compilation fails if the reffered to procs change names or get removed.
|
||||
The macro to be used depends on how the proc you're in relates to the proc you want to use:
|
||||
|
||||
PROC_REF if the proc you want to use is defined on the current proc type or any of it's ancestor types.
|
||||
PROC_REF if the proc you want to use is defined on the current proc type or any of its ancestor types.
|
||||
Example:
|
||||
```
|
||||
/mob/proc/funny()
|
||||
@@ -129,7 +129,7 @@ Example:
|
||||
/mob/subtype/proc/do_something()
|
||||
var/obj/thing/x = new()
|
||||
// we're referring to /obj/thing proc inside /mob/subtype proc
|
||||
RegisterSignal(x, COMSIG_FAKE, TYPE_PROC_REF(/obj/thing, funny))
|
||||
RegisterSignal(x, COMSIG_FAKE, TYPE_PROC_REF(/obj/thing, funny))
|
||||
```
|
||||
|
||||
GLOBAL_PROC_REF if the proc you want to use is a global proc.
|
||||
@@ -154,7 +154,7 @@ All procs that are registered to listen for signals using `RegisterSignal()` mus
|
||||
```
|
||||
This is to ensure that it is clear the proc handles signals and turns on a lint to ensure it does not sleep.
|
||||
|
||||
Any sleeping behaviour that you need to perform inside a `SIGNAL_HANDLER` proc must be called asynchronously (e.g. with `INVOKE_ASYNC()`) or be redone to work asynchronously.
|
||||
Any sleeping behaviour that you need to perform inside a `SIGNAL_HANDLER` proc must be called asynchronously (e.g. with `INVOKE_ASYNC()`) or be redone to work asynchronously.
|
||||
|
||||
#### `override`
|
||||
|
||||
@@ -280,7 +280,7 @@ Good:
|
||||
off_overlay = iconstate2appearance(icon, "off")
|
||||
broken_overlay = icon2appearance(broken_icon)
|
||||
if (stat & broken)
|
||||
add_overlay(broken_overlay)
|
||||
add_overlay(broken_overlay)
|
||||
return
|
||||
if (is_on)
|
||||
add_overlay(on_overlay)
|
||||
@@ -304,7 +304,7 @@ Bad:
|
||||
if (isnull(our_overlays))
|
||||
our_overlays = list("on" = iconstate2appearance(overlay_icon, "on"), "off" = iconstate2appearance(overlay_icon, "off"), "broken" = iconstate2appearance(overlay_icon, "broken"))
|
||||
if (stat & broken)
|
||||
add_overlay(our_overlays["broken"])
|
||||
add_overlay(our_overlays["broken"])
|
||||
return
|
||||
...
|
||||
```
|
||||
@@ -391,7 +391,7 @@ At its best, it can make some very common patterns easy to use, and harder to me
|
||||
some_code()
|
||||
if (do_something_else())
|
||||
. = TRUE // Uh oh, what's going on!
|
||||
|
||||
|
||||
// even
|
||||
// more
|
||||
// code
|
||||
@@ -468,7 +468,7 @@ Meaning:
|
||||
to_chat(world, uh_oh())
|
||||
```
|
||||
|
||||
...will print `woah!`.
|
||||
...will print `woah!`.
|
||||
|
||||
For this reason, it is acceptable for `.` to be used in places where consumers can reasonably continue in the event of a runtime.
|
||||
|
||||
@@ -494,7 +494,7 @@ If you are using `.` in this case (or for another case that might be acceptable,
|
||||
. = ..()
|
||||
if (. == BIGGER_SUPER_ATTACK)
|
||||
return BIGGER_SUPER_ATTACK // More readable than `.`
|
||||
|
||||
|
||||
// Due to how common it is, most uses of `. = ..()` do not need a trailing `return .`
|
||||
```
|
||||
|
||||
|
||||
@@ -1264,7 +1264,7 @@
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/button/door/directional/north{
|
||||
desc = "A door remote control switch. From the looks of it, It seems to be broken after being pressed too hard, it's bloody handprint still visible.";
|
||||
desc = "A door remote control switch. From the looks of it, It seems to be broken after being pressed too hard, its bloody handprint still visible.";
|
||||
name = "Vault Lockdown"
|
||||
},
|
||||
/obj/item/modular_computer/laptop/preset/civilian,
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
//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
|
||||
#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 it's name in the mutation section of the dna console
|
||||
/// 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
|
||||
/// Cannot be interacted with by players through normal means. I.E. wizards mutate
|
||||
#define MUT_OTHER 3
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
if(!drop_atom)
|
||||
return //not a valid atom.
|
||||
var/turf/drop_turf = get_step(drop_atom, 0) //resolve where the thing is.
|
||||
if(!drop_turf) //incase it's inside a valid drop container, inside another container. ie if a mech picked up a closet and has it inside it's internal storage.
|
||||
if(!drop_turf) //incase it's inside a valid drop container, inside another container. ie if a mech picked up a closet and has it inside its internal storage.
|
||||
var/atom/last_try = drop_atom.loc?.drop_location() //one last try, otherwise fuck it.
|
||||
if(last_try)
|
||||
drop_turf = get_step(last_try, 0)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
#define BB_TARGETLESS_TIME "BB_targetless_time"
|
||||
|
||||
///Tipped blackboards
|
||||
///Bool that means a basic mob will start reacting to being tipped in it's planning
|
||||
///Bool that means a basic mob will start reacting to being tipped in its planning
|
||||
#define BB_BASIC_MOB_TIP_REACTING "BB_basic_tip_reacting"
|
||||
///the motherfucker who tipped us
|
||||
#define BB_BASIC_MOB_TIPPER "BB_basic_tip_tipper"
|
||||
|
||||
@@ -64,13 +64,13 @@
|
||||
/// The maximum number of degrees that your body can heat up in 1 tick, due to the environment, when in a hot area.
|
||||
#define BODYTEMP_HEATING_MAX 30
|
||||
/// The body temperature limit the human body can take before it starts taking damage from heat.
|
||||
/// This also affects how fast the body normalises it's temperature when hot.
|
||||
/// This also affects how fast the body normalises its temperature when hot.
|
||||
/// 340k is about 66c, and rather high for a human.
|
||||
#define BODYTEMP_HEAT_DAMAGE_LIMIT (BODYTEMP_NORMAL + 30)
|
||||
/// A temperature limit which is above the maximum lavaland temperature
|
||||
#define BODYTEMP_HEAT_LAVALAND_SAFE (LAVALAND_MAX_TEMPERATURE + 5)
|
||||
/// The body temperature limit the human body can take before it starts taking damage from cold.
|
||||
/// This also affects how fast the body normalises it's temperature when cold.
|
||||
/// This also affects how fast the body normalises its temperature when cold.
|
||||
/// 270k is about -3c, that is below freezing and would hurt over time.
|
||||
#define BODYTEMP_COLD_DAMAGE_LIMIT (BODYTEMP_NORMAL - 40)
|
||||
/// A temperature limit which is above the minimum icebox temperature
|
||||
|
||||
@@ -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 it's anchored var changed, from base atom/movable/set_anchored(): (value)
|
||||
///called when the movable sucessfully 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,5 +1,5 @@
|
||||
// /obj/item/clothing
|
||||
/// (/obj/item/clothing, visor_state) - When a clothing gets it's visor toggled.
|
||||
/// (/obj/item/clothing, visor_state) - When a clothing gets its visor toggled.
|
||||
#define COMSIG_CLOTHING_VISOR_TOGGLE "clothing_visor_toggle"
|
||||
/// From an undersuit being adjusted: ()
|
||||
#define COMSIG_CLOTHING_UNDER_ADJUSTED "clothing_under_adjusted"
|
||||
|
||||
@@ -526,5 +526,5 @@
|
||||
|
||||
/// Sent from /obj/item/update_weight_class(). (old_w_class, new_w_class)
|
||||
#define COMSIG_ITEM_WEIGHT_CLASS_CHANGED "item_weight_class_changed"
|
||||
/// Sent from /obj/item/update_weight_class(), to it's loc. (obj/item/changed_item, old_w_class, new_w_class)
|
||||
/// Sent from /obj/item/update_weight_class(), to its loc. (obj/item/changed_item, old_w_class, new_w_class)
|
||||
#define COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED "atom_contents_weight_class_changed"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#define BASE_MACHINE_ACTIVE_CONSUMPTION (BASE_MACHINE_IDLE_CONSUMPTION * 10)
|
||||
|
||||
/// Bitflags for a machine's preferences on when it should start processing. For use with machinery's `processing_flags` var.
|
||||
#define START_PROCESSING_ON_INIT (1<<0) /// Indicates the machine will automatically start processing right after it's `Initialize()` is ran.
|
||||
#define START_PROCESSING_ON_INIT (1<<0) /// Indicates the machine will automatically start processing right after its `Initialize()` is ran.
|
||||
#define START_PROCESSING_MANUALLY (1<<1) /// Machines with this flag will not start processing when it's spawned. Use this if you want to manually control when a machine starts processing.
|
||||
|
||||
//bitflags for door switches.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define BOULDER_SIZE_MEDIUM 10
|
||||
/// Durability of a small size boulder from a small size vent.
|
||||
#define BOULDER_SIZE_SMALL 5
|
||||
/// How many boulders can a single ore vent have on it's tile before it stops producing more?
|
||||
/// How many boulders can a single ore vent have on its tile before it stops producing more?
|
||||
#define MAX_BOULDERS_PER_VENT 10
|
||||
/// Time multiplier
|
||||
#define INATE_BOULDER_SPEED_MULTIPLIER 3
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
#define REACTION_COMPETITIVE (1<<5)
|
||||
///Used to force pH changes to be constant regardless of volume
|
||||
#define REACTION_PH_VOL_CONSTANT (1<<6)
|
||||
///If a reaction will generate it's impure/inverse reagents in the middle of a reaction, as apposed to being determined on ingestion/on reaction completion
|
||||
///If a reaction will generate its impure/inverse reagents in the middle of a reaction, as apposed to being determined on ingestion/on reaction completion
|
||||
#define REACTION_REAL_TIME_SPLIT (1<<7)
|
||||
|
||||
///Used for overheat_temp - This sets the overheat so high it effectively has no overheat temperature.
|
||||
@@ -161,7 +161,7 @@
|
||||
#define REACTION_TAG_HEALING (1<<4)
|
||||
/// This reagent primarily damages
|
||||
#define REACTION_TAG_DAMAGING (1<<5)
|
||||
/// This reagent explodes as a part of it's intended effect (i.e. not overheated/impure)
|
||||
/// This reagent explodes as a part of its intended effect (i.e. not overheated/impure)
|
||||
#define REACTION_TAG_EXPLOSIVE (1<<6)
|
||||
/// This reagent does things that are unique and special
|
||||
#define REACTION_TAG_OTHER (1<<7)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#define REVS_LOSE 18
|
||||
/// The wizard was killed by the crew
|
||||
#define WIZARD_KILLED 19
|
||||
/// The station was destroyed by it's own self-destruct nuclear device
|
||||
/// The station was destroyed by its own self-destruct nuclear device
|
||||
#define STATION_NUKED 20
|
||||
/// The station was destroyed by the supermatter cascade
|
||||
#define SUPERMATTER_CASCADE 21
|
||||
|
||||
@@ -770,7 +770,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_DANGEROUS_OBJECT "dangerous_object"
|
||||
/// determines whether or not objects are haunted and teleport/attack randomly
|
||||
#define TRAIT_HAUNTED "haunted"
|
||||
/// An item that, if it has contents, will ignore it's contents when scanning for contraband.
|
||||
/// An item that, if it has contents, will ignore its contents when scanning for contraband.
|
||||
#define TRAIT_CONTRABAND_BLOCKER "contraband_blocker"
|
||||
|
||||
//quirk traits
|
||||
|
||||
@@ -850,7 +850,7 @@
|
||||
used_key_list[input_key] = 1
|
||||
return input_key
|
||||
|
||||
///Flattens a keyed list into a list of it's contents
|
||||
///Flattens a keyed list into a list of its contents
|
||||
/proc/flatten_list(list/key_list)
|
||||
if(!islist(key_list))
|
||||
return null
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* * Note: this means things like "list(1,2,3)" will need to be processed
|
||||
*/
|
||||
/proc/return_generator_args(generator/target)
|
||||
var/string_repr = "[target]" //the name of the generator is the string representation of it's _binobj, which also contains it's args
|
||||
var/string_repr = "[target]" //the name of the generator is the string representation of its _binobj, which also contains its args
|
||||
string_repr = copytext(string_repr, 11, length(string_repr)) // strips extraneous data
|
||||
string_repr = replacetext(string_repr, "\"", "") // removes the " around the type
|
||||
return splittext(string_repr, ", ")
|
||||
|
||||
@@ -1135,7 +1135,7 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects)
|
||||
if((x_dimension == world.icon_size) && (y_dimension == world.icon_size))
|
||||
return image_to_center
|
||||
|
||||
//Offset the image so that it's bottom left corner is shifted this many pixels
|
||||
//Offset the image so that its bottom left corner is shifted this many pixels
|
||||
//This makes it infinitely easier to draw larger inhands/images larger than world.iconsize
|
||||
//but still use them in game
|
||||
var/x_offset = -((x_dimension / world.icon_size) - 1) * (world.icon_size * 0.5)
|
||||
|
||||
@@ -685,7 +685,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
|
||||
else
|
||||
return zone
|
||||
|
||||
///Takes a zone and returns it's "parent" zone, if it has one.
|
||||
///Takes a zone and returns its "parent" zone, if it has one.
|
||||
/proc/deprecise_zone(precise_zone)
|
||||
switch(precise_zone)
|
||||
if(BODY_ZONE_PRECISE_GROIN)
|
||||
|
||||
@@ -210,7 +210,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
* if the bounds are odd, the true middle turf of the atom is returned
|
||||
**/
|
||||
/proc/get_turf_pixel(atom/checked_atom)
|
||||
var/turf/atom_turf = get_turf(checked_atom) //use checked_atom's turfs, as it's coords are the same as checked_atom's AND checked_atom's coords are lost if it is inside another atom
|
||||
var/turf/atom_turf = get_turf(checked_atom) //use checked_atom's turfs, as its coords are the same as checked_atom's AND checked_atom's coords are lost if it is inside another atom
|
||||
if(!atom_turf)
|
||||
return null
|
||||
if(checked_atom.flags_1 & IGNORE_TURF_PIXEL_OFFSET_1)
|
||||
@@ -227,7 +227,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
* Icon width/height
|
||||
**/
|
||||
/proc/get_visual_offset(atom/checked_atom)
|
||||
//Find checked_atom's matrix so we can use it's X/Y pixel shifts
|
||||
//Find checked_atom's matrix so we can use its X/Y pixel shifts
|
||||
var/matrix/atom_matrix = matrix(checked_atom.transform)
|
||||
|
||||
var/pixel_x_offset = checked_atom.pixel_x + checked_atom.pixel_w + atom_matrix.get_x_shift()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// This file contains any stuff related to admin-visible traits.
|
||||
// There's likely more than a few traits missing from this file, do consult the `_traits.dm` file in this folder to see every global trait that exists.
|
||||
// quirks have it's own panel so we don't need them here.
|
||||
// quirks have their own panel so we don't need them here.
|
||||
|
||||
GLOBAL_LIST_INIT(admin_visible_traits, list(
|
||||
/atom = list(
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
//Movable Screen Object
|
||||
//Not tied to the grid, places it's center where the cursor is
|
||||
//Not tied to the grid, places its center where the cursor is
|
||||
|
||||
/atom/movable/screen/movable
|
||||
mouse_drag_pointer = 'icons/effects/mouse_pointers/screen_drag.dmi'
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
## 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 it's 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 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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* Render relay object assigned to a plane master to be able to relay it's render onto other planes that are not it's own
|
||||
* Render relay object assigned to a plane master to be able to relay its render onto other planes that are not its own
|
||||
*/
|
||||
/atom/movable/render_plane_relay
|
||||
screen_loc = "CENTER"
|
||||
|
||||
@@ -278,7 +278,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
Initialize(20, TRUE, FALSE)
|
||||
|
||||
// Please don't stuff random bullshit here,
|
||||
// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize()
|
||||
// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in its Initialize()
|
||||
/datum/controller/master/Initialize(delay, init_sss, tgs_prime)
|
||||
set waitfor = 0
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ feedback data can be recorded in 5 formats:
|
||||
used to track the number of occurances of multiple related values i.e. how many times each type of gun is fired
|
||||
further calls to the same key will:
|
||||
add or subtract from the saved value of the data key if it already exists
|
||||
append the key and it's value if it doesn't exist
|
||||
append the key and its value if it doesn't exist
|
||||
calls: SSblackbox.record_feedback("tally", "example", 1, "sample data")
|
||||
SSblackbox.record_feedback("tally", "example", 4, "sample data")
|
||||
SSblackbox.record_feedback("tally", "example", 2, "other data")
|
||||
@@ -208,7 +208,7 @@ feedback data can be recorded in 5 formats:
|
||||
all data list elements must be strings
|
||||
further calls to the same key will:
|
||||
add or subtract from the saved value of the data key if it already exists in the same multi-dimensional position
|
||||
append the key and it's value if it doesn't exist
|
||||
append the key and its value if it doesn't exist
|
||||
calls: SSblackbox.record_feedback("nested tally", "example", 1, list("fruit", "orange", "apricot"))
|
||||
SSblackbox.record_feedback("nested tally", "example", 2, list("fruit", "orange", "orange"))
|
||||
SSblackbox.record_feedback("nested tally", "example", 3, list("fruit", "orange", "apricot"))
|
||||
|
||||
@@ -140,9 +140,9 @@ SUBSYSTEM_DEF(discord)
|
||||
* ```
|
||||
*
|
||||
* Notes:
|
||||
* * The token is guaranteed to unique during it's validity period
|
||||
* * The token is guaranteed to unique during its validity period
|
||||
* * The validity period is currently set at 4 hours
|
||||
* * a token may not be unique outside it's validity window (to reduce conflicts)
|
||||
* * a token may not be unique outside its validity window (to reduce conflicts)
|
||||
*
|
||||
* Arguments:
|
||||
* * ckey_for a string representing the ckey this token is for
|
||||
|
||||
@@ -68,7 +68,7 @@ SUBSYSTEM_DEF(events)
|
||||
scheduled = world.time + rand(frequency_lower, max(frequency_lower,frequency_upper))
|
||||
|
||||
/**
|
||||
* Selects a random event based on whether it can occur and it's 'weight'(probability)
|
||||
* Selects a random event based on whether it can occur and its 'weight'(probability)
|
||||
*
|
||||
* Arguments:
|
||||
* * excluded_event - The event path we will be foregoing, if present.
|
||||
|
||||
@@ -703,7 +703,7 @@
|
||||
y_rate = 1
|
||||
|
||||
/**
|
||||
* Wrapper for walk_towards, not reccomended, as it's movement ends up being a bit stilted
|
||||
* Wrapper for walk_towards, not reccomended, as its movement ends up being a bit stilted
|
||||
*
|
||||
* Returns TRUE if the loop sucessfully started, or FALSE if it failed
|
||||
*
|
||||
|
||||
@@ -412,7 +412,7 @@ SUBSYSTEM_DEF(spatial_grid)
|
||||
return intersecting_cell
|
||||
|
||||
/**
|
||||
* find the spatial map cell that target used to belong to, then remove the target (and sometimes it's important_recusive_contents) from it.
|
||||
* find the spatial map cell that target used to belong to, then remove the target (and sometimes its important_recusive_contents) from it.
|
||||
* make sure to provide the turf old_target used to be "in"
|
||||
*
|
||||
* * old_target - the thing we want to remove from the spatial grid cell
|
||||
|
||||
@@ -9,7 +9,7 @@ SUBSYSTEM_DEF(stock_market)
|
||||
var/list/materials_prices = list()
|
||||
/// Associated list of materials alongside their market trends. 1 is up, 0 is stable, -1 is down.
|
||||
var/list/materials_trends = list()
|
||||
/// Associated list of materials alongside the life of it's current trend. After it's life is up, it will change to a new trend.
|
||||
/// Associated list of materials alongside the life of its current trend. After its life is up, it will change to a new trend.
|
||||
var/list/materials_trend_life = list()
|
||||
/// Associated list of materials alongside their available quantity. This is used to determine how much of a material is available to buy, and how much buying and selling affects the price.
|
||||
var/list/materials_quantity = list()
|
||||
|
||||
@@ -53,7 +53,7 @@ SUBSYSTEM_DEF(throwing)
|
||||
var/target_zone
|
||||
///The initial direction of the thrower of the thrownthing for building the trajectory of the throw.
|
||||
var/init_dir
|
||||
///The maximum number of turfs that the thrownthing will travel to reach it's target.
|
||||
///The maximum number of turfs that the thrownthing will travel to reach its target.
|
||||
var/maxrange
|
||||
///Turfs to travel per tick
|
||||
var/speed
|
||||
|
||||
@@ -26,7 +26,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
|
||||
var/list/datum/mind/minds = list() //The characters in the game. Used for objective tracking.
|
||||
|
||||
var/delay_end = FALSE //if set true, the round will not restart on it's own
|
||||
var/delay_end = FALSE //if set true, the round will not restart on its own
|
||||
var/admin_delay_notice = "" //a message to display to anyone who tries to restart the world after a delay
|
||||
var/ready_for_reboot = FALSE //all roundend preparation done with, all that's left is reboot
|
||||
|
||||
|
||||
@@ -645,7 +645,7 @@ SUBSYSTEM_DEF(timer)
|
||||
hash_timer.hash = null // but keep it from accidentally deleting us
|
||||
else
|
||||
if (flags & TIMER_OVERRIDE)
|
||||
hash_timer.hash = null // no need having it delete it's hash if we are going to replace it
|
||||
hash_timer.hash = null // no need having it delete its hash if we are going to replace it
|
||||
qdel(hash_timer)
|
||||
else
|
||||
if (hash_timer.flags & TIMER_STOPPABLE)
|
||||
|
||||
@@ -98,7 +98,7 @@ PROCESSING_SUBSYSTEM_DEF(transport)
|
||||
// We've made it this far, tram is physically fine so let's trip plan
|
||||
// This is based on the destination nav beacon, the logical location
|
||||
// If Something Happens and the location the controller thinks it's at
|
||||
// gets out of sync with it's actual physical location, it can be reset
|
||||
// gets out of sync with its actual physical location, it can be reset
|
||||
|
||||
// Since players can set the platform ID themselves, make sure it's a valid platform we're aware of
|
||||
var/network = LAZYACCESS(nav_beacons, transport_id)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
cooldown_time = 10 SECONDS
|
||||
/// The range of the slam
|
||||
var/range = 5
|
||||
/// The delay before the shockwave expands it's range
|
||||
/// The delay before the shockwave expands its range
|
||||
var/delay = 3
|
||||
/// How far hit targets are thrown
|
||||
var/throw_range = 8
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
///The color this organ draws with. Updated by bodypart/inherit_color()
|
||||
var/draw_color
|
||||
///Where does this organ inherit it's color from?
|
||||
///Where does this organ inherit its color from?
|
||||
var/color_source = ORGAN_COLOR_INHERIT
|
||||
///Take on the dna/preference from whoever we're gonna be inserted in
|
||||
var/imprint_on_next_insertion = TRUE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
* ## PROC TYPEPATH SHORTCUTS
|
||||
* (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...)
|
||||
*
|
||||
* ### proc defined on current(src) object OR overridden at src or any of it's parents:
|
||||
* ### proc defined on current(src) object OR overridden at src or any of its parents:
|
||||
* PROC_REF(procname)
|
||||
*
|
||||
* `CALLBACK(src, PROC_REF(some_proc_here))`
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
## Concept
|
||||
|
||||
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
|
||||
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward its arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
|
||||
|
||||
### [HackMD page for an introduction to the system as a whole.](https://hackmd.io/@tgstation/SignalsComponentsElements)
|
||||
### [HackMD page for an introduction to the system as a whole.](https://hackmd.io/@tgstation/SignalsComponentsElements)
|
||||
|
||||
### See/Define signals and their arguments in [__DEFINES\components.dm](../../__DEFINES/components.dm)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* The component datum
|
||||
*
|
||||
* A component should be a single standalone unit
|
||||
* of functionality, that works by receiving signals from it's parent
|
||||
* of functionality, that works by receiving signals from its parent
|
||||
* object to provide some single functionality (i.e a slippery component)
|
||||
* that makes the object it's attached to cause people to slip over.
|
||||
* Useful when you want shared behaviour independent of type inheritance
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
///The cooldown period between last_boomerang_throw and it's methods of implementing a rebound proc.
|
||||
///The cooldown period between last_boomerang_throw and its methods of implementing a rebound proc.
|
||||
#define BOOMERANG_REBOUND_INTERVAL (1 SECONDS)
|
||||
/**
|
||||
* If an ojvect is given the boomerang component, it should be thrown back to the thrower after either hitting it's target, or landing on the thrown tile.
|
||||
* If an ojvect is given the boomerang component, it should be thrown back to the thrower after either hitting its target, or landing on the thrown tile.
|
||||
* Thrown objects should be thrown back to the original thrower with this component, a number of tiles defined by boomerang_throw_range.
|
||||
*/
|
||||
/datum/component/boomerang
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
var/mob/living/body = parent
|
||||
body.update_appearance(UPDATE_ICON_STATE)
|
||||
|
||||
/// Called when something sets us as IT'S front
|
||||
/// Called when something sets us as ITS front
|
||||
/datum/component/mob_chain/proc/on_gained_tail(mob/living/body, mob/living/tail)
|
||||
SIGNAL_HANDLER
|
||||
back = tail
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/**
|
||||
* back up of the real name during user possession
|
||||
*
|
||||
* When a user possesses an object it's real name is set to the user name and this
|
||||
* When a user possesses an object its real name is set to the user name and this
|
||||
* stores whatever the real name was previously. When possession ends, the real name
|
||||
* is reset to this value
|
||||
*/
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
var/directional = FALSE
|
||||
///Whether we're a beam light
|
||||
var/beam = FALSE
|
||||
///A cone overlay for directional light, it's alpha and color are dependant on the light
|
||||
///A cone overlay for directional light, its alpha and color are dependant on the light
|
||||
var/image/cone
|
||||
///Current tracked direction for the directional cast behaviour
|
||||
var/current_direction
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
demand_connects = new_demand_connects
|
||||
supply_connects = new_supply_connects
|
||||
|
||||
///Give the direction of a pipe, and it'll return wich direction it originally was when it's object pointed SOUTH
|
||||
///Give the direction of a pipe, and it'll return wich direction it originally was when its object pointed SOUTH
|
||||
/datum/component/plumbing/proc/get_original_direction(dir)
|
||||
var/atom/movable/parent_movable = parent
|
||||
return turn(dir, dir2angle(parent_movable.dir) - 180)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
* * lube_flags - Controls the slip behaviour, they are listed starting [here][SLIDE]
|
||||
* * datum/callback/on_slip_callback - Callback to define further custom controls on when slipping is applied
|
||||
* * paralyze - length of time to paralyze the crossing mob for (Deciseconds)
|
||||
* * force_drop - should the crossing mob drop items in it's hands or not
|
||||
* * force_drop - should the crossing mob drop items in its hands or not
|
||||
* * slot_whitelist - flags controlling where on a mob this item can be equipped to make the parent mob slippery full list [here][ITEM_SLOT_OCLOTHING]
|
||||
* * datum/callback/on_slip_callback - Callback to add custom behaviours as the crossing mob is slipped
|
||||
*/
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
/datum/component/spirit_holding/proc/custom_name(mob/awakener)
|
||||
var/chosen_name = sanitize_name(tgui_input_text(bound_spirit, "What are you named?", "Spectral Nomenclature", max_length = MAX_NAME_LEN))
|
||||
if(!chosen_name) // with the way that sanitize_name works, it'll actually send the error message to the awakener as well.
|
||||
to_chat(awakener, span_warning("Your blade did not select a valid name! Please wait as they try again.")) // more verbose than what sanitize_name might pass in it's error message
|
||||
to_chat(awakener, span_warning("Your blade did not select a valid name! Please wait as they try again.")) // more verbose than what sanitize_name might pass in its error message
|
||||
return custom_name(awakener)
|
||||
return chosen_name
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
* Format; list(TYPEPATH = list(PRICE, QUANTITY, ADDITIONAL_DESCRIPTION))
|
||||
* Associated list of items able to be sold to the NPC with the money given for them.
|
||||
* The price given should be the "base" price; any price manipulation based on variables should be done with apply_sell_price_mods()
|
||||
* ADDITIONAL_DESCRIPTION is any additional text added to explain how the variables of the item effect the price; if it's stack based, it's final price depends how much is in the stack
|
||||
* ADDITIONAL_DESCRIPTION is any additional text added to explain how the variables of the item effect the price; if it's stack based, its final price depends how much is in the stack
|
||||
* EX; /obj/item/stack/sheet/mineral/diamond = list(500, INFINITY, ", per 100 cm3 sheet of diamond")
|
||||
* This list is filled by Initialize(), if you want to change the starting wanted items, modify initial_wanteds()
|
||||
*/
|
||||
@@ -327,7 +327,7 @@ Can accept both a type path, and an instance of a datum. Type path has priority.
|
||||
return original_cost
|
||||
|
||||
/**
|
||||
* Handles modifying/deleting the items to ensure that a proper amount is converted into cash; put into it's own proc to make the children of this not override a 30+ line sell_item()
|
||||
* Handles modifying/deleting the items to ensure that a proper amount is converted into cash; put into its own proc to make the children of this not override a 30+ line sell_item()
|
||||
*
|
||||
* Arguments:
|
||||
* * selling - (Item REF) this is the item being sold
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/**
|
||||
* Uplinks
|
||||
*
|
||||
* All /obj/item(s) have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in it's contents). Then add 'uses.'
|
||||
* All /obj/item(s) have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in its contents). Then add 'uses.'
|
||||
* Use whatever conditionals you want to check that the user has an uplink, and then call interact() on their uplink.
|
||||
* You might also want the uplink menu to open if active. Check if the uplink is 'active' and then interact() with it.
|
||||
**/
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
* Default implementation of clean-up code.
|
||||
*
|
||||
* This should be overridden to remove all references pointing to the object being destroyed, if
|
||||
* you do override it, make sure to call the parent and return it's return value by default
|
||||
* you do override it, make sure to call the parent and return its return value by default
|
||||
*
|
||||
* Return an appropriate [QDEL_HINT][QDEL_HINT_QUEUE] to modify handling of your deletion;
|
||||
* in most cases this is [QDEL_HINT_QUEUE].
|
||||
|
||||
@@ -25,7 +25,7 @@ GLOBAL_DATUM_INIT(eigenstate_manager, /datum/eigenstate_manager, new)
|
||||
targets -= target
|
||||
continue
|
||||
if(!subtle)
|
||||
target.visible_message("[target] fizzes, collapsing it's unique wavefunction into the others!") //If we're in a eigenlink all on our own and are open to new friends
|
||||
target.visible_message("[target] fizzes, collapsing its unique wavefunction into the others!") //If we're in a eigenlink all on our own and are open to new friends
|
||||
remove_eigen_entry(target) //clearup for new stuff
|
||||
//Do we still have targets?
|
||||
if(!length(targets))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/// Deals extra damage to mobs of a certain type, species, or biotype.
|
||||
/// This doesn't directly modify the normal damage of the weapon, instead it applies it's own damage seperatedly ON TOP of normal damage
|
||||
/// This doesn't directly modify the normal damage of the weapon, instead it applies its own damage seperatedly ON TOP of normal damage
|
||||
/// ie. a sword that does 10 damage with a bane elment attacthed that has a 0.5 damage_multiplier will do:
|
||||
/// 10 damage from the swords normal attack + 5 damage (50%) from the bane element
|
||||
/datum/element/bane
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/datum/element/gags_recolorable/proc/on_examine(atom/source, mob/user, list/examine_text)
|
||||
SIGNAL_HANDLER
|
||||
examine_text += span_notice("Now utilising PPP recolouring technology, capable of absorbing paint and pigments for changing it's colours!")
|
||||
examine_text += span_notice("Now utilising PPP recolouring technology, capable of absorbing paint and pigments for changing its colours!")
|
||||
|
||||
/datum/element/gags_recolorable/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
user.reset_perspective(null)
|
||||
user.remote_control = null
|
||||
|
||||
//this datum manages it's own references
|
||||
//this datum manages its own references
|
||||
|
||||
/datum/holocall
|
||||
///the one that called
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
///It's gross, gets the name of it's owner, and is all kinds of fucked up
|
||||
///It's gross, gets the name of its owner, and is all kinds of fucked up
|
||||
/datum/material/meat
|
||||
name = "meat"
|
||||
desc = "Meat"
|
||||
|
||||
@@ -434,7 +434,7 @@
|
||||
/datum/map_template/shuttle/emergency/lance
|
||||
suffix = "lance"
|
||||
name = "The Lance Crew Evacuation System"
|
||||
description = "A brand new shuttle by Nanotrasen's finest in shuttle-engineering, it's designed to tactically slam into a destroyed station, dispatching threats and saving crew at the same time! Be careful to stay out of it's path."
|
||||
description = "A brand new shuttle by Nanotrasen's finest in shuttle-engineering, it's designed to tactically slam into a destroyed station, dispatching threats and saving crew at the same time! Be careful to stay out of its path."
|
||||
admin_notes = "WARNING: This shuttle is designed to crash into the station. It has turrets, similar to the raven."
|
||||
credit_cost = CARGO_CRATE_VALUE * 70
|
||||
occupancy_limit = "50"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* This sets up a listening relationship such that when the target object emits a signal
|
||||
* the source datum this proc is called upon, will receive a callback to the given proctype
|
||||
* Use PROC_REF(procname), TYPE_PROC_REF(type,procname) or GLOBAL_PROC_REF(procname) macros to validate the passed in proc at compile time.
|
||||
* PROC_REF for procs defined on current type or it's ancestors, TYPE_PROC_REF for procs defined on unrelated type and GLOBAL_PROC_REF for global procs.
|
||||
* PROC_REF for procs defined on current type or its ancestors, TYPE_PROC_REF for procs defined on unrelated type and GLOBAL_PROC_REF for global procs.
|
||||
* Return values from procs registered must be a bitfield
|
||||
*
|
||||
* Arguments:
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
/**
|
||||
* Checks if this mob has a status effect that shares the passed effect's ID
|
||||
*
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not its typepath
|
||||
*
|
||||
* Returns an instance of a status effect, or NULL if none were found.
|
||||
*/
|
||||
@@ -99,7 +99,7 @@
|
||||
* Checks if this mob has a status effect that shares the passed effect's ID
|
||||
* and has the passed sources are in its list of sources (ONLY works for grouped efects!)
|
||||
*
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not its typepath
|
||||
*
|
||||
* Returns an instance of a status effect, or NULL if none were found.
|
||||
*/
|
||||
@@ -128,7 +128,7 @@
|
||||
/**
|
||||
* Returns a list of all status effects that share the passed effect type's ID
|
||||
*
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not it's typepath
|
||||
* checked_effect - TYPEPATH of a status effect to check for. Checks for its ID, not its typepath
|
||||
*
|
||||
* Returns a list
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/// When this event is ongoing, what direction will the price trend in?
|
||||
var/trend_value
|
||||
/// When this event is triggered, for how long will it's effects last?
|
||||
/// When this event is triggered, for how long will its effects last?
|
||||
var/trend_duration
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/datum/language_holder/vending_languages = vending_machine.get_language_holder()
|
||||
|
||||
if(!length(vending_languages.spoken_languages))
|
||||
CRASH("Vending machine [vending_machine] does not have any spoken languages in it's language holder.")
|
||||
CRASH("Vending machine [vending_machine] does not have any spoken languages in its language holder.")
|
||||
|
||||
// synch the current language to the language_iterator
|
||||
for(var/i in vending_languages.spoken_languages)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
victim.add_splatter_floor(get_step(victim.loc, victim.dir))
|
||||
|
||||
/datum/wound/pierce/bleed/get_bleed_rate_of_change()
|
||||
//basically if a species doesn't bleed, the wound is stagnant and will not heal on it's own (nor get worse)
|
||||
//basically if a species doesn't bleed, the wound is stagnant and will not heal on its own (nor get worse)
|
||||
if(!limb.can_bleed())
|
||||
return BLOOD_FLOW_STEADY
|
||||
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
return bleed_amt
|
||||
|
||||
/datum/wound/slash/flesh/get_bleed_rate_of_change()
|
||||
//basically if a species doesn't bleed, the wound is stagnant and will not heal on it's own (nor get worse)
|
||||
//basically if a species doesn't bleed, the wound is stagnant and will not heal on its own (nor get worse)
|
||||
if(!limb.can_bleed())
|
||||
return BLOOD_FLOW_STEADY
|
||||
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
||||
@@ -137,7 +137,7 @@
|
||||
if (!victim || HAS_TRAIT(victim, TRAIT_STASIS))
|
||||
return
|
||||
|
||||
// in case the victim has the NOBLOOD trait, the wound will simply not clot on it's own
|
||||
// in case the victim has the NOBLOOD trait, the wound will simply not clot on its own
|
||||
if(limb.can_bleed())
|
||||
set_blood_flow(min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW))
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/**
|
||||
* Called when a mob examines (shift click or verb) this atom
|
||||
*
|
||||
* Default behaviour is to get the name and icon of the object and it's reagents where
|
||||
* Default behaviour is to get the name and icon of the object and its reagents where
|
||||
* the [TRANSPARENT] flag is set on the reagents holder
|
||||
*
|
||||
* Produces a signal [COMSIG_ATOM_EXAMINE]
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
/obj/machinery/air_sensor/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_notice("Use multitool to link it to an injector/vent or reset it's ports")
|
||||
. += span_notice("Use multitool to link it to an injector/vent or reset its ports")
|
||||
. += span_notice("Click with hand to turn it off.")
|
||||
|
||||
/obj/machinery/air_sensor/attack_hand(mob/living/user, list/modifiers)
|
||||
@@ -196,7 +196,7 @@
|
||||
if(initial(sensor.chamber_id) != target_chamber)
|
||||
continue
|
||||
|
||||
//make real air sensor in it's place
|
||||
//make real air sensor in its place
|
||||
var/obj/machinery/air_sensor/new_sensor = new sensor(get_turf(src))
|
||||
new_sensor.inlet_id = input_id
|
||||
new_sensor.outlet_id = output_id
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/// Whether we are allowed to reconnect.
|
||||
var/reconnecting = TRUE
|
||||
|
||||
/// Was this computer multitooled before. If so copy the list connected_sensors as it now mantain's it's own sensors independent of the map loaded one's
|
||||
/// Was this computer multitooled before. If so copy the list connected_sensors as it now maintain's its own sensors independent of the map loaded one's
|
||||
var/was_multi_tooled = FALSE
|
||||
|
||||
/// list of all sensors[key is chamber id, value is id of air sensor linked to this chamber] monitered by this computer
|
||||
@@ -96,7 +96,7 @@
|
||||
if(!was_multi_tooled)
|
||||
connected_sensors = connected_sensors.Copy()
|
||||
was_multi_tooled = TRUE
|
||||
//register the sensor's unique ID with it's assositated chamber
|
||||
//register the sensor's unique ID with its assositated chamber
|
||||
connected_sensors[sensor.chamber_id] = sensor.id_tag
|
||||
user.balloon_alert(user, "sensor connected to [src]")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
var/list/visible_turfs = list()
|
||||
|
||||
// Get the camera's turf to correctly gather what's visible from it's turf, in case it's located in a moving object (borgs / mechs)
|
||||
// Get the camera's turf to correctly gather what's visible from its turf, in case it's located in a moving object (borgs / mechs)
|
||||
var/new_cam_turf = get_turf(active_camera)
|
||||
|
||||
// If we're not forcing an update for some reason and the cameras are in the same location,
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
patient_status = pick(
|
||||
"The only kiosk is kiosk, but is the only patient, patient?",
|
||||
"Breathing manually.",
|
||||
"Constact NTOS site admin.",
|
||||
"Contact NTOS site admin.",
|
||||
"97% carbon, 3% natural flavoring",
|
||||
"The ebb and flow wears us all in time.",
|
||||
"It's Lupus. You have Lupus.",
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
|
||||
/**
|
||||
* we process the list in reverse so that atoms without parents/contents are deleted first & their parents are deleted next & so on.
|
||||
* this is the reverse order in which get_all_contents() returns it's list
|
||||
* this is the reverse order in which get_all_contents() returns its list
|
||||
* if we delete an atom containing stuff then all its stuff are deleted with it as well so we will end recycling deleted items down the list and gain nothing from them
|
||||
*/
|
||||
for(var/i = length(nom); i >= 1; i--)
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
var/value = coin_values[coin_type] //Change this to use initial value once we change to mat datum coins.
|
||||
var/coin_count = round(remaining_payout / value)
|
||||
|
||||
if(!coin_count) //Cant make coins of this type, as we can't reach it's value.
|
||||
if(!coin_count) //Cant make coins of this type, as we can't reach its value.
|
||||
continue
|
||||
|
||||
remaining_payout -= value * coin_count
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if(target && !target.stat)
|
||||
O.throw_at(target, 5, 10)
|
||||
|
||||
//anomaly quickly contracts then slowly expands it's ring
|
||||
//anomaly quickly contracts then slowly expands its ring
|
||||
animate(warp, time = seconds_per_tick*3, transform = matrix().Scale(0.5,0.5))
|
||||
animate(time = seconds_per_tick*7, transform = matrix())
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
to_chat(user, span_warning("Some strange aura is blocking the way."))
|
||||
return
|
||||
if(destination_area.area_flags & NOTELEPORT || SSmapping.level_trait(newloc.z, ZTRAIT_NOPHASE))
|
||||
to_chat(user, span_danger("Some dull, universal force is blocking the way. It's overwhelmingly oppressive force feels dangerous."))
|
||||
to_chat(user, span_danger("Some dull, universal force is blocking the way. Its overwhelmingly oppressive force feels dangerous."))
|
||||
return
|
||||
if (direction == UP || direction == DOWN)
|
||||
newloc = can_z_move(direction, get_turf(src), newloc, ZMOVE_INCAPACITATED_CHECKS | ZMOVE_FEEDBACK | ZMOVE_ALLOW_ANCHORED, user)
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
if(src.uses >= max_uses)
|
||||
break
|
||||
|
||||
//consume the item only if it's an light tube,bulb or shard
|
||||
//consume the item only if it's a light tube, bulb or shard
|
||||
loaded = FALSE
|
||||
if(istype(item_to_check, /obj/item/light))
|
||||
var/obj/item/light/found_light = item_to_check
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
default_raw_text = @{"
|
||||
|
||||
Thank you for your purchase of the Nerd Co SpySpeks <small>tm</small>, this paper will be your quick-start guide to violating the privacy of your crewmates in three easy steps!<br><br>Step One: Nerd Co SpySpeks <small>tm</small> upon your face. <br>
|
||||
Step Two: Place the included "ProfitProtektor <small>tm</small>" camera assembly in a place of your choosing - make sure to make heavy use of it's inconspicous design!
|
||||
Step Two: Place the included "ProfitProtektor <small>tm</small>" camera assembly in a place of your choosing - make sure to make heavy use of its inconspicous design!
|
||||
|
||||
Step Three: Press the "Activate Remote View" Button on the side of your SpySpeks <small>tm</small> to open a movable camera display in the corner of your vision, it's just that easy!<br><br><br><center><b>TROUBLESHOOTING</b><br></center>
|
||||
My SpySpeks <small>tm</small> Make a shrill beep while attempting to use!
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
icon_state = "metalh2_axe0"
|
||||
base_icon_state = "metalh2_axe"
|
||||
name = "metallic hydrogen axe"
|
||||
desc = "A lightweight crowbar with an extreme sharp fire axe head attached. It trades it's hefty as a weapon by making it easier to carry around when holstered to suits without having to sacrifice your backpack."
|
||||
desc = "A lightweight crowbar with an extreme sharp fire axe head attached. It trades its heft as a weapon by making it easier to carry around when holstered to suits without having to sacrifice your backpack."
|
||||
force_unwielded = 5
|
||||
force_wielded = 15
|
||||
demolition_mod = 2
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"Slow down, book. I still haven't finished this page...",
|
||||
"The book won't stop moving!",
|
||||
"I think this is hurting the spine of the book...",
|
||||
"I can't get to the next page, it's stuck t- I'm good, it just turned to the next page on it's own.",
|
||||
"I can't get to the next page, it's stuck t- I'm good, it just turned to the next page on its own.",
|
||||
"Yeah, staff of doors does the same thing. Go figure...",
|
||||
)
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/type_cluster = FALSE
|
||||
///How long it takes for a grenade to explode after being armed
|
||||
var/det_time = 5 SECONDS
|
||||
///Will this state what it's det_time is when examined?
|
||||
///Will this state what its det_time is when examined?
|
||||
var/display_timer = TRUE
|
||||
///Used in botch_check to determine how a user's clumsiness affects that user's ability to prime a grenade correctly.
|
||||
var/clumsy_check = GRENADE_CLUMSY_FUMBLE
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
/**
|
||||
* Merges two explosive implants together, adding the stats of the latter to the former before qdeling the latter implant.
|
||||
* kept_implant = the implant that is kept
|
||||
* stat_implant = the implant which has it's stats added to kept_implant, before being deleted.
|
||||
* stat_implant = the implant which has its stats added to kept_implant, before being deleted.
|
||||
*/
|
||||
/obj/item/implant/explosive/proc/merge_implants(obj/item/implant/explosive/kept_implant, obj/item/implant/explosive/stat_implant)
|
||||
kept_implant.explosion_devastate += stat_implant.explosion_devastate
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(!cell_cover_open)
|
||||
. += "Its cell cover is closed. It looks like it could be <strong>pried</strong> out, but doing so would require an appropriate tool."
|
||||
return
|
||||
. += "It's cell cover is open, exposing the cell slot. It looks like it could be <strong>pried</strong> in, but doing so would require an appropriate tool."
|
||||
. += "Its cell cover is open, exposing the cell slot. It looks like it could be <strong>pried</strong> in, but doing so would require an appropriate tool."
|
||||
if(!cell)
|
||||
. += "The slot for a cell is empty."
|
||||
else
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
icon_state = "pillow_[variation]_t"
|
||||
inhand_icon_state = "pillow_t"
|
||||
|
||||
/// Puts a brick inside the pillow, increasing it's damage
|
||||
/// Puts a brick inside the pillow, increasing its damage
|
||||
/obj/item/pillow/proc/become_bricked()
|
||||
bricked = TRUE
|
||||
var/datum/component/two_handed/two_handed = GetComponent(/datum/component/two_handed)
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
trigger_item = TRUE
|
||||
specific_item = /obj/structure/holobox
|
||||
removable_signaller = FALSE //Being a pressure plate subtype, this can also use signals.
|
||||
roundstart_signaller_freq = FREQ_HOLOGRID_SOLUTION //Frequency is kept on it's own default channel however.
|
||||
roundstart_signaller_freq = FREQ_HOLOGRID_SOLUTION //Frequency is kept on its own default channel however.
|
||||
active = TRUE
|
||||
trigger_delay = 10
|
||||
protected = TRUE
|
||||
|
||||
@@ -30,7 +30,7 @@ RSF
|
||||
///The cost of the object we are going to dispense
|
||||
var/dispense_cost = 0
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
///An associated list of atoms and charge costs. This can contain a separate list, as long as it's associated item is an object
|
||||
///An associated list of atoms and charge costs. This can contain a separate list, as long as its associated item is an object
|
||||
///The RSF item list below shows in the player facing ui in this order, this is why it isn't in alphabetical order, but instead sorted by category
|
||||
var/list/cost_by_item = list(
|
||||
/obj/item/reagent_containers/cup/glass/drinkingglass = 20,
|
||||
@@ -47,7 +47,7 @@ RSF
|
||||
/obj/item/pen = 50,
|
||||
/obj/item/cigarette = 10,
|
||||
)
|
||||
///An associated list of fuel and it's value
|
||||
///An associated list of fuel and its value
|
||||
var/list/matter_by_item = list(/obj/item/rcd_ammo = 10,)
|
||||
///A list of surfaces that we are allowed to place things on.
|
||||
var/list/allowed_surfaces = list(/turf/open/floor, /obj/structure/table)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/// If the cyborg starts movement free and not under lockdown
|
||||
var/locomotion = TRUE
|
||||
/// If the cyborg synchronizes it's laws with it's master AI
|
||||
/// If the cyborg synchronizes its laws with its master AI
|
||||
var/lawsync = TRUE
|
||||
/// If the cyborg starts with a master AI
|
||||
var/aisync = TRUE
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Items used for sharpening stuff
|
||||
*
|
||||
* Whetstones can be used to increase an item's force, throw_force and wound_bonus and it's change it's sharpness to SHARP_EDGED. Whetstones do not work with energy weapons. Two-handed weapons will only get the throw_force bonus. A whetstone can only be used once.
|
||||
* Whetstones can be used to increase an item's force, throw_force and wound_bonus and it changes its sharpness to SHARP_EDGED. Whetstones do not work with energy weapons. Two-handed weapons will only get the throw_force bonus. A whetstone can only be used once.
|
||||
*
|
||||
*/
|
||||
/obj/item/sharpener
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/merge_type = null
|
||||
/// The weight class the stack has at amount > 2/3rds max_amount
|
||||
var/full_w_class = WEIGHT_CLASS_NORMAL
|
||||
/// Determines whether the item should update it's sprites based on amount.
|
||||
/// Determines whether the item should update its sprites based on amount.
|
||||
var/novariants = TRUE
|
||||
/// List that tells you how much is in a single unit.
|
||||
var/list/mats_per_unit
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
. = ..()
|
||||
if(is_portable)
|
||||
desc = "The wheels and bottom storage of this medical cart have been stowed away, \
|
||||
leaving a cumbersome tray in it's place."
|
||||
leaving a cumbersome tray in its place."
|
||||
else
|
||||
desc = initial(desc)
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if (QDELETED(breathing_mob))
|
||||
breathing_mob = null
|
||||
return
|
||||
// Close open air tank if it got dropped by it's current user.
|
||||
// Close open air tank if it got dropped by its current user.
|
||||
if (loc != breathing_mob)
|
||||
breathing_mob.cutoff_internals()
|
||||
|
||||
|
||||
@@ -606,7 +606,7 @@
|
||||
|
||||
/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim)
|
||||
playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE)
|
||||
if(victim.combat_health < combat_health) //Instantly kills the other mech if it's health is below our's.
|
||||
if(victim.combat_health < combat_health) //Instantly kills the other mech if its health is below ours.
|
||||
say("EXECUTE!!")
|
||||
victim.combat_health = 0
|
||||
else //Otherwise, just deal one damage.
|
||||
|
||||
@@ -199,7 +199,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
|
||||
/obj/proc/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced)
|
||||
return SEND_SIGNAL(src, COMSIG_PLUNGER_ACT, attacking_plunger, user, reinforced)
|
||||
|
||||
// Should move all contained objects to it's location.
|
||||
// Should move all contained objects to its location.
|
||||
/obj/proc/dump_contents()
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("Unimplemented.")
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
return ..()
|
||||
|
||||
/mob/camera/ai_eye/remote/base_construction/relaymove(mob/living/user, direction)
|
||||
//This camera eye is visible, and as such needs to keep it's dir updated
|
||||
//This camera eye is visible, and as such needs to keep its dir updated
|
||||
dir = direction
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
/obj/machinery/deployable_turret/hmg
|
||||
name = "heavy machine gun turret"
|
||||
desc = "A heavy caliber machine gun commonly used by Nanotrasen forces, famed for it's ability to give people on the receiving end more holes than normal."
|
||||
desc = "A heavy caliber machine gun commonly used by Nanotrasen forces, famed for its ability to give people on the receiving end more holes than normal."
|
||||
icon_state = "hmg"
|
||||
max_integrity = 250
|
||||
projectile_type = /obj/projectile/bullet/manned_turret/hmg
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
///start making those CHHHHHEEEEEEMS. Called whenever chems are removed, it's fine because START_PROCESSING checks if we arent already processing
|
||||
/obj/structure/geyser/proc/start_chemming()
|
||||
START_PROCESSING(SSplumbing, src) //It's main function is to be plumbed, so use SSplumbing
|
||||
START_PROCESSING(SSplumbing, src) //Its main function is to be plumbed, so use SSplumbing
|
||||
|
||||
///We're full so stop processing
|
||||
/obj/structure/geyser/proc/stop_chemming()
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
* This proc is called when the ore vent is initialized, in order to determine what minerals boulders it spawns can contain.
|
||||
* The materials available are determined by SSore_generation.ore_vent_minerals, which is a list of all minerals that can be contained in ore vents for a given cave generation.
|
||||
* As a result, minerals use a weighted list as seen by ore_vent_minerals_lavaland, which is then copied to ore_vent_minerals.
|
||||
* Once a material is picked from the weighted list, it's removed from ore_vent_minerals, so that it can't be picked again and provided it's own internal weight used when assigning minerals to boulders spawned by this vent.
|
||||
* Once a material is picked from the weighted list, it's removed from ore_vent_minerals, so that it can't be picked again and provided its own internal weight used when assigning minerals to boulders spawned by this vent.
|
||||
* May also be called after the fact, as seen in SSore_generation's initialize, to add more minerals to an existing vent.
|
||||
*
|
||||
* The above applies only when spawning in at mapload, otherwise we pick randomly from ore_vent_minerals_lavaland.
|
||||
|
||||
@@ -81,7 +81,7 @@ at the cost of risking a vicious bite.**/
|
||||
if(critter_infested && prob(50) && iscarbon(user))
|
||||
var/mob/living/carbon/bite_victim = user
|
||||
var/obj/item/bodypart/affecting = bite_victim.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm")
|
||||
to_chat(user, span_danger("You feel a sharp pain as an unseen creature sinks it's [pick("fangs", "beak", "proboscis")] into your arm!"))
|
||||
to_chat(user, span_danger("You feel a sharp pain as an unseen creature sinks its [pick("fangs", "beak", "proboscis")] into your arm!"))
|
||||
if(affecting?.receive_damage(30))
|
||||
bite_victim.update_damage_overlays()
|
||||
playsound(src,'sound/weapons/bite.ogg', 70, TRUE)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#define SHOWER_NORMAL_TEMP 300
|
||||
#define SHOWER_BOILING "boiling"
|
||||
#define SHOWER_BOILING_TEMP 400
|
||||
/// The volume of it's internal reagents the shower applies to everything it sprays.
|
||||
/// The volume of its internal reagents the shower applies to everything it sprays.
|
||||
#define SHOWER_SPRAY_VOLUME 5
|
||||
/// How much the volume of the shower's spay reagents are amplified by when it sprays something.
|
||||
#define SHOWER_EXPOSURE_MULTIPLIER 2 // Showers effectively double exposed reagents
|
||||
@@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(shower_mode_descriptions, list(
|
||||
var/reagent_capacity = 200
|
||||
///How many units the shower refills every second.
|
||||
var/refill_rate = 0.5
|
||||
///Does the shower have a water recycler to recollect it's water supply?
|
||||
///Does the shower have a water recycler to recollect its water supply?
|
||||
var/has_water_reclaimer = TRUE
|
||||
///Which mode the shower is operating in.
|
||||
var/mode = SHOWER_MODE_UNTIL_EMPTY
|
||||
|
||||
@@ -827,7 +827,7 @@
|
||||
layer = TABLE_LAYER
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
pass_flags_self = LETPASSTHROW //You can throw objects over this, despite it's density.
|
||||
pass_flags_self = LETPASSTHROW //You can throw objects over this, despite its density.
|
||||
max_integrity = 20
|
||||
|
||||
/obj/structure/rack/skeletal
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/buildstacktype = /obj/item/stack/sheet/iron
|
||||
///Number of sheets of material to drop when broken or deconstructed.
|
||||
var/buildstackamount = 1
|
||||
///Does the sink have a water recycler to recollect it's water supply?
|
||||
///Does the sink have a water recycler to recollect its water supply?
|
||||
var/has_water_reclaimer = TRUE
|
||||
///Units of water to reclaim per second
|
||||
var/reclaim_rate = 0.5
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
/turf/closed/mineral/random
|
||||
/// What are the base odds that this turf spawns a mineral in the wall on initialize?
|
||||
var/mineralChance = 13
|
||||
/// Does this mineral determine it's random chance and mineral contents based on proximity to a vent? Overrides mineralChance and mineralAmt.
|
||||
/// Does this mineral determine its random chance and mineral contents based on proximity to a vent? Overrides mineralChance and mineralAmt.
|
||||
var/proximity_based = FALSE
|
||||
|
||||
/// Returns a list of the chances for minerals to spawn.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//Blocks an attempt to connect before even creating our client datum thing.
|
||||
|
||||
//How many new ckey matches before we revert the stickyban to it's roundstart state
|
||||
//How many new ckey matches before we revert the stickyban to its roundstart state
|
||||
//These are exclusive, so once it goes over one of these numbers, it reverts the ban
|
||||
#define STICKYBAN_MAX_MATCHES 15
|
||||
#define STICKYBAN_MAX_EXISTING_USER_MATCHES 3 //ie, users who were connected before the ban triggered
|
||||
|
||||
@@ -246,7 +246,7 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM
|
||||
request = "[request] an Administrator."
|
||||
else
|
||||
request = "[request] [recipient_print_key]."
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
//get message text, limit its length.and clean/escape html
|
||||
msg = input(src,"Message:", request) as message|null
|
||||
msg = trim(msg)
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user