Removes alternate apperances from huds that see them
+
qdels the reagent holder from atoms if it exists
+
Clears itself from any targeting-related vars that hold a reference to it
+
clears the orbiters list
+
clears overlays and priority overlays
+
clears the light object
+
GenerateTag
+
+
Generate a tag for this atom
Initialize
+
+
The primary method that objects are setup in SS13 with
+
we don't use New as we have better control over when this is called and we can choose
+to delay calls or hook other logic in and so forth
+
During roundstart map parsing, atoms are queued for intialization in the base atom/New(),
+After the map has loaded, then Initalize is called on all atoms one by one. NB: this
+is also true for loading map templates as well, so they don't Initalize until all objects
+in the map file are parsed and present in the world
+
If you're creating an object at any point after SSInit has run then this proc will be
+immediately be called from New.
+
mapload: This parameter is true if the atom being loaded is either being intialized during
+the Atom subsystem intialization, or if the atom is being loaded from the map template.
+If the item is being created at runtime any time after the Atom subsystem is intialized then
+it's false.
+
You must always call the parent of this proc, otherwise failures will occur as the item
+will not be seen as initalized (this can lead to all sorts of strange behaviour, like
+the item being completely unclickable)
+
You must not sleep in this proc, or any subprocs
+
Any parameters from new are passed through (excluding loc), naturally if you're loading from a map
+there are no other arguments
Note: the following functions don't call the base for optimization and must copypasta handling:
+
+
[/turf/proc/Initialize]
+
[/turf/open/space/proc/Initialize]
+
LateInitialize
+
+
Late Intialization, for code that should run after all atoms have run Intialization
+
To have your LateIntialize proc be called, your atoms Initalization
+proc must return the hint
+INITIALIZE_HINT_LATELOAD otherwise you will never be called.
+
useful for doing things like finding other machines on GLOB.machines because you can guarantee
+that all atoms will actually exist in the "WORLD" at this time and that all their Intialization
+code has been run
New
+
+
Called when an atom is created in byond (built in engine proc)
+
Not a lot happens here in SS13 code, as we offload most of the work to the
+Intialization proc, mostly we run the preloader
+if the preloader is being used and then call InitAtom of which the ultimate
+result is that the Intialize proc is called.
+
We also generate a tag here if the DF_USE_TAG flag is set on the atom
SetName
+
+
Name Set Handling
get_alarm_z
+
+
Assisting procs
set_density
+
+
Density Handling
set_dir
+
+
Direction Handling
set_invisibility
+
+
Invisibility Set Handling
set_opacity
+
+
Opacity Handling
singuloCanEat
+
+
Nar-Sie Act/Pull
+
+
+
diff --git a/atom/movable.html b/atom/movable.html
new file mode 100644
index 00000000000..97bbc3f4dbb
--- /dev/null
+++ b/atom/movable.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+ /atom/movable - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details - Proc Details
+
+
An overridable proc used by SSfalling to determine whether or not an atom
+should continue falling to the next level, or stop processing and be caught
+in midair, effectively. One of the ways to make things never fall is to make
+this return FALSE.
Used to check wether or not an atom is being handled by SSfalling.
Proc Details
can_fall
+
+
An overridable proc used by SSfalling to determine whether or not an atom
+should continue falling to the next level, or stop processing and be caught
+in midair, effectively. One of the ways to make things never fall is to make
+this return FALSE.
+
If the mob has fallen and is stopped amidst a fall by this, fall_impact is
+invoked with the second argument being TRUE. As opposed to the default value, FALSE.
+
@param below The turf that the mob is expected to end up at.
+@param dest The tile we're presuming the mob to be at for this check. Default
+value is src.loc, (src. is important there!) but this is used for magboot lookahead
+checks it turf/open/Enter().
+
@return TRUE if the atom can continue falling in its present situation.
+FALSE if it should stop falling and not invoke fall_through or fall_impact
+this cycle.
can_pass_shield
+
+
obj/effect/shield/get_explosion_resistance() //Part of recursive explosions, probably unimplemented
set_anchored
+
+
Sets the anchored var and returns if it was sucessfully changed or not.
+
+
+
diff --git a/client.html b/client.html
new file mode 100644
index 00000000000..4a2eb1223e0
--- /dev/null
+++ b/client.html
@@ -0,0 +1,250 @@
+
+
+
+
+
+
+ /client - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details - Proc Details
+
+
Internal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send.
dumb workaround because byond doesnt seem to recognize the PROC_REF(Topic) typepath for /datum/proc/Topic() from the client Topic,
+so we cant queue it without this
Blocks until all currently sending browse and browse_rsc assets have been sent.
+Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends.
+This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.
A "panic button" verb to close all UIs on current mob.
+Use it when the bug with UI not opening (because the server still considers it open despite it being closed on client) pops up.
+Feel free to remove it once the bug is confirmed to be fixed.
Internal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send.
By default in byond if you define a proc on datums, that proc will exist on nearly every single type
+from icons to images to atoms to mobs to objs to turfs to areas, it won't however, appear on client
+
instead by default they act like their own independent type so while you can do isdatum(icon)
+and have it return true, you can't do isdatum(client), it will always return false.
+
This makes writing oo code hard, when you have to consider this extra special case
+
This line prevents that, and has never appeared to cause any ill effects, while saving us an extra
+pain to think about
+
This line is widely considered black fucking magic, and the fact it works is a puzzle to everyone
+involved, including the current engine developer, lummox
+
If you are a future developer and the engine source is now available and you can explain why this
+is the way it is, please do update this comment
Process_Grab()
+Called by client/Move()
+Checks to see if you are grabbing anything and if moving will affect your grab.
_Topic
+
+
dumb workaround because byond doesnt seem to recognize the PROC_REF(Topic) typepath for /datum/proc/Topic() from the client Topic,
+so we cant queue it without this
asset_cache_confirm_arrival
+
+
Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"
asset_cache_preload_data
+
+
Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]"
asset_cache_update_json
+
+
Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects.
browse_queue_flush
+
+
Blocks until all currently sending browse and browse_rsc assets have been sent.
+Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends.
+This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.
init_verbs
+
+
Compiles a full list of verbs and sends it to the browser
nanoclose
+
+
Called when a Nano UI window is closed
+This is how Nano handles closed windows
+It must be a verb so that it can be called using winset
+
@return nothing
resetnano
+
+
A "panic button" verb to close all UIs on current mob.
+Use it when the bug with UI not opening (because the server still considers it open despite it being closed on client) pops up.
+Feel free to remove it once the bug is confirmed to be fixed.
+
@return nothing
uiclose
+
+
verb
+
Called by UIs when they are closed.
+Must be a verb so winset() can call it.
+
required uiref ref The UI that was closed.
+
+
+
diff --git a/code/New_Hud_Manual_en.html b/code/New_Hud_Manual_en.html
new file mode 100644
index 00000000000..f2f5f11305e
--- /dev/null
+++ b/code/New_Hud_Manual_en.html
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+ code/New_Hud_Manual_en.txt - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
//existing overlays: flash, pain, blind, damageoverlay, blurry, druggy, nvg, thermal, meson, science
+Used global variables:
+GLOB.HUDdatums - here datums with subtype /datum/hud are contained, using association datum's name = datum itself
+
+________________________________________________________________________________________________________________________
+Datum /datum/hud
+This datum contains information about HUD: name, elements etc.
+
+
+name - datum's name
+list/HUDneed - a list of necessary elements (e.g. healthbar). Using this list mob's HUDneed and HUDprocess is filling
+list/slot_data - a list of inventory elements. Using this list mob's HUDinventory is filling
+icon/icon - used dmi file
+HUDfrippery - a list of HUD frippery. Using this list mob's HUDfrippery is filling
+HUDoverlays - a list of "technical" elements. Using this list mob's HUDtech is filling and mob's HUDprocess is complemented
+ConteinerData - information for functions /obj/item/storage/proc/space_orient_objs and /obj/item/storage/proc/slot_orient_objs.
+IconUnderlays - a list of underlays for HUD's elements via "max" version. May be empty.
+MinStyleFlag - a flag, which denotes if a HUD's type has "min" version. Take the values 1 or 0
+
+An example of element in HUDneed list:
+"health" = list("type" = /obj/screen/health, "loc" = "16,6", "minloc" = "15,7", "background" = "back1"),
+
+Description of the entered data:
+"health" - HUD's name and ID
+"type" - HUD's type, needed in order that system know what to create exactly
+"loc" - position on a screen in a "max" version
+"minloc" - position on a screen in a "min". Optional. used if MinStyleFlag = 1
+"background" - underlay used in the "max" version. Name is taken from IconUnderlays. Optional.
+
+An example of element in HUDoverlays list:
+"damageoverlay" = list("type" = /obj/screen/damageoverlay, "loc" = "1,1", "icon" = 'icons/mob/screen1_full.dmi'),
+
+Description of the entered data:
+"damageoverlay" - HUD's name and ID
+"type" - HUD's type, needed in order that system know what to create exactly
+"loc" - position on a screen
+"icon" - used dmi file, rewrites icon of a datum. Optional.
+
+An example of element in slot_data list:
+"Uniform" = list("loc" = "2,1","minloc" = "1,2", "state" = "center", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1"),
+
+Description of entered data:
+"Uniform" - slot's name
+"loc" - position on a screen in a "max" version
+"minloc" position on a screen in a "min". Optional. used if MinStyleFlag = 1
+"hideflag" - used for functions that hides HUD's elements, such as /obj/screen/toggle_invetory/proc/hideobjects(), /mob/verb/button_pressed_F12 (does not work). Optional.
+"background" - underlay used in the "max" version. Name is taken from IconUnderlays. Optional.
+
+An example of element in HUDfrippery list
+list("loc" = "1,1", "icon_state" = "frame2-2", "hideflag" = TOGGLE_INVENTORY_FLAG),
+
+Description of entered data:
+"loc" - position on a screen in a "max" version
+"icon_state" - icon, which is taken from dmi file
+"hideflag" - used for functions that hides HUD's elements, such as /obj/screen/toggle_invetory/proc/hideobjects(), /mob/verb/button_pressed_F12 (does not work). Optional.
+
+________________________________________________________________________________________________________________________
+Description of objects for HUD
+
+General type: /obj/screen
+
+Used unique variables:
+ var/mob/living/parentmob - mob to which HUD is tied
+ var/process_flag = 0 - flag of necessity call subprogram process()
+
+Used subprograms:
+/Click() - for elements which works by clicking on them
+/process() - for elements that do something constantly (generally on call mob's life).
+
+________________________________________________________________________________________________________________________
+Datum /datum/species
+
+Used unique variables:
+var/datum/hud_data/hud - here contains a link for datum with subtype /datum/hud_data
+var/hud_type - here contains datum type /datum/hud_data for race
+
+________________________________________________________________________________________________________________________
+Datum /datum/hud_data
+
+Used unique variables:
+ var/list/ProcessHUD - in this list "names" of HUD elements are introducted for initialization.
+ Example: "health"
+
+ var/list/gear - a list for HUD elements of inventory, slot's "name" is used with association.
+ Example: "i_clothing" = slot_w_uniform,
+________________________________________________________________________________________________________________________
+Used variables at mob's level
+/mob/living
+ var/list/HUDneed - a list of HUD elements for displaying on screen
+ var/list/HUDinventory - a list of HUD elements, which are the "inventory" of a mob, for displaying on screen
+ var/list/HUDfrippery - a list of all the frippery (e.g. frame)
+ var/list/HUDprocess - a list of HUD elements, which process() is needed to be called
+ var/list/HUDtech - a list of HUD elements, which are "technical" (e.g. layer for mob's blindness), for displaying on screen
+ var/defaultHUD - default HUD name which is used by mob
+
+________________________________________________________________________________________________________________________
+Used subprograms at mob's level
+/mob/proc/create_HUD() - subprogram for creating HUD elements
+/mob/living/proc/destroy_HUD() - subprogram for destroying HUD elements
+/mob/living/proc/show_HUD() - subprogram for displaying HUD elements at client's
+
+/mob/living/proc/check_HUD() - basic subprogram which analyzes "correctness" of a HUD, and create/display elements on screen
+/mob/living/proc/check_HUDdatum() - checks current mob's datum for correctness, returns 1, if all is correct, or 0 in any other case
+/mob/living/proc/check_HUDinventory() - checks mob's variable HUDinventory for correctness, returns 1, if all is correct, or 0 in any other case. (does not use, but exists)
+/mob/living/proc/check_HUDneed() - checks mob's variable HUDneed for correctness, returns 1, if all is correct, or 0 in any other case. (does not use, but exists)
+/mob/living/proc/check_HUDfrippery() - checks mob's variable HUDfrippery for correctness, returns 1, if all is correct, or 0 in any other case. (does not use, but exists)
+/mob/living/proc/check_HUDprocess() - checks mob's variable HUDprocess for correctness, returns 1, if all is correct, or 0 in any other case. (does not use, but exists)
+/mob/living/proc/check_HUDtech() - checks mob's variable HUDtech for correctness, returns 1, if all is correct, or 0 in any other case. (does not use, but exists)
+
+The following subprograms creates elements in the corresponding arrays
+/mob/living/proc/create_HUDinventory() - in mob's HUDinventory
+/mob/living/proc/create_HUDneed() - in mob's HUDneed
+/mob/living/proc/create_HUDfrippery() - in mob's HUDfrippery
+/mob/living/proc/create_HUDprocess() - in mob's HUDprocess
+/mob/living/proc/create_HUDtech() - in mob's HUDtech
+
+________________________________________________________________________________________________________________________
+How does this work
+
+
+
+________________________________________________________________________________________________________________________
+An agreement for single style
+
+1) By rewriting the code for mob's suptype features, create new file with the naming "[type_name]_hud". E.g. human_hud.dm, robot_hud.dm.
+2) By creating new subprogram for work with the system, write its naming ang add in the end _HUD. E.g. create_HUD(), show_HUD().
+2.1) By working with variables, add variable's naming. E.g. check_HUDfrippery()
+3) By rewriting the code for features of subtype /obj/screen, create new file with the naming "[HUDname]_screen_object",
+if you are creating elements for "race", create file with naming "[species_name]_[HUDname]_screen_object".
+NOTE: "screen_object.dmi" contains "base" code.
+4)All subprograms which are responsible for checking smth (check_HUDdatum(), check_HUDinventory() etc.) should not contain code which does not related with checking,
+e.g warning output. Subprograms which are responsible for checking must give the check result.```
+
+
+
+
diff --git a/code/New_Hud_Manual_ru.html b/code/New_Hud_Manual_ru.html
new file mode 100644
index 00000000000..caacfe4299f
--- /dev/null
+++ b/code/New_Hud_Manual_ru.html
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+ code/New_Hud_Manual_ru.txt - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
//существующие оверлеи: flash, pain, blind, damageoverlay, blurry, druggy, nvg, thermal, meson, science
+Используемые глобальные переменные:
+GLOB.HUDdatums - тут хранятся датумы с подтипом /datum/hud, используется ассоциация name датума = сам датум
+
+________________________________________________________________________________________________________________________
+Датум /datum/hud
+В данном датуме находится информация о ХУДе: имя, элементы и тд.
+
+
+name - Имя датума
+list/HUDneed - список необходимых элементов (например, хелсбар). С помощью данного списка заполняются HUDneed и HUDprocess у моба
+list/slot_data - список элементов инвентаря. С помощью данного списка заполняются HUDinventory у моба
+icon/icon -испольхуемый файл dmi
+HUDfrippery - Список элементов украшения ХУДа. С помощью данного списка заполняются HUDfrippery у моба
+HUDoverlays - Список "технических" элементов. С помощью данного списка заполняются HUDtech и дополняется HUDprocess у моба
+ConteinerData - Информация для функции /obj/item/storage/proc/space_orient_objs и /obj/item/storage/proc/slot_orient_objs.
+IconUnderlays - Список андерлеев для элемнтов ХУДа при "максимализированной" версии. Может быть пустым.
+MinStyleFlag - Флаг, обозначающий имеет ли данный тип ХУДа "минимализированную" версию. Принимает значение 1 или 0
+
+Пример элемента в списке HUDneed
+"health" = list("type" = /obj/screen/health, "loc" = "16,6", "minloc" = "15,7", "background" = "back1"),
+
+Описание вводимых данных:
+"health" - имя и ИД ХУДА
+"type" - тип ХУДа, нужно чтобы система знала что именно создавать
+"loc" - положение на экране в "максимализированной" версии
+"minloc" положение на экране в "минимализированной" версии. Опционален. Используется если MinStyleFlag = 1
+"background" - какой андерлей используется в "максимализированной" версии. Название берется из IconUnderlays. Опционален.
+
+Пример элемента в списке HUDoverlays
+"damageoverlay" = list("type" = /obj/screen/damageoverlay, "loc" = "1,1", "icon" = 'icons/mob/screen1_full.dmi'),
+
+Описание вводимых данных:
+"damageoverlay" - имя и ИД ХУДА
+"type" - тип ХУДа, нужно чтобы система знала что именно создавать
+"loc" - положение на экране
+"icon" - используемый dmi файл, перезаписывает icon самого датума. Опционален.
+
+Пример элемента в списке slot_data
+"Uniform" = list("loc" = "2,1","minloc" = "1,2", "state" = "center", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1"),
+
+Описание вводимых данных:
+"Uniform" - имя Слота
+"loc" - положение на экране в "максимализированной" версии
+"minloc" положение на экране в "минимализированной" версии. Опционально и если MinStyleFlag = 1
+"hideflag" - используется для функций по скрыванию элементов ХУДа, такие как /obj/screen/toggle_invetory/proc/hideobjects(), /mob/verb/button_pressed_F12 (не работает). Опционален.
+"background" - какой андерлей используется в "максимализированной" версии. Название берется из IconUnderlays. Опционален.
+
+Пример элемента в списке HUDfrippery
+list("loc" = "1,1", "icon_state" = "frame2-2", "hideflag" = TOGGLE_INVENTORY_FLAG),
+
+Описание вводимых данных:
+"loc" - положение на экране в "максимализированной" версии
+"icon_state" - какая иконка берется из dmi файла
+"hideflag" - используется для функций по скрыванию элементов ХУДа, такие как /obj/screen/toggle_invetory/proc/hideobjects(), /mob/verb/button_pressed_F12 (не работает). Опционален.
+
+________________________________________________________________________________________________________________________
+Описание объектов для ХУДа
+
+Общий тип:/obj/screen
+
+Используемые уникальные переменные
+ var/mob/living/parentmob - Моб, к которому привязан ХУД
+ var/process_flag = 0 - флаг необходимости вызова подпрограммы process()
+
+Используемые подпрограммы
+/Click() - для элементов, которые работают при клике на них
+/process() - для элементов, делающие что-то постоянно (в основном при вызове life у моба).
+
+________________________________________________________________________________________________________________________
+Датум /datum/species
+
+Используемые уникальные переменные:
+var/datum/hud_data/hud - сдесь находится ссылка на датум с подтипом /datum/hud_data
+var/hud_type - находится тип датума /datum/hud_data для рассы
+
+________________________________________________________________________________________________________________________
+Датум /datum/hud_data
+
+Используемые уникальные переменные:
+ var/list/ProcessHUD - В данный список вносятся "имена" элементов худа, для инициализации.
+ Пример: "health"
+
+ var/list/gear - список для элементов ХУДа инвентаря, используется "имя" слота с ассоциацией
+ Пример: "i_clothing" = slot_w_uniform,
+________________________________________________________________________________________________________________________
+Используемые переменные на уровне моба
+/mob/living
+ var/list/HUDneed - Список элементов Худа для отображения на экране
+ var/list/HUDinventory - Список элементов Худа, которые являются "инвентарем" моба, для отображения на экране
+ var/list/HUDfrippery - Всякие украшения (например, рамка)
+ var/list/HUDprocess - Список Элементов Худа, у которых нужно вызывать process()
+ var/list/HUDtech - Список элементов Худа, которые являются "техническими" (например, слой для слепоты моба), для отображения на экране
+ var/defaultHUD - Дефолтное имя ХУДа, которое использует моб
+
+________________________________________________________________________________________________________________________
+Используемые подпрограммы на уровне моба
+/mob/proc/create_HUD() - Подпрограмма, для создания элементов ХУДа
+/mob/living/proc/destroy_HUD() - Подпрограмма, для уничтожения элементов ХУДа
+/mob/living/proc/show_HUD() - Подпрограмма, для отображения элементов ХУДа у клиента
+
+/mob/living/proc/check_HUD() - Основная подпрограмма, в ней анализируется "правильность" ХУДа, и через неё идет создание\вывод элементов на экран
+/mob/living/proc/check_HUDdatum() - Проверяет текущий датум у моба на правильность, возвращает 1, если все правильно, или 0, если иначе
+/mob/living/proc/check_HUDinventory() - Проверяет переменную HUDinventory у моба на правильность, возвращает 1, если все правильно, или 0, если иначе.(не используется, но существует)
+/mob/living/proc/check_HUDneed() - Проверяет переменную HUDneed у моба на правильность, возвращает 1, если все правильно, или 0, если иначе.(не используется, но существует)
+/mob/living/proc/check_HUDfrippery() - Проверяет переменную HUDfrippery у моба на правильность, возвращает 1, если все правильно, или 0, если иначе.(не используется, но существует)
+/mob/living/proc/check_HUDprocess() - Проверяет переменную HUDprocess у моба на правильность, возвращает 1, если все правильно, или 0, если иначе.(не используется, но существует)
+/mob/living/proc/check_HUDtech() - Проверяет переменную HUDtech у моба на правильность, возвращает 1, если все правильно, или 0, если иначе.(не используется, но существует)
+
+Следующие подпрограммы создают элементы в соотвествующих массивов
+/mob/living/proc/create_HUDinventory() - в HUDinventory моба
+/mob/living/proc/create_HUDneed() - в HUDneed моба
+/mob/living/proc/create_HUDfrippery() - в HUDfrippery моба
+/mob/living/proc/create_HUDprocess() - в HUDprocess моба
+/mob/living/proc/create_HUDtech() - в HUDtech моба
+
+________________________________________________________________________________________________________________________
+Как это работает
+
+
+
+________________________________________________________________________________________________________________________
+ДОГОВОР О ЕДИНОМ СТИЛЕ
+
+1) При переписывании кода под особенности подтипа моба, создавайте новый файл с названием "[type_name]_hud". Пример: human_hud.dm, robot_hud.dm.
+2) При создании новой подпрограммы для работы с ситемой, пишите её "название" и приписывайте в конце _HUD. Пример: create_HUD(), show_HUD().
+2.1) При работе с переменными, дописывайте название переменной. Пример: check_HUDfrippery()
+3) При переписывания кода под особенности подтипа /obj/screen, создайте новый файл с названием "[HUDname]_screen_object",
+если вы создаете элементы для "расы", то создайте файл с названием "[species_name]_[HUDname]_screen_object".
+ПРИМЕЧАНИЕ: в файле "screen_object.dmi", находится "базовый" код.
+4)Все подпрограммы, отвечающие за проверку чего либо (check_HUDdatum(), check_HUDinventory() и т.д) не должны иметь внутри себя код, не относящийся к проверке,
+например, вывод предупреждения. Подпрограммы, отвечающие за проверку, должны выдавать результат проверки.```
+
+
+
+
diff --git a/code/__DEFINES/MC.html b/code/__DEFINES/MC.html
new file mode 100644
index 00000000000..df64100a974
--- /dev/null
+++ b/code/__DEFINES/MC.html
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+ code/__DEFINES/MC.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
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 (100 milliseconds).
+make sure both time intervals are in the same units. doesnt work if current_duration > total_duration or if total_duration == 0
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.
+
SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
Subsystem only runs on spare cpu (after all non-background subsystems have ran that tick)
+SS_BACKGROUND has its own priority bracket, this overrides SS_TICKER's priority bump
Treat wait as a tick count, not DS, run every wait ticks.
+(also forces it to run first in the tick (unless SS_BACKGROUND))
+(We don't want to be choked out by other subsystems queuing into us)
+(implies all runlevels because of how it works)
+This is designed for basically anything that works as a mini-mc (like SStimer)
keep the subsystem's timing on point by firing early if it fired late last fire because of lag
+ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds.
Calculate its next fire after its fired.
+(IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be)
+This flag overrides SS_KEEP_TIMING
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 (100 milliseconds).
+make sure both time intervals are in the same units. doesnt work if current_duration > total_duration or if total_duration == 0
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.
Subsystem only runs on spare cpu (after all non-background subsystems have ran that tick)
+SS_BACKGROUND has its own priority bracket, this overrides SS_TICKER's priority bump
keep the subsystem's timing on point by firing early if it fired late last fire because of lag
+ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds.
Calculate its next fire after its fired.
+(IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be)
+This flag overrides SS_KEEP_TIMING
Treat wait as a tick count, not DS, run every wait ticks.
+(also forces it to run first in the tick (unless SS_BACKGROUND))
+(We don't want to be choked out by other subsystems queuing into us)
+(implies all runlevels because of how it works)
+This is designed for basically anything that works as a mini-mc (like SStimer)
+
+
+
diff --git a/code/__DEFINES/_globals.html b/code/__DEFINES/_globals.html
new file mode 100644
index 00000000000..62357f65db9
--- /dev/null
+++ b/code/__DEFINES/_globals.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+ code/__DEFINES/_globals.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
Return this from /datum/component/Initialize or datum/component/OnTransfer to have the component be deleted if it's applied to an incorrect type.
+parent must not be modified if this is to be returned.
+This will be noted in the runtime logs
Causes the detach proc to be called when the host object is being deleted.
+Should only be used if you need to perform cleanup not related to the host object.
+You do not need this if you are only unregistering signals, for instance.
+You would need it if you are doing something like removing the target from a processing list.
Only elements created with the same arguments given after argument_hash_start_idx share an element instance
+The arguments are the same when the text and number values are the same and all other values have the same ref
Causes all detach arguments to be passed to detach instead of only being used to identify the element
+When this is used your Detach proc should have the same signature as your Attach proc
Return this from /datum/component/Initialize or datum/component/OnTransfer to have the component be deleted if it's applied to an incorrect type.
+parent must not be modified if this is to be returned.
+This will be noted in the runtime logs
Only elements created with the same arguments given after argument_hash_start_idx share an element instance
+The arguments are the same when the text and number values are the same and all other values have the same ref
Causes all detach arguments to be passed to detach instead of only being used to identify the element
+When this is used your Detach proc should have the same signature as your Attach proc
Causes the detach proc to be called when the host object is being deleted.
+Should only be used if you need to perform cleanup not related to the host object.
+You do not need this if you are only unregistering signals, for instance.
+You would need it if you are doing something like removing the target from a processing list.
Used to trigger signals and call procs registered for that signal
+The datum hosting the signal is automaticaly added as the first argument
+Returns a bitfield gathered from all registered procs
+Arguments given here are packaged in a list and given to _SendSignal
Used to trigger signals and call procs registered for that signal
+The datum hosting the signal is automaticaly added as the first argument
+Returns a bitfield gathered from all registered procs
+Arguments given here are packaged in a list and given to _SendSignal
before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
+you should only be using this if you want to block deletion
+that's the only functional difference between it and COMSIG_PARENT_QDELETING, outside setting QDELETING to detect
after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
+you should only be using this if you want to block deletion
+that's the only functional difference between it and COMSIG_PARENT_QDELETING, outside setting QDELETING to detect
after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
Macro that takes a tick usage to target, and proceses until we hit it
+This lets us simulate generic load as we'd like, to make testing for overtime easier
Macro that takes a tick usage to target, and proceses until we hit it
+This lets us simulate generic load as we'd like, to make testing for overtime easier
+
+
+
diff --git a/code/__DEFINES/qdel.html b/code/__DEFINES/qdel.html
new file mode 100644
index 00000000000..3d97a58f5d7
--- /dev/null
+++ b/code/__DEFINES/qdel.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+ code/__DEFINES/qdel.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
short queue for things that hard delete instead of going thru the gc subsystem, this is purely so if they can softdelete, they will soft delete rather then wasting time with a hard delete.
short queue for things that hard delete instead of going thru the gc subsystem, this is purely so if they can softdelete, they will soft delete rather then wasting time with a hard delete.
Sets up the Aho-Corasick automaton with its default options.
+
The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+Arguments:
+
+
key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+
patterns - A non-associative list of strings to search for
+
replacements - Default replacements for this automaton, used with rustg_acreplace
Sets up the Aho-Corasick automaton using supplied options.
+
The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+Arguments:
+
+
key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+
options - An associative list like list("anchored" = 0, "ascii_case_insensitive" = 0, "match_kind" = "Standard"). The values shown on the example are the defaults, and default values may be omitted. See the identically named methods at https://docs.rs/aho-corasick/latest/aho_corasick/struct.AhoCorasickBuilder.html to see what the options do.
+
patterns - A non-associative list of strings to search for
+
replacements - Default replacements for this automaton, used with rustg_acreplace
+
+
+
+
diff --git a/code/__DEFINES/spawner/_spawner.html b/code/__DEFINES/spawner/_spawner.html
new file mode 100644
index 00000000000..87f0a0de549
--- /dev/null
+++ b/code/__DEFINES/spawner/_spawner.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ code/__DEFINES/spawner/_spawner.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
call LateInitialize at the end of all atom Initalization
+
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
+see this file for the LateIntialize proc
verb queuing thresholds. remember that since verbs execute after SendMaps the player wont see the effects of the verbs on the game world
+until SendMaps executes next tick, and then when that later update reaches them. thus most player input has a minimum latency of world.tick_lag + player ping.
+however thats only for the visual effect of player input, when a verb processes the actual latency of game state changes or semantic latency is effectively 1/2 player ping,
+unless that verb is queued for the next tick in which case its some number probably smaller than world.tick_lag.
+so some verbs that represent player input are important enough that we only introduce semantic latency if we absolutely need to.
+its for this reason why player clicks are handled in SSinput before even movement - semantic latency could cause someone to move out of range
+when the verb finally processes but it was in range if the verb had processed immediately and overtimed.
+queuing tick_usage threshold for verbs that are high enough priority that they only queue if the server is overtiming.
+ONLY use for critical verbs
attempt to queue this verb process if the server is overloaded. evaluates to FALSE if queuing isnt necessary or if it failed.
+_verification_args... are only necessary if the verb_manager subsystem youre using checks them in can_queue_verb()
+if you put anything in _verification_args that ISNT explicitely put in the can_queue_verb() override of the subsystem youre using,
+it will runtime.
attempt to queue this verb process if the server is overloaded. evaluates to FALSE if queuing isnt necessary or if it failed.
+_verification_args... are only necessary if the verb_manager subsystem youre using checks them in can_queue_verb()
+if you put anything in _verification_args that ISNT explicitely put in the can_queue_verb() override of the subsystem youre using,
+it will runtime.
verb queuing thresholds. remember that since verbs execute after SendMaps the player wont see the effects of the verbs on the game world
+until SendMaps executes next tick, and then when that later update reaches them. thus most player input has a minimum latency of world.tick_lag + player ping.
+however thats only for the visual effect of player input, when a verb processes the actual latency of game state changes or semantic latency is effectively 1/2 player ping,
+unless that verb is queued for the next tick in which case its some number probably smaller than world.tick_lag.
+so some verbs that represent player input are important enough that we only introduce semantic latency if we absolutely need to.
+its for this reason why player clicks are handled in SSinput before even movement - semantic latency could cause someone to move out of range
+when the verb finally processes but it was in range if the verb had processed immediately and overtimed.
+queuing tick_usage threshold for verbs that are high enough priority that they only queue if the server is overtiming.
+ONLY use for critical verbs
+
+
+
diff --git a/code/__HELPERS/_lists.html b/code/__HELPERS/_lists.html
new file mode 100644
index 00000000000..0474bdedd19
--- /dev/null
+++ b/code/__HELPERS/_lists.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ code/__HELPERS/_lists.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
Binary search sorted insert
+INPUT: Object to be inserted
+LIST: List to insert object into
+TYPECONT: The typepath of the contents of the list
+COMPARE: The object to compare against, usualy the same as INPUT
+COMPARISON: The variable on the objects to compare
+COMPTYPE: How should the values be compared? Either COMPARE_KEY or COMPARE_VALUE.
Binary search sorted insert
+INPUT: Object to be inserted
+LIST: List to insert object into
+TYPECONT: The typepath of the contents of the list
+COMPARE: The object to compare against, usualy the same as INPUT
+COMPARISON: The variable on the objects to compare
+COMPTYPE: How should the values be compared? Either COMPARE_KEY or COMPARE_VALUE.
Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
+exporting it as text, and then parsing the base64 from that.
+(This relies on byond automatically storing icons in savefiles as base64)
+
+
+
diff --git a/code/__HELPERS/mobs.html b/code/__HELPERS/mobs.html
new file mode 100644
index 00000000000..58f2bf0b028
--- /dev/null
+++ b/code/__HELPERS/mobs.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ code/__HELPERS/mobs.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
Gets the client of the mob, allowing for mocking of the client.
+You only need to use this if you know you're going to be mocking clients somewhere else.
Gets the client of the mob, allowing for mocking of the client.
+You only need to use this if you know you're going to be mocking clients somewhere else.
+
+
+
diff --git a/code/__HELPERS/text.html b/code/__HELPERS/text.html
new file mode 100644
index 00000000000..2ea5f1c3034
--- /dev/null
+++ b/code/__HELPERS/text.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ code/__HELPERS/text.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
\ref behaviour got changed in 512 so this is necesary to replicate old behaviour.
+If it ever becomes necesary to get a more performant REF(), this lies here in wait
+#define REF(thing) (thing && isdatum(thing) && (thing:datum_flags & DF_USE_TAG) && thing:tag ? "[thing:tag]" : "\ref[thing]")
+
+
+
diff --git a/code/__HELPERS/verbs.html b/code/__HELPERS/verbs.html
new file mode 100644
index 00000000000..820902b3c3e
--- /dev/null
+++ b/code/__HELPERS/verbs.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ code/__HELPERS/verbs.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Startup hook.
+Called in world.dm when the server starts.
+
/hook/roundstart
Roundstart hook.
+Called in gameticker.dm when a round starts.
+
/hook/roundend
Roundend hook.
+Called in gameticker.dm when a round ends.
+
/hook/death
Death hook.
+Called in death.dm when someone dies.
+Parameters: var/mob/living/carbon/human, var/gibbed
+
/hook/clone
Cloning hook.
+Called in cloning.dm when someone is brought back by the wonders of modern science.
+Parameters: var/mob/living/carbon/human
+
/hook/debrain
Debrained hook.
+Called in brain_item.dm when someone gets debrained.
+Parameters: var/obj/item/organ/internal/vital/brain
+
/hook/borgify
Borged hook.
+Called in robot_parts.dm when someone gets turned into a cyborg.
+Parameters: var/mob/living/silicon/robot
+
/hook/revoke_payroll
Payroll revoked hook.
+Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal.
+Parameters: var/datum/money_account
+
/hook/change_account_status
Account suspension hook.
+Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal.
+Parameters: var/datum/money_account
+
/hook/reassign_employee
Employee reassignment hook.
+Called in card.dm when someone's card is reassigned at the HoP's desk.
+Parameters: var/obj/item/card/id
+
/hook/terminate_employee
Employee terminated hook.
+Called in card.dm when someone's card is terminated at the HoP's desk.
+Parameters: var/obj/item/card/id
+
/hook/sell_crate
Crate sold hook.
+Called in supplyshuttle.dm when a crate is sold on the shuttle.
+Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle
+
+
+
diff --git a/code/controllers/hooks.html b/code/controllers/hooks.html
new file mode 100644
index 00000000000..08e9a15c16f
--- /dev/null
+++ b/code/controllers/hooks.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ code/controllers/hooks.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Start of queue linked list
+End of queue linked list (used for appending to the list)
+Are we loading in a new map?
+for scheduling different subsystems for different stages of the round
+
+
+
diff --git a/code/controllers/subsystem.html b/code/controllers/subsystem.html
new file mode 100644
index 00000000000..a9db1434b2b
--- /dev/null
+++ b/code/controllers/subsystem.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/controllers/subsystem.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
This subsystem is meant for anything that should not be employing byond view() and is generally very constraining to keep track of
+For now it only has mobs and hearers, but it should also include sanity , signal receivers , and anything that is very frequently
+
+
+
diff --git a/code/controllers/subsystems/garbage.html b/code/controllers/subsystems/garbage.html
new file mode 100644
index 00000000000..33d479ca4f9
--- /dev/null
+++ b/code/controllers/subsystems/garbage.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ code/controllers/subsystems/garbage.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
In order to debug qdel() failures, there are several tools available.
+To enable these tools, define TESTING in _compile_options.dm.
+
First is a verb called "Find References", which lists every refererence to an object in the world. This allows you to track down any indirect or obfuscated references that you might have missed.
+
Complementing this is another verb, "qdel() then Find References".
+This does exactly what you'd expect; it calls qdel() on the object and then it finds all references remaining.
+This is great, because it means that Destroy() will have been called before it starts to find references,
+so the only references you'll find will be the ones preventing the object from qdel()ing gracefully.
+
If you have a datum or something you are not destroying directly (say via the singulo),
+the next tool is QDEL_HINT_FINDREFERENCE. You can return this in Destroy() (where you would normally return ..()),
+to print a list of references once it enters the GC queue.
+
Finally is a verb, "Show qdel() Log", which shows the deletion log that the garbage subsystem keeps. This is helpful if you are having race conditions or need to review the order of deletions.
+
Note that for any of these tools to work TESTING must be defined.
+By using these methods of finding references, you can make your life far, far easier when dealing with qdel() failures.
Qdel Item: Holds statistics on each type that passes thru qdel
+Holds the type as a string for this type
+Total number of times it's passed thru qdel.
+Total amount of milliseconds spent processing this type's Destroy()
+Times it was queued for soft deletion but failed to soft delete.
+Different from failures because it also includes QDEL_HINT_HARDDEL deletions
+Total amount of milliseconds spent hard deleting this type.
+Highest time spent hard_deleting this in ms.
+Number of times hard deletes took longer than the configured threshold
+Number of times it's not respected force=TRUE
+Number of times it's not even bother to give a qdel hint
+Number of times it's slept in its destroy
Create a new timer and insert it in the queue.
+You should not call this directly, and should instead use the addtimer macro, which includes source information.
SSverb_manager, a subsystem that runs every tick and runs through its entire queue without yielding like SSinput.
+this exists because of how the byond tick works and where user inputted verbs are put within it.
queue a callback for the given verb/verblike proc and any given arguments to the specified verb subsystem, so that they process in the next tick.
+intended to only work with verbs or verblike procs called directly from client input, use as part of TRY_QUEUE_VERB() and co.
+
+
+
diff --git a/code/controllers/subsystems/voting/poll_types.html b/code/controllers/subsystems/voting/poll_types.html
new file mode 100644
index 00000000000..768f564c224
--- /dev/null
+++ b/code/controllers/subsystems/voting/poll_types.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ code/controllers/subsystems/voting/poll_types.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
/datum/computer/file/embedded_program/docking/multi/post_signal(datum/signal/signal, comm_line)
+to_chat(world, "Program [id_tag] sent a message!")
+print_state()
+to_chat(world, "[id_tag] sent command "[signal.data["command"]]" to "[signal.data["recipient"]]"")
+..(signal)
+
/obj/machinery/embedded_controller/radio/docking_port_multi/verb/view_state()
+set category = "Debug"
+set src in view(1)
+src.program:print_state()
+
/obj/machinery/embedded_controller/radio/docking_port_multi/verb/spoof_signal(var/command as text, var/sender as text)
+set category = "Debug"
+set src in view(1)
+var/datum/signal/signal = new
+signal.data["tag"] = sender
+signal.data["command"] = command
+signal.data["recipient"] = id_tag
+
src.program:receive_signal(signal)
+
+
/obj/machinery/embedded_controller/radio/docking_port_multi/verb/debug_init_dock(var/target as text)
+set category = "Debug"
+set src in view(1)
+src.program:initiate_docking(target)
+
/obj/machinery/embedded_controller/radio/docking_port_multi/verb/debug_init_undock()
+set category = "Debug"
+set src in view(1)
+src.program:initiate_undocking()
+
+
+
diff --git a/code/game/machinery/excelsior/autolathe.html b/code/game/machinery/excelsior/autolathe.html
new file mode 100644
index 00000000000..52d2c4e3c04
--- /dev/null
+++ b/code/game/machinery/excelsior/autolathe.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/game/machinery/excelsior/autolathe.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Jetpack Trails
+Subtype made to efficiently sync up with a jetpack.
+They should always be attached to a jetpack
+Does a particle only when the jetpack uses some thrust
Framework for managing browser assets (javascript,css,images,etc)
+
This manages getting the asset to the client without doing unneeded re-sends, as well as utilizing any configured cdns.
+
There are two frameworks for using this system:
+
Asset datum:
+
Make a datum in asset_list_items.dm with your browser assets for your thing.
+
Checkout asset_list.dm for the helper subclasses
+
The simple subclass will most likely be of use for most cases.
+
Call get_asset_datum() with the type of the datum you created to get your asset cache datum
+
Call .send(client|usr) on that datum to send the asset to the client. Depending on the asset transport this may or may not block.
+
Call .get_url_mappings() to get an associated list with the urls your assets can be found at.
+
Manual backend:
+
See the documentation for /datum/asset_transport for the backend api the asset datums utilize.
+
The global variable SSassets.transport contains the currently configured transport.
+
Notes:
+
Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions.
+
To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by get_url_mappings() or by asset_transport's get_asset_url(). (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details.
+
CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for /datum/asset/simple/namespaced for details.
+
+
+
diff --git a/code/modules/asset_cache/asset_cache_item.html b/code/modules/asset_cache/asset_cache_item.html
new file mode 100644
index 00000000000..8d9595b9705
--- /dev/null
+++ b/code/modules/asset_cache/asset_cache_item.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/modules/asset_cache/asset_cache_item.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Namespace'ed assets (for static css and html files)
+When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names.
+Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html)
+For example blah.css with asset blah.png will get loaded as namespaces/a3d..14f/f12..d3c.css and namespaces/a3d..14f/blah.png. allowing the css file to load blah.png by a relative url rather then compute the generated url with get_url_mappings().
+The namespace folder's name will change if any of the assets change. (excluding parent assets)
+
+
+
diff --git a/code/modules/asset_cache/transports/asset_transport.html b/code/modules/asset_cache/transports/asset_transport.html
new file mode 100644
index 00000000000..55e9f87f665
--- /dev/null
+++ b/code/modules/asset_cache/transports/asset_transport.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ code/modules/asset_cache/transports/asset_transport.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
Things to keep in mind when porting to eris:
+
+- Cooking has to be initialized with initialize_cooking_recipes() in /datum/global_init/New().
+It has to be ran AFTER initialize_chemical_reagents() and initialize_chemical_reactions()!
+
+- The CtrlShiftClickOn, CtrlShiftClick, CtrlClickOn and CtrlClick procs need to be updated to
+recieve the params value from the ClickOn function. This is needed for the stove and grill
+to function.
+
+- Any atom used as an ingredient in cooking needs a 'food_quality' variable.
+
+- Any atom produced by cooking needs a 'food_quality' variable AND a 'cooking_description_modifier' variable.
+
+- Modify slicable food to inherit the food quality of their parent.
+
+- The function call createCookingCatalogs() has to be added at the end of the
+/hook/startup/proc/createCatalogs() function.
+
+- Add # exclusion to the sanitizeFileName function.
+
+- The statment hard_drive.store_file(new/datum/computer_file/program/cook_catalog()) should be
+added to any PDA's install_default_programs() proc if they should have it at round start
+
+
+
+
diff --git a/code/modules/core_implant/cruciform/machinery/armaments.html b/code/modules/core_implant/cruciform/machinery/armaments.html
new file mode 100644
index 00000000000..670340e2696
--- /dev/null
+++ b/code/modules/core_implant/cruciform/machinery/armaments.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/modules/core_implant/cruciform/machinery/armaments.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
life's/////////////////////////////////////////////
+/////////////////////////////RESURRECTION/////////
+////////////////////////////////////////////go on
we live to///////////////////////////////////////////////////////////////
+/////////////////////////////////SMALL GUYS/////////////////////////////
+///////////////////////////////////////////////////////////die for hive
+//////////////////////////////////STINGER////////////////////////////////
hive brings us here to///////////////////////////////////////////////
+////////////////////////////////BIG GUYS////////////////////////////
+/////////////////////////////////////////////////fright and destroy
+/////////////////////////////////HIBORG//////////////////////////////
Spawnable subtypes that are findable in maintenance
+Plasteel - balanced
+Osmium - plasteel+
+Cardboard - meme level with 0 damage
+Mettalic hydrogen - great
Simple data container component containing level up statistics.
+This does NOT make something a valid inspiration. It simply holds the data in case it gets used as one!
+To actually use it, the typepath of the object has to be contained within the sanity datum valid_inspiration list.
+Assign this component to an item specifying which statistics should be levelled up, and the item will be able to be used as an inspiration.
+The format of statistics is list(STAT_DEFINE = number) or a proc that returns such a list.
+(This would've been better as an element instead of a component, but currently elements don't exist on cev eris. F)
+
+
+
diff --git a/code/modules/shieldgen/sheldwallgen.html b/code/modules/shieldgen/sheldwallgen.html
new file mode 100644
index 00000000000..d27b8f53025
--- /dev/null
+++ b/code/modules/shieldgen/sheldwallgen.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ code/modules/shieldgen/sheldwallgen.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
This module uses 4 components:
+Real instruments -- the physical manifestation of the instrument, the one that is placed in the world
+Virtual instruments -- the definition of an instrument, that is, what samples it uses, name and category
+Sound player -- used to apply modification to all sounds emitted. Represents the actual source of sound (Right now it does little, but if you want to make certain factors
+further modify sound more you'd start from here)
+Synthesized Song - just like /datum/song it's what parses and plays a melody
+---
+Real instruments inherit from either /obj/structure/synthesized_instrument (static musical instrument) or /obj/item/device/synthesized_instrument (handheld musical instrument)
+---
+Virtual instruments all inherit from /datum/instrument.
+Virtual instruments should follow this structure: /datum/instrument/category_name/instrument_name.
+
+Refer to any file in ./instrument_data to see how it's done.
+---
+Sound player inherits from /datum/sound_player
+---
+For synthesized song only use /datum/synthesized_song
+---```
+
+
+
+
diff --git a/code/modules/telesci/telepads.html b/code/modules/telesci/telepads.html
new file mode 100644
index 00000000000..c9d10915f89
--- /dev/null
+++ b/code/modules/telesci/telepads.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/modules/telesci/telepads.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Returns a UI status such that users adjacent to source will be able to interact,
+far away users will be able to see, and anyone farther won't see anything.
+Dead users will receive updates no matter what, though you likely want to add
+a [ui_status_only_living] check for finer observer interactions.
Returns a UI status such that users with debilitating conditions, such as
+being dead or not having power for silicons, will not be able to interact.
+Being dead will disable UI, being incapacitated will continue updating it,
+and anything else will make it interactive.
Returns a UI status such that silicons will be able to interact with whatever
+they would have access to if this was a machine. For example, AIs can
+interact if there's cameras with wireless control is enabled.
On their most basic level, when UNIT_TESTS is defined, all subtypes of /datum/unit_test will have their Run proc executed. From here, if Fail is called at any point, then the tests will report as failed.
+
How do I write one?
+
+
Find a relevant file.
+
+
All unit test related code is in code/modules/unit_tests. If you are adding a new test for a surgery, for example, then you'd open surgeries.dm. If a relevant file does not exist, simply create one in this folder, then #include it in _unit_tests.dm.
+
+
Create the unit test.
+
+
To make a new unit test, you simply need to define a /datum/unit_test.
+
For example, let's suppose that we are creating a test to make sure a proc square correctly raises inputs to the power of two. We'd start with first:
+
/datum/unit_test/square/Run()
+
+
This defines our new unit test, /datum/unit_test/square. Inside this function, we're then going to run through whatever we want to check. Tests provide a few assertion functions to make this easy. For now, we're going to use TEST_ASSERT_EQUAL.
+
/datum/unit_test/square/Run()
+ TEST_ASSERT_EQUAL(square(3), 9, "square(3) did not return 9")
+ TEST_ASSERT_EQUAL(square(4), 16, "square(4) did not return 16")
+
+
As you can hopefully tell, we're simply checking if the output of square matches the output we are expecting. If the test fails, it'll report the error message given as well as whatever the actual output was.
+
+
Run the unit test
+
+
Open code/_compile_options.dm and uncomment the following line.
+
//#define UNIT_TESTS //If this is uncommented, we do a single run though of the game setup and tear down process with unit tests in between
+
+
Then, run tgstation.dmb in Dream Daemon. Don't bother trying to connect, you won't need to. You'll be able to see the outputs of all the tests. You'll get to see which tests failed and for what reason. If they all pass, you're set!
+
How to think about tests
+
Unit tests exist to prevent bugs that would happen in a real game. Thus, they should attempt to emulate the game world wherever possible. For example, the quick swap sanity test emulates a real scenario of the bug it fixed occurring by creating a character and giving it real items. The unrecommended alternative would be to create special test-only items. This isn't a hard rule, the reagent method exposure tests create a test-only reagent for example, but do keep it in mind.
+
Unit tests should also be just that--testing units of code. For example, instead of having one massive test for reagents, there are instead several smaller tests for testing exposure, metabolization, etc.
+
The unit testing API
+
You can find more information about all of these from their respective doc comments, but for a brief overview:
+
/datum/unit_test - The base for all tests to be ran. Subtypes must override Run(). New() and Destroy() can be used for setup and teardown. To fail, use Fail(reason).
+
/datum/unit_test/proc/allocate(type, ...) - Allocates an instance of the provided type with the given arguments. Is automatically destroyed when the test is over. Commonly seen in the form of var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human).
+
TEST_ASSERT(assertion, reason) - Stops the unit test and fails if the assertion is not met. For example: TEST_ASSERT(powered(), "Machine is not powered").
+
TEST_ASSERT_EQUAL(a, b, message) - Same as TEST_ASSERT, but checks if a == b. If not, gives a helpful message showing what both a and b were. For example: TEST_ASSERT_EQUAL(2 + 2, 4, "The universe is falling apart before our eyes!").
+
TEST_ASSERT_NOTEQUAL(a, b, message) - Same as TEST_ASSERT_EQUAL, but reversed.
+
TEST_FOCUS(test_path) - Only run the test provided within the parameters. Useful for reducing noise. For example, if we only want to run our example square test, we can add TEST_FOCUS(/datum/unit_test/square). Should never be pushed in a pull request--you will be laughed at.
+
Final Notes
+
+
Writing tests before you attempt to fix the bug can actually speed up development a lot! It means you don't have to go in game and folllow the same exact steps manually every time. This process is known as "TDD" (test driven development). Write the test first, make sure it fails, then start work on the fix/feature, and you'll know you're done when your tests pass. If you do try this, do make sure to confirm in a non-testing environment just to double check.
+
Make sure that your tests don't accidentally call RNG functions like prob. Since RNG is seeded during tests, you may not realize you have until someone else makes a PR and the tests fail!
+
Do your best not to change the behavior of non-testing code during tests. While it may sometimes be necessary in the case of situations such as the above, it is still a slippery slope that can lead to the code you're testing being too different from the production environment to be useful.
+
+
+
+
diff --git a/code/modules/unit_tests/_unit_tests.html b/code/modules/unit_tests/_unit_tests.html
new file mode 100644
index 00000000000..41e103ecc67
--- /dev/null
+++ b/code/modules/unit_tests/_unit_tests.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+ code/modules/unit_tests/_unit_tests.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Define Details
+
+
Only run the test provided within the parentheses
+This is useful for debugging when you want to reduce noise, but should never be pushed
+Intended to be used in the manner of TEST_FOCUS(/datum/unit_test/math)
Only run the test provided within the parentheses
+This is useful for debugging when you want to reduce noise, but should never be pushed
+Intended to be used in the manner of TEST_FOCUS(/datum/unit_test/math)
This is an example for screenshot tests, and a meta-test to make sure they work in the success case.
+It creates a picture that is red on the left side, green on the other.
+
+
+
diff --git a/code/modules/unit_tests/screenshots.html b/code/modules/unit_tests/screenshots.html
new file mode 100644
index 00000000000..2bea3b0fda1
--- /dev/null
+++ b/code/modules/unit_tests/screenshots.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ code/modules/unit_tests/screenshots/README.md - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
This folder contains the results for screenshot tests. Screenshot tests make sure an icon looks the same as it did before a change to prevent regressions.
+
You can create one by simply using the test_screenshot proc.
+
This example test screenshots a red image and keeps it.
+
/// This is an example for screenshot tests, and a meta-test to make sure they work in the success case.
+/// It creates a picture that is red on the left side, green on the other.
+/datum/unit_test/screenshot_basic
+
+/datum/unit_test/screenshot_basic/Run()
+ var/icon/red = icon('icons/blanks/32x32.dmi', "nothing")
+ red.Blend(COLOR_RED, ICON_OVERLAY)
+ test_screenshot("red", red)
+
+
Unfortunately, screenshot tests are sanest to test through a pull request directly, due to limitations with both DM and GitHub.
+
+
+
diff --git a/code/modules/unit_tests/step_override.html b/code/modules/unit_tests/step_override.html
new file mode 100644
index 00000000000..d206706ee12
--- /dev/null
+++ b/code/modules/unit_tests/step_override.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ code/modules/unit_tests/step_override.dm - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
A datum instantiated has no physical world prescence, use an atom if you want something
+that actually lives in the world
+
Be very mindful about adding variables to this class, they are inherited by every single
+thing in the entire game, and so you can easily cause memory usage to rise a lot with careless
+use of variables at this level
This proc is called on a datum on every "cycle" if it is being processed by a subsystem. The time between each cycle is determined by the subsystem's "wait" setting.
+You can start and stop processing a datum using the START_PROCESSING and STOP_PROCESSING defines.
Finds the singleton for the element type given and detaches it from src
+You only need additional arguments beyond the type if you're using ELEMENT_BESPOKE
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable
If this is non zero then the object has been garbage collected and is awaiting either
+a hard del by the GC subsystme, or to be autocollected (if it has no references)
Return any component assigned to this datum of the given type
+
This will throw an error if it's possible to have more than one component of that type on the parent
+
Arguments:
+
+
datum/component/c_type The typepath of the component you want to get a reference to
+
GetComponents
+
+
Get all components of a given type that are attached to this datum
+
Arguments:
+
+
c_type The component type path
+
GetExactComponent
+
+
Return any component assigned to this datum of the exact given type
+
This will throw an error if it's possible to have more than one component of that type on the parent
+
Arguments:
+
+
datum/component/c_type The typepath of the component you want to get a reference to
+
IsRegistered
+
+
Checks if we already are registered onto the object with said proc on said signal
Process
+
+
This proc is called on a datum on every "cycle" if it is being processed by a subsystem. The time between each cycle is determined by the subsystem's "wait" setting.
+You can start and stop processing a datum using the START_PROCESSING and STOP_PROCESSING defines.
+
Since the wait setting of a subsystem can be changed at any time, it is important that any rate-of-change that you implement in this proc is multiplied by the delta_time that is sent as a parameter,
+Additionally, any "prob" you use in this proc should instead use the DT_PROB define to make sure that the final probability per second stays the same even if the subsystem's wait is altered.
+Examples where this must be considered:
+
+
Implementing a cooldown timer, use mytimer -= delta_time, not mytimer -= 1. This way, mytimer will always have the unit of seconds
+
Damaging a mob, do L.adjustFireLoss(20 * delta_time), not L.adjustFireLoss(20). This way, the damage per second stays constant even if the wait of the subsystem is changed
+
Probability of something happening, do if(DT_PROB(25, delta_time)), not if(prob(25)). This way, if the subsystem wait is e.g. lowered, there won't be a higher chance of this event happening per second
+
+
If you override this do not call parent, as it will return PROCESS_KILL. This is done to prevent objects that dont override process() from staying in the processing list
RegisterSignal
+
+
Register to listen for a signal from the passed in target
+
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.
+Return values from procs registered must be a bitfield
+
Arguments:
+
+
datum/target The target to listen for signals from
+
signal_type A signal name
+
proctype The proc to call back when the signal is emitted
+
override If a previous registration exists you must explicitly set this
+
RegisterSignals
+
+
Registers multiple signals to the same proc.
TakeComponent
+
+
Transfer this component to another parent
+
Component is taken from source datum
+
Arguments:
+
+
datum/component/target Target datum to transfer to
+
TransferComponents
+
+
Transfer all components to target
+
All components from source datum are taken
+
Arguments:
+
+
/datum/target the target to move the components to
+
UnregisterSignal
+
+
Stop listening to a given signal from target
+
Breaks the relationship between target and source datum, removing the callback when the signal fires
+
Doesn't care if a registration exists or not
+
Arguments:
+
+
datum/target Datum to stop listening to signals from
+
sig_typeor_types Signal string key or list of signal keys to stop listening to specifically
+
_AddComponent
+
+
Creates an instance of new_type in the datum and attaches to it as parent
Returns the component that was created. Or the old component in a dupe situation where COMPONENT_DUPE_UNIQUE was set
+
If this tries to add a component to an incompatible type, the component will be deleted and the result will be null. This is very unperformant, try not to do it
+
Properly handles duplicate situations based on the dupe_mode var
_AddElement
+
+
Finds the singleton for the element type given and attaches it to src
_LoadComponent
+
+
Get existing component of type, or create it and return a reference to it
+
Use this if the item needs to exist at the time of this call, but may not have been created before now
+
Arguments:
+
+
component_type The typepath of the component to create or return
+
... additional arguments to be passed when creating the component if it does not exist
+
_RemoveElement
+
+
Finds the singleton for the element type given and detaches it from src
+You only need additional arguments beyond the type if you're using ELEMENT_BESPOKE
_SendSignal
+
+
Internal proc to handle most all of the signaling procedure
+
Will runtime if used on datums with an empty component list
Data to be sent to the UI.
+This must be implemented for a UI to work.
+
@param user /mob The mob who interacting with the UI
+@param ui_key string A string key to use for this UI. Allows for multiple unique UIs on one obj/mob (defaut value "main")
+
@return data /list Data to be sent to the UI
nano_ui_interact
+
+
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable
+
@param user /mob The mob who is interacting with this UI
+@param ui_key string A string key to use for this UI. Allows for multiple unique UIs on one obj/mob (defaut value "main")
+@param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open UI
+@param force_open enum See _defines/nanoui.dm
+
@return nothing
ui_act
+
+
public
+
Called on a UI when the UI receieves a href.
+Think of this as Topic().
+
required action string The action/button that has been invoked by the user.
+required params list A list of parameters attached to the button.
+
return bool If the user's input has been handled and the UI should update.
ui_assets
+
+
public
+
Called on an object when a tgui object is being created, allowing you to
+push various assets to tgui, for examples spritesheets.
+
return list List of asset datums or file paths.
ui_close
+
+
public
+
Called on a UI's object when the UI is closed, not to be confused with
+client/verb/uiclose(), which closes the ui window
ui_data
+
+
public
+
Data to be sent to the UI.
+This must be implemented for a UI to work.
+
required user mob The mob interacting with the UI.
+
return list Data to be sent to the UI.
ui_host
+
+
private
+
The UI's host object (usually src_object).
+This allows modules/datums to have the UI attached to them,
+and be a part of another object.
ui_interact
+
+
public
+
Used to open and update UIs.
+If this proc is not implemented properly, the UI will not update correctly.
+
required user mob The mob who opened/is using the UI.
+optional ui datum/tgui The UI to be updated, if it exists.
ui_state
+
+
private
+
The UI's state controller to be used for created uis
+This is a proc over a var for memory reasons
ui_static_data
+
+
public
+
Static Data to be sent to the UI.
+
Static data differs from normal data in that it's large data that should be
+sent infrequently. This is implemented optionally for heavy uis that would
+be sending a lot of redundant data frequently. Gets squished into one
+object on the frontend side, but the static part is cached.
+
required user mob The mob interacting with the UI.
+
return list Statuic Data to be sent to the UI.
ui_status
+
+
public
+
Checks the UI state for a mob.
+
required user mob The mob who opened/is using the UI.
+required state datum/ui_state The state to check.
+
return UI_state The state of the UI.
update_static_data
+
+
public
+
Forces an update on static data. Should be done manually whenever something
+happens to change static data.
+
required user the mob currently interacting with the ui
+optional ui ui to be updated
update_static_data_for_all_viewers
+
+
public
+
Will force an update on static data for all viewers.
+Should be done manually whenever something happens to
+change static data.
+
+
+
diff --git a/datum/admins.html b/datum/admins.html
new file mode 100644
index 00000000000..3be08ae75b8
--- /dev/null
+++ b/datum/admins.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ /datum/admins - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Namespace'ed assets (for static css and html files)
+When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names.
+Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html)
+For example blah.css with asset blah.png will get loaded as namespaces/a3d..14f/f12..d3c.css and namespaces/a3d..14f/blah.png. allowing the css file to load blah.png by a relative url rather then compute the generated url with get_url_mappings().
+The namespace folder's name will change if any of the assets change. (excluding parent assets)
parents - list of the parent asset or assets (in name = file assoicated format) for this namespace.
+parent assets must be referenced by their generated url, but if an update changes a parent asset, it won't change the namespace's identity.
parents - list of the parent asset or assets (in name = file assoicated format) for this namespace.
+parent assets must be referenced by their generated url, but if an update changes a parent asset, it won't change the namespace's identity.
Proc Details
get_htmlloader
+
+
Get a html string that will load a html asset.
+Needed because byond doesn't allow you to browse() to a url.
+
+
+
diff --git a/datum/asset/spritesheet.html b/datum/asset/spritesheet.html
new file mode 100644
index 00000000000..bf8488aa4e1
--- /dev/null
+++ b/datum/asset/spritesheet.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+ /datum/asset/spritesheet - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Used by the cdn system to keep legacy css assets with their parent
+css file. (css files resolve urls relative to the css file, so the
+legacy system can't be used if the css file itself could go out over
+the cdn)
Used by the cdn system to keep legacy css assets with their parent
+css file. (css files resolve urls relative to the css file, so the
+legacy system can't be used if the css file itself could go out over
+the cdn)
Don't mutate the filename of assets when sending via browse_rsc.
+This is to make it easier to debug issues with assets, and allow server operators to bypass issues that make it to production.
+If turning this on fixes asset issues, something isn't using get_asset_url and the asset isn't marked legacy, fix one of those.
Returns a url for a given asset.
+asset_name - Name of the asset.
+asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name
Register a browser asset with the asset cache system
+asset_name - the identifier of the asset
+asset - the actual asset file (or an asset_cache_item datum)
+returns a /datum/asset_cache_item.
+mutiple calls to register the same asset under the same asset_name return the same datum
Sends a list of browser assets to a client
+client - a client or mob
+asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum.
+Returns TRUE if any assets were sent.
Don't mutate the filename of assets when sending via browse_rsc.
+This is to make it easier to debug issues with assets, and allow server operators to bypass issues that make it to production.
+If turning this on fixes asset issues, something isn't using get_asset_url and the asset isn't marked legacy, fix one of those.
Proc Details
Initialize
+
+
Initialize - Called when SSassets initializes.
Load
+
+
Called when the transport is loaded by the config controller, not called on the default transport unless it gets loaded by a config change.
get_asset_url
+
+
Returns a url for a given asset.
+asset_name - Name of the asset.
+asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name
register_asset
+
+
Register a browser asset with the asset cache system
+asset_name - the identifier of the asset
+asset - the actual asset file (or an asset_cache_item datum)
+returns a /datum/asset_cache_item.
+mutiple calls to register the same asset under the same asset_name return the same datum
send_assets
+
+
Sends a list of browser assets to a client
+client - a client or mob
+asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum.
+Returns TRUE if any assets were sent.
send_assets_slow
+
+
Precache files without clogging up the browse() queue, used for passively sending files on connection start.
validate_config
+
+
Check the config is valid to load this transport
+Returns TRUE or FALSE
+
+
+
diff --git a/datum/backpack_tweak.html b/datum/backpack_tweak.html
new file mode 100644
index 00000000000..41079936f49
--- /dev/null
+++ b/datum/backpack_tweak.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /datum/backpack_tweak - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
A datum that holds a proc to be called on another object, used to track proccalls to other objects
+
USAGE
+
var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn)
+var/timerid = addtimer(C, time, timertype)
+you can also use the compiler define shorthand
+var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype)
+
+
Note: proc strings can only be given for datum proc calls, global procs must be proc paths
+
Also proc strings are strongly advised against because they don't compile error if the proc stops existing
+
In some cases you can provide a shortform of the procname, see the proc typepath shortcuts documentation below
+
INVOKING THE CALLBACK
+
var/result = C.Invoke(args, to, add) additional args are added after the ones given when the callback was created
+
var/result = C.InvokeAsync(args, to, add) Asyncronous - returns . on the first sleep then continues on in the background
+after the sleep/block ends, otherwise operates normally.
+
PROC TYPEPATH SHORTCUTS
+
(these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...)
+
global proc while in another global proc:
+
.procname
+
CALLBACK(GLOBAL_PROC, .some_proc_here)
+
proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents:
+
.procname
+
CALLBACK(src, .some_proc_here)
+
when the above doesn't apply:
+
PROC_REF(procname)
+
CALLBACK(src, PROC_REF(some_proc_here))
+
proc defined on a parent of a some type
+
TYPE_PROC_REF(/some/type/, some_proc_here)
+
Otherwise you must always provide the full typepath of the proc (/type/of/thing/proc/procname)
A component should be a single standalone unit
+of functionality, that works by receiving signals from it's 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
Removes the component from parent, ends up with a null parent
+Used as a helper proc by the component transfer proc, does not clean up the component like Destroy does
C's type will always be the same of the called component
+
return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component
ClearFromParent
+
+
Removes the component from parent, ends up with a null parent
+Used as a helper proc by the component transfer proc, does not clean up the component like Destroy does
Destroy
+
+
Properly removes the component from parent and cleans up references
+
Arguments:
+
+
force - makes it not check for and remove the component from the parent
Simple data container component containing level up statistics.
+This does NOT make something a valid inspiration. It simply holds the data in case it gets used as one!
+To actually use it, the typepath of the object has to be contained within the sanity datum valid_inspiration list.
+Assign this component to an item specifying which statistics should be levelled up, and the item will be able to be used as an inspiration.
+The format of statistics is list(STAT_DEFINE = number) or a proc that returns such a list.
+(This would've been better as an element instead of a component, but currently elements don't exist on cev eris. F)
Callback used for dynamic calculation of the stats to level up, used if stats is null. It must accept NO arguments, and it needs to return a list shaped like stats.
Callback used for dynamic calculation of the stats to level up, used if stats is null. It must accept NO arguments, and it needs to return a list shaped like stats.
Start of queue linked list
+End of queue linked list (used for appending to the list)
+Are we loading in a new map?
+for scheduling different subsystems for different stages of the round
RunQueue - Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage
+Returns 0 if runtimed, a negitive number for logic errors, and a positive number if the operation completed without errors
RunQueue - Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage
+Returns 0 if runtimed, a negitive number for logic errors, and a positive number if the operation completed without errors
laggy_byond_map_update_incoming
+
+
Warns us that the end of tick byond map_update will be laggier then normal, so that we can just skip running subsystems this tick.
+
+
+
diff --git a/datum/controller/subsystem.html b/datum/controller/subsystem.html
new file mode 100644
index 00000000000..09caafd19e4
--- /dev/null
+++ b/datum/controller/subsystem.html
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+ /datum/controller/subsystem - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details - Proc Details
+
+
Set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later
+use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to list that is checked every tick
Subsystem Flags 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)
Order of initialization. Higher numbers are initialized first, lower numbers later. Use or create defines such as [INIT_ORDER_DEFAULT] so we can see the order in one file.
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
Tracks the current execution state of the subsystem. Used to handle subsystems that sleep in fire so the mc doesn't run them again while they are sleeping
Queue it to run.
+(we loop thru a linked list until we get to the end or find the right point)
+(this lets us sort our run order correctly without having to re-sort the entire already sorted list)
previously, this would have been named 'process()' but that name is used everywhere for different things!
+fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds.
+Sleeping in here prevents future fires until returned.
Set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later
+use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to list that is checked every tick
Subsystem Flags 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)
Order of initialization. Higher numbers are initialized first, lower numbers later. Use or create defines such as [INIT_ORDER_DEFAULT] so we can see the order in one file.
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
Tracks the current execution state of the subsystem. Used to handle subsystems that sleep in fire so the mc doesn't run them again while they are sleeping
Time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
Proc Details
OnConfigLoad
+
+
Called after the config has been loaded or reloaded.
PreInit
+
+
datum/controller/subsystem/New()
enqueue
+
+
Queue it to run.
+(we loop thru a linked list until we get to the end or find the right point)
+(this lets us sort our run order correctly without having to re-sort the entire already sorted list)
fire
+
+
previously, this would have been named 'process()' but that name is used everywhere for different things!
+fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds.
+Sleeping in here prevents future fires until returned.
ignite
+
+
This is used so the mc knows when the subsystem sleeps. do not override.
postpone
+
+
Causes the next "cycle" fires to be missed. Effect is accumulative but can reset by calling update_nextfire(reset_time = TRUE)
update_nextfire
+
+
+
Update next_fire for the next run.
+
reset_time (bool) - Ignore things that would normally alter the next fire, like tick_overrun, and last_fire. (also resets postpone)
+
+
+
+
diff --git a/datum/controller/subsystem/air.html b/datum/controller/subsystem/air.html
new file mode 100644
index 00000000000..fade0eb20ce
--- /dev/null
+++ b/datum/controller/subsystem/air.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/air - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
This proc is called before the level loop of DivideOccupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check
This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
CreateConfigFile
+
+
No playtimes registered
+return to last dir
DivideOccupations
+
+
+
Proc DivideOccupations
+
fills var "assigned_role" for all ready players.
+
This proc must not have any side effect besides of modifying "assigned_role".
+
FillHeadPosition
+
+
This proc is called before the level loop of DivideOccupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check
LoadPlaytimeRequirements
+
+
Blame linters!!!!
LoadPlaytimes
+
+
failsafe for non-existant config folders.
get_spawnpoint_for
+
+
Return appropriate /datum/spawnpoint for given client and rank
+
Spawnpoint will be the one set in preferences for the client, unless the
+preference is not set, or the preference is not appropriate for the rank, in
+which case a fallback will be selected.
+
+
+
diff --git a/datum/controller/subsystem/migration.html b/datum/controller/subsystem/migration.html
new file mode 100644
index 00000000000..f1de45aeb6b
--- /dev/null
+++ b/datum/controller/subsystem/migration.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/migration - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Generates an id for bespoke elements when given the argument list
+Generating the id here is a bit complex because we need to support named arguments
+Named arguments can appear in any order and we need them to appear after ordered arguments
+We assume that no one will pass in a named argument with a value of null
Proc Details
GetIdFromArguments
+
+
Generates an id for bespoke elements when given the argument list
+Generating the id here is a bit complex because we need to support named arguments
+Named arguments can appear in any order and we need them to appear after ordered arguments
+We assume that no one will pass in a named argument with a value of null
+
+
+
diff --git a/datum/controller/subsystem/processing/nano.html b/datum/controller/subsystem/processing/nano.html
new file mode 100644
index 00000000000..209549c36ec
--- /dev/null
+++ b/datum/controller/subsystem/processing/nano.html
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/processing/nano - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
This is called when a player transfers from one mob to another
+Transfers all open UIs to the new mob
Proc Details
close_uis
+
+
Close all /nanoui uis attached to src_object
+
@param src_object /obj|/mob The obj or mob which the uis are attached to
+
@return int The number of uis close
close_user_uis
+
+
Close /nanoui uis belonging to user
+
@param user /mob The mob who owns the uis
+@param src_object /obj|/mob If src_object is provided, only close uis which are attached to src_object (optional)
+@param ui_key string If ui_key is provided, only close uis with a matching ui_key (optional)
+
@return int The number of uis closed
get_open_ui
+
+
Get an open /nanoui ui for the current user, src_object and ui_key
+
@param user /mob The mob who opened/owns the ui
+@param src_object /obj|/mob The obj or mob which the ui belongs to
+@param ui_key string A string key used for the ui
+
@return /nanoui Returns the found ui, or null if none exists
try_update_ui
+
+
Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data
+
@param user /mob The mob who opened/owns the ui
+@param src_object /obj|/mob The obj or mob which the ui belongs to
+@param ui_key string A string key used for the ui
+@param ui /datum/nanoui An existing instance of the ui (can be null)
+@param data list The data to be passed to the ui, if it exists
+@param force_open boolean The ui is being forced to (re)open, so close ui if it exists (instead of updating)
+
@return /nanoui Returns the found ui, for null if none exists
ui_closed
+
+
Remove a /nanoui ui from the list of open uis
+This is called by the /nanoui close() proc
+
@param ui /nanoui The ui to remove
+
@return int 0 if no ui was removed, 1 if removed successfully
ui_opened
+
+
Add a /nanoui ui to the list of open uis
+This is called by the /nanoui open() proc
+
@param ui /nanoui The ui to add
+
@return nothing
update_uis
+
+
Update all /nanoui uis attached to src_object
+
@param src_object /obj|/mob The obj or mob which the uis are attached to
+
@return int The number of uis updated
update_user_uis
+
+
Update /nanoui uis belonging to user
+
@param user /mob The mob who owns the uis
+@param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional)
+@param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional)
+
@return int The number of uis updated
user_logout
+
+
This is called on user logout
+Closes/clears all uis attached to the user's /mob
+
@param user /mob The user's mob
+
@return nothing
user_transferred
+
+
This is called when a player transfers from one mob to another
+Transfers all open UIs to the new mob
+
@param oldMob /mob The user's old mob
+@param newMob /mob The user's new mob
+
@return nothing
+
+
+
diff --git a/datum/controller/subsystem/spawn_data.html b/datum/controller/subsystem/spawn_data.html
new file mode 100644
index 00000000000..b1346142317
--- /dev/null
+++ b/datum/controller/subsystem/spawn_data.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/spawn_data - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Close all UIs regardless of their attachment to src_object.
+
return int The number of UIs closed.
close_uis
+
+
public
+
Close all UIs attached to src_object.
+
required src_object datum The object/datum which owns the UIs.
+
return int The number of UIs closed.
close_user_uis
+
+
public
+
Close all UIs belonging to a user.
+
required user mob The mob who opened/is using the UI.
+optional src_object datum If provided, only close UIs belonging this src_object.
+
return int The number of UIs closed.
force_close_all_windows
+
+
public
+
Force closes all tgui windows.
+
required user mob
force_close_window
+
+
public
+
Force closes the tgui window by window_id.
+
required user mob
+required window_id string
get_open_ui
+
+
public
+
Get a open UI given a user and src_object.
+
required user mob The mob who opened/is using the UI.
+required src_object datum The object/datum which owns the UI.
+
return datum/tgui The found UI.
on_close
+
+
private
+
Remove a UI from the list of open UIs.
+
required ui datum/tgui The UI to be removed.
+
return bool If the UI was removed or not.
on_logout
+
+
private
+
Handle client logout, by closing all their UIs.
+
required user mob The mob which logged out.
+
return int The number of UIs closed.
on_open
+
+
private
+
Add a UI to the list of open UIs.
+
required ui datum/tgui The UI to be added.
on_transfer
+
+
private
+
Handle clients switching mobs, by transferring their UIs.
+
required user source The client's original mob.
+required user target The client's new mob.
+
return bool If the UIs were transferred.
request_pooled_window
+
+
public
+
Requests a usable tgui window from the pool.
+Returns null if pool was exhausted.
+
required user mob
+return datum/tgui
try_update_ui
+
+
public
+
Try to find an instance of a UI, and push an update to it.
+
required user mob The mob who opened/is using the UI.
+required src_object datum The object/datum which owns the UI.
+optional ui datum/tgui The UI to be updated, if it exists.
+optional force_open bool If the UI should be re-opened instead of updated.
+
return datum/tgui The found UI.
update_uis
+
+
public
+
Update all UIs attached to src_object.
+
required src_object datum The object/datum which owns the UIs.
+
return int The number of UIs updated.
update_user_uis
+
+
public
+
Update all UIs belonging to a user.
+
required user mob The mob who opened/is using the UI.
+optional src_object datum If provided, only update UIs belonging this src_object.
+
return int The number of UIs updated.
+
+
+
diff --git a/datum/controller/subsystem/ticker.html b/datum/controller/subsystem/ticker.html
new file mode 100644
index 00000000000..3667a3adeb0
--- /dev/null
+++ b/datum/controller/subsystem/ticker.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/ticker - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
Will add the URLs usable by staff to the message and return it
+Arguments:
+C - The client who send the message
+msg - The raw message
+ticketNum - Which ticket number the ticket has
Will either make a new ticket using the given text or will add the text to an existing ticket.
+Staff will get a message
+Arguments:
+C - The client who requests help
+text - The text the client send
Which permission to look for when seeing if there is staff available for the other ticket type
Proc Details
makeUrlMessage
+
+
Will add the URLs usable by staff to the message and return it
+Arguments:
+C - The client who send the message
+msg - The raw message
+ticketNum - Which ticket number the ticket has
message_staff
+
+
+
Sends a message to the designated staff
+
Arguments:
+
msg - The message being send
+
alt - If an alternative prefix should be used or not. Defaults to TICKET_STAFF_MESSAGE_PREFIX
+
important - If the message is important. If TRUE it will ignore the PREF_HEAR preferences,
+send a sound and flash the window. Defaults to FALSE
+
newHelpRequest
+
+
Will either make a new ticket using the given text or will add the text to an existing ticket.
+Staff will get a message
+Arguments:
+C - The client who requests help
+text - The text the client send
+
+
+
diff --git a/datum/controller/subsystem/timer.html b/datum/controller/subsystem/timer.html
new file mode 100644
index 00000000000..1562ea99cac
--- /dev/null
+++ b/datum/controller/subsystem/timer.html
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+ /datum/controller/subsystem/timer - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details - Proc Details
+
+
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
list of callbacks to procs called from verbs or verblike procs that were executed when the server was overloaded and had to delay to the next tick.
+this list is ran through every tick, and the subsystem does not yield until this queue is finished.
queue a callback for the given proc, so that it is invoked in the next tick.
+intended to only work with verbs or verblike procs called directly from client input, use as part of TRY_QUEUE_VERB()
runs through all of this subsystems queue of verb callbacks.
+goes through the entire verb queue without yielding.
+used so you can flush the queue outside of fire() without interfering with anything else subtype subsystems might do in fire().
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
list of callbacks to procs called from verbs or verblike procs that were executed when the server was overloaded and had to delay to the next tick.
+this list is ran through every tick, and the subsystem does not yield until this queue is finished.
running average of how many verb callbacks are executed every second. used for the stat entry
Proc Details
can_queue_verb
+
+
subsystem-specific check for whether a callback can be queued.
+intended so that subsystem subtypes can verify whether
+
subtypes may include additional arguments here if they need them! you just need to include them properly
+in TRY_QUEUE_VERB() and co.
queue_verb
+
+
queue a callback for the given proc, so that it is invoked in the next tick.
+intended to only work with verbs or verblike procs called directly from client input, use as part of TRY_QUEUE_VERB()
+
returns TRUE if the queuing was successful, FALSE otherwise.
run_verb_queue
+
+
runs through all of this subsystems queue of verb callbacks.
+goes through the entire verb queue without yielding.
+used so you can flush the queue outside of fire() without interfering with anything else subtype subsystems might do in fire().
+
+
+
diff --git a/datum/craft_step.html b/datum/craft_step.html
new file mode 100644
index 00000000000..3592e0f9dde
--- /dev/null
+++ b/datum/craft_step.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /datum/craft_step - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
This Topic() proc is called whenever a user clicks on a link within a Nano UI
+If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic()
+If the src_object Topic() returns 1 (true) then update all UIs attached to src_object
Add a template for this UI
+Templates are combined with the data sent to the UI to create the rendered view
+These must be added before the UI has been opened, adding after that will have no effect
Set the layout key for use in the frontend Javascript
+The layout key is the basic layout key for the page
+Two files are loaded on the client based on the layout key varable:
+-> a template in /nano/templates with the filename "layout_<layout_key>.tmpl
+-> a CSS stylesheet in /nano/css with the filename "layout_<layout_key>.css
Verify if this UI window is actually open on client's side
Proc Details
New
+
+
Create a new nanoui instance.
+
@param nuser /mob The mob who has opened/owns this ui
+@param nsrc_object /obj|/mob The obj or mob which this ui belongs to
+@param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject
+@param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl")
+@param ntitle string The title of this ui
+@param nwidth int the width of the ui window
+@param nheight int the height of the ui window
+@param nref /atom A custom ref to use if "on_close_logic" is set to 1
+
@return /nanoui new nanoui object
Process
+
+
This Process proc is called by SSnano.
+Use try_update() to make manual updates.
Topic
+
+
This Topic() proc is called whenever a user clicks on a link within a Nano UI
+If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic()
+If the src_object Topic() returns 1 (true) then update all UIs attached to src_object
+
@return nothing
add_common_assets
+
+
Use this proc to add assets which are common to (and required by) all nano uis
+
@return nothing
add_script
+
+
Add a JavsScript script to this UI
+These must be added before the UI has been opened, adding after that will have no effect
+
@param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js")
+
@return nothing
add_stylesheet
+
+
Add a CSS stylesheet to this UI
+These must be added before the UI has been opened, adding after that will have no effect
+
@param file string The name of the CSS file from /nano/css (e.g. "my_style.css")
+
@return nothing
add_template
+
+
Add a template for this UI
+Templates are combined with the data sent to the UI to create the rendered view
+These must be added before the UI has been opened, adding after that will have no effect
+
@param key string The key which is used to reference this template in the frontend
+@param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl")
+
@return nothing
close
+
+
Close this UI
+
@return nothing
focus
+
+
Move window up front.
+
@return nothing
get_config_data
+
+
Get config data to sent to the ui.
+
@return /list config data
get_html
+
+
Return the HTML for this UI
+
@return string HTML for the UI
get_send_data
+
+
Get data to sent to the ui.
+
@param data /list The list of general data for this ui (can be null to use previous data sent)
+
@return /list data to send to the ui
open
+
+
Open this UI
+
@return nothing
push_data
+
+
Push data to an already open UI window
+
@return nothing
reinitialise
+
+
Reinitialise this UI, potentially with a different template and/or initial data
+
@return nothing
set_auto_update
+
+
Set the ui to auto update (every master_controller tick)
+
@param state int (bool) Set auto update to 1 or 0 (true/false)
+
@return nothing
set_auto_update_content
+
+
Set the ui to update the main content (re-render it) on each update
+
@param state int (bool) Set update to 1 or 0 (true/false) (default 1)
+
@return nothing
set_auto_update_layout
+
+
Set the ui to update the layout (re-render it) on each update, turning this on will break the map ui (if it's being used)
+
@param state int (bool) Set update to 1 or 0 (true/false) (default 0)
+
@return nothing
set_initial_data
+
+
Set the initial data for the ui. This is vital as the data structure set here cannot be changed when pushing new updates.
+
@param data /list The list of data for this ui
+
@return nothing
set_layout_key
+
+
Set the layout key for use in the frontend Javascript
+The layout key is the basic layout key for the page
+Two files are loaded on the client based on the layout key varable:
+-> a template in /nano/templates with the filename "layout_<layout_key>.tmpl
+-> a CSS stylesheet in /nano/css with the filename "layout_<layout_key>.css
+
@param nlayout string The layout key to use
+
@return nothing
set_map_z_level
+
+
Toggle showing the map ui
+
@param nstate_key boolean 1 to show map, 0 to hide (default is 0)
+
@return nothing
set_show_map
+
+
Toggle showing the map ui
+
@param nstate_key boolean 1 to show map, 0 to hide (default is 0)
+
@return nothing
set_state_key
+
+
Set the state key for use in the frontend Javascript
+
@param nstate_key string The key of the state to use
+
@return nothing
set_status
+
+
Set the current status (also known as visibility) of this ui.
+
@param state int The status to set, see the defines at the top of this file
+@param push_update int (bool) Push an update to the ui to update it's status (an update is always sent if the status has changed to red (0))
+
@return nothing
set_window_options
+
+
Set the browser window options for this ui
+
@param nwindow_options string The new window options
+
@return nothing
try_update
+
+
Process this UI, updating the entire UI or just the status (aka visibility)
+
@param update string For this UI to update
+
@return nothing
update
+
+
Update the UI
+
@return nothing
update_status
+
+
Update the status (visibility) of this ui based on the user's status
+
@param push_update int (bool) Push an update to the ui to update it's status. This is set to 0/false if an update is going to be pushed anyway (to avoid unnessary updates)
+
@return 1 if closed, null otherwise.
use_on_close_logic
+
+
Set whether or not to use the "old" on close logic (mainly unset_machine())
+
@param state int (bool) Set on_close_logic to 1 or 0 (true/false)
+
@return nothing
verify_open
+
+
Verify if this UI window is actually open on client's side
+
@return is_open boolean - if the UI is actually open on client.
+
+
+
diff --git a/datum/nt_blueprint/machinery/biogen_console.html b/datum/nt_blueprint/machinery/biogen_console.html
new file mode 100644
index 00000000000..005651fa3e4
--- /dev/null
+++ b/datum/nt_blueprint/machinery/biogen_console.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /datum/nt_blueprint/machinery/biogen_console - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
The root perk datum. All perks inherit properties from this one.
+
A perk is basically a talent that livings may have. This talent could be something like damage reduction, or some other passive benefit.
+Some jobs have perks that are assigned to the human during role assignment.
+Perks can be assigned or removed. To handle this, use the mob stats datum, with the helper procs addPerk, removePerk and getPerk.
+The static effects are given in assign, and removed in remove.
+Perks are stored in a list within a stat_holder datum.
Proc called when the perk is removed from a human. Obviously, in your perks, you should call parent as the last thing you do, since it deletes the perk itself.
Proc Details
assign
+
+
Proc called when the perk is assigned to a human. Should be the first thing to be called.
check_shared_ability
+
+
Proc called , a bitflag is always expected.
on_process
+
+
Proc called in human life. Should be the first thing to be called.
remove
+
+
Proc called when the perk is removed from a human. Obviously, in your perks, you should call parent as the last thing you do, since it deletes the perk itself.
+
+
+
diff --git a/datum/powernet.html b/datum/powernet.html
new file mode 100644
index 00000000000..569310afcbb
--- /dev/null
+++ b/datum/powernet.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ /datum/powernet - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Like gallopLeft, except that if the range contains an element equal to
+key, gallopRight returns the index after the rightmost equal element.
Proc Details
gallopRight
+
+
Like gallopLeft, except that if the range contains an element equal to
+key, gallopRight returns the index after the rightmost equal element.
+
@param key the key whose insertion point to search for
+@param a the array in which to search
+@param base the index of the first element in the range
+@param len the length of the range; must be > 0
+@param hint the index at which to begin the search, 0 <= hint < n.
+The closer hint is to the result, the faster this method will run.
+@param c the comparator used to order the range, and to search
+@return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k]
+
+
+
diff --git a/datum/stack_canary.html b/datum/stack_canary.html
new file mode 100644
index 00000000000..a1bb03fd6ea
--- /dev/null
+++ b/datum/stack_canary.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /datum/stack_canary - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
required user mob The mob who opened/is using the UI.
+required src_object datum The object or datum which owns the UI.
+required interface string The interface used to render the UI.
+optional title string The title of the UI.
+optional ui_x int Deprecated: Window width.
+optional ui_y int Deprecated: Window height.
+
return datum/tgui The requested UI.
Process
+
+
private
+
Run an update cycle for this UI. Called internally by SStgui
+every second or so.
close
+
+
public
+
Close the UI.
+
optional can_be_suspended bool
get_payload
+
+
private
+
Package the data to send to the UI, as JSON.
+
return list
on_act_message
+
+
Wrapper for behavior to potentially wait until the next tick if the server is overloaded
on_message
+
+
private
+
Callback for handling incoming tgui messages.
open
+
+
public
+
Open this UI (and initialize it with data).
+
return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists.
process_status
+
+
private
+
Updates the status, and returns TRUE if status has changed.
send_asset
+
+
public
+
Makes an asset available to use in tgui.
+
required asset datum/asset
+
return bool - true if an asset was actually sent
send_full_update
+
+
public
+
Send a full update to the client (includes static data).
+
optional custom_data list Custom data to send instead of ui_data.
+optional force bool Send an update even if UI is not interactive.
send_update
+
+
public
+
Send a partial update to the client (excludes static data).
+
optional custom_data list Custom data to send instead of ui_data.
+optional force bool Send an update even if UI is not interactive.
set_autoupdate
+
+
public
+
Enable/disable auto-updating of the UI.
+
required value bool Enable/disable auto-updating.
set_mouse_hook
+
+
public
+
Enable/disable passing through byond mouse events to the window
+
required value bool Enable/disable hooking.
set_state
+
+
public
+
Replace current ui.state with a new one.
+
required state datum/ui_state/state Next state
+
+
+
diff --git a/datum/tgui_window.html b/datum/tgui_window.html
new file mode 100644
index 00000000000..405cbe73244
--- /dev/null
+++ b/datum/tgui_window.html
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+ /datum/tgui_window - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
required client /client
+required id string A unique window identifier.
acquire_lock
+
+
public
+
Acquire the window lock. Pool will not be able to provide this window
+to other UIs for the duration of the lock.
+
Can be given an optional tgui datum, which will be automatically
+subscribed to incoming messages via the on_message proc.
+
optional ui /datum/tgui
can_be_suspended
+
+
public
+
Checks if the window can be sanely suspended.
+
return bool
close
+
+
public
+
Close the UI.
+
optional can_be_suspended bool
flush_message_queue
+
+
private
+
Sends queued messages if the queue wasn't empty.
initialize
+
+
public
+
Initializes the window with a fresh page. Puts window into the "loading"
+state. You can begin sending messages right after initializing. Messages
+will be put into the queue until the window finishes loading.
+
optional strict_mode bool - Enables strict error handling and BSOD.
+optional fancy bool - If TRUE and if this is NOT a panel, will hide the window titlebar.
+optional assets list - List of assets to load during initialization.
+optional inline_html string - Custom HTML to inject.
+optional inline_js string - Custom JS to inject.
+optional inline_css string - Custom CSS to inject.
is_ready
+
+
public
+
Checks if the window is ready to receive data.
+
return bool
on_message
+
+
private
+
Callback for handling incoming tgui messages.
reinitialize
+
+
public
+
Reinitializes the panel with previous data used for initialization.
release_lock
+
+
public
+
Release the window lock.
replace_html
+
+
public
+
Replaces the inline HTML content.
+
required inline_html string HTML to inject
send_asset
+
+
public
+
Makes an asset available to use in tgui.
+
required asset datum/asset
+
return bool - TRUE if any assets had to be sent to the client
send_message
+
+
public
+
Sends a message to tgui window.
+
required type string Message type
+required payload list Message payload
+optional force bool Send regardless of the ready status.
send_raw_message
+
+
public
+
Sends a raw payload to tgui window.
+
required message string JSON+urlencoded blob to send.
+optional force bool Send regardless of the ready status.
subscribe
+
+
public
+
Subscribes the datum to consume window messages on a specified proc.
+
Note, that this supports only one subscriber, because code for that
+is simpler and therefore faster. If necessary, this can be rewritten
+to support multiple subscribers.
unsubscribe
+
+
public
+
Unsubscribes the datum. Do not forget to call this when cleaning up.
+
+
+
diff --git a/datum/ticket.html b/datum/ticket.html
new file mode 100644
index 00000000000..831d21e6df9
--- /dev/null
+++ b/datum/ticket.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+ /datum/ticket - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
Removes this timed event from any relevant buckets, or the secondary queue
bucketJoin
+
+
Attempts to add this timed event to a bucket, will enter the secondary queue
+if there are no appropriate buckets at this time.
+
Secondary queueing of timed events will occur when the timespan covered by the existing
+buckets is exceeded by the time at which this timed event is scheduled to be invoked.
+If the timed event is tracking client time, it will be added to a special bucket.
getcallingtype
+
+
Returns a string of the type of the callback for this timer
+
+
+
diff --git a/datum/trade_station/boozefood.html b/datum/trade_station/boozefood.html
new file mode 100644
index 00000000000..09b38502419
--- /dev/null
+++ b/datum/trade_station/boozefood.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /datum/trade_station/boozefood - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
Allocates an instance of the provided type, and places it somewhere in an available loc
+Instances allocated through this proc will be destroyed when the test is over
Allocates an instance of the provided type, and places it somewhere in an available loc
+Instances allocated through this proc will be destroyed when the test is over
+
+
+
diff --git a/datum/unit_test/binary_insert.html b/datum/unit_test/binary_insert.html
new file mode 100644
index 00000000000..8732c005829
--- /dev/null
+++ b/datum/unit_test/binary_insert.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /datum/unit_test/binary_insert - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
A weakref holds a non-owning reference to a datum.
+The datum can be referenced again using resolve().
+
To figure out why this is important, you must understand how deletion in
+BYOND works.
+
Imagine a datum as a TV in a living room. When one person enters to watch
+TV, they turn it on. Others can come into the room and watch the TV.
+When the last person leaves the room, they turn off the TV because it's
+no longer being used.
+
A datum being deleted tells everyone who's watching the TV to stop.
+If everyone leaves properly (AKA cleaning up their references), then the
+last person will turn off the TV, and everything is well.
+However, if someone is resistant (holds a hard reference after deletion),
+then someone has to walk in, drag them away, and turn off the TV forecefully.
+This process is very slow, and it's known as hard deletion.
+
This is where weak references come in. Weak references don't count as someone
+watching the TV. Thus, when what it's referencing is destroyed, it will
+hopefully clean up properly, and limit hard deletions.
+
A common use case for weak references is holding onto what created itself.
+For example, if a machine wanted to know what its last user was, it might
+create a var/mob/living/last_user. However, this is a storng reference to
+the mob, and thus will force a hard deletion when that mob is deleted.
+It is often better in this case to instead create a weakref to the user,
+meaning this type definition becomes var/datum/weakref/last_user.
+
A good rule of thumb is that you should hold strong references to things
+that you own. For example, a dog holding a chew toy would be the owner
+of that chew toy, and thus a var/obj/item/chew_toy reference is fine
+(as long as it is cleaned up properly).
+However, a chew toy does not own its dog, so a var/mob/living/dog/owner
+might be inferior to a weakref.
+This is also a good rule of thumb to avoid circular references, such as the
+chew toy example. A circular reference that doesn't clean itself up properly
+will always hard delete.
Fill a given tile with its area/turf/objects/mobs
+Variable model is one full map line (e.g /turf/wall/dummy{icon_state = "rock"}, /area/mine/explored)
Proc Details
load_map
+
+
Construct the model map and control the loading process
+
WORKING :
+
+
Makes an associative mapping of model_keys with model
+e.g aa = /turf/wall/dummy{icon_state = "rock"}
+
Read the map line by line, parsing the result (using parse_grid)
+
parse_grid
+
+
Fill a given tile with its area/turf/objects/mobs
+Variable model is one full map line (e.g /turf/wall/dummy{icon_state = "rock"}, /area/mine/explored)
+
WORKING :
+
+
+
Read the model string, member by member (delimiter is ',')
+
+
+
Get the path of the atom and store it into a list
+
+
+
a) Check if the member has variables (text within '{' and '}')
+
+
+
b) Construct an associative list with found variables, if any (the atom index in members is the same as its variables in members_attributes)
+
+
+
Instanciates the atom with its variables
+
+
+
+
+
diff --git a/explosion_handler.html b/explosion_handler.html
new file mode 100644
index 00000000000..09bade3d8f9
--- /dev/null
+++ b/explosion_handler.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ /explosion_handler - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
SSverb_manager, a subsystem that runs every tick and runs through its entire queue without yielding like SSinput.
+this exists because of how the byond tick works and where user inputted verbs are put within it.
\ref behaviour got changed in 512 so this is necesary to replicate old behaviour.
+If it ever becomes necesary to get a more performant REF(), this lies here in wait
+#define REF(thing) (thing && isdatum(thing) && (thing:datum_flags & DF_USE_TAG) && thing:tag ? "[thing:tag]" : "\ref[thing]")
Create a new timer and insert it in the queue.
+You should not call this directly, and should instead use the addtimer macro, which includes source information.
queue a callback for the given verb/verblike proc and any given arguments to the specified verb subsystem, so that they process in the next tick.
+intended to only work with verbs or verblike procs called directly from client input, use as part of TRY_QUEUE_VERB() and co.
Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
+exporting it as text, and then parsing the base64 from that.
+(This relies on byond automatically storing icons in savefiles as base64)
Returns a UI status such that silicons will be able to interact with whatever
+they would have access to if this was a machine. For example, AIs can
+interact if there's cameras with wireless control is enabled.
Returns a UI status such that users with debilitating conditions, such as
+being dead or not having power for silicons, will not be able to interact.
+Being dead will disable UI, being incapacitated will continue updating it,
+and anything else will make it interactive.
Returns a UI status such that users adjacent to source will be able to interact,
+far away users will be able to see, and anyone farther won't see anything.
+Dead users will receive updates no matter what, though you likely want to add
+a [ui_status_only_living] check for finer observer interactions.
Designed to properly split up a given tick among subsystems
+Note: if you read parts of this code and think "why is it doing it that way"
+Odds are, there is a reason
Handles creation, callbacks, and destruction of timed events.
+
It is important to understand the buckets used in the timer subsystem are just a series of doubly-linked
+lists. The object at a given index in bucket_list is a /datum/timedevent, the head of a list, which has prev
+and next references for the respective elements in that bucket's list.
SSverb_manager, a subsystem that runs every tick and runs through its entire queue without yielding like SSinput.
+this exists because of how the byond tick works and where user inputted verbs are put within it.
+
see TICK_ORDER.md for more info on how the byond tick is structured.
+
The way the MC allots its time is via TICK_LIMIT_RUNNING, it simply subtracts the cost of SendMaps (MAPTICK_LAST_INTERNAL_TICK_USAGE)
+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
+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
+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
+minor hangs over and over again.
Here is the big, bad function that broadcasts a message given the appropriate
+parameters.
+
@param connection:
+The datum generated in radio.dm, stored in signal.data["connection"].
+
@param M:
+Reference to the mob/speaker, stored in signal.data["mob"]
+
@param vmask:
+Boolean value if the mob is "hiding" its identity via voice mask, stored in
+signal.data["vmask"]
+
@param vmessage:
+If specified, will display this as the message; such as "chimpering"
+for monkies if the mob is not understood. Stored in signal.data["vmessage"].
+
@param radio:
+Reference to the radio broadcasting the message, stored in signal.data["radio"]
+
@param message:
+The actual string message to display to mobs who understood mob M. Stored in
+signal.data["message"]
+
@param name:
+The name to display when a mob receives the message. signal.data["name"]
+
@param job:
+The name job to display for the AI when it receives the message. signal.data["job"]
+
@param realname:
+The "real" name associated with the mob. signal.data["realname"]
+
@param vname:
+If specified, will use this name when mob M is not understood. signal.data["vname"]
+
@param data:
+If specified:
+1 -- Will only broadcast to intercoms
+2 -- Will only broadcast to intercoms and station-bounced radios
+3 -- Broadcast to syndicate frequency
+4 -- AI can't track down this person. Useful for imitation broadcasts where you can't find the actual mob
+
@param compression:
+If 0, the signal is audible
+If nonzero, the signal may be partially inaudible or just complete gibberish.
+
@param level:
+The list of Z levels that the sending radio is broadcasting to. Having 0 in the list broadcasts on all levels
+
@param freq
+The frequency of the signal
CreateBans
+
+
DEBUG
REF
+
+
\ref behaviour got changed in 512 so this is necesary to replicate old behaviour.
+If it ever becomes necesary to get a more performant REF(), this lies here in wait
+#define REF(thing) (thing && isdatum(thing) && (thing:datum_flags & DF_USE_TAG) && thing:tag ? "[thing:tag]" : "\ref[thing]")
WEAKREF
+
+
Creates a weakref to the given input.
+See /datum/weakref's documentation for more information.
______qdel_list_wrapper
+
+
the underscores are to encourage people not to use this directly.
_addtimer
+
+
Create a new timer and insert it in the queue.
+You should not call this directly, and should instead use the addtimer macro, which includes source information.
+
Arguments:
+
+
callback the callback to call on timer finish
+
wait deciseconds to run the timer for
+
flags flags for this timer, see: code__DEFINES\subsystems.dm
+
timer_subsystem the subsystem to insert this timer into
+
_queue_verb
+
+
queue a callback for the given verb/verblike proc and any given arguments to the specified verb subsystem, so that they process in the next tick.
+intended to only work with verbs or verblike procs called directly from client input, use as part of TRY_QUEUE_VERB() and co.
+
returns TRUE if the queuing was successful, FALSE otherwise.
add_verb
+
+
handles adding verbs and updating the stat panel browser
+
pass the verb type path to this instead of adding it directly to verbs so the statpanel can update
+Arguments:
+
+
target - Who the verb is being added to, client or mob typepath
+
verb - typepath to a verb, or a list of verbs, supports lists of lists
+
bitfield_to_list
+
+
Converts a bitfield to a list of numbers (or words if a wordlist is provided)
callHook
+
+
@file hooks.dm
+Implements hooks, a simple way to run code on pre-defined events.
+
+
+
@page hooks Code hooks
+
+
+
@section hooks Hooks
+
+
+
A hook is defined under /hook in the type tree.
+
+
+
To add some code to be called by the hook, define a proc under the type, as so:
All hooks must return nonzero on success, as runtimes will force return null.
+
+
+
Calls a hook, executing every piece of code that's attached to it.
+@param hook Identifier of the hook to call.
+@returns 1 if all hooked code runs successfully, 0 otherwise.
callback_select
+
+
Runs a list of callbacks asyncronously, returning only when all have finished
+
Callbacks can be repeated, to call it multiple times
+
Arguments:
+
+
list/callbacks the list of callbacks to be called
+
list/callback_args the list of lists of arguments to pass into each callback
+
savereturns Optionally save and return the list of returned values from each of the callbacks
+
resolution The number of byond ticks between each time you check if all callbacks are complete
+
default_ui_state
+
+
The sane defaults for a UI such as a computer or a machine.
delete_all_SS_and_recreate_master
+
+
Delete all existing SS to basically start over
deltimer
+
+
Delete a timer
+
Arguments:
+
+
id a timerid or a /datum/timedevent
+
find_nearby_burrow
+
+
Burrow Finding and Sorting
generate_asset_name
+
+
Generate a filename for this asset
+The same asset will always lead to the same asset name
+(Generated names do not include file extention.)
getFlatIcon
+
+
Create a single [/icon] from a given /atom or /image.
+
Very low-performance. Should usually only be used for HTML, where BYOND's
+appearance system (overlays/underlays, etc.) is not available.
+
Only the first argument is required.
getFlatTypeIcon
+
+
always_use_defdir IS DEPRICATED
getOPressureDifferential
+
+
Gets the highest and lowest pressures from the tiles in cardinal directions
+around us, then checks the difference.
get_default_outfit_backpack
+
+
Helpers
get_random_uplink_items
+
+
Support procs
get_wound_type
+
+
WOUND DEFINITIONS
icon2base64
+
+
Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
+exporting it as text, and then parsing the base64 from that.
+(This relies on byond automatically storing icons in savefiles as base64)
is_special_character
+
+
ADMIN HELPER PROCS
log_mapping
+
+
Logging for mapping errors
log_tgui
+
+
Appends a tgui-related log entry. All arguments are optional.
makeDatumRefLists
+
+
Initial Building
md5asfile
+
+
Save file as an external file then md5 it.
+Used because md5ing files stored in the rsc sometimes gives incorrect md5 results.
md5filepath
+
+
Returns the md5 of a file at a given path.
message_adminTicket
+
+
+
Sends a message to the staff able to see admin tickets
+
Arguments:
+
msg - The message being send
+
important - If the message is important. If TRUE it will ignore the PREF_HEAR preferences,
+send a sound and flash the window. Defaults to FALSE
+
message_mentorTicket
+
+
+
Sends a message to the staff able to see mentor tickets
+
Arguments:
+
msg - The message being send
+
important - If the message is important. If TRUE it will ignore the PREF_HEAR preferences,
+send a sound and flash the window. Defaults to FALSE
+
number_of_issues
+
+
USED BY UNIT TEST: uniqueness.dm
qdel
+
+
Should be treated as a replacement for the 'del' keyword.
+
Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
recover_all_SS_and_recreate_master
+
+
Recreate all SSs which will still cause data survive due to Recover(), the new Master will then find and take them from global.vars
remove_verb
+
+
handles removing verb and sending it to browser to update, use this for removing verbs
+
pass the verb type path to this instead of removing it from verbs so the statpanel can update
+Arguments:
+
+
target - Who the verb is being removed from, client or mob typepath
+
verb - typepath to a verb, or a list of verbs, supports lists of lists
+
rustg_get_version
+
+
Gets the version of rust_g
storyteller_button
+
+
datum/storyteller/proc/trigger_event()
strip_improper
+
+
Strip out the special beyond characters for \proper and \improper
+from text that will be sent to the browser.
tgui_Topic
+
+
Middleware for /client/Topic.
+
return bool If TRUE, prevents propagation of the topic call.
timeleft
+
+
Get the remaining deciseconds on a timer
+
Arguments:
+
+
id a timerid or a /datum/timedevent
+
ui_status_only_living
+
+
Returns a UI status such that the dead will be able to watch, but not interact.
ui_status_silicon_has_access
+
+
Returns a UI status such that silicons will be able to interact with whatever
+they would have access to if this was a machine. For example, AIs can
+interact if there's cameras with wireless control is enabled.
ui_status_user_has_free_hands
+
+
Returns a UI status such that those without blocked hands will be able to interact,
+but everyone else can only watch.
ui_status_user_is_abled
+
+
Returns a UI status such that users with debilitating conditions, such as
+being dead or not having power for silicons, will not be able to interact.
+Being dead will disable UI, being incapacitated will continue updating it,
+and anything else will make it interactive.
ui_status_user_is_adjacent
+
+
Returns a UI status such that users adjacent to source will be able to interact,
+far away users will be able to see, and anyone farther won't see anything.
+Dead users will receive updates no matter what, though you likely want to add
+a [ui_status_only_living] check for finer observer interactions.
ui_status_user_is_advanced_tool_user
+
+
Returns a UI status such that advanced tool users will be able to interact,
+but everyone else can only watch.
ui_status_user_is_conscious_and_lying_down
+
+
Returns UI_INTERACTIVE if the user is conscious and lying down.
+Returns UI_UPDATE otherwise.
ui_status_user_strictly_adjacent
+
+
Return UI_INTERACTIVE if the user is strictly adjacent to the target atom, whether they can see it or not.
+Return UI_CLOSE otherwise.
url2htmlloader
+
+
Return html to load a url.
+for use inside of browse() calls to html assets that might be loaded on a cdn.
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 00000000000..ad32398c742
--- /dev/null
+++ b/index.html
@@ -0,0 +1,1151 @@
+
+
+
+
+
+
+ Index - Space Station 13
+
+
+
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
screenshots - This folder contains the results for screenshot tests. Screenshot tests make sure an icon looks the same as it did before a change to prevent regressions.
namespaced - Namespace'ed assets (for static css and html files)
+When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names.
+Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html)
+For example blah.css with asset blah.png will get loaded as namespaces/a3d..14f/f12..d3c.css and namespaces/a3d..14f/blah.png. allowing the css file to load blah.png by a relative url rather then compute the generated url with get_url_mappings().
+The namespace folder's name will change if any of the assets change. (excluding parent assets)
chunk - This subsystem is meant for anything that should not be employing byond view() and is generally very constraining to keep track of
+For now it only has mobs and hearers, but it should also include sanity , signal receivers , and anything that is very frequently
+
click_handler
+
ai - AI Control
+
charge - Charge gun click handler
+
fullauto - Full auto gunfire
+
+
client_interface - This should match the interface of /client wherever necessary.
inspiration - Simple data container component containing level up statistics.
+This does NOT make something a valid inspiration. It simply holds the data in case it gets used as one!
+To actually use it, the typepath of the object has to be contained within the sanity datum valid_inspiration list.
+Assign this component to an item specifying which statistics should be levelled up, and the item will be able to be used as an inspiration.
+The format of statistics is list(STAT_DEFINE = number) or a proc that returns such a list.
+(This would've been better as an element instead of a component, but currently elements don't exist on cev eris. F)
master - Start of queue linked list
+End of queue linked list (used for appending to the list)
+Are we loading in a new map?
+for scheduling different subsystems for different stages of the round
jet - Jetpack Trails
+Subtype made to efficiently sync up with a jetpack.
+They should always be attached to a jetpack
+Does a particle only when the jetpack uses some thrust
+
+
element - A holder for simple behaviour that can be attached to many different types
qdel_item - Qdel Item: Holds statistics on each type that passes thru qdel
+Holds the type as a string for this type
+Total number of times it's passed thru qdel.
+Total amount of milliseconds spent processing this type's Destroy()
+Times it was queued for soft deletion but failed to soft delete.
+Different from failures because it also includes QDEL_HINT_HARDDEL deletions
+Total amount of milliseconds spent hard deleting this type.
+Highest time spent hard_deleting this in ms.
+Number of times hard deletes took longer than the configured threshold
+Number of times it's not respected force=TRUE
+Number of times it's not even bother to give a qdel hint
+Number of times it's slept in its destroy
+
reagent
+
alcohol
+
kaiserbeer - lose sanity on withdrawal, notify user about this
human_breath - Used to test mob breathing in space
+
log_mapping - Conveys all log_mapping messages as unit test failures, as they all indicate mapping problems.
+
screenshot_basic - This is an example for screenshot tests, and a meta-test to make sure they work in the success case.
+It creates a picture that is red on the left side, green on the other.
+
step_override - Checks if the override for step doesn't break the actual parent (byond built in) code
+
tgui_create_message - Test that TGUI_CREATE_MESSAGE is correctly implemented
borgify - Borged hook.
+Called in robot_parts.dm when someone gets turned into a cyborg.
+Parameters: var/mob/living/silicon/robot
+
change_account_status - Account suspension hook.
+Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal.
+Parameters: var/datum/money_account
+
clone - Cloning hook.
+Called in cloning.dm when someone is brought back by the wonders of modern science.
+Parameters: var/mob/living/carbon/human
+
death - Death hook.
+Called in death.dm when someone dies.
+Parameters: var/mob/living/carbon/human, var/gibbed
+
debrain - Debrained hook.
+Called in brain_item.dm when someone gets debrained.
+Parameters: var/obj/item/organ/internal/vital/brain
+
reassign_employee - Employee reassignment hook.
+Called in card.dm when someone's card is reassigned at the HoP's desk.
+Parameters: var/obj/item/card/id
+
revoke_payroll - Payroll revoked hook.
+Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal.
+Parameters: var/datum/money_account
+
roundend - Roundend hook.
+Called in gameticker.dm when a round ends.
+
roundstart - Roundstart hook.
+Called in gameticker.dm when a round starts.
+
sell_crate - Crate sold hook.
+Called in supplyshuttle.dm when a crate is sold on the shuttle.
+Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle
+
startup - Startup hook.
+Called in world.dm when the server starts.
+
terminate_employee - Employee terminated hook.
+Called in card.dm when someone's card is terminated at the HoP's desk.
+Parameters: var/obj/item/card/id
hiborg - hive brings us here to///////////////////////////////////////////////
+////////////////////////////////BIG GUYS////////////////////////////
+/////////////////////////////////////////////////fright and destroy
+/////////////////////////////////HIBORG//////////////////////////////
+
himan - HIMAN
+
lobber - Lobber
+
mechiver - MECHIVER
+
phaser - PHASER
+
resurrected - life's/////////////////////////////////////////////
+/////////////////////////////RESURRECTION/////////
+////////////////////////////////////////////go on
+
stinger - we live to///////////////////////////////////////////////////////////////
+/////////////////////////////////SMALL GUYS/////////////////////////////
+///////////////////////////////////////////////////////////die for hive
+//////////////////////////////////STINGER////////////////////////////////
shield_generator - Yes this also drains power from blocking halloss
+Yes i justify it cause it stops by kinetic power and not by lethality / material hardness
processing_unit_console - Mineral processing unit console
+
stacking_machine - Mineral stacking unit
+
stacking_unit_console - Would've named this ore_data , but it gives infinite cross reference ( and also conflicts with the global version)
+Mineral stacking unit console
Grand9K Pixel created by Jayvee Enaguas. Licensed under Creative Commons Attribution 4.0 International (CC BY 4.0)
+(https://creativecommons.org/licenses/by/4.0/) (https://www.dafont.com/grand9k-pixel.font)
+
+Pixellari created by Zacchary Dempsey-Plante. Website indicates free for commercial use.
+(https://www.dafont.com/pixellari.font?fpp=200)
+
+Spess Font created by MTandi (discord) for /tg/station.
+
+Tiny Unicode created by Jakob Riedle/DuffsDevice. Website indicates free for commercial use.
+(https://fontmeme.com/fonts/tiny-unicode-font/)
+
+VCR OSD Mono created by Riciery Leal/mrmanet. Website indicates 100% free, author confirms it's free for all to use.
+(https://www.dafont.com/font-comment.php?file=vcr_osd_mono)
+
+
+
+
diff --git a/material.html b/material.html
new file mode 100644
index 00000000000..0a4b028f5a7
--- /dev/null
+++ b/material.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /material - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
possibly delayed verb that finishes the pointing process starting in [/mob/verb/pointed()].
+either called immediately or in the tick after pointed() was called, as per the [DEFAULT_QUEUE_OR_CALL_VERB()] macro
Used to determine whether or not a given mob can override gravity when
+attempting to Z-move UP.
+
Returns FALSE in standard mob cases. Exists for carbon/human and other child overrides.
+
@return TRUE if the mob can Z-move up despite gravity.
+FALSE otherwise.
GenerateTag
+
+
Generate the tag for this mob
+
This is simply "mob_"+ a global incrementing counter that goes up for every mob
_pointed
+
+
possibly delayed verb that finishes the pointing process starting in [/mob/verb/pointed()].
+either called immediately or in the tick after pointed() was called, as per the [DEFAULT_QUEUE_OR_CALL_VERB()] macro
can_ztravel
+
+
An initial check for Z-level travel. Called relatively early in mob/proc/zMove.
+
Useful for overwriting and special conditions for STOPPING z-level transit.
+
@return TRUE if the mob can move a Z-level of its own volition.
+FALSE otherwise.
chunkOnMove
+
+
Mob tracking and handling
down
+
+
Verb for the mob to move down a z-level if possible.
examinate
+
+
Examine a mob
+
mob verbs are faster than object verbs. See
+this byond forum post
+for why this isn't atom/verb/examine()
execute_mode
+
+
proc version to finish /mob/verb/mode() execution. used in case the proc needs to be queued for the tick after its first called
get_status_tab_items
+
+
Adds this list to the output to the stat browser
mode
+
+
Verb to activate the object in your held hand
+
Calls attack self on the item and updates the inventory hud for hands
pointed
+
+
Point at an atom
+
mob verbs are faster than object verbs. See
+this byond forum post
+for why this isn't atom/verb/pointed()
+
note: ghosts can point, this is intended
+
visible_message will handle invisibility properly
+
overridden here and in /mob/dead/observer for different point span classes and sanity checks
set_see_in_dark
+
+
See In Dark Set Handling
set_see_invisible
+
+
See Invisible Set Handling
set_sight
+
+
Sight Set Handling
shared_ui_interaction
+
+
public
+
Standard interaction/sanity checks. Different mob types may have overrides.
+
return UI_state The state of the UI.
up
+
+
Verb for the mob to move up a z-level if possible.
zMove
+
+
Used to check if a mob can move up or down a Z-level and to then actually do the move.
+
@param direction The direction in which we're moving. Expects defines UP or DOWN.
+
@return TRUE if the mob has been successfully moved a Z-level.
+FALSE otherwise.
+
+
+
diff --git a/mob/living.html b/mob/living.html
new file mode 100644
index 00000000000..1719ede528f
--- /dev/null
+++ b/mob/living.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ /mob/living - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
This proc used to be done in New() and was still somehow random with people having the same real name and name
+I think it was random because of Human New calling Initialize and then calling the parent of New()
+Hence it kept being random whilst unexpected... -SPCR
This proc used to be done in New() and was still somehow random with people having the same real name and name
+I think it was random because of Human New calling Initialize and then calling the parent of New()
+Hence it kept being random whilst unexpected... -SPCR
create_HUDtech
+
+
mob/living/proc/create_HUDprocess()
shared_living_ui_distance
+
+
public
+
Distance versus interaction check.
+
required src_object atom/movable The object which owns the UI.
+
return UI_state The state of the UI.
+
+
+
diff --git a/mob/living/carbon.html b/mob/living/carbon.html
new file mode 100644
index 00000000000..aef95e1342c
--- /dev/null
+++ b/mob/living/carbon.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /mob/living/carbon - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Gun reloading handling
+Medical mender handling
+Plasma generator handling
+REAGENT INSERTION HANDLING
+Double negation to turn into 0/1 format since if its more than 1 it doesn't count as true.
+welding fuel generator
+chemical sprayer
For equipment that has a process based on mech Life tick
Proc Details
attack_tool
+
+
Gun reloading handling
+Medical mender handling
+Plasma generator handling
+REAGENT INSERTION HANDLING
+Double negation to turn into 0/1 format since if its more than 1 it doesn't count as true.
+welding fuel generator
+chemical sprayer
getOreCarrier
+
+
Checks the mech for places to store the ore.
getShield
+
+
Returns the best shield for damage reduction
get_dir_mult
+
+
aiming for soemthing the mech doesnt have
toggle_hatch
+
+
Used by hatch toggle mech UI button
toggle_hatch_lock
+
+
Used by hatch lock UI button
toggle_sensors
+
+
Used by camera toglge UI button
+
+
+
diff --git a/mob/living/silicon.html b/mob/living/silicon.html
new file mode 100644
index 00000000000..074a00010e2
--- /dev/null
+++ b/mob/living/silicon.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ /mob/living/silicon - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
For fellow coders , if you wish to control the conditions for a robot to move , you need to touch movement_handlers in init() proc
+I've spent 2 hours looking for them , but hopefully you don't have to go through my pain of going over and over undocumented code.
Humans get a -1 by default from any shoe. , robots had a 0.25 added by default.
Proc Details
slip_chance
+
+
For fellow coders , if you wish to control the conditions for a robot to move , you need to touch movement_handlers in init() proc
+I've spent 2 hours looking for them , but hopefully you don't have to go through my pain of going over and over undocumented code.
+
+
+
diff --git a/mob/living/simple_animal/borer.html b/mob/living/simple_animal/borer.html
new file mode 100644
index 00000000000..561656063eb
--- /dev/null
+++ b/mob/living/simple_animal/borer.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /mob/living/simple_animal/borer - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
@param DNA bloodDNA to add to collection.
+@param comingdir Direction tracks come from, or 0.
+@param goingdir Direction tracks are going to (or 0).
+@param bloodcolor Color of the blood when wet.
+
+
+
diff --git a/obj/effect/effect/crosshair.html b/obj/effect/effect/crosshair.html
new file mode 100644
index 00000000000..880c7a2f1c8
--- /dev/null
+++ b/obj/effect/effect/crosshair.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /obj/effect/effect/crosshair - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
wheter this mech can only take one type of this component. Setting it to true will make it not take any kind of component. False is universal. setting a type will enforce that type as acceptable
wheter this mech can only take one type of this component. Setting it to true will make it not take any kind of component. False is universal. setting a type will enforce that type as acceptable
+
+
+
diff --git a/obj/item/mech_component/manipulators.html b/obj/item/mech_component/manipulators.html
new file mode 100644
index 00000000000..75c0ea741a6
--- /dev/null
+++ b/obj/item/mech_component/manipulators.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /obj/item/mech_component/manipulators - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
Eco mode , very slow generation but doubled power output ( 20% of power production at cost of 10% of fuel usage)
+Default
+Turbo mode, 2x fuel usage at 1.6x power output
+back to eco.
Eco mode , very slow generation but doubled power output ( 20% of power production at cost of 10% of fuel usage)
+Default
+Turbo mode, 2x fuel usage at 1.6x power output
+back to eco.
installed
+
+
if we had a extremely minimal use
+
+
+
diff --git a/obj/item/mech_equipment/power_generator/fueled/welding.html b/obj/item/mech_equipment/power_generator/fueled/welding.html
new file mode 100644
index 00000000000..24a3f30cb9f
--- /dev/null
+++ b/obj/item/mech_equipment/power_generator/fueled/welding.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ /obj/item/mech_equipment/power_generator/fueled/welding - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details - Proc Details
+
+
Bones can be repaired after being destroyed. It's not ideal to have this here instead of in the parent (checking for bone efficiencies), but there are fewer corner cases this way.
Proc Details
die
+
+
Bones can be repaired after being destroyed. It's not ideal to have this here instead of in the parent (checking for bone efficiencies), but there are fewer corner cases this way.
+
+
+
diff --git a/obj/item/organ/internal/vital/brain.html b/obj/item/organ/internal/vital/brain.html
new file mode 100644
index 00000000000..696cb3a75a8
--- /dev/null
+++ b/obj/item/organ/internal/vital/brain.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /obj/item/organ/internal/vital/brain - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Club's special Bonsai tree, so they can operate somewhat without a garden.
+
Every 10 seconds, checks if it has 10+ units of any alcohol.
+If it does, removes said alcohol, and spawns a random base fruit or vegetable.
+Ratio, 10 alcohol: 1 produce.
+
+
+
+
+
diff --git a/obj/item/reagent_containers/food.html b/obj/item/reagent_containers/food.html
new file mode 100644
index 00000000000..271da288e7e
--- /dev/null
+++ b/obj/item/reagent_containers/food.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ /obj/item/reagent_containers/food - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Returns a list to use with inspirations. It can be empty if there's not enough money in the bundle. Important side-effects: converts worth to points, thus reducing worth.
Proc Details
return_stats
+
+
Returns a list to use with inspirations. It can be empty if there's not enough money in the bundle. Important side-effects: converts worth to points, thus reducing worth.
+
+
+
diff --git a/obj/item/tank/jetpack.html b/obj/item/tank/jetpack.html
new file mode 100644
index 00000000000..1ab6fa3993b
--- /dev/null
+++ b/obj/item/tank/jetpack.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ /obj/item/tank/jetpack - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
////////////////////////////////// /Let's have this ready for later.
+///////////hitting anything else other than the eyes
+Plik plik, the sound of blood
////////////////////////////////// /Let's have this ready for later.
+///////////hitting anything else other than the eyes
+Plik plik, the sound of blood
+
+
+
diff --git a/obj/machinery.html b/obj/machinery.html
new file mode 100644
index 00000000000..c7be118f07b
--- /dev/null
+++ b/obj/machinery.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+ /obj/machinery - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
Machines in the world, such as computers, pipes, and airlocks.
+
Overview:
+Used to create objects that need a per step proc call. Default definition of 'Initialize()'
+stores a reference to src machine in global 'machines list'. Default definition
+of 'Destroy' removes reference to src machine in global 'machines list'.
+
Class Variables:
+use_power (num)
+current state of auto power use.
+Possible Values:
+NO_POWER_USE -- no auto power use
+IDLE_POWER_USE -- machine is using power at its idle power level
+ACTIVE_POWER_USE -- machine is using power at its active power level
+
active_power_usage (num)
+Value for the amount of power to use when in active power mode
+
idle_power_usage (num)
+Value for the amount of power to use when in idle power mode
+
power_channel (num)
+What channel to draw from when drawing power for power mode
+Possible Values:
+AREA_USAGE_EQUIP:1 -- Equipment Channel
+AREA_USAGE_LIGHT:2 -- Lighting Channel
+AREA_USAGE_ENVIRON:3 -- Environment Channel
+
component_parts (list)
+A list of component parts of machine used by frame based machines.
+
stat (bitflag)
+Machine status bit flags.
+Possible bit flags:
+BROKEN -- Machine is broken
+NOPOWER -- No power is being supplied to machine.
+MAINT -- machine is currently under going maintenance.
+EMPED -- temporary broken by EMP pulse
+
Class Procs:
+Initialize()
+
Destroy()
+
update_mode_power_usage()
+ updates the static_power_usage var of this machine and makes its static power usage from its area accurate.
+ called after the idle or active power usage has been changed.
+
+update_power_channel()
+ updates the static_power_usage var of this machine and makes its static power usage from its area accurate.
+ called after the power_channel var has been changed or called to change the var itself.
+
+unset_static_power()
+ completely removes the current static power usage of this machine from its area.
+ used in the other power updating procs to then readd the correct power usage.
+
+
+ Default definition uses 'use_power', 'power_channel', 'active_power_usage',
+ 'idle_power_usage', 'powered()', and 'use_power()' implement behavior.
+
+
powered(chan = -1) 'modules/power/power.dm'
+Checks to see if area that contains the object has power available for power
+channel given in 'chan'. -1 defaults to power_channel
+
use_power(amount, chan=-1) 'modules/power/power.dm'
+Deducts 'amount' from the power channel 'chan' of the area that contains the object.
+
power_change() 'modules/power/power.dm'
+Called by the area that contains the object when ever that area under goes a
+power state change (area runs out of power, or area channel is turned off).
+
RefreshParts() 'game/machinery/machine.dm'
+Called to refresh the variables in the machine that are contributed to by parts
+contained in the component_parts list. (example: glass and material amounts for
+the autolathe)
+
Default definition does nothing.
+
+
process() 'game/machinery/machine.dm'
+Called by the 'machinery subsystem' once per machinery tick for each machine that is listed in its 'machines' list.
+
process_atmos()
+Called by the 'air subsystem' once per atmos tick for each machine that is listed in its 'atmos_machines' list.
+Compiled by Aygar
+
+
+
diff --git a/obj/machinery/atmospherics/unary/cryo_cell.html b/obj/machinery/atmospherics/unary/cryo_cell.html
new file mode 100644
index 00000000000..2bb50db8a15
--- /dev/null
+++ b/obj/machinery/atmospherics/unary/cryo_cell.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ /obj/machinery/atmospherics/unary/cryo_cell - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob)
Proc Details
nano_ui_interact
+
+
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob)
+
@param user /mob The mob who is interacting with this ui
+@param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
+@param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui
+
@return nothing
+
+
+
diff --git a/obj/machinery/autolathe/excelsior.html b/obj/machinery/autolathe/excelsior.html
new file mode 100644
index 00000000000..2049940e8a9
--- /dev/null
+++ b/obj/machinery/autolathe/excelsior.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ /obj/machinery/autolathe/excelsior - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+
+
+
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable
its expensive so they need to do a few mandates before they manage to get it
Proc Details
nano_ui_interact
+
+
The nano_ui_interact proc is used to open and update Nano UIs
+If nano_ui_interact is not used then the UI will not update correctly
+nano_ui_interact is currently defined for /atom/movable
+
@param user /mob The mob who is interacting with this ui
+@param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
+
@return nothing
+
+
+
diff --git a/obj/machinery/cryopod.html b/obj/machinery/cryopod.html
new file mode 100644
index 00000000000..36ba637ad5f
--- /dev/null
+++ b/obj/machinery/cryopod.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ /obj/machinery/cryopod - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Why isn't it just eject ? because it somehow breaks SSchunks. ForceMoving out of these does not get registered properly
+The mob does NOT have a LOC when it gets done by eject() , but this way it does for its forceMove() when we call go_out() from here
+I dont know why it is this way , blame Byond ? - SPCR 2023
+I figured it out... its because it used to remove the mob to eject from its contents before actually ejecting them , causing their loc to be null..
Proc Details
affect_grab
+
+
Local pod code
go_out
+
+
Why isn't it just eject ? because it somehow breaks SSchunks. ForceMoving out of these does not get registered properly
+The mob does NOT have a LOC when it gets done by eject() , but this way it does for its forceMove() when we call go_out() from here
+I dont know why it is this way , blame Byond ? - SPCR 2023
+I figured it out... its because it used to remove the mob to eject from its contents before actually ejecting them , causing their loc to be null..
+
+
+
diff --git a/obj/machinery/door/blast.html b/obj/machinery/door/blast.html
new file mode 100644
index 00000000000..870d706c5a2
--- /dev/null
+++ b/obj/machinery/door/blast.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /obj/machinery/door/blast - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
/datum/computer/file/embedded_program/docking/post_signal(datum/signal/signal, comm_line)
+to_chat(world, "Program [id_tag] sent a message!")
+print_state()
+to_chat(world, "[id_tag] sent command "[signal.data["command"]]" to "[signal.data["recipient"]]"")
+..(signal)
+
/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/view_state()
+set category = "Debug"
+set src in view(1)
+src.program:print_state()
+
/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/spoof_signal(var/command as text, var/sender as text)
+set category = "Debug"
+set src in view(1)
+var/datum/signal/signal = new
+signal.data["tag"] = sender
+signal.data["command"] = command
+signal.data["recipient"] = id_tag
+
src.program:receive_signal(signal)
+
+
/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_dock(var/target as text)
+set category = "Debug"
+set src in view(1)
+src.program:initiate_docking(target)
+
/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_undock()
+set category = "Debug"
+set src in view(1)
+src.program:initiate_undocking()
+
+
+
diff --git a/obj/machinery/hivemind_machine.html b/obj/machinery/hivemind_machine.html
new file mode 100644
index 00000000000..1cdc44bb5e6
--- /dev/null
+++ b/obj/machinery/hivemind_machine.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ /obj/machinery/hivemind_machine - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Offsets the object by APC_PIXEL_OFFSET (defined in apc_defines.dm) pixels in the direction we want it placed in. This allows the APC to be embedded in a wall, yet still inside an area (like mapping).
Offsets the object by APC_PIXEL_OFFSET (defined in apc_defines.dm) pixels in the direction we want it placed in. This allows the APC to be embedded in a wall, yet still inside an area (like mapping).
+
+
+
diff --git a/obj/machinery/power/smes/batteryrack.html b/obj/machinery/power/smes/batteryrack.html
new file mode 100644
index 00000000000..9c274270aca
--- /dev/null
+++ b/obj/machinery/power/smes/batteryrack.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /obj/machinery/power/smes/batteryrack - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Build src.produdct_records from the products lists
+
src.products, src.contraband, src.premium, and src.prices allow specifying
+products that the vending machine is to carry without manually populating
+src.product_records.
credit_purchase
+
+
Add money for current purchase to the vendor account.
+
Called after the money has already been taken from the customer.
pay_with_card
+
+
Scan a card and attempt to transfer payment from associated account.
+
Takes payment for whatever is the currently_vending item. Returns 1 if
+successful, 0 if failed
pay_with_cash
+
+
Receive payment with cashmoney.
pay_with_ewallet
+
+
Scan a chargecard and deduct payment from it.
+
Takes payment for whatever is the currently_vending item. Returns 1 if
+successful, 0 if failed.
stock
+
+
+
+
Add item to the machine
+
+
+
Checks if item is vendable in this machine should be performed before
+
+
+
calling. W is the item being inserted, R is the associated vending_product entry.
+R can be null, in which case the user is inserting something that wasnt previously here.
+In that case we create a new inventory record for the item
+
+
ui_interact
+
+
Display the TGUI window for the vending machine.
+
See TGUI documentation for details.
+
+
+
diff --git a/obj/machinery/vending/boozeomat.html b/obj/machinery/vending/boozeomat.html
new file mode 100644
index 00000000000..2df86dab29b
--- /dev/null
+++ b/obj/machinery/vending/boozeomat.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ /obj/machinery/vending/boozeomat - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Var Details
+
+
Internal procedures. Might be useful if you're writing a /jp_DungeonRoom datum.
+Probably not useful if you just want to make a simple dungeon
Proc Details
errString
+
+
External procedures, intended to be used by user code.
regionCreate
+
+
The remaining procedures are seriously internal, and I strongly suggest not *
+
+
touching them unless you're certain you know what you're doing. That includes *
+calling them, unless you've figured out what the side-effects and assumptions *
+of the procedure are. These may not work except in the context of a generate() *
+call.
updateWallConnections
+
+
Internal procedures. Might be useful if you're writing a /jp_DungeonRoom datum.
+Probably not useful if you just want to make a simple dungeon
+
+
+
diff --git a/obj/structure.html b/obj/structure.html
new file mode 100644
index 00000000000..276c8016249
--- /dev/null
+++ b/obj/structure.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ /obj/structure - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Collapsing burrows. Slow and hard work, but failure will make the next attempt easier,
+so you'll get it eventually.
+Uses digging quality, and user's robust or mechanical stats
Collapsing burrows. Slow and hard work, but failure will make the next attempt easier,
+so you'll get it eventually.
+Uses digging quality, and user's robust or mechanical stats
+
While burrow is still emerging (cracks) player can attempt to weld it
+Hole can be closed easely with metal sheets
+
Breaking a hole with a crowbar is theoretically possible, but extremely slow and difficult. You are strongly
+advised to use proper mining tools. A pickaxe or a drill will do the job in a reasonable time
audio
+
+
Audio Management
break_open
+
+
Breaking and rubble
enter_burrow
+
+
Burrow entering
spread_plants
+
+
Plant Management
+
+
+
diff --git a/obj/structure/closet.html b/obj/structure/closet.html
new file mode 100644
index 00000000000..2df9a46a567
--- /dev/null
+++ b/obj/structure/closet.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ /obj/structure/closet - Space Station 13
+
+
+
+ Space Station 13 -
+ Modules -
+ Types
+ — Proc Details
+
+
Despite having no DM-defined static type, proc paths have some variables,
+listed below. These are not modifiable, but for a given procpath P,
+new P(null, "Name", "Desc") can be used to create a new procpath with the
+same code but new name and desc values. The other variables cannot be
+changed in this way.
+
This type exists only to act as an annotation, providing reasonable static
+typing for procpaths. Previously, types like /atom/verb were used, with
+the name and desc vars of /atom thus being accessible. Proc and verb
+paths will fail istype and ispath checks against /procpath.
Makes a call in the context of a different usr. Use sparingly
Proc Details
ImmediateInvokeAsync
+
+
Immediately Invoke proctocall on thingtocall, with waitfor set to false
+
Arguments:
+
+
thingtocall Object to call on
+
proctocall Proc to call on that object
+
... optional list of arguments to pass as arguments to the proc being called
+
New
+
+
World creation
+
Here is where a round itself is actually begun and setup.
+
+
db connection setup
+
config loaded from files
+
loads admins
+
and most importantly, calls initialize on the master subsystem, starting the game loop that causes the rest of the game to begin processing and setting up
+
+
Nothing happens until something moves. ~Albert Einstein
+
For clarity, this proc gets triggered later in the initialization pipeline, it is not the first thing to happen, as it might seem.
+
Initialization Pipeline:
+Global vars are new()'ed, (including config, glob, and the master controller will also new and preinit all subsystems when it gets new()ed)
+Compiled in maps are loaded (mainly centcom). all areas/turfs/objs/mobs(ATOMs) in these maps will be new()ed
+world/New() (You are here)
+Once world/New() returns, client's can connect.
+1 second sleep
+Master Controller initialization.
+Subsystem initialization.
+Non-compiled-in maps are maploaded, all atoms are new()ed
+All atoms in both compiled and uncompiled maps are initialized()
push_usr
+
+
Makes a call in the context of a different usr. Use sparingly