sociallydistant/README.md

68 lines
3.9 KiB
Markdown
Raw Permalink Normal View History

2024-06-09 12:33:05 -04:00
# 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.
NPCs, Chat, UI polish, and Spring Cleaning - Fix issue where whitespace doesn't get skipped at the start of parsing the next shell instruction in script parser - Add support for importing chat scripts into Unity - Add dev tools for chat scripts - Add support for shrugging in a chat script - Allow NPCs to send messages through chat scripts - Add support for observing chat branch updates in the UI - Add support for clicking chat branch choices - Hide chat branch list when the message input isn't in focus - Visually polish the Interact menu - Add player typing animation in chat - Fix NPC typing delays - Add support for starting NPC interactions without dev tools - Add support for chat script conditions - Add support for tracking completed NPC interactions - Add support for MissionComplete, InteractionComplete, WorldFlag, and Lifepath interaction conditions - Add support for relationship-based encounter conditions - Add support for witness conditions and skill level conditions - Add support for generating mention links - Add Typer data to channels in World - Add support for typing indicators - Add support for interaction condition policies - Remove script execution time logging - Add better support for world tables with Narrative IDs - Fix handling of drag selection in the Terminal - Optimize desktop layout - Add support for loading content from Asset Bundles. - Move websites and missions to asset bundles - Use AssetBundles to store and load GUI programs - Convert GameManager into a singleton - Convert MailManager into a singleton - Convert MissionManager into a singleton - Cobvert WorldManager to a singleton - Fix ContentManager erroneously unloading asset bundles - Move exploits and payloads to Asset Bundles - Move all Command assets to Asset Bundles - Optimize various UI issues with Terminal - Fix chat auto-scroll not reaching the bottom - Add support for typing-based choices in chat - Add support for new message animations in chat - Cache interaction script syntax trees during game load - Cache mission script ASTs on game load - Fix chat not unsubscribing from backend observables - Add support for loading and saving the world from another thread - Fix major performance issues with desktop login - Polish style of chat UI - Revert support for StaticWidgetList pooling - Fix issue where Unity hangs if importing too complex of a chat script - Add support for generating NPCs via script - Finish NPC generation scripts - Use toggle switches in settings instead of checkboxes - Retexture the Input Field - Add minor tweaks to SectionWidget and window icons - Add various audio effect toggles for later use - Add various UI sounds - Replace typing sound - Add support for loading network assets from Asset Bundles - Add input field border animation - Finish animating Input Fields - Properly theme dropdowns - Add animations to dropdown interactions - Switch from Trixel-Creative/TrixelAudio to our own fork - Port audio code to acidic-audio - Remove all obsolete TrixwelAudioSource objects - Remove all references to TrixelAudioSource in code - Remove all missing script references - Remove old Settings Widgets and Graphic Picker - Change how the game boots - Add support for changing the game's initialization flow via UI - Add various settings for controlling game boot - Add support for case/esac statements in sdsh - Merge ChatImporter with ShellScriptImporter - Allow player to disable the glitch bands effect - Properly theme buttons - Fix glitch bands not applying their settings at game start - Replace missing close button texture with shitty programmer art - Add support for generated default avatars - Improve anti-aliasing of the person in the default avatar - Add support for MSAA - Use new AvatarWidget in all Chat UI - Use new Avatar Widget in main menu
2024-04-30 22:37:25 -04:00
2024-07-21 13:17:57 -04:00
## 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.
NPCs, Chat, UI polish, and Spring Cleaning - Fix issue where whitespace doesn't get skipped at the start of parsing the next shell instruction in script parser - Add support for importing chat scripts into Unity - Add dev tools for chat scripts - Add support for shrugging in a chat script - Allow NPCs to send messages through chat scripts - Add support for observing chat branch updates in the UI - Add support for clicking chat branch choices - Hide chat branch list when the message input isn't in focus - Visually polish the Interact menu - Add player typing animation in chat - Fix NPC typing delays - Add support for starting NPC interactions without dev tools - Add support for chat script conditions - Add support for tracking completed NPC interactions - Add support for MissionComplete, InteractionComplete, WorldFlag, and Lifepath interaction conditions - Add support for relationship-based encounter conditions - Add support for witness conditions and skill level conditions - Add support for generating mention links - Add Typer data to channels in World - Add support for typing indicators - Add support for interaction condition policies - Remove script execution time logging - Add better support for world tables with Narrative IDs - Fix handling of drag selection in the Terminal - Optimize desktop layout - Add support for loading content from Asset Bundles. - Move websites and missions to asset bundles - Use AssetBundles to store and load GUI programs - Convert GameManager into a singleton - Convert MailManager into a singleton - Convert MissionManager into a singleton - Cobvert WorldManager to a singleton - Fix ContentManager erroneously unloading asset bundles - Move exploits and payloads to Asset Bundles - Move all Command assets to Asset Bundles - Optimize various UI issues with Terminal - Fix chat auto-scroll not reaching the bottom - Add support for typing-based choices in chat - Add support for new message animations in chat - Cache interaction script syntax trees during game load - Cache mission script ASTs on game load - Fix chat not unsubscribing from backend observables - Add support for loading and saving the world from another thread - Fix major performance issues with desktop login - Polish style of chat UI - Revert support for StaticWidgetList pooling - Fix issue where Unity hangs if importing too complex of a chat script - Add support for generating NPCs via script - Finish NPC generation scripts - Use toggle switches in settings instead of checkboxes - Retexture the Input Field - Add minor tweaks to SectionWidget and window icons - Add various audio effect toggles for later use - Add various UI sounds - Replace typing sound - Add support for loading network assets from Asset Bundles - Add input field border animation - Finish animating Input Fields - Properly theme dropdowns - Add animations to dropdown interactions - Switch from Trixel-Creative/TrixelAudio to our own fork - Port audio code to acidic-audio - Remove all obsolete TrixwelAudioSource objects - Remove all references to TrixelAudioSource in code - Remove all missing script references - Remove old Settings Widgets and Graphic Picker - Change how the game boots - Add support for changing the game's initialization flow via UI - Add various settings for controlling game boot - Add support for case/esac statements in sdsh - Merge ChatImporter with ShellScriptImporter - Allow player to disable the glitch bands effect - Properly theme buttons - Fix glitch bands not applying their settings at game start - Replace missing close button texture with shitty programmer art - Add support for generated default avatars - Improve anti-aliasing of the person in the default avatar - Add support for MSAA - Use new AvatarWidget in all Chat UI - Use new Avatar Widget in main menu
2024-04-30 22:37:25 -04:00
2024-07-21 13:17:57 -04:00
## Building from source
Building Socially Distant from source is moderately simple.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
### 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.
```bash
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](https://gitlab.acidiclight.dev/monogame).
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
> :warning: **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.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
### 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.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
Depending on your IDE/setup, you may need to run:
2024-06-12 12:39:15 -04:00
```bash
2024-07-21 13:17:57 -04:00
dotnet tool restore
2024-06-12 12:39:15 -04:00
```
2024-07-21 13:17:57 -04:00
in the repo root, and
2024-06-12 12:39:15 -04:00
```bash
2024-07-21 13:17:57 -04:00
dotnet restore
2024-06-12 12:39:15 -04:00
```
2024-07-21 13:17:57 -04:00
in the `src` directory. The first command installs any missing local .NET tools, and the second restores NuGet packages.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
## 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.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
> :asterisk: **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.
2024-06-12 12:39:15 -04:00
2024-07-21 13:17:57 -04:00
## Project structure
2024-06-09 16:11:46 -04:00
2024-07-21 13:17:57 -04:00
### Source code
All the important code lives under `src/`. In there, you will find:
NPCs, Chat, UI polish, and Spring Cleaning - Fix issue where whitespace doesn't get skipped at the start of parsing the next shell instruction in script parser - Add support for importing chat scripts into Unity - Add dev tools for chat scripts - Add support for shrugging in a chat script - Allow NPCs to send messages through chat scripts - Add support for observing chat branch updates in the UI - Add support for clicking chat branch choices - Hide chat branch list when the message input isn't in focus - Visually polish the Interact menu - Add player typing animation in chat - Fix NPC typing delays - Add support for starting NPC interactions without dev tools - Add support for chat script conditions - Add support for tracking completed NPC interactions - Add support for MissionComplete, InteractionComplete, WorldFlag, and Lifepath interaction conditions - Add support for relationship-based encounter conditions - Add support for witness conditions and skill level conditions - Add support for generating mention links - Add Typer data to channels in World - Add support for typing indicators - Add support for interaction condition policies - Remove script execution time logging - Add better support for world tables with Narrative IDs - Fix handling of drag selection in the Terminal - Optimize desktop layout - Add support for loading content from Asset Bundles. - Move websites and missions to asset bundles - Use AssetBundles to store and load GUI programs - Convert GameManager into a singleton - Convert MailManager into a singleton - Convert MissionManager into a singleton - Cobvert WorldManager to a singleton - Fix ContentManager erroneously unloading asset bundles - Move exploits and payloads to Asset Bundles - Move all Command assets to Asset Bundles - Optimize various UI issues with Terminal - Fix chat auto-scroll not reaching the bottom - Add support for typing-based choices in chat - Add support for new message animations in chat - Cache interaction script syntax trees during game load - Cache mission script ASTs on game load - Fix chat not unsubscribing from backend observables - Add support for loading and saving the world from another thread - Fix major performance issues with desktop login - Polish style of chat UI - Revert support for StaticWidgetList pooling - Fix issue where Unity hangs if importing too complex of a chat script - Add support for generating NPCs via script - Finish NPC generation scripts - Use toggle switches in settings instead of checkboxes - Retexture the Input Field - Add minor tweaks to SectionWidget and window icons - Add various audio effect toggles for later use - Add various UI sounds - Replace typing sound - Add support for loading network assets from Asset Bundles - Add input field border animation - Finish animating Input Fields - Properly theme dropdowns - Add animations to dropdown interactions - Switch from Trixel-Creative/TrixelAudio to our own fork - Port audio code to acidic-audio - Remove all obsolete TrixwelAudioSource objects - Remove all references to TrixelAudioSource in code - Remove all missing script references - Remove old Settings Widgets and Graphic Picker - Change how the game boots - Add support for changing the game's initialization flow via UI - Add various settings for controlling game boot - Add support for case/esac statements in sdsh - Merge ChatImporter with ShellScriptImporter - Allow player to disable the glitch bands effect - Properly theme buttons - Fix glitch bands not applying their settings at game start - Replace missing close button texture with shitty programmer art - Add support for generated default avatars - Improve anti-aliasing of the person in the default avatar - Add support for MSAA - Use new AvatarWidget in all Chat UI - Use new Avatar Widget in main menu
2024-04-30 22:37:25 -04:00
2024-07-21 13:17:57 -04:00
- `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.
NPCs, Chat, UI polish, and Spring Cleaning - Fix issue where whitespace doesn't get skipped at the start of parsing the next shell instruction in script parser - Add support for importing chat scripts into Unity - Add dev tools for chat scripts - Add support for shrugging in a chat script - Allow NPCs to send messages through chat scripts - Add support for observing chat branch updates in the UI - Add support for clicking chat branch choices - Hide chat branch list when the message input isn't in focus - Visually polish the Interact menu - Add player typing animation in chat - Fix NPC typing delays - Add support for starting NPC interactions without dev tools - Add support for chat script conditions - Add support for tracking completed NPC interactions - Add support for MissionComplete, InteractionComplete, WorldFlag, and Lifepath interaction conditions - Add support for relationship-based encounter conditions - Add support for witness conditions and skill level conditions - Add support for generating mention links - Add Typer data to channels in World - Add support for typing indicators - Add support for interaction condition policies - Remove script execution time logging - Add better support for world tables with Narrative IDs - Fix handling of drag selection in the Terminal - Optimize desktop layout - Add support for loading content from Asset Bundles. - Move websites and missions to asset bundles - Use AssetBundles to store and load GUI programs - Convert GameManager into a singleton - Convert MailManager into a singleton - Convert MissionManager into a singleton - Cobvert WorldManager to a singleton - Fix ContentManager erroneously unloading asset bundles - Move exploits and payloads to Asset Bundles - Move all Command assets to Asset Bundles - Optimize various UI issues with Terminal - Fix chat auto-scroll not reaching the bottom - Add support for typing-based choices in chat - Add support for new message animations in chat - Cache interaction script syntax trees during game load - Cache mission script ASTs on game load - Fix chat not unsubscribing from backend observables - Add support for loading and saving the world from another thread - Fix major performance issues with desktop login - Polish style of chat UI - Revert support for StaticWidgetList pooling - Fix issue where Unity hangs if importing too complex of a chat script - Add support for generating NPCs via script - Finish NPC generation scripts - Use toggle switches in settings instead of checkboxes - Retexture the Input Field - Add minor tweaks to SectionWidget and window icons - Add various audio effect toggles for later use - Add various UI sounds - Replace typing sound - Add support for loading network assets from Asset Bundles - Add input field border animation - Finish animating Input Fields - Properly theme dropdowns - Add animations to dropdown interactions - Switch from Trixel-Creative/TrixelAudio to our own fork - Port audio code to acidic-audio - Remove all obsolete TrixwelAudioSource objects - Remove all references to TrixelAudioSource in code - Remove all missing script references - Remove old Settings Widgets and Graphic Picker - Change how the game boots - Add support for changing the game's initialization flow via UI - Add various settings for controlling game boot - Add support for case/esac statements in sdsh - Merge ChatImporter with ShellScriptImporter - Allow player to disable the glitch bands effect - Properly theme buttons - Fix glitch bands not applying their settings at game start - Replace missing close button texture with shitty programmer art - Add support for generated default avatars - Improve anti-aliasing of the person in the default avatar - Add support for MSAA - Use new AvatarWidget in all Chat UI - Use new Avatar Widget in main menu
2024-04-30 22:37:25 -04:00
2024-07-21 13:17:57 -04:00
### 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.
NPCs, Chat, UI polish, and Spring Cleaning - Fix issue where whitespace doesn't get skipped at the start of parsing the next shell instruction in script parser - Add support for importing chat scripts into Unity - Add dev tools for chat scripts - Add support for shrugging in a chat script - Allow NPCs to send messages through chat scripts - Add support for observing chat branch updates in the UI - Add support for clicking chat branch choices - Hide chat branch list when the message input isn't in focus - Visually polish the Interact menu - Add player typing animation in chat - Fix NPC typing delays - Add support for starting NPC interactions without dev tools - Add support for chat script conditions - Add support for tracking completed NPC interactions - Add support for MissionComplete, InteractionComplete, WorldFlag, and Lifepath interaction conditions - Add support for relationship-based encounter conditions - Add support for witness conditions and skill level conditions - Add support for generating mention links - Add Typer data to channels in World - Add support for typing indicators - Add support for interaction condition policies - Remove script execution time logging - Add better support for world tables with Narrative IDs - Fix handling of drag selection in the Terminal - Optimize desktop layout - Add support for loading content from Asset Bundles. - Move websites and missions to asset bundles - Use AssetBundles to store and load GUI programs - Convert GameManager into a singleton - Convert MailManager into a singleton - Convert MissionManager into a singleton - Cobvert WorldManager to a singleton - Fix ContentManager erroneously unloading asset bundles - Move exploits and payloads to Asset Bundles - Move all Command assets to Asset Bundles - Optimize various UI issues with Terminal - Fix chat auto-scroll not reaching the bottom - Add support for typing-based choices in chat - Add support for new message animations in chat - Cache interaction script syntax trees during game load - Cache mission script ASTs on game load - Fix chat not unsubscribing from backend observables - Add support for loading and saving the world from another thread - Fix major performance issues with desktop login - Polish style of chat UI - Revert support for StaticWidgetList pooling - Fix issue where Unity hangs if importing too complex of a chat script - Add support for generating NPCs via script - Finish NPC generation scripts - Use toggle switches in settings instead of checkboxes - Retexture the Input Field - Add minor tweaks to SectionWidget and window icons - Add various audio effect toggles for later use - Add various UI sounds - Replace typing sound - Add support for loading network assets from Asset Bundles - Add input field border animation - Finish animating Input Fields - Properly theme dropdowns - Add animations to dropdown interactions - Switch from Trixel-Creative/TrixelAudio to our own fork - Port audio code to acidic-audio - Remove all obsolete TrixwelAudioSource objects - Remove all references to TrixelAudioSource in code - Remove all missing script references - Remove old Settings Widgets and Graphic Picker - Change how the game boots - Add support for changing the game's initialization flow via UI - Add various settings for controlling game boot - Add support for case/esac statements in sdsh - Merge ChatImporter with ShellScriptImporter - Allow player to disable the glitch bands effect - Properly theme buttons - Fix glitch bands not applying their settings at game start - Replace missing close button texture with shitty programmer art - Add support for generated default avatars - Improve anti-aliasing of the person in the default avatar - Add support for MSAA - Use new AvatarWidget in all Chat UI - Use new Avatar Widget in main menu
2024-04-30 22:37:25 -04:00
2024-07-21 13:17:57 -04:00
### 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.