diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index c49b79dcec..3f0eb27416 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -1,4 +1,4 @@ -using Content.Shared.Input; +using Content.Shared.Input; using Robust.Shared.Input; namespace Content.Client.Input @@ -16,7 +16,7 @@ namespace Content.Client.Input common.AddFunction(ContentKeyFunctions.FocusOOC); common.AddFunction(ContentKeyFunctions.FocusAdminChat); common.AddFunction(ContentKeyFunctions.ExamineEntity); - common.AddFunction(ContentKeyFunctions.OpenTutorial); + common.AddFunction(ContentKeyFunctions.OpenInfo); common.AddFunction(ContentKeyFunctions.TakeScreenshot); common.AddFunction(ContentKeyFunctions.TakeScreenshotNoUI); common.AddFunction(ContentKeyFunctions.Point); diff --git a/Content.Client/UserInterface/EscapeMenu.xaml.cs b/Content.Client/UserInterface/EscapeMenu.xaml.cs index 4c97129773..c6278f4b22 100644 --- a/Content.Client/UserInterface/EscapeMenu.xaml.cs +++ b/Content.Client/UserInterface/EscapeMenu.xaml.cs @@ -1,4 +1,4 @@ -using Robust.Client.AutoGenerated; +using Robust.Client.AutoGenerated; using Robust.Client.Console; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; diff --git a/Content.Client/UserInterface/GameHud.cs b/Content.Client/UserInterface/GameHud.cs index 7d68a7b996..ed16bde928 100644 --- a/Content.Client/UserInterface/GameHud.cs +++ b/Content.Client/UserInterface/GameHud.cs @@ -1,4 +1,4 @@ -using System; +using System; using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; using Content.Shared.GameObjects.Components.Mobs; @@ -83,14 +83,14 @@ namespace Content.Client.UserInterface { private HBoxContainer _topButtonsContainer; private TopButton _buttonEscapeMenu; - private TopButton _buttonTutorial; + private TopButton _buttonInfo; private TopButton _buttonCharacterMenu; private TopButton _buttonInventoryMenu; private TopButton _buttonCraftingMenu; private TopButton _buttonActionsMenu; private TopButton _buttonAdminMenu; private TopButton _buttonSandboxMenu; - private TutorialWindow _tutorialWindow; + private InfoWindow _infoWindow; private TargetingDoll _targetingDoll; private Button _combatModeButton; private VBoxContainer _combatPanelContainer; @@ -141,7 +141,7 @@ namespace Content.Client.UserInterface var craftingTexture = _resourceCache.GetTexture("/Textures/Interface/hammer.svg.192dpi.png"); var actionsTexture = _resourceCache.GetTexture("/Textures/Interface/fist.svg.192dpi.png"); var adminTexture = _resourceCache.GetTexture("/Textures/Interface/gavel.svg.192dpi.png"); - var tutorialTexture = _resourceCache.GetTexture("/Textures/Interface/tutorial.svg.192dpi.png"); + var infoTexture = _resourceCache.GetTexture("/Textures/Interface/info.svg.192dpi.png"); var sandboxTexture = _resourceCache.GetTexture("/Textures/Interface/sandbox.svg.192dpi.png"); _topButtonsContainer = new HBoxContainer @@ -248,24 +248,24 @@ namespace Content.Client.UserInterface _buttonSandboxMenu.OnToggled += args => SandboxButtonToggled?.Invoke(args.Pressed); - // Tutorial - _buttonTutorial = new TopButton(tutorialTexture, ContentKeyFunctions.OpenTutorial, _inputManager) + // Info Window + _buttonInfo = new TopButton(infoTexture, ContentKeyFunctions.OpenInfo, _inputManager) { - ToolTip = Loc.GetString("Open tutorial."), + ToolTip = Loc.GetString("ui-options-function-open-info"), MinSize = topMinSize, StyleClasses = {StyleBase.ButtonOpenLeft, TopButton.StyleClassRedTopButton}, }; - _topButtonsContainer.AddChild(_buttonTutorial); + _topButtonsContainer.AddChild(_buttonInfo); - _buttonTutorial.OnToggled += a => ButtonTutorialOnOnToggled(); + _buttonInfo.OnToggled += a => ButtonInfoOnOnToggled(); - _tutorialWindow = new TutorialWindow(); + _infoWindow = new InfoWindow(); - _tutorialWindow.OnClose += () => _buttonTutorial.Pressed = false; + _infoWindow.OnClose += () => _buttonInfo.Pressed = false; - _inputManager.SetInputCommand(ContentKeyFunctions.OpenTutorial, - InputCmdHandler.FromDelegate(s => ButtonTutorialOnOnToggled())); + _inputManager.SetInputCommand(ContentKeyFunctions.OpenInfo, + InputCmdHandler.FromDelegate(s => ButtonInfoOnOnToggled())); _combatPanelContainer = new VBoxContainer @@ -346,26 +346,26 @@ namespace Content.Client.UserInterface LC.SetGrowVertical(VoteContainer, LC.GrowDirection.End); } - private void ButtonTutorialOnOnToggled() + private void ButtonInfoOnOnToggled() { - _buttonTutorial.StyleClasses.Remove(TopButton.StyleClassRedTopButton); - if (_tutorialWindow.IsOpen) + _buttonInfo.StyleClasses.Remove(TopButton.StyleClassRedTopButton); + if (_infoWindow.IsOpen) { - if (!_tutorialWindow.IsAtFront()) + if (!_infoWindow.IsAtFront()) { - _tutorialWindow.MoveToFront(); - _buttonTutorial.Pressed = true; + _infoWindow.MoveToFront(); + _buttonInfo.Pressed = true; } else { - _tutorialWindow.Close(); - _buttonTutorial.Pressed = false; + _infoWindow.Close(); + _buttonInfo.Pressed = false; } } else { - _tutorialWindow.OpenCentered(); - _buttonTutorial.Pressed = true; + _infoWindow.OpenCentered(); + _buttonInfo.Pressed = true; } } diff --git a/Content.Client/UserInterface/InfoWindow.cs b/Content.Client/UserInterface/InfoWindow.cs new file mode 100644 index 0000000000..819c31989d --- /dev/null +++ b/Content.Client/UserInterface/InfoWindow.cs @@ -0,0 +1,180 @@ +#nullable enable + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Content.Client.UserInterface.Stylesheets; +using Content.Shared; +using Robust.Client.Credits; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Configuration; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Maths; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; + +namespace Content.Client.UserInterface +{ + public sealed class InfoWindow : SS14Window + { + [Dependency] private readonly IResourceCache _resourceManager = default!; + + private OptionsMenu optionsMenu; + + public InfoWindow() + { + IoCManager.InjectDependencies(this); + + optionsMenu = new OptionsMenu(); + + Title = Loc.GetString("ui-info-title"); + + var rootContainer = new TabContainer(); + + var rulesList = new ScrollContainer + { + HScrollEnabled = false + }; + var tutorialList = new ScrollContainer + { + HScrollEnabled = false + }; + + + rootContainer.AddChild(rulesList); + rootContainer.AddChild(tutorialList); + + TabContainer.SetTabTitle(rulesList, Loc.GetString("ui-info-tab-rules")); + TabContainer.SetTabTitle(tutorialList, Loc.GetString("ui-info-tab-tutorial")); + + PopulateRules(rulesList); + PopulateTutorial(tutorialList); + + Contents.AddChild(rootContainer); + + SetSize = (650, 650); + } + + private void PopulateRules(Control rulesList) + { + var vBox = new VBoxContainer + { + Margin = new Thickness(2, 2, 0, 0) + }; + + var first = true; + + void AddSection(string title, string path, bool markup = false) + { + if (!first) + { + vBox.AddChild(new Control { MinSize = (0, 10) }); + } + + first = false; + vBox.AddChild(new Label { StyleClasses = { StyleBase.StyleClassLabelHeading }, Text = title }); + + var label = new RichTextLabel(); + var text = _resourceManager.ContentFileReadAllText($"/Server Info/{path}"); + if (markup) + { + label.SetMessage(FormattedMessage.FromMarkup(text.Trim())); + } + else + { + label.SetMessage(text); + } + + vBox.AddChild(label); + } + + AddSection(Loc.GetString("ui-info-header-rules"), "Rules.txt", true); + + rulesList.AddChild(vBox); + + } + + private void PopulateTutorial(Control tutorialList) + { + Button controlsButton; + + var vBox = new VBoxContainer + { + Margin = new Thickness(2, 2, 0, 0) + }; + + var first = true; + + void AddSection(string title, string path, bool markup = false) + { + if (!first) + { + vBox.AddChild(new Control { MinSize = (0, 10) }); + } + + first = false; + vBox.AddChild(new Label { StyleClasses = { StyleBase.StyleClassLabelHeading }, Text = title }); + + var label = new RichTextLabel(); + var text = _resourceManager.ContentFileReadAllText($"/Server Info/{path}"); + if (markup) + { + label.SetMessage(FormattedMessage.FromMarkup(text.Trim())); + } + else + { + label.SetMessage(text); + } + + vBox.AddChild(label); + } + + AddSection(Loc.GetString("ui-info-header-intro"), "Intro.txt"); + + vBox.AddChild(new HBoxContainer + { + MinSize = (0, 10), + Children = + { + new Label {StyleClasses = { StyleBase.StyleClassLabelHeading }, Text = Loc.GetString("ui-info-header-controls")}, + } + }); + + vBox.AddChild(new HBoxContainer + { + SeparationOverride = 5, + Children = + { + new Label {Text = Loc.GetString("ui-info-text-controls")}, + (controlsButton = new Button {Text = Loc.GetString("ui-info-button-controls")}) + } + }); + + AddSection(Loc.GetString("ui-info-header-gameplay"), "Gameplay.txt", true); + AddSection(Loc.GetString("ui-info-header-sandbox"), "Sandbox.txt", true); + + tutorialList.AddChild(vBox); + + controlsButton.OnPressed += _ => + optionsMenu.OpenCentered(); + } + + private static IEnumerable Lines(TextReader reader) + { + while (true) + { + var line = reader.ReadLine(); + if (line == null) + { + yield break; + } + + yield return line; + } + } + } +} diff --git a/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs b/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs index 9e08374f3a..a44a877618 100644 --- a/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs +++ b/Content.Client/UserInterface/OptionsMenu.KeyRebind.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; using Content.Client.UserInterface.Stylesheets; @@ -148,7 +148,7 @@ namespace Content.Client.UserInterface AddButton(ContentKeyFunctions.OpenContextMenu); AddButton(ContentKeyFunctions.OpenCraftingMenu); AddButton(ContentKeyFunctions.OpenInventoryMenu); - AddButton(ContentKeyFunctions.OpenTutorial); + AddButton(ContentKeyFunctions.OpenInfo); AddButton(ContentKeyFunctions.OpenActionsMenu); AddButton(ContentKeyFunctions.OpenEntitySpawnWindow); AddButton(ContentKeyFunctions.OpenSandboxWindow); diff --git a/Content.Client/UserInterface/TutorialWindow.cs b/Content.Client/UserInterface/TutorialWindow.cs deleted file mode 100644 index ee7e98c01c..0000000000 --- a/Content.Client/UserInterface/TutorialWindow.cs +++ /dev/null @@ -1,193 +0,0 @@ -using Robust.Client.Graphics; -using Robust.Client.Input; -using Robust.Client.ResourceManagement; -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Input; -using Robust.Shared.IoC; -using Robust.Shared.Localization; -using Robust.Shared.Maths; -using Robust.Shared.Utility; -using static Content.Shared.Input.ContentKeyFunctions; -using static Robust.Shared.Input.EngineKeyFunctions; - -namespace Content.Client.UserInterface -{ - public sealed class TutorialWindow : SS14Window - { - private readonly int _headerFontSize = 14; - private VBoxContainer VBox { get; } - - private const string IntroContents = @"Hi and welcome to Space Station 14! This tutorial will assume that you know a bit about how SS13 plays. It's mostly intended to lay out the controls and their differences from SS13."; - private const string GameplayContents = @"Some notes on gameplay. To talk in OOC, prefix your chat message with \[ or /ooc. Death is currently show as a black circle around the player. You can respawn via the respawn button in the sandbox menu. Instead of intents, we have ""combat mode"". Check controls above for its keybind. You can't attack anybody with it off, so no more hitting yourself with your own crowbar."; - private const string FeedbackContents = @"If you have any feedback, questions, bug reports, etc..., do not be afraid to tell us! You can ask on Discord or heck, just write it in OOC! We'll catch it."; - private const string SandboxSpawnerContents = @"[color=#ffffff]Entitiy spawn panel options:[/color] -[color=#a4885c]Default[/color] spawns small entities like mugs without aligning them to anything, while aligning block entities like walls to the grid. -[color=#a4885c]PlaceFree[/color] spawns all entities without aligning them. -[color=#a4885c]PlaceNearby[/color] limits the spawn radius to around 2 tiles. -[color=#a4885c]SnapgridCenter[/color] aligns the entity to the middle of the tile. -[color=#a4885c]SnapgridBorder[/color] aligns the entity to the border of the tile. -[color=#ffffff]Grid aligned options:[/color] -[color=#a4885c]AlignSimilar[/color] snaps the entity to similar entities. Currently broken. -[color=#a4885c]AlignTileAny[/color] aligns the entity to the grid. -[color=#a4885c]AlignTileEmpty[/color] target tile must be empty -[color=#a4885c]AlignTileNonDense[/color] no colliders allowed in the target tile. -[color=#a4885c]AlignTileDense[/color] colliders must be in the target tile. -[color=#a4885c]AlignWall[/color] snaps to vertical halftiles. -[color=#a4885c]AlignWallProper[/color] snaps the entity to the middle of the tile edges"; - - public TutorialWindow() - { - MinSize = SetSize = (520, 580); - Title = "The Tutorial!"; - - //Get section header font - var cache = IoCManager.Resolve(); - var inputManager = IoCManager.Resolve(); - Font headerFont = new VectorFont(cache.GetResource("/Fonts/NotoSans/NotoSans-Regular.ttf"), _headerFontSize); - - var scrollContainer = new ScrollContainer(); - scrollContainer.AddChild(VBox = new VBoxContainer()); - Contents.AddChild(scrollContainer); - - //Intro - VBox.AddChild(new Label{FontOverride = headerFont, Text = "Intro"}); - AddFormattedText(IntroContents); - - string Key(BoundKeyFunction func) - { - return FormattedMessage.EscapeText(inputManager.GetKeyFunctionButtonString(func)); - } - - //Controls - VBox.AddChild(new Label{FontOverride = headerFont, Text = "\nControls"}); - - // Moved this down here so that Rider shows which args correspond to which format spot. - AddFormattedText(Loc.GetString(@"Movement: [color=#a4885c]{0} {1} {2} {3}[/color] -Switch hands: [color=#a4885c]{4}[/color] -Use held item: [color=#a4885c]{5}[/color] -Drop held item: [color=#a4885c]{6}[/color] -Smart equip from backpack: [color=#a4885c]{24}[/color] -Smart equip from belt: [color=#a4885c]{25}[/color] -Open inventory: [color=#a4885c]{7}[/color] -Open character window: [color=#a4885c]{8}[/color] -Open crafting window: [color=#a4885c]{9}[/color] -Open action menu: [color=#a4885c]{33}[/color] -Focus chat: [color=#a4885c]{10}[/color] -Focus OOC: [color=#a4885c]{26}[/color] -Focus Admin Chat: [color=#a4885c]{27}[/color] -Use hand/object in hand: [color=#a4885c]{22}[/color] -Do wide attack: [color=#a4885c]{23}[/color] -Use targeted entity: [color=#a4885c]{11}[/color] -Throw held item: [color=#a4885c]{12}[/color] -Pull entity: [color=#a4885c]{30}[/color] -Move pulled entity: [color=#a4885c]{29}[/color] -Stop pulling: [color=#a4885c]{32}[/color] -Examine entity: [color=#a4885c]{13}[/color] -Point somewhere: [color=#a4885c]{28}[/color] -Open entity context menu: [color=#a4885c]{14}[/color] -Toggle combat mode: [color=#a4885c]{15}[/color] -Toggle console: [color=#a4885c]{16}[/color] -Toggle UI: [color=#a4885c]{17}[/color] -Toggle debug overlay: [color=#a4885c]{18}[/color] -Toggle entity spawner: [color=#a4885c]{19}[/color] -Toggle tile spawner: [color=#a4885c]{20}[/color] -Toggle sandbox window: [color=#a4885c]{21}[/color] -Toggle admin menu [color=#a4885c]{31}[/color] -Hotbar slot 1: [color=#a4885c]{34}[/color] -Hotbar slot 2: [color=#a4885c]{35}[/color] -Hotbar slot 3: [color=#a4885c]{36}[/color] -Hotbar slot 4: [color=#a4885c]{37}[/color] -Hotbar slot 5: [color=#a4885c]{38}[/color] -Hotbar slot 6: [color=#a4885c]{39}[/color] -Hotbar slot 7: [color=#a4885c]{40}[/color] -Hotbar slot 8: [color=#a4885c]{41}[/color] -Hotbar slot 9: [color=#a4885c]{42}[/color] -Hotbar slot 0: [color=#a4885c]{43}[/color] -Hotbar Loadout 1: [color=#a4885c]{44}[/color] -Hotbar Loadout 2: [color=#a4885c]{45}[/color] -Hotbar Loadout 3: [color=#a4885c]{46}[/color] -Hotbar Loadout 4: [color=#a4885c]{47}[/color] -Hotbar Loadout 5: [color=#a4885c]{48}[/color] -Hotbar Loadout 6: [color=#a4885c]{49}[/color] -Hotbar Loadout 7: [color=#a4885c]{50}[/color] -Hotbar Loadout 8: [color=#a4885c]{51}[/color] -Hotbar Loadout 9: [color=#a4885c]{52}[/color] - ", - Key(MoveUp), Key(MoveLeft), Key(MoveDown), Key(MoveRight), - Key(SwapHands), - Key(ActivateItemInHand), - Key(Drop), - Key(OpenInventoryMenu), - Key(OpenCharacterMenu), - Key(OpenCraftingMenu), - Key(FocusChat), - Key(ActivateItemInWorld), - Key(ThrowItemInHand), - Key(ExamineEntity), - Key(OpenContextMenu), - Key(ToggleCombatMode), - Key(ShowDebugConsole), - Key(HideUI), - Key(ShowDebugMonitors), - Key(OpenEntitySpawnWindow), - Key(OpenTileSpawnWindow), - Key(OpenSandboxWindow), - Key(Use), - Key(WideAttack), - Key(SmartEquipBackpack), - Key(SmartEquipBelt), - Key(FocusOOC), - Key(FocusAdminChat), - Key(Point), - Key(TryPullObject), - Key(MovePulledObject), - Key(OpenAdminMenu), - Key(ReleasePulledObject), - Key(OpenActionsMenu), - Key(Hotbar1), - Key(Hotbar2), - Key(Hotbar3), - Key(Hotbar4), - Key(Hotbar5), - Key(Hotbar6), - Key(Hotbar7), - Key(Hotbar8), - Key(Hotbar9), - Key(Hotbar0), - Key(Loadout1), - Key(Loadout2), - Key(Loadout3), - Key(Loadout4), - Key(Loadout5), - Key(Loadout6), - Key(Loadout7), - Key(Loadout8), - Key(Loadout9))); - - //Gameplay - VBox.AddChild(new Label { FontOverride = headerFont, Text = "\nGameplay" }); - AddFormattedText(GameplayContents); - - //Gameplay - VBox.AddChild(new Label { FontOverride = headerFont, Text = Loc.GetString("\nSandbox spawner", Key(OpenSandboxWindow)) }); - AddFormattedText(SandboxSpawnerContents); - - //Feedback - VBox.AddChild(new Label { FontOverride = headerFont, Text = "\nFeedback" }); - AddFormattedText(FeedbackContents); - } - - private void AddFormattedText(string text) - { - if(VBox == null) - return; - - var introLabel = new RichTextLabel(); - var introMessage = new FormattedMessage(); - introMessage.AddMarkup(text); - introLabel.SetMessage(introMessage); - VBox.AddChild(introLabel); - } - } -} diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 1d583d05da..c5ab6bd091 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using Robust.Shared.Input; namespace Content.Shared.Input @@ -20,7 +20,7 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction OpenInventoryMenu = "OpenInventoryMenu"; public static readonly BoundKeyFunction SmartEquipBackpack = "SmartEquipBackpack"; public static readonly BoundKeyFunction SmartEquipBelt = "SmartEquipBelt"; - public static readonly BoundKeyFunction OpenTutorial = "OpenTutorial"; + public static readonly BoundKeyFunction OpenInfo = "OpenInfo"; public static readonly BoundKeyFunction SwapHands = "SwapHands"; public static readonly BoundKeyFunction ThrowItemInHand = "ThrowItemInHand"; public static readonly BoundKeyFunction TryPullObject = "TryPullObject"; diff --git a/Resources/Locale/en-US/ui/info.ftl b/Resources/Locale/en-US/ui/info.ftl new file mode 100644 index 0000000000..fccbcdb06c --- /dev/null +++ b/Resources/Locale/en-US/ui/info.ftl @@ -0,0 +1,23 @@ +### Info Window + +## General stuff +ui-info-title = Information +ui-info-tab-rules = Server Rules +ui-info-tab-tutorial = Tutorial + +## Rules tab + +ui-info-header-rules = SS14 Official Server Rules + +## Tutorial tab +ui-info-text-controls = You can review and rebind SS14s controls in the + +ui-info-header-intro = Introduction +ui-info-header-controls = Controls +ui-info-header-gameplay = Gameplay +ui-info-header-sandbox = Sandbox Spawner +ui-info-subheader-entityoptions = Entity spawn panel options: +ui-info-subheader-gridoptions = Grid aligned options: +ui-info-header-feedback = Feedback + +ui-info-button-controls = Options Menu diff --git a/Resources/Locale/en-US/ui/options.ftl b/Resources/Locale/en-US/ui/options.ftl index 8aba96da46..7186d73969 100644 --- a/Resources/Locale/en-US/ui/options.ftl +++ b/Resources/Locale/en-US/ui/options.ftl @@ -79,7 +79,7 @@ ui-options-function-open-character-menu = Open character menu ui-options-function-open-context-menu = Open context menu ui-options-function-open-crafting-menu = Open crafting menu ui-options-function-open-inventory-menu = Open inventory -ui-options-function-open-tutorial = Open tutorial +ui-options-function-open-info = Open server info ui-options-function-open-abilities-menu = Open action menu ui-options-function-open-entity-spawn-window = Open entity spawn menu ui-options-function-open-sandbox-window = Open sandbox menu diff --git a/Resources/Server Info/Gameplay.txt b/Resources/Server Info/Gameplay.txt new file mode 100644 index 0000000000..5e1bf31027 --- /dev/null +++ b/Resources/Server Info/Gameplay.txt @@ -0,0 +1 @@ +Some notes on gameplay. To talk in OOC, prefix your chat message with an [color=#a4885c]open bracket[/color] or [color=#a4885c]"/ooc"[/color]. Death is currently show as a black circle around the player. You can respawn via the respawn button in the sandbox menu. Instead of intents, we have [color=#ff0000]combat mode[/color]. Check controls above for its keybind. You can't attack anybody with it off, so no more hitting yourself with your own crowbar. \ No newline at end of file diff --git a/Resources/Server Info/Intro.txt b/Resources/Server Info/Intro.txt new file mode 100644 index 0000000000..91cb95b2ec --- /dev/null +++ b/Resources/Server Info/Intro.txt @@ -0,0 +1 @@ +Hi and welcome to Space Station 14! This tutorial will assume that you know a bit about how SS13 plays. It's mostly intended to lay out the differences from SS13. \ No newline at end of file diff --git a/Resources/Server Info/Rules.txt b/Resources/Server Info/Rules.txt new file mode 100644 index 0000000000..44ea1a7b20 --- /dev/null +++ b/Resources/Server Info/Rules.txt @@ -0,0 +1,17 @@ +[color=#a4885c]The[/color] [color=#ffd700]Golden[/color] [color=#a4885c]Rule.[/color] Admins can disregard any and all of these rules if they deem it in the best interest of the current round, server, and/or community at large. They will of course be held fully accountable for their actions if they exercise this privilege. + +[color=#a4885c]1.[/color] Don’t be a dick. We’re all here to have fun. Antagonists have leeway here since ruining the round is kind of their job, but try to keep it interesting if you’re antag. + +[color=#a4885c]2.[/color] Erotic Roleplay (ERP) is [color=#ff0000]not allowed under any circumstance[/color]. + +[color=#a4885c]3.[/color] Harassment of other players for OOC/meta reasons is [color=#ff0000]not allowed[/color]. + - Annoying somebody in a round for IC/RP reasons is fine. Doing it consistently across multiple rounds for OOC reasons (“I don’t like this player” AKA metagrudging) to the point where it becomes seriously problematic for the other player(s) is [color=#ff0000]not[/color]. + +[color=#a4885c]4.[/color] Real life hate speech/slurs are not allowed. + - You are [color=#ff0000]NOT allowed[/color] to be racist against skin colors or start shouting the n-word, or similar IRL problems. + - You [color=#00ff00]ARE allowed[/color] to be e.g. speciesist against in-game species (if we ever get any). Keep it interesting RP wise. + - Slurs like lig*** that are closely tied to real life slurs are [color=#ff0000]not allowed[/color]. + +[color=#a4885c]5.[/color] Offensive/bad character names put you at the mercy of administrators, from receiving brain damage to becoming valid to straight up getting banned on the spot depending on how bad they are. + +[color=#a4885c]6.[/color] Knowingly performing activities that can slowdown or crash the server is [color=#ff0000]not allowed[/color]. \ No newline at end of file diff --git a/Resources/Server Info/Sandbox.txt b/Resources/Server Info/Sandbox.txt new file mode 100644 index 0000000000..8aedc7d27a --- /dev/null +++ b/Resources/Server Info/Sandbox.txt @@ -0,0 +1,16 @@ + +[color=#ffffff]Entity spawn panel options[/color] +[color=#a4885c]Default[/color] spawns small entities like mugs without aligning them to anything, while aligning block entities like walls to the grid. +[color=#a4885c]PlaceFree[/color] spawns all entities without aligning them. +[color=#a4885c]PlaceNearby[/color] limits the spawn radius to around 2 tiles. +[color=#a4885c]SnapgridCenter[/color] aligns the entity to the middle of the tile. +[color=#a4885c]SnapgridBorder[/color] aligns the entity to the border of the tile. + +[color=#ffffff]Grid aligned options[/color] +[color=#a4885c]AlignSimilar[/color] snaps the entity to similar entities. Currently broken. +[color=#a4885c]AlignTileAny[/color] aligns the entity to the grid. +[color=#a4885c]AlignTileEmpty[/color] target tile must be empty +[color=#a4885c]AlignTileNonDense[/color] no colliders allowed in the target tile. +[color=#a4885c]AlignTileDense[/color] colliders must be in the target tile. +[color=#a4885c]AlignWall[/color] snaps to vertical halftiles. +[color=#a4885c]AlignWallProper[/color] snaps the entity to the middle of the tile edges \ No newline at end of file diff --git a/Resources/Textures/Interface/tutorial.svg b/Resources/Textures/Interface/info.svg similarity index 100% rename from Resources/Textures/Interface/tutorial.svg rename to Resources/Textures/Interface/info.svg diff --git a/Resources/Textures/Interface/tutorial.svg.192dpi.png b/Resources/Textures/Interface/info.svg.192dpi.png similarity index 100% rename from Resources/Textures/Interface/tutorial.svg.192dpi.png rename to Resources/Textures/Interface/info.svg.192dpi.png diff --git a/Resources/Textures/Interface/tutorial.svg.192dpi.png.yml b/Resources/Textures/Interface/info.svg.192dpi.png.yml similarity index 100% rename from Resources/Textures/Interface/tutorial.svg.192dpi.png.yml rename to Resources/Textures/Interface/info.svg.192dpi.png.yml diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index e5e083a50f..e58876b05f 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -136,7 +136,7 @@ binds: - function: OpenCraftingMenu type: State key: G -- function: OpenTutorial +- function: OpenInfo type: State key: F1 - function: OpenInventoryMenu