--- title: "Rain's Guide On How To Code" description: "HOW DO I CODE/???/./???>..????" --- # Rain's Guide On How To Code :::warning Space Station 14 is heavily in development, and some systems you may want to touch are extreme oldcode, if you are a new contributor I HIGHLY do not recommend refactoring or touching C# systems, besides, if you just want to add new plushies; you can do that without C#! Refer to [YML and You](#YML-and-You) ::: Welcome to the world of Space Station 14 coding, this is an amateurish guide that you *really* shouldn't refer to but should be good enough to explain the basics. Relative to commit [b73d188e67f7591a6b5985c836dad2370fd252e9](https://github.com/space-wizards/space-station-14/tree/b73d188e67f7591a6b5985c836dad2370fd252e9). Notify `eclips_e#0001` on Discord if outdated. [toc] ## Guide to-do list |thing|what|status| ---|---|---| |Overview|A simple overview explaining how SS14 code works|Todo| |Prototypes|A simple explanation on how prototypes work and how to define them|Todo| |Fluent & Localization|HOW DO LOCALIZE|Todo| |Sprites|RSI, sprites and how to sprite|Todo| |Coder Sprites|What they are and how to not make them|Todo| |ECS In Depth|More indepth explanation for ECS|Todo| |Client, Shared, Server|What are the differences, why are they seperate? Why is my leg cut off?|Todo| |Networking|WOOOOOO NETWORKING!\!\!\!\!\!|Todo| ## Overview So essentially, SS14 is not written in DM but instead in C# and YAML. ## Prototypes Prototypes are what make up most of SS14's codebase (not really) and can be found in the `Resources/Prototypes` directory. Prototypes are defined as `.yml` files and there are multiple types of Prototypes, with `entity` being the most basic. ### YML and You :::warning Skip ahead if you already know the basics of YML. ::: YAML is as simple as peanut jelly and butter. This is some sample YAML syntax. ```yaml= key: value list: - value - value2 - another_list: - "a string" - 10 - 10.23 - type: awesome contains: old code note: "don't open" ``` Think of YAML as JSON but less yucky and more human friendly to write in (YAML have comments, JSON doesn't, and generally looks nicer) ### Entities ## Localization Localization is done in a neat little language called Fluent. ## Networking :::danger This isn't finished and is to be written ::: REAL footage of the client and server interacting: ```sequence Client->Server: I'd like to join! Note right of Client: 300ms client->server Note right of Server: Received message Note right of Server: Doing authentication checks Note right of Server: All valid authentication Server->Client: Sure thing, buddy! ```