materials - How material datums work
Materials are now instanced datums, with an associative list of them being kept in SSmaterials. We only instance the materials once and then re-use these instances for everything.
edible - This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items).
These items take a specific time to eat, and can do most of the things our original food items could.
Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else:
Components:
Drying component (jerky etc)
Customizable component (custom pizzas etc)
Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.)
Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents)
Misc:
Something for cakes (You can store things inside)
fried - This component essentially encapsulates frying and utilizes the edible component
This means fried items can work like regular ones, and generally the code is far less messy
material_container - This datum should be used for handling mineral contents of machines and whatever else is supposed to hold minerals and make use of them.
Contextual screentips (and when to not use this folder) - Contextual screentips provide information in the form of text at the top of your screen to inform you of the possibilities of an item. The "contextual" here refers to this being handled entirely through code, what it displays and when is completely up to you.
In-code keypress handling system - This whole system is heavily based off of forum_account's keyboard library.
Thanks to forum_account for saving the day, the library can be found
here!
language/language_holder - Language holders will either exist in an atom/movable or a mind. Creation of language holders happens
automatically when they are needed, for example when something tries to speak.
Where a mind is available, the mind language holder will be the one "in charge". The mind holder
will update its languages based on the atom holder, and will get updated as part of
transformations and other events that cause new languages to become available.
Every language holder has three lists of languages (and sources for each of them):
living - Proc that actually does the grab resisting. Return TRUE if successful. Does not check that a grab exists! Use attempt_resist_grab() instead of this in general!
Forced is if something other than the user mashing movement keys/pressing resist button did it, silent is if it makes messages (like "attempted to resist" and "broken free").
Forced does NOT force success!
About modularizing defines - Since #define clauses can't be properly modularized and need to be loaded first than the rest of the code for it to catch them, the modular_splurt/code/_DEFINES/ folder has been deleted and all of its contents have been moved to code\__SPLURTCODE\DEFINES
/tg/station build script - This build script is the recommended way to compile the game, including not only the DM code but also the JavaScript and any other dependencies.
Git Integration Hooks - This folder contains installable scripts for Git hooks and merge drivers.
Use of these hooks and drivers is optional and they must be installed
explicitly before they take effect.
Map Merger - The Map Merger is a collection of scripts that keep this repository's maps
in a format which is easier to track in Git and less likely to cause merge
conflicts. When merge conflicts do occur, it can sometimes resolve them.
emissive_blocker - Internal atom that copies an appearance on to the blocker plane
fov_holder - The shadow cone's mask and visual images holder which can't locate inside the mob,
lest they inherit the mob opacity and cause a lot of hindrance
map_view - A screen object, which acts as a container for turfs and other things
you want to show on the map, which you usually attach to "vis_contents".
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)
biome - This datum handles the transitioning from a turf to a specific biome, and handles spawning decorative structures and mobs.
bitfield - Specifies a bitfield for smarter debugging
block_parry_data - Carries data like list data that would be a waste of memory if we initialized the list on every /item as we can cache datums easier.
Callback Datums - A datum that holds a proc to be called on another object, used to track proccalls to other objects
callback_select - Helper datum for the select callbacks proc
centcom_announcer - Data holder for the announcers that can be used in a game, this can be used to have alternative announcements outside of the default e.g.the intern
butchering/recycler - Special snowflake component only used for the recycler.
combat_mode - Combat mode component. It makes the user face whichever atom the mouse pointer is hovering,
amongst other things designed outside of this file, namely PvP and PvE stuff, hence the name.
Can be toggled on and off by clicking the screen hud object or by pressing the assigned hotkey (default 'C')
explodable - Component specifically for explosion sensetive things, currently only applies to heat based explosions but can later perhaps be used for things that are dangerous to handle carelessly like nitroglycerin.
field_of_vision - Field of Vision component. Does totally what you probably think it does,
ergo preventing players from seeing what's behind them.
footstep - Footstep component. Plays footsteps at parents location when it is appropriate.
multiple_lives - A simple component that spawns a mob of the same type and transfers itself to it when parent dies.
For more complex behaviors, use the COMSIG_ON_MULTIPLE_LIVES_RESPAWN comsig.
filter - The magical plumbing component used by the chemical filters. The different supply connects behave differently depending on the filters set on the chemical filter
simple_demand - has one pipe input that only takes, example is manual output pipe
simple_supply - has one pipe output that only supplies. example is liquid pump and manual input pipe
virtual_reality - The virtual reality turned component.
Originally created to overcome issues of mob polymorphing locking the player inside virtual reality
and allow for a more "immersive" virtual reality in a virtual reality experience.
It relies on comically complex order of logic, expect things to break if procs such as mind/transfer_to() are revamped.
In short, a barebone not so hardcoded VR framework.
If you plan to add more devices that make use of this component, remember to isolate their code outta here where possible.
log_suspicious_login - Config entry which special logging of failed logins under suspicious circumstances.
log_telecomms - log telecomms messages
log_twitter - log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
log_victim - log attack messages
log_virus - log virology data
log_vote - log voting
log_whisper - log client whisper
log_world_topic - log all world.Topic() calls
persistent_debris - Whether or not to use the persistence system for cleanable objects
persistent_debris_only - Whether or not to nuke all roundstart debris that isn't due to persistence if the above is true
persistent_debris_wipe_on_nuke - Wipe dirty stuff on nuke
picture_logging_camera - This is... shitcode, literally same as above, if one of them is inactive, won't log at all, PLEASE FUCKING REMOVE THIS.
popup_admin_pm - Gives the ability to send players a maptext popup.
protolock_during_lowpop - R&D Machinery
respawn_penalty_includes_observe - Observing penalizes for respawns, not just joining.
respawns_enabled - Allows usage of respawn system
tetris_no_science - TETRIS ARCADE MACHINE
use_field_of_vision - Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
respawn_chaos_gamemodes - Gamemode config tags that are banned from respawning
number
autodoc_time_surgery_base - AUTODOC
bluespaceminer_mult_output - BLUESPACE MINER
defib_cmd_time_limit - Seconds for CMD on defib-with-memory-loss policy config to display instead of defib-intact config
dirt_alpha_starting - Alpha dirt starts at
error_cooldown - The "cooldown" time for each occurrence of a unique error
error_limit - How many occurrences before the next will silence them
error_msg_delay - How long to wait between messaging admins about occurrences of a unique error
error_silence_time - How long a unique error will be silenced for
initial_gear_points - Initial loadout points
outdated_movedelay - Outdated move delay
persistent_debris_global_max - Max amount of objects to store, total
persistent_debris_type_max - Max amount of objects to store per type
respawn_delay - Minutes before allowing respawns.
respawn_delay_cryo - Minutes before allowing respawn, if user cryo'd.
respawn_minimum_delay_roundstart - Minutes from roundstart before someone can respawn
stamina_combat
base_regeneration - Base regeneration per second
buffer_max - Maximum stamina buffer
out_of_combat_timer - Seconds until percent_regeneration_out_of_combat kicks in
overdraw_penalty_factor - Factor to multiply by for stamina usage past buffer into health
percent_regeneration_out_of_combat - After out_of_combat_timer elapses, additionally regenerate this percent of total stamina per second. Unaffected by combat mode.
post_action_penalty_delay - Seconds after an action for which your regeneration is penalized
post_action_penalty_factor - Factor to multiply by for penalizing post-action-stamina-regen
turf_dirt_threshold - Amount of dirtyness tiles need to spawn dirt.
turf_dirty_multiplier - Dirtyness multiplier for making turfs dirty
vote_autotransfer_initial - Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
Set to 0 to disable the subsystem altogether.
vote_autotransfer_interval - length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
vote_autotransfer_maximum - maximum extensions until the round autoends.
Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
Set to -1 to disable the maximum extensions cap.
str_list - List config entry, used for configuring a list of strings
traitor - Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws.
The probability to replace an existing law with an ion law instead of adding a new ion law.
dynamic_snapshot - A "snapshot" of dynamic at an important point in time.
Exported to JSON in the dynamic.json log file.
effect_system/trail_follow - ///// Attach a trail to any object, that spawns when it moves (like for the jetpack)
just pass in the object to attach it to in set_up
Then do start() to start it and stop() to stop it, obviously
and don't call start() in a loop that will be repeated otherwise it'll get spammed!
connect_loc - This element hooks a signal onto the loc the current object is on.
When the object moves, it will unhook the signal and rehook it to the new object.
contextual_screentip_bare_hands - Apply basic contextual screentips when the user hovers over this item with an empty hand.
A "Type B" interaction.
This stacks with other contextual screentip elements, though you may want to register the signal/flag manually at that point for performance.
contextual_screentip_item_typechecks - Apply basic contextual screentips when the user hovers over this item with a provided item.
A "Type B" interaction.
This stacks with other contextual screentip elements, though you may want to register the signal/flag manually at that point for performance.
contextual_screentip_sharpness - Apply basic contextual screentips when the user hovers over this item with an item of the given tool behavior.
A "Type B" interaction.
This stacks with other contextual screentip elements, though you may want to register the signal/flag manually at that point for performance.
contextual_screentip_tools - Apply basic contextual screentips when the user hovers over this item with an item of the given tool behavior.
A "Type B" interaction.
This stacks with other contextual screentip elements, though you may want to register the signal/flag manually at that point for performance.
dwarfism - Very similar to squish, but for dwarves and shorties
weather_listener - This element just handles creating and destroying an area sound manager that's hooked into weather stuff
emote/living
subtle - EMOTE CODE
subtler - SUBTLE 2: NO GHOST BOOGALOO
subtler_table - SUBTLE 3: DARE DICE
fantasy_affix
bane - Good suffixes
fool - Bad suffixes
font - A font datum, it exists to define a custom font to use in a span style later.
grand9k - For clean results on map, use only sizing pt, multiples of 6: 6pt 12pt 18pt 24pt etc. - Not for use with px sizing
Can be used in TGUI etc, px sizing is pt / 0.75. 6pt = 8px, 12pt = 16px etc.
Base font
size_6pt - For icon overlays
Grand9K 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
pixellari - For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing
Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
Base font
size_12pt - For icon overlays
Pixellari 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
spessfont - For clean results on map, use only sizing pt, multiples of 6: 6t 12pt 18pt etc. - Not for use with px sizing
Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
Base font
size_6pt - For icon overlays
Spess Font 6pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
tiny_unicode - For clean results on map, use only sizing pt, multiples of 12: 12pt 24pt 48pt etc. - Not for use with px sizing
Can be used in TGUI etc, px sizing is pt / 0.75. 12pt = 16px, 24pt = 32px etc.
Base font
size_12pt - For icon overlays
TinyUnicode 12pt metrics generated using Lummox's dmifontsplus (https://www.byond.com/developer/LummoxJR/DmiFontsPlus)
Note: these variable names have been changed, so you can't straight copy/paste from dmifontsplus.exe
Families gamemode / dynamic ruleset handler - A special datum used by the families gamemode and dynamic rulesets to centralize code. "Family" and "gang" used interchangeably in code.
gang_theme - Gang themes for the Families gamemode. Used to determine the RP theme of the round, what gangs are present, and what their objectives are.
map_generator - This type is responsible for any map generation behavior that is done in areas, override this to allow for area-specific map generation. This generation is ran by areas in initialize.
Outfit datums - This is a clean system of applying outfits to mobs, if you need to equip someone in a uniform
this is the way to do it cleanly and properly.
scar - scars are cosmetic datums that are assigned to bodyparts once they recover from wounds. Each wound type and severity have their own descriptions for what the scars
look like, and then each body part has a list of "specific locations" like your elbow or wrist or wherever the scar can appear, to make it more interesting than "right arm"
skill_holder - Skill holder datums
All procs are tied to the mind, since they are always expected to have a skill holder anyway.
skill_modifier - Base skill modifier datum, used to modify a player skills without directly touching their values, levels and affinity
and cause lots of edge cases. These are fairly simple overall... make a subtype though, don't use this one.
tgs_chat_command - User definable chat command. This abstract version MUST be overridden to be used.
tgs_chat_embed
field - See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details.
footer - See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details.
media - Common datum for similar Discord embed medias.
provider - See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details.
author - See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New().
structure - User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details.
tgui_alert - Datum used for instantiating and using a TGUI-controlled modal that prompts the user with
a message and has buttons for responses.
async tgui_modal - An asynchronous version of tgui_modal to be used with callbacks instead of waiting on user responses.
tgui_input_number - Datum used for instantiating and using a TGUI-controlled number input that prompts the user with
a message and has an input for number entry.
async tgui_text_input - An asynchronous version of tgui_text_input to be used with callbacks instead of waiting on user responses.
async tgui_text_input - An asynchronous version of tgui_text_input to be used with callbacks instead of waiting on user responses.
tgui_list_input - Datum used for instantiating and using a TGUI-controlled list input that prompts the user with
a message and shows a list of selectable options
async tgui_list_input - An asynchronous version of tgui_list_input to be used with callbacks instead of waiting on user responses.
tgui_panel - tgui_panel datum
Hosts tgchat and other nice features.
mob - CLICKDELAY HANDLING SYSTEM
How this works is mobs can never do actions until their next_action is at or below world.time, but things can specify extra cooldown
to check for either from the time of last_action or from the end of next_action.
Goliath Broodmother - A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will.
When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled.
It's attacks are as follows:
Candy - Kind of like bubblegum's rebellious teenage son/daughter.
Has 4 attacks.
Charge - Charges at it's target.
Bloody Trap - Traps it's target between some walls, and then charges at them.
Meat Shield - Knockbacks all targets in the 3 tiles he faces, and then creates a wall.
Knockdown - Deals damage and knockbacks all targets in a 2 tile radius.
Drakeling - A small drake/dragon.
Has four attacks.
Herald - A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style.
As it's health gets lower, the amount of projectiles fired per-attack increases.
It's attacks are as follows:
Legionnaire - A towering skeleton, embodying the power of Legion.
As it's health gets lower, the head does more damage.
It's attacks are as follows:
Necropolis priest - Kind of like BD miner's son trying to impress their dad.
Has four attacks.
Pandora - A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones.
As it's health gets lower, the time between it's attacks decrease.
It's attacks are as follows:
durand_shield - Shield processing
*An object to take the hit for us when using the Durand's defense mode.
It is spawned in during the durand's initilization, and always stays on the same tile.
Normally invisible, until defense mode is actvated. When the durand detects an attack that should be blocked, the
attack is passed to the shield. The shield takes the damage, uses it to calculate charge cost, and then sets its
own integrity back to max. Shield is automatically dropped if we run out of power or the user gets out.
bounty_cube - Upon completion of a civilian bounty, one of these is created. It is sold to cargo to give the cargo budget bounty money, and the person who completed it cash.
hard_drive/small/nukeops - For tablets given to nuke ops
recharger/cyborg - This recharger exists only in borg built-in tablets. I would have tied it to the borg's cell but
the program that displays laws should always be usable, and the exceptions were starting to pile.
Hyperstation 13 fleshlight - Humbley request this doesnt get ported to other code bases, we strive to make things unique on our server and we dont have a lot of coders
but if you absolutely must. please give us some credit~ <3
made by quotefox and heavily modified by SandPoot
Spider Charge - A unique version of c4 possessed only by the space ninja. Has a stronger blast radius.
Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can.
When it primes, the space ninja responsible will have their objective set to complete.
antigrav - Anti-Gravity - Makes the user weightless.
teleporter - Teleporter - Lets the user teleport to a nearby location.
balloon - Rave Visor - Pointless
Tanner - Maybe another time
Balloon Blower - Blows a balloon.
bikehorn - Criminal Capture
Mirage grenade dispenser
Projectile Dampener
Active Sonar
Bike Horn - Plays a bike horn sound.
clamp - Hydraulic Clamp - Lets you pick up and drop crates.
constructor - Constructor - Lets you build quicker and create RCD holograms.
defibrillator - Injector - No piercing syringes, replace another time
Organ Thrower
Patrient Transport
Defibrillator - Gives the suit an extendable pair of shock paddles.
dispenser - Dispenser - Dispenses an item after a time passes.
dna_lock - Longfall
Thermal Regulator - Naw.
DNA Lock - Prevents people without the set DNA from activating the suit.
drill - Drill - Lets you dig through rock and basalt.
emp_shield - EMP Shield - Protects the suit from EMPs.
flashlight - Flashlight - Gives the suit a customizable flashlight.
gps - Internal GPS - Extends a GPS you can use.
health_analyzer - Health Analyzer - Gives the user a ranged health analyzer and their health status in the panel.
holster - Pepper Shoulders
Holster - Instantly holsters any not huge gun.
jetpack - Ion Jetpack - Lets the user fly freely through space using battery charge.
magboot - Magnetic Stability - Gives the user a slowdown but makes them negate gravity and be immune to slips.
magnetic_harness - Magnetic Harness - Automatically puts guns in your suit storage when you drop them.
paper - Paper is now using markdown (like in github pull notes) for ALL rendering
so we do loose a bit of functionality but we gain in easy of use of
paper and getting rid of that crashing bug
trinary/nuclear_reactor - What is this?
Moderators list (Not gonna keep this accurate forever):
Fuel Type:
Oxygen: Power production multiplier. Allows you to run a low plasma, high oxy mix, and still get a lot of power.
Plasma: Power production gas. More plasma -> more power, but it enriches your fuel and makes the reactor much, much harder to control.
Tritium: Extremely efficient power production gas. Will cause chernobyl if used improperly.
Moderation Type:
N2: Helps you regain control of the reaction by increasing control rod effectiveness, will massively boost the rad production of the reactor.
CO2: Super effective shutdown gas for runaway reactions. MASSIVE RADIATION PENALTY!
Pluoxium: Same as N2, but no cancer-rads!
Permeability Type:
BZ: Increases your reactor's ability to transfer its heat to the coolant, thus letting you cool it down faster (but your output will get hotter)
Water Vapour: More efficient permeability modifier
Hyper Noblium: Extremely efficient permeability increase. (10x as efficient as bz)
Depletion type:
Nitryl: When you need weapons grade plutonium yesterday. Causes your fuel to deplete much, much faster. Not a huge amount of use outside of sabotage.
Sabotage:
Meltdown:
Flood reactor moderator with plasma, they won't be able to mitigate the reaction with control rods.
Shut off coolant entirely. Raise control rods.
Swap all fuel out with spent fuel, as it's way stronger.
Blowout:
Shut off exit valve for quick overpressure.
Cause a pipefire in the coolant line (LETHAL).
Tack heater onto coolant line (can also cause straight meltdown)
Tips:
Be careful to not exhaust your plasma supply. I recommend you DON'T max out the moderator input when youre running plasma + o2, or you're at a tangible risk of running out of those gasses from atmos.
The reactor CHEWS through moderator. It does not do this slowly. Be very careful with that!
plumbing - Basic plumbing object.
It doesn't really hold anything special, YET.
Objects that are plumbing but not a subtype are as of writing liquid pumps and the reagent_dispenser tank
Also please note that the plumbing component is toggled on and off by the component using a signal from default_unfasten_wrench, so dont worry about it
acclimator - this the plumbing version of a heater/freezer.
filter - chemical plumbing filter. If it's not filtered by left and right, it goes straight.
input - We can empty beakers in here and everything
liquid_pump - We pump liquids from activated(plungerated) geysers to a plumbing outlet. We don't need to be wired.
output - We can fill beakers in here and everything. we dont inheret from input because it has nothing that we need
pill_press - We take a constant input of reagents, and produce a pill once a set volume is reached
reaction_chamber - a reaction chamber for plumbing. pretty much everything can react, but this one keeps the reagents seperated and only reacts under your given terms
splitter - it splits the reagents however you want. So you can "every 60 units, 45 goes left and 15 goes straight". The side direction is EAST, you can change this in the component
synthesizer - A single machine that produces a single chem. Can be placed in unison with others through plumbing to create chemical factories
basalt/lava_land_surface - Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.