---
# System prepended metadata

title: Administration and Coding Guide
tags: [' events', ' ss13', ' guides', ' tutorials', features]

---

---
title: Administration and Coding Guide 
description: A collection of notes and tools to help contribute to the server and to provide information to administration on utilizing DM and running in-game commands.  
image: https://hackmd.io/screenshot.png
tags: features, events, guides, tutorials, ss13
---
Administration and Coding Useful Information
===

{%hackmd @ZeWaka/dark-theme %}

:::info 
:warning: **This document is public do not put any information in here that could be considered sensitive. Anyone with a link to this document can see the information stored here.** 
:::

[ToC]

## :bangbang: Guide Requests

:::info 
Feel free to add anything to this list if you would like to see information related to it or have a guide made.
:::

- [ ] Example Request | Ironnhawk | 11/25/2021
---

# :joystick: In-Game Editing 

## Chat Formatting

ahelps: support HTML natively, you can post images in ahelps, links, formatting, styling, etc. 

### Increase Visibility to 
```
<p><span style="font-size:28px;"><span style="color: #ff0000;"><strong> Please respond to me. Click on my underlined name to do so. </strong></span></span></p>
```

#### Output: 

<p><span style="font-size:28px;"><span style="color: #ff0000;"><strong> Please respond to me. Click on my underlined name to do so. </strong></span></span></p>



## Panels

* [MC-Panel](/f4aj4gJLQzG8SSpjGpfSEA)
* [Debug Panel](/YlxlVLJUS4i-VY2jtOozog)

---

## Item Edits

### Items - Vars



Not sorted in any form, as a start simply to keep track of values that are used for common edits.

| Var Name | Value | Description |
| -------- | -------- | -------- |
| w_class     | Int     | Control the size of an item, this allows you to adjust whether an item can fit into a storage slot or not.     |


### Items - Guns
Gun items are broken down into these variables

```javascript 
/obj/item/gun
	name = "gun"
	desc = "It's a gun. It's pretty terrible, though."
	icon = 'icons/obj/guns/ballistic.dmi'
	icon_state = "detective"
	inhand_icon_state = "gun"
	worn_icon_state = "gun"
	flags_1 =  CONDUCT_1
	slot_flags = ITEM_SLOT_BELT
	custom_materials = list(/datum/material/iron=2000)
	w_class = WEIGHT_CLASS_NORMAL
	throwforce = 5
	throw_speed = 3
	throw_range = 5
	force = 5
	item_flags = NEEDS_PERMIT
	attack_verb_continuous = list("strikes", "hits", "bashes")
	attack_verb_simple = list("strike", "hit", "bash")
	var/gun_flags = NONE
	var/fire_sound = 'sound/weapons/gun/pistol/shot.ogg'
	var/vary_fire_sound = TRUE
	var/fire_sound_volume = 50
	var/dry_fire_sound = 'sound/weapons/gun/general/dry_fire.ogg'
	var/suppressed = null //whether or not a message is displayed when fired
	var/can_suppress = FALSE
	var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
	var/suppressed_volume = 60
	var/can_unsuppress = TRUE
	var/recoil = 0 //boom boom shake the room
	var/clumsy_check = TRUE
	var/obj/item/ammo_casing/chambered = null
	trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
	var/sawn_desc = null //description change if weapon is sawn-off
	var/sawn_off = FALSE
	var/burst_size = 1 //how large a burst is
	var/fire_delay = 0 //rate of fire for burst firing and semi auto
	var/firing_burst = 0 //Prevent the weapon from firing again while already firing
	var/semicd = 0 //cooldown handler
	var/weapon_weight = WEAPON_LIGHT
	var/dual_wield_spread = 24 //additional spread when dual wielding
	/// Just 'slightly' snowflakey way to modify projectile damage for projectiles fired from this gun.
	var/projectile_damage_multiplier = 1
	var/spread = 0 //Spread induced by the gun itself.
	var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
	lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
	righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
	var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns
	/// True if a gun dosen't need a pin, mostly used for abstract guns like tentacles and meathooks
	var/pinless = FALSE
	var/can_flashlight = FALSE //if a flashlight can be added or removed if it already has one.
	var/obj/item/flashlight/seclite/gun_light
	var/datum/action/item_action/toggle_gunlight/alight
	var/gunlight_state = "flight"
	var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one.
	var/obj/item/kitchen/knife/bayonet
	var/knife_x_offset = 0
	var/knife_y_offset = 0
	var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite
	var/ammo_y_offset = 0
	var/flight_x_offset = 0
	var/flight_y_offset = 0
	//Zooming
	var/zoomable = FALSE //whether the gun generates a Zoom action on creation
	var/zoomed = FALSE //Zoom toggle
	var/zoom_amt = 3 //Distance in TURFs to move the user's screen forward (the "zoom" effect)
	var/zoom_out_amt = 0
	var/datum/action/toggle_scope_zoom/azoom
	var/pb_knockback = 0

```

