Brought to you by a buncha nerds.
Command | Description | Syntax |
---|---|---|
help, oldhelp | Returns a description of the given command and its usage. |
help adminwho
|
list | Returns a list of all commands. Paired with a keyword, returns a list of commands containing that word. |
list admin
|
adminwho | Returns a list of online admins, excluding deadminned and stealthminned admins. |
adminwho
|
aghost | Turn yourself into an admin ghost. |
aghost
|
deadmin | Removes all admin functions from the user. |
deadmin
|
readmin | Returns all admin functions to the user after they deadmin. Not necessary to run upon joining. |
readmin
|
quit | Closes the Game. |
quit
|
tpto | Teleport all targets to the first ID/user in the command. |
tpto Skarlet Chief_Engineer liltenhead 1234567 This will teleport CE, Lilten and entity with ID 1234567 to Skarlet. |
tp | Teleports yourself to the coordinates on the specified map. Syntax goes X, Y, mapID. |
tp 14 -186 61
|
customvote | Creates a custom vote for all players, requires at least two choices. Choices with spaces need to be in quotation marks " ". |
customvote "Do fish fly?" Yes No "Sometimes, I dream about cheese" Maybe
|
delayroundstart | Delay round start in seconds. Leave blank to pause, use again to unpause. |
delayroundstart 30
|
votemenu | Opens the 'Call Vote' menu. |
votemenu
|
cancelvote | Cancels an ongoing vote. Autocompletes. |
cancelvote 3
|
warp | Teleports you to a warp point. |
warp evac
|
Command | Description | Syntax |
---|---|---|
lsobjectives | Shows all objectives of the targeted user. |
lsobjectives Skarlet
|
crewmanifest | Opens the station's manifest without using a PDA. Autocompletes the station's ID. |
crewmanifest 1234567
|
rename | Renames the entity and also its PDA. More powerful than the rename trick. |
rename 1234567 "John Centcomm"
|
delayroundend | Delays the round end summary in seconds. Use while the evacuation shuttle is in transit to centcom. |
delayroundend 90
|
griddrag | Used like a force gun, moves grids around quickly. Use at your own risk, it is a toggle. |
griddrag
|
kicknonwhitelist | Kicks non-whitelisted players from the server. |
kicknonwhitelist
|
ban_exemption_update | Used for adding ban exemptions, e.g., to exclude a player from an IP ban on shared connections. |
ban_exemption_update Repo 127.0.0.1
|
menuvis | Used to see every entity you can find when right-clicking a tile (Like someone's organs). |
menuvis all to enable menuvis to disable
|
adminnotes | Opens the note panel for the given player. Works even if the player is offline. |
adminnotes Skarlet
|
banpanel | Opens the ban panel. From there, you can specify which player to ban, reason, duration, severity, etc. |
banpanel
|
stealthmin | Hides you from adminwho. Does not hide you from ahelp. |
stealthmin
|
set-motd | Lets you set a message of the day. Users will see it in chat upon joining and upon setting it. You don't need quotation marks for this one! |
set-motd Whassup gang, event going on!
|
Command | Description | Syntax |
---|---|---|
vv | Opens graphical VV editor for given entity. Can help with accessing something you can't right-click, including server-only entities. |
vv 12345678
|
vvwrite | Used to change a component's values. |
vvwrite 12345678 ComponentName Value
|
vvread | Used to read a component's values. Used like vvwrite. |
vvread 12345678 ComponentName
|
addcomp | Adds a component to an entity. |
addcomp 1234567 Jittering
|
fixgridatmos | Resets the grid's atmos. This WILL reset pipe contents as well. Be careful about running this on the main station, as this may also reset anything crew (e.g. atmos techs) did intentionally, like frezon production setups. |
fixgridatmos 1234567
|
showradiation
![]() |
Displays a radiation source's range, the entities it hits, and the radiation protection of entities. |
showradiation
|
showambient | Displays a circle over every item that produces ambient sounds on screen, and their range. Red for inactive, orange for active out of range, green for active in range. |
showambient
|
showaudio
![]() |
Displays every item that produces active sounds on screen, and a bunch of stats. Does not display anything unless you are in the sound's range. More robust than showambient in the way that this shows all sounds rather than just ambient. |
showaudio
|
Command | Description | Syntax |
---|---|---|
setadminooc | Changes color of your OOC messages. Persists between reconnects and servers, will not apply while deadmin |
setadminooc #ff7777
|
scale | Lets you change an entity's scale. 1 is the default value. |
scale 1234567 0.5
|
playglobalsound | Plays a sound based on the given path and sets the volume. |
playglobalsound /Uploaded/Skarlet/pretzels.ogg 1
|
adduplink | Adds an uplink to a PDA and links it to a user. |
adduplink Skarlet
|
addobjective | Adds an objective to the user. Traitor objectives can be found here. |
addobjective Skarlet CMOHyposprayStealObjective
|
rmobjective | Removes an objective from the user. Objective number is found using addobjective . |
rmobjective Skarlet 0
|
setmind | Puts a player in the specified entity ID (may require the entity to have a mind). |
setmind 1234567 Skarlet
|
addhand | Adds a hand to the entity. Requires the "Hands" component in the entity. You can run this multiple times. |
addhand 1234567
|
addgamerule | Adds the chosen game event to the game. Autocompletes. |
addgamerule MeteorSwarm
|
endgamerule | Removes the chosen game rule from the game. Autocompletes. |
endgamerule 1234567
|
damage | Deals or heals damage. Positive for deal, negative for heal. Syntax goes "damage Type Amount [ignoreResistances in a true or false] uID". Setting ignoreresistances to false will take into account armor and other resistances when dealing damage. |
damage Brute 30 true 2964
|
osay | Makes the specified entity either Speak, Emote, or Whisper. Specified entity must be an ID. |
osay 123456 Emote screams!
|
showghosts | Will either show or hide ghosts to all players with a true or false. |
showghost true
|
Command | Description | Syntax |
---|---|---|
uploadfile | Used to upload singular files. Works anywhere on your PC. |
uploadfile Skarlet/pretzels.ogg
|
uploadfolder | Used to upload a folder. The folder's name has to be one word or it won't work. [NEEDS DOCUMENTATION] |
|
loadprototype | Uploads a YML and runs it. Make sure you have the right material in the YML before uploading. |
loadprototype
|
uploadfile
The files used in this example can be found here!
Uploading singular files is very straightforward. Here is an example to show exactly how to use this command to upload a prototype. In this example, I will upload a custom neck item that displays stars on top of the character wearing it. First, we need to prepare our files.
Regular clothing items really only need an equipped sprite, an icon sprite, and a meta.json file. If this is for an event, you don’t really need to add in-hands sprites, so I usually don’t bother. I suggest keeping all your sprites/meta.json in the same folder just for ease of access, like the actual files in game. The actual location of each file does not matter when using uploadfile
, you can separate them if you reeeally want.
To have a properly formatted meta.json, you can just copy one from the game files. There’s a lot of examples in there, and once you’re familiar with how they work, you’ll be able to edit them to fit your needs more than a premade one would. Here is how the meta.json file looks for this example. If your sprite is animated, you will need delays to tell the game at what speed it needs to play each sprite. You can tweak every individual number to your liking, so feel free to mess around with that.
Once that’s all prepped up, we gotta move onto the code for the item. Yml is thankfully not very hard to work with- Every prototype upload can basically be copied off from an existing prototype and frankenstein’d into whatever you want it to be. The format is also super straight-forward, and I had zero coding knowledge when I started working with them. Just gotta get used to it. Anyways, a prototype is basically just a long list of components added to it that makes it into an item with properties.
For example, here’s our stars’ prototype:
To make this prototype, I looked at how other similar items were formatted in \Prototypes\Entities\Clothing\Neck. Reason why this looks so empty is because I specified a parent. That means the prototype will inherit every single component from that parent, and anything specified in the child’s file will override it’s parent’s. So by adding a sprite component to the child, we’re overriding the parent’s sprite. Note: You CANNOT specify a component removal while making a prototype. If you need a component removed from the parent, copy the parent instead, and use that as your new base.
You can trace back the origin of most prototypes to a singular parent. Everything is just mashed together and built atop one another- Which also means it’s really easy to make your own prototypes. I also commented out the commands I need to run so I can easily paste them in the command line in-game.
Now, all we need to do is upload all of the files and run the yml. This is also super simple: uploadfile Skarlet/empstarsneck.rsi/equipped-MASK.png
. This will open a window, where you are able to select which file to upload. So, we upload equipped-MASK.png
. In turn, this uploads to a new folder we create through the command, empstarsneck.rsi
, which is inside of MY upload folder. The upload folder is named after your username, so if you ever plan on using these, make sure to edit my name out before uploading, otherwise it’ll upload all of these in your upload folder, in a folder named Skarlet.
Once you upload all of your necessary files, you can finally run the yml. loadprototype
will open a window that lets you select which file you wish to open. This will load the item and make it available to spawn, unless there is an error with the prototype. Most common errors in prototype making are empty spaces in unintended areas and typos. Make sure to check out for those if you get upload errors. NOTE: You should test your prototypes in a local or empty server before bringing them to a live server. Running in local gives you the advantage of seeing the server console errors, which sometimes has more answers than the in-game console.
ANOTHER NOTE: For code simplicity, you should put all of your prototypes for a specific upload in the same file. By this I mean, if you are making a mob that needs multiple types of prototypes to work, you can place them all in the same file. Like uploading multiple entities (clothes) in the same .yml as it’s soundCollection and emoteSounds protos.
You will most likely need to alter the names of your prototype if you are testing things as you go, because the upload system is a little silly. Values in a YML can be edited and re-uploaded easily, but assets like images will need either a dev-environment restart or need you to rename them to produce a separate item.
Components are awesome, and there’s so many hidden things you can do with them. From useful to just plain fun, there’s a component for everything. If you want to apply an object’s property to another object, you might wanna look at the former’s components and apply the ones you want to the latter.
You can find the station’s ID easily by typing stations:list
in the console. You can then vvwrite /entity/12345/StationBankAccount/Accounts[Cargo] 9999
to set cargo’s balance to 9999.
If your server doesn’t have departemental budget, you can just edit the Balance field in the StationBankAccount component
You can also make the station actively lose money by setting the IncreasePerSecond
to a negative number :trollface:
Some components are placed in the mind, rather than the entity. This allows you to change things such as antag status or custom objectives. vv
a player’s entity and open the MindContainer component. The second value named Mind should have an ID like 12345. vv
that ID like vv 12345
to access the Mind’s Mind component. This component contains the character’s objectives, roles (job, traitor, etc.), role type (SoloAntag, etc.), and other information tied to it’s parent entity (the character itself, name, time of death, etc.) This is also where you can prevent a mind from ghosting and suiciding.
With the MarkerOne
, MarkerTwo
and MarkerThree
components, you can easily keep track of a player (OR MULTIPLE !) to apply things to them easily with Toolshed. > entities with MarkerOne
is a very good way to synchronize VVediting. You can even apply it quickly by using > marked comp:add MarkerOne
, and remove it the same way by using > marked comp:rm MarkerOne
. How splendid.
Toolshed is the newer alternative to BQL and was developed by Moony.
Toolshed commands must start with a >
to work properly. The official (unfinished) toolshed documentation can be found here, but it is not necessary to read, nor to learn. Most toolshed commands have autocomplete.
Command | Description | Syntax |
---|---|---|
explain | Pair with a an argument or string to show you exactly what every argument does and how to use them. | > explain self nearby 3 |
entities | Returns a list of all entities. Should be used with a filter (like with or prototyped ). |
> entities with HeadRevolutionary comp:rm Cuffable |
select | Returns N number from the input list. Randomized. Accepts %. | > entities actor:controlled select 50% |
take | Returns N entities off the top of the input list. Smallest entity ID first. Note that this doesn't give you the entity. | > entities prototyped Crowbar take 2 |
pick | Returns a single random item from the input list. It does not give you said item. | > entities prototyped Crowbar pick |
with | Returns entities with the specified component. Can be reversed by adding not as a prefix. |
> entities with Pullable not with Puller comp:rm Pullable |
marked | Returns the marked entity's ID. You can mark an entity by right-clicking them > Admin > Mark. | > marked do "osay $ID Emote screams!" |
nearby | Returns entities within a range based on the provided target. | > self nearby 3 comp:add Jittering |
prototyped | Returns all entities using the specified prototype. | > entities prototyped MobHuman polymorph WizardSpider |
actor:controlled | Returns all entities that are currently controlled by a player. | > entities actor:controlled select 5 |
self | Returns your own entity ID. | > self comp:add Jittering |
do | Runs regular commands for each entity in the list provided. All commands must be wrapped in quotations and inner quotes must be escaped. | > marked do "makeghostrole $ID \"Centcom Agent\" \"You've come to inspect the Station.\" \"(Role rules go here)\"" |
visualize | Displays a window of all corresponding results. | > entities prototyped MobHuman visualize |
ent | Returns the specified entity. | > ent 12345 do "damage Blunt 50 true $ID" |
replace | Deletes the previous entity and places a new entity in it's place. Ghosts players if you use it on them. | > ent 12345 replace ToiletEmpty |
Find all player controlled observers
So you don’t have to fly around looking for ghosts
> entities actor:controlled with Ghost visualize
Turn all specified prototyped entities into ghost roles with custom text
makeghostrole’s syntax goes Role Name, Description and Rules
> entities prototyped MobGlockroach do "makeghostrole $ID GLOCKROACH \"ARRGGHHH\" \"BANG BANG POW\""
Make everyone scream
> entities actor:controlled do "osay $ID Emote screams!"
Delete all space garbage
Good if your server is experiencing gigalag
> entities with SpaceGarbage delete
Ever see those admins who spectate then immediately shorten or grow, get colored, and starts flying around real fast, all at the same time? We’re learning how to script, baby. A script is literally just a series of commands that you tell the game to run. You can add as many commands as you want. There are multiple use cases for scripts, and are amazing for automating tasks that don’t require editing in-between uses.
To get started, type %appdata%
in your search bar and scroll down to find Space Station 14
. In case you’re already lost, the directory’s location is \AppData\Roaming\Space Station 14\data
. If you’re not on windows, you’ll have to find that folder yourself. Anyways, open the data
folder, and create a text file (.txt). Literally any name works, but you’ll be typing that name in the console, so make sure you can recognize it. You can make as many scripts as you want. Put your script in that file. Once you have every command you want in your script, run exec
with the /filename
to run your script. exec
has autocomplete.
This script relies on toolshed to fill in the entity’s ID by running “self” first. Here’s nikthechampiongr’s “generic username agnostic script”:
> self not prototyped AdminObserver do "aghost"
> self do "vvwrite entity/$ID/MovementSpeedModifier/BaseSprintSpeed 25"
> self do "vvwrite entity/$ID/MovementSpeedModifier/BaseWalkSpeed 6"
> self do "vvwrite entity/$ID/Description \"GHOST GANG!\""
> self do "vvwrite entity/$ID/Eye/VisibilityMask 7"
> self do "vvwrite entity/$ID/Ghost/color '#4D7AFF'"
> self do "addcomp $ID ShowCriminalRecordIcons"
> self do "addcomp $ID ShowJobIcons"
> self do "addcomp $ID ShowMindShieldIcons"
> self do "addcomp $ID ShowSyndicateIcons"
Here is a script by aquif that itemizes a marked entity (which you need to mark by right-clicking an entity > admin > mark):
> marked comp:ensure Item
> marked comp:ensure MultiHandedItem
> marked comp:ensure CanEscapeInventory
For this script, you should be adding an entity size. This command changes based on what kind of inventory your server has:
Size for list inventory servers: > marked do "vvwrite /entity/$ID/Item/Size 120"
Size for grid inventory servers: > marked do "vvwrite /entity/$ID/Item/Size Normal"
for a 2x2 tiled item, or use Ginormous
to be too big for bags. Inspect the item component of other items for more sizes.
This is a singular command, however making it into a script has us write a lot less words than writing the whole command (ex: exec /RGBALL.txt
)
> entities with Ghost comp:ensure RgbLightController comp:ensure PointLight do "vvwrite /entity/$ID/PointLight/Energy 0"