Up-coming narrative hacking game for PC coming to Steam.
Find a file
Ritchie Frodomar 19c0e6ce2c The Shell Update
* Fix nmap showing all ports as open.

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Expose nmap command to new command API

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Add network mapping support

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Re-implement ping

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Fix NetworkConnection.ConnectToServer not reporting actual connection originator to the game

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Implement ssh

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Reimplement netcat command

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Use new command API for dig command

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Add extremely basic dig command

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Allow LAN nodes to resolve port translations

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Allow sim nodes to return a resolved port when resolving a network address and port.

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Use cancellation in ServerTest and ClientTest to detect disconnects

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Add cancellation to IConsoleDriver.REadKey and IConsoleDriver.ReadLine

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Add support for cancellation of ITextScreen.REadLIne

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Attach a cancellation token to all connections, allowing async methods to be cancelled on disconnect

* Fix improper  cleanup of ServerTest and ClientTest

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Fix stack overflow when tearing down a network connection

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Fix ConsoleLineEditor not setting initial cursor position on first keystroke

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Allow NetCat listener and client to communicate arbitrary data

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Turn connection IDs into connection handles.

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Allow connections to be associated with connection IDs

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Add support for connections on localhost

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Allow devices to create listeners again

* Allow device nodes to be associated with their actual computers

* Remove SimulationThread

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Remove all packet transfer code from network simulation

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Strip network simulation from core game APIs

* Fuck this. I'm rewriting net sim on another branch. Damn deadlocks.

Signed-off-by: Ritchie Frodomar <alkalinethunder@gmail.com>

* Fix compilation errors after rebase

* Fix LineEditor not rendering line after Enter key is pressed, leading to visually dropped keystrokes if console is slow.

* Fix ssh causing server-side console input to de-sync with client-side visuals

* Add support for (extremely slow) ssh connections

* Allow commands using classic argument parsing to ignore new error handling

* Add API for retrieving terminal capabilities

* Add support for searching for actual asterisk characters when shell globbing

* Implement actual file deletion into rm

* Add support for shell globbing

* Add support for glob patterns in sdsh

* Allow any ScriptableCommand to parse arguments using System.CommandLine
2025-01-22 02:10:11 +00:00
.config
Assets
docs
src
test/SociallyDistant.Tests
vendor
.gitignore
.gitlab-ci.yml
career-gitmodules
CONTRIBUTING.md
docfx.json
index.md
LICENSE
mgfxc-wine-setup.sh
nuget.config
README.md
toc.yml

Socially Distant

Socially Distant is an up-coming hacking game following the story of a global ransomware attack disrupting a society forced into cyberspace by the spread of a deadly biological threat to humanity.

Ritchie's Toolbox

This game is made using Ritchie's Toolbox, a defacto custom game engine built on top of a fork of MonoGame. We do not directly use the MonoGame Content Pipeline, instead we use AutoPipeline and some custom MSBuild targets to build the game's content. Most of the time, you shouldn't notice - but if you are adding content to the game, you should never directly interact with or commit the Content.mgcb file as it'll be wiped and overwritten by AutoPipeline.

Building from source

Building Socially Distant from source is moderately simple.

Pre-requisites

On all platforms, you should have the .NET 8 SDK and Steam installed.

You will need to add a NuGet package source for our MonoGame fork, otherwise dotnet will not download the correct version of MonoGame.

dotnet nuget add source -n monogame-socially-distant https://gitlab.acidiclight.dev/api/v4/projects/13/packages/nuget/index.json

You will need to add the source once for every device you build the game on. You can find the source code for our custom MonoGame fork over on its GitLab group.

⚠️ Shaders on non-Windows platforms

If you aren't building the game on Windows, you will run into build errors during shader compilation. This is because MonoGame currently uses the Direct3D shader compiler for initial shader compilation before transpiling to the target platform. Linux users will need to install Wine and run the mgfxc-wine-setup.sh script in the root of the repository, this will set up a Wine prefix with the necessary setup for shader compilation. For macOS users running Apple Silicon, you're on your own.

How to build

  1. Clone this repo, or fork and clone that.
  2. Open the solution file at src/sociallydistant.sln in your .NET IDE
  3. Build and run the SociallyDistant project.

Depending on your IDE/setup, you may need to run:

dotnet tool restore

in the repo root, and

dotnet restore

in the src directory. The first command installs any missing local .NET tools, and the second restores NuGet packages.

We're accepting contributions!

Feel free to submit merge requests to the game. If merged, they will be shipped in the next Steam release of Socially Distant. For more info, see the CONTRIBUTING.md and LICENSE files in the repo root.

*️⃣ **Note

By contributing to the game, you agree to the Developer Certificate of Origin. You acknowledge that you own or otherwise have the permission to submit your contribution under the same license as the game's source code. To acknowledge the DCO, all commits must be signed off.

Project structure

Source code

All the important code lives under src/. In there, you will find:

  • SociallyDistant: This is the main game application.
  • SociallyDistant.Framework: This is the Socially Distant runtime, a library that the game itself and all mods must reference.
  • AcidicGUI: This is the game's UI system, and the small part of Ritchie's Toolbox that actually exists despite not properly being named. This is subject to be moved to its own repo in the future.

Third-party stuff

Some MonoGame extensions, such as IMGUI, are compiled from source as part of the game build. These are all found under the vendor folder.

Game assets

All game assets are (and must be) placed in src/SociallyDistant/Content. This directory is managed by AutoPipeline and some custom MSBuild tasks.

Continuous integration

Currently, CI/CD is set up for the Windows and Linux versions of the game. Windows builds are done on AppVeyor, while Linux builds are built locally on Ritchie's workstation.