* [ID Cards]
* [Foods]



## Client Edits
| Var | Value | Description |
| -------- | -------- | -------- |
|icon = /icon()     | Image Files (.dmi .bmp .png .gif .jpg .jpeg)    | To edit the icon of an object     |
| icon_state = "" |Text| For use with .DMI files use the state named to choose and icon. Check the .dmi in DreamMaker to find available states|



## Mob Edits

Common Variable Guides [VV]

Human mob variables ```[/mob/living/carbon/human]```

**Bodyparts**

Every human mob when spawned has a set of body parts. These are every limb that is attached to
that mob. You can click into a limb to find out more details on it.

Certain mechanics are removed
from a player if they lose certain limbs, like if they lose both hands, they can no longer hold any
object.

**DNA**
DNA is normally unique to a mob, but there can be duplicates when cloned, or if a changeling is
currently morphed into another mob.

You can also see the blood type of the mob here. And any mutations that this mob has at spawn
(Though those mutation may or may not be active)

| Var | Value | Description |
| -------- | -------- | -------- |
|icon = /icon()     | Image Files (.dmi .bmp .png .gif .jpg .jpeg)    | To edit the icon of an object     |
| icon_state = "" |Text| For use with .DMI files use the state named to choose and icon. Check the .dmi in DreamMaker to find available states|


## Sprite Edits

### Vars

| Var | Value | Description |
| -------- | -------- | -------- |
|icon = /icon()     | Image Files (.dmi .bmp .png .gif .jpg .jpeg)    | To edit the icon of an object     |
| icon_state = "" |Text| For use with .DMI files use the state named to choose and icon. Check the .dmi in DreamMaker to find available states|


## :warning: Proccalls
:::danger
Unless you know what you are doing, do not play with this on any live server, there is a high chance you will break the round. 
:::

| Proc | Desc | How To |
| -------- | -------- | -------- |
| apply_prefs_to().    | Text     | mark their mob, VV their player -> client -> prefs, call the apply_prefs_to proc with 1 argument, the mob **OR** go to the dropdown> call proc > apply_prefs_to > arguments 1 > scroll down and hit the MARKED OBJECT one  |


## :no_entry: MySQL
:::danger
Unless you know what you are doing, do not play with this on any live server, you will get in severe trouble. 
:::

A combination of Proccalls and MySQL commands is one of the most powerful tools you could have while in-game. Allowing you to change and interact with select items/objects, mass edit variables or force an object to run a specific event. 

Because of these interaction, MySQL should only be done by those who absolutely know what they are doing on a live server. If you do not understand SQL, do not! DO NOT! Attempt to play with these commands live. 

**Types of queries**
Their names describe what you want to do.
```
SELECT - Selects data from the database
INSERT - Inserts data into a table
UPDATE - Updates existing data in a table
DELETE - Deletes existing data from a table
```

There are more, but this guide doesn't deal with them:
**CREATE** - Creates databases, tables, views, procedures, triggers, etc. Whatever you define
**ALTER** - Changes the properties of something you created (for example, which columns a table has)
**DROP** - Deletes something you created (DELETE only deletes the data, DROP deletes the table itself.)

**Table Naming Convention**
Tables are usually named in lower case, they use the underscore as a word separator and the first word is usually the name of the project the table is a part of. Most tables in the tgs database are called ss13_X. The last common thing is to always use singular. So 'user_reports' is not a good name, 'user_report' is. These naming conventions are there to help you down the road, so you will not be in doubt whether a table is called 'ss13_players' or 'ss13_player', etc. Examples: ss13_player, ss13_connection_log, ss13_poll_question, etc.

**SELECT**
Let's select something. This assumes you have the tgs database set up and that you played a few rounds with it enabled.

**Everything**
Execute the following statement:

```sql
SELECT *
FROM ss13_player
```

