Adds server rules (#3475)

* Initial

* Removes all unneeded stuff

* Rules

* Applied review
This commit is contained in:
Swept
2021-03-03 06:56:52 +00:00
committed by GitHub
parent 57616f6270
commit eeb5cadaa0
17 changed files with 270 additions and 225 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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<string> Lines(TextReader reader)
{
while (true)
{
var line = reader.ReadLine();
if (line == null)
{
yield break;
}
yield return line;
}
}
}
}

View File

@@ -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);

View File

@@ -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<IResourceCache>();
var inputManager = IoCManager.Resolve<IInputManager>();
Font headerFont = new VectorFont(cache.GetResource<FontResource>("/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);
}
}
}

View File

@@ -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";

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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] Dont be a dick. Were 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 youre 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 dont 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].

View File

@@ -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

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -136,7 +136,7 @@ binds:
- function: OpenCraftingMenu
type: State
key: G
- function: OpenTutorial
- function: OpenInfo
type: State
key: F1
- function: OpenInventoryMenu