You now have a list of players who played on your server so far. I can't provide you with a screenshot for privacy reasons, but you can see what you get in your output. The * in the statement defines that you want to select all columns.

https://tgstation13.org/wiki/MySQL
## :page_facing_up: Papercode
* [Formatting](/m8xhoVnSTS2lva8RYgppLg)
* [Templates](/L5u9Is4WSvaJBRd8fgQ68Q)
    * [Command](/Olskkp_1RYKIwdwth46kfA)
    * [NT Rep](/lXdsWHaZTsmxaPzy5o8l4A)
    * [Security](/cOc1OUgqTTa4tZ2k9eM8AQ)
    * [Medical](/G_geHZpiRN6vCEIP9NEgSw)
    * [Engineering](/qQ63xYoEQAm6FMhXpiE69w)
    * [Supply](/FShpccE-RG2xgUTBjUgcxA)
    * [Service](/3StvePVpQSSfLL9gMJ0YDQ)
    * [Misc](/MC2-nnhlQlWb-sHKjW3XKQ)


## :hammer: Useful Tools
* https://ps.ss13.net/ `Paperwork Simulator - Not Compatiable with TG`
* https://affectedarc07.github.io/SS13WebMap/ `SS13 Webmap`


## In-Game Event Ideas and Templates
1. [Command Reports](/R4gia0e5RwaSdpo6MikCOQ)
2. [Map Templates](/lO6XTLUgRwyG1sDKxFj0wA)
3. [Audio Files](/QhDBPkrgTSirFNaYKDBUqg)


## Vending Machine Spawns & Lockers

| Vending | Desc | Path |
| -------- | -------- | -------- |
| Security     | Old Security clothing vendor     | /obj/machinery/vending/wardrobe/sec_wardrobe   |
| LustWish | ERP Vendor | /obj/machinery/vending/dorms|


---
# :memo: Development Guides

[Skyrat Development Guide](https://hackmd.io/uCxdr1EjTwOFc6E7EMD6Qw)
[Away Mission Guide](https://hackmd.io/MSLLa9UKTYyQehuECoAsrQ)

## What is DM

[DM Guide](https://www.byond.com/docs/guide/)
[Reference](http://www.byond.com/docs/ref/#/DM)
[Byond Resource Repo](http://www.byond.com/developer/articles/resources)
[Byond 101](http://www.byond.com/developer/articles/byond101)
[Byond Whitepaper](http://www.byond.com/developer/articles/whitepaper)

## Visual Studio Code

**VSCode + All mission-critical extensions for DM Coding.**

https://code.visualstudio.com/ VSCode, the root tool.

https://marketplace.visualstudio.com/items?itemName=gbasood.byond-dm-language-support DM language support, allow autoupdates

https://marketplace.visualstudio.com/items?itemName=platymuus.dm-langclient DM Language client, also allows compiling. When setting it up you need to go to extension settings, then "choose folder", pick the BYOND folder that has "uninstall.exe" and "bin" folders (the root/base folder). Then, once that's done, you can literally hit ctrl+shift+b and choose the .dme, and compile inside VSCode. It's FAR faster than compiling in Dream Maker.

Screenshot of settings: 
![](https://hackmd.io/_uploads/r1pY7Nosq.png)


**Optional.**
https://marketplace.visualstudio.com/items?itemName=icrawl.discord-vscode Discord rich presence, not needed, but looks pretty

https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory This one is also optional, works for allowing you to gitblame and stuff, but it requires a bit more setup.

https://marketplace.visualstudio.com/items?itemName=Goonstation.goonstation-extpack Goonstation-specific toolpack for newer coders.

**Quick Tips for VSCode**
Highlighting a proc and right clicking, then going to "Definition" or "Implementation" will allow you to easily see/lookup wherever it's used. This is massively helpful over having to manually search it.

* CTRL+F will bring up a search, that also allows a replace line-by-line.
* CTRL+Clicking will also (usually) take you to the definition of a proc/verb/etc. 

## :floppy_disk: Coding Information

1. [Understanding SS13 Code](https://tgstation13.org/wiki/Understanding_SS13_code)
3. [Experienced Code Information](https://tgstation13.org/wiki/SS13_for_experienced_programmers)
4. [Understanding Git](https://www.notion.so/Git-GitHub-61bc81766b2e4c7d9a346db3078ce833)
5. [Project File Structure](/2wJQukBOToy7DahU_v1hyA)
6. [Tools of the Trade](/Mlyl8kCwR4CYLsZ30r6hfw)
    * [StrongDMM ](https://github.com/SpaiR/StrongDMM) `Map Editing Tools`
    * [Visual Studio Code](https://code.visualstudio.com/) `Source-Code Editor`
    * [TGStation Code Docs](https://codedocs.tgstation13.org/) `Code Documentation`

6. [Goonstation Guide](https://hackmd.io/@goonstation/docs/%2F%40goonstation%2Fdev)

## :pushpin: Goonstation Guide(lines)
- [Goonstation Development Guide](/@goonstation/dev)
- [Goonstation Contributor Guidelines](/@goonstation/contribute)
- [Goonstation Code Guide](/@goonstation/code)
- [Goonstation Spriting Guidelines](/@goonstation/sprites)
- [Goonstation Audio Guidelines](/@goonstation/audio)
- [Goonstation Mapping Guidelines](/@goonstation/maps)


## :triangular_ruler: Your First Contribution
* [Guide to Contributing](https://tgstation13.org/wiki/TGMC:Guide_to_contributing) `TGStation`
* [Guide to Contributing 2](https://hackmd.io/@goonstation/docs/%2F%40goonstation%2Fdev) `Goonstation`

1. [Creating Simplemobs](/EVS2E-wYQG2p2-NNsbYMVQ)
2. [Creating Items](/N75bqmOfQEST9p-vOwHN6w)
    3. [Creating Food]
    4. [Creating Reagents]
    5. [Creating Recipe]
    6. [Creating Weapons]
    7. [Creating Armor]
4. [Creating Structures](/M2koTzanQgmVOuKY-wvqbQ)
5. [Creating Clothing](/ZrfegG4NTfCLtEqPf10ujw)
    5. [Creating Outfits](/N840P72KRHepEo3xys0h4Q)
6. [Creating Weapons](/Dj1tyG9CQCeyIFEoX3PBUA)
7. [Creating Carbons](/7i5Of7U3Q-OGqLdqp7TqmQ)
8. 


## :art: Spriting 
[Overview](/L_W6jtkCSBuvhrCdxpd1TA) `Basic Information on spriting`

1. [Beestation Spriting Guide](https://forums-nsv.beestation13.com/t/nsv-spriting-guide/51)
2. [TG Spriting Guide](https://tgstation13.org/wiki/Guide_to_spriting)

### Tools
* Asperite
    * [Website](https://www.aseprite.org/) `Also available on steam`
    * [Free Version](https://github.com/aseprite/aseprite/) `Requires Compiling`
* Photoshop

* Visual Studio Code
* https://marketplace.visualstudio.com/items?itemName=AnturK.dmi-editor

### Templates

![](https://hackmd.io/_uploads/BylBNMoiq.png)
![](https://hackmd.io/_uploads/rkLBEGis9.png)
![](https://hackmd.io/_uploads/B1Ru4fsiq.png)
![](https://hackmd.io/_uploads/HyUKVzoj9.png)
![](https://hackmd.io/_uploads/ByoHEfsjq.png)
![](https://hackmd.io/_uploads/Hk-U4zjj5.png)
![](https://hackmd.io/_uploads/rJBIVzjic.png)

* [Basic 32x32 File](https://drive.google.com/file/d/10uRflcbCgihNL8ZIZFcB-OXidNJFJq1d/view?usp=sharing)
* [Door Template](https://drive.google.com/file/d/1ieqISA6CEJfpOOyqYZ6ifOfHjYsFXxtK/view?usp=sharing)
* [Human Template 1](https://drive.google.com/file/d/1vwgoOtMv24h_q14D6JkgkGkDLrxrZILZ/view?usp=sharing)
    * ![](https://i.imgur.com/9UXtaOB.png)
* [Human Template 2](https://drive.google.com/file/d/1FE_zIRsXqdLgcTYGSYN_j9dKJkSmpchP/view?usp=sharing)
    * ![](https://i.imgur.com/3K631tG.png)
* [Stamps](https://drive.google.com/file/d/1T6kx8_An-5L04CGJw3w2Sn2lyzNXzyHf/view?usp=sharing)
* [Lockers](https://drive.google.com/file/d/13ewxajurjucuySaNWCbEvnlsRIx4IZft/view?usp=sharing)

## Lewd Writing

:::info 
**!!!IMPORTANT!!!**
:::

[JSON Guide](https://hackmd.io/@doc-doc-go/r1eSTd49Y)
```modular_skyrat\modules\interaction_menu\code\interaction_datum.dm```

> THESE MUST BE IN THE .json FILE FORMAT. THESE MUST BE SENT TO GANDALF VIA DMS. THIS IS NOT A GUARANTEE THAT YOUR INTERACTION WILL BE ACCEPTED. YOUR ASS WILL BE GRASS IF YOU PUT A FINISHED LEWD INTERACTION IN development-suggest OR development-code.

Also, remove any comments made by me prior to actually submitting it, like the thing about more vars.
```json
{
    "name": "", !!!THERE ARE MORE VARS IN CODE, SEE interaction_datum.dm
    "description" : "", 
    "usage": "", If lewd, sex
    "category": "", Should likely be in other
    "distance_allowed": 0,
    "message": [ Visible message in radius of distance_allowed
        "",
        "",
    ],
    "user_messages": [ User gets these atop message
        "",
        "",
    ],
    "target_messages": [ Target gets these atop message
        "",
        "",
    ],
    "target_required_parts": [ This is in the format of the ORGAN SLOT. Penis, vagina, anus, etc.
        "penis"
    ],
    "user_required_parts": [ As above.
        "vagina"
    ],
    "user_pleasure": 7, Can be any values. Be reasonable.
    "user_arousal": 5,
    "target_pleasure": 7,
    "target_arousal": 5,
    "lewd": 1, Can only be 1 or 0. 1 = True, 0 = False.
    "orientation": [ For use in an upcoming change to interactions. Straight, lesbian, gay.
        ""
    ],
    "color": "pink"
}
```

## :world_map: Mapping

1. [TG Mapping Guide](https://tgstation13.org/wiki/Guide_to_mapping)
2. [Mapping Reference Collection](https://hackmd.io/@tgstation/ry4-gbKH5#san7890%E2%80%99s-Mapping-Reference-Collection-WIP)
3. [san7890's A-Z Guide to Mapping](https://hackmd.io/QBaz0CaTRhOp7pEnUlXnzQ#Ingredients)

## Other Codebases

* https://github.com/SS13-Source-Archive/Source-List/blob/main/README.md

## Server Compiling and Hosting Tools
* https://github.com/tgstation/tgstation-server `Server management Tool`
* https://github.com/tgstation/tgstation-server-webpanel

## Unsorted Links
* https://tgstation13.org/wiki/Understanding_SS13_code
* https://hackmd.io/@goonstation/docs/%2F%40goonstation%2Fdev#-So-how-do-I-get-started
* https://tgstation13.org/wiki/Guides#Development_and_Contribution_Guides
* https://tgstation13.org/wiki/BYOND
* https://tgstation13.org/wiki/Binary_flags
* https://tgstation13.org/wiki/Guide_to_spriting
* https://tgstation13.org/wiki/MySQL
* https://tgstation13.org/wiki/Understanding_SS13_code
* https://tgstation13.org/wiki/Guide_to_contributing_to_the_game
* https://tgstation13.org/wiki/SS13_for_experienced_programmers
* https://secure.byond.com/docs/ref/#/DM
* https://github.com/Dibasic/SS13PaperworkSimulator
* https://docs.spacestation14.io/en/getting-started/hosting
* https://github.com/space-wizards
* https://docs.spacestation14.io/


# :file_folder: Community Content & Assets

## :pencil2: Character Creation

https://docs.google.com/document/d/1n7QAGa-5yYdsIB_8CqCtpflKdTIuWFlk4K9-s_0hfpc/edit

**Outdated**

```
**Character Template:**
-----------------------------------------------------
***Generic Info***
Name:
Sex:
Age:

Education: [Optional]
Preferred Department(s):
Preferred Occupation(s):

-----------------------------------------------------
***Character Tags***
Personality Tags: [Optional; Keep it SHORT!] Ex: Loud and obnoxious, asexual, enjoys making people feel uncomfortable

Descriptive Tags: [Optional; Keep it SHORT!] Ex: Short and muscular like a dwarf, eyes always narrowed in focus, stark red scales that glimmer

Background Tags: [Optional;  Keep it SHORT!] Ex: Former janitor, college dropout, loves sports

Quirks: [Optional]
-----------------------------------------------------
***Gang Info***
Preferred Role: [Place Here. **No Personal Harems**]

Loyalty: [How loyal are they?] 1-10

Background Tag: [Keep it SHORT!] Ex:  Got into a fistfight with anti-kobold bullies. After being beaten, kobold gang that watched it happen took his wallet. He joined them because he liked their style. **This is an example I used for a kobold gang at Citadel, and it does not pertain to the Skyrat gang.**

-----------------------------------------------------
Reference Artwork: **Please put a disclaimer whether or not you own the art**
```


---

# Quick Fixes


### Fixing a Character without Respawn ( Does not update Manifest )
:::info 
Found sort of a work-around for the random character bug, mainly to fix characters who got mangled by the bug so they dont have to respawn!
:::
> Okay so:
> 1. Ask them to open their character prefs menu, then close it. This unfucks their character prefs and loads it into their client (I think)
> 2. Rightclick on the fucked player and click Mark Object. We'll need this in a sec.
> 3. Open VV on the fucked player, open their Client, then Preferences, then call proc apply_prefs_to on their preferences, 1 argument, the marked datum (the fucked player)
> 4. The proc will basically transform them into what's loaded in their character prefs, which is (supposedly) their real character.
> 5. Fix their ID's name. Ask them to take their ID out of their PDA, then toss both on the ground to make it easier. (or just do it all through VV, you dont really have to ghost them)
> 6. Hope this fixes the manifest cus I havent tested if it does!



### Fixing Character Version 2 - Superlagg

Repost from @Superlagg - Dan Kelly - Roli because I couldn't be bothered finding the file in which we keep this kind of thing:

So found sort of a work-around for the random character bug, mainly to fix characters who got mangled by the bug so they dont have to respawn!

Okay so:
1. Ask them to open their character prefs menu, then close it. This unfucks their character prefs and loads it into their client (I think)
2. Rightclick on the fucked player and click Mark Object. We'll need this in a sec.
3. Open VV on the fucked player, open their Client, then Preferences, then call proc apply_prefs_to on their preferences, 2 arguments, neither of them named. The first one will be the marked datum (the fucked player), the second will be a number, 1.
4. The proc will basically transform them into what's loaded in their character prefs, which is (supposedly) their real character.
5. Fix their ID's name. Ask them to take their ID out of their PDA, then toss both on the ground to make it easier. (or just do it all through VV, you dont really have to ghost them)
6. Hope this fixes the manifest cus I havent tested if it does! (I did, and it doesnt!)

### Create a new Bank Account

> 1) Make an ID card. Any one'll do (or just VV your way into some syndie's ID card)
> 2) Go to registered_account
> 3) (E) -> new datum (NOT new datum type!)
> 4) datum/bank_account (just the top one, dunno about the other two)
> 5) Click the datum (will need to refresh first!)
> 6) Set something sensible in the amount var (I use 4200 cus funny number and it doesnt murder the economy)
> 7) Set something memorable in account_number (I use 800813 cus funny number)
> 8) Tell the syndies the number and to put it into their ID card
> 
> **BONUS STEPS**
> 9) Name the card something cheeky, like a SyndieMart Gift Card
> 10) Give it an equally cheeky description that includes the account number (Welcome to SyndieMart, death to Nanotrassen! On the back is written: 800813)
> 11) Pod it right on top of a syndie and blow their arms off (or somewhere safe if you dont want to be a badmin)


### Fixing the Supply Shuttle
> 
> How to fix the supply shuttle:
> - Go to the MC tab and open Shuttle.
> - Search for cargo, and find the /obj/docking_port/stationary named Cargo Bay. Open it.
> - Follow the port in the dropdown menu if you like, to ensure it's the right one.
> - Search for width, and increase the width and dwidth variables. It doesn't really matter what you put here, just make it bigger
> 
> ![](https://i.imgur.com/JR7QCWe.png)

### Fixing the Supply Shuttle #2

> hey so for people wondering how to fix the cargo shuttle, this is my fix
> 
> 1. go to the MC tab and scroll til you see shuttle, then click that
> 2. search for supply in the vv menu that comes up, find the var 'mobile', and find the supply shuttle docking port in it
> 3. click that and in the vv drop down menu, click follow to make sure it's the right one, if it is, click mark object in the vv menu for it
> 4. if the 'id' variable of the shuttle docking port is anything other than 'supply', change it to suppy, but delete the other shuttles that have an id of 'supply' before you do that with the shuttle manipulator
> 5. go back to the shuttle vv, and then scroll til you see the 'supply' variable, click the (C) to the left of it, and scroll down the list that comes up until you see 'marked datum'
> 6. if more issues arise, you can delete the other supply shuttles with the shuttle manipulator
> 
> or just do the shuttle manip, delete all the supply shuttles and load one in I suppose, but I'm not sure if that actually sets the shuttle you load in to be the supply shuttle 

### How to Stuff a Guardian Parasite in Someone

> Oh no, someone's holoparasprite broke, and they need whoever was in there to be in there again. Well, lets fix it then! 
> 
> 1. Spawn some kind of guardian spawner item, like `/obj/item/guardiancreator`. Any of them should do, though the `/choose` ones, supposedly, let them pick what kind of parasprite to have.
> 
> 2. Tag both the player mob's and the dead ghost mob's datums. Try to have the player in the first slot, and the ghost in the second, just so its easier.
> 
> 3. Tell the player you're about to do this, so they dont accidentally close the window.
> 
> 4. Atom proc call the spawner item. `spawn_guardian`. 2 arguments, neither named. First arg, pick the player mob's datum, second arg, pick the ghost mob's datum.
> 
> 5. That should be it, but be prepared to do it again if they mess something up. Also it might be a while until you see an effect, they have to pick stuff from a menu after all. The ghost will be deleted when everything'd done, so try and keep them in sight.

### How to Make a Rando

> You know how mobs you spawn with the wand are always so... pale? Even the anthromorphs who are supposed to sparkle like the dogs they are look like the pasty nerds who play them!
> 
> So lets fix that! Its an easy fix, too.
> 
> 1. Spawn a species. It should work for anything other than teshari, which don't have their default randomization lists set up *ffs*.
> 
> 2. Tag or mark the datum of the thing you spawned.
> 
> 3. Go into the debug tab, click advanced proc call. This proc is not owned by anything.
> 
> 4. `randomize_human`. One arg, unnamed. Put the tagged mob as the arg.
> 
> 5. Do whatever it is you do with NPC OCs.

### Fixing Broken Lighting

> ----HOW TO FIX BROKEN CLIENT LIGHTING - the better way----
> Requires proccall permission
> 
> For some reason, sometimes people's HUDs are made with broken vars (specifically plane_masters var being empty). Here's the proper way to fix it (just manually adding the lighting master, the old way of fixing, still leaves a bunch of stuff broken for them):
> 
> VV the character or mob of the player who has the issue. Find their hud_used variable, and open the /datum/hud/human it has as value.
> On the /datum/hud/human, call proc Destroy with 0 arguments.
> Go back to the VV of their character, and call proc create_mob_hud with 0 arguments.
> 
> Now tell them to hit F12 a few times until all their buttons are back.

### Fixing Broken Planemaster 
> The 'Fixing broken planemaster lighting (messed up screen lighting)' instructions are outdated btw.
> 
> Bandaid fix that moderators can do:
> 
> VV the mob of the bugged player, find their client var, open it.
> On their client var, find the screen var, and add to it with (E):
> Add a New Custom Typepath (at the bottom of the list), and add a /atom/movable/screen/plane_master/lighting
> 
> this breaks again when they relog, and they'll have weird darkness textures etc but it's better than nothing 


### Fixing Contractor Kit Uplinks
> 
> -----Quick guide to fixing bugged contractor kit uplinks------
> This works for if their problem is that they're stuck on the 'register' screen.
> 
> VV on the person with the issue. Search for mind, open their /datum/mind. Use the dropdown menu to mark this object.
> In their mind datum, search for antag -> open their /datum/antagonist/traitor.
> Search for contractor_hub, use the (C) option to set it to NULL.
> 
> Now tell them to register again. Refresh their traitor datum, there should be a new contractor_hub. Open it.
> You now need to use proccall from the dropdown menu: 'create_contracts'. Give it 1 argument, leave positional blank, then select the MARKED OBJECT: datum/mind option.
> 
> This should fix their contractor tablet. I'm not sure yet if it's possible for it to crash and break again after this, will update this message once I figure that out.

### Adjusting Chaplain Role
> Var > Mind > Search Holy Role > 5 for Chaplain

### Disable Firelock Alarms
> How to disable firelocks alarms.
>
> Duboris: This is a MASS Varedit.  View Variables on Emergency Shutter.
>
> Search for the word sound. 
> 
> At the very bottom you'll see "Soundloop" = /datum/looping_sound. Click that. 
> 
> In that datum you'll see mid_sounds = list (4) 
> 
> Set that whole bitch to Null.

### General Information 
> VV is super easy, just takes some understanding of how BYOND handles variables and code. Basically, whenever it needs to know something that could change, like an item's opacity, the number of things in a stack of things, what thing contains this thing, it checks a variable and uses that as its instructions.

> So, if you set a mob's name var to "butt", any time the game wants to refer to that mob's name var, it'll return "butt". Or an image, if you set it to an image, which it totally will take and breaks surprisingly few things.

> Most vars are descriptive as to what they do, cus TG's pretty anal about that. Good thing too, helps us a lot. But, sometimes, they arent as clear, or you dont know which of these vars does the thing you want it to do. So, best way to find out what does what is to fire up github and search for the atom (Area, Turf, Object, or Mob), skim through the code for whatever makes the most sense, and work from there. 

> Or spawn the thing in the thunderdome and just change vars and fire procs until things make sense. Sounds like a joke until you get to an unreadable code and the only way to get an effect is to mess with it until it either works or crashes the server. Just wait until the headmins arent ERPing so nobody that can fire you gets mad =3

> **Procs** are basically chunks of code that are run when the proc is called. procs are typically owned by something, and can be called by that something, as well as all its children (I think), and typically has its effects pointed at its owner (discounting things like arguments, which are basically just vars but for procs)

> **gib()** is owned by (I think) /mob, which means /mob and any child of it (like /mob/living/carbon/human) can run it. When a mob calls it (usually by something else telling it to call it, like an explosion), it runs a block of code that does a bunch of things that results in gibs.

> **gib()** also has a few args that can be put in. The game wont tell you what they are, so you'll have to go code diving to find what they are, but you can use them to change the way certain parts of the proc behave. Like whether or not the gibbed person should drop a brain.

> Atoms can also be passed as arguments, if the proc is coded to accept them. Usually this means that the thing owning the proc is doing something to or reading something from that atom.

> **randomize_human()** can take two (ish) vars. The first one is the mob you're randomizing, which you can slot in by either tagging the mob's datum (oh yeah, literally everything in BYOND is a datum, ATOMs are a type of datum, something something object oriented programming) or marking the mob, and setting the variable type of the arg to that marked/tagged thing. (Marking and tagging do the same thing, but tagging them is better cus you can have more things tagged).

> Also **randomize_human()** is a global proc, and cant be called by anything, and needs to be called from the advanced proc call command in the dev tab. *shrug

> So, lets take the thing I wrote about fixing random humans! So what you do is you tag the Randoman, open their Preferences datum, call proc apply_prefs_to(), set the first argument to be the tagged Randoman, the second to be a variable 1, and then make it run. This'll make apply_preferences_to() read their preferences, apply those prefs to the mob, and force it all to work properly by passing a 1 through it. 

> Also you can find the preferences datum by opening the mob's VV, going into their client datum, and opening their prefs datum. Also illustrates how variables can hold/refer to more than just numbers and text!

> Easy peasy, and you'll be spinning monkeys in no time! When you're a GA+, that is. Mods cant do this~ 

### Shuttle Revert Bug

Kilo has a bug where it has two arrivals shuttle find the one people are using and delete the other in the Manipulator or it will spam logs trying to land one on the other
After setting one to permadock they will simply spawn on the docked shuttle
Too Find Perma_docked look here.


![](https://hackmd.io/_uploads/HyAPXMjj9.png)

![](https://hackmd.io/_uploads/SytuQfsjc.png)

![](https://hackmd.io/_uploads/BkAdQfsj5.png)

To Find NOTELEPORT look here

![](https://hackmd.io/_uploads/H1FYQGjs5.png)

![](https://hackmd.io/_uploads/HJl9Qfsi9.png)


---

<!---
View the book with "<i class="fa fa-book fa-fw"></i> Book Mode".

Examples
---
- [Book example](/s/book-example)
- [Slide example](/s/slide-example)
- [YAML metadata](/s/yaml-metadata)
- [Features](/s/features)

Themes
---
- [Dark theme](/theme-dark?both)
- [Vertical alignment](/theme-vertical-writing?both)
-->


# Other Books 
- [Event Guide](/9-7SkXH8SlWWNuarOpj5mQ)
- 
###### :label: tags: `Templates` `Book`