From 4bb7dc795d672ce709bdb2969e6220933d651f6f Mon Sep 17 00:00:00 2001 From: Osmium Sorcerer Date: Mon, 23 Mar 2026 21:44:04 +0000 Subject: Document fork information in README --- README.md | 126 +++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 47 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 92f91d79..10fe67fd 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,103 @@ -# Attorney Online +# AO2 client (SoF) -![CI build](https://github.com/AttorneyOnline/AO2-Client/actions/workflows/build.yml/badge.svg?event=push) ![license](https://img.shields.io/github/license/AttorneyOnline/AO2-Client?color=blue) ![contributors](https://img.shields.io/github/contributors/AttorneyOnline/AO2-Client)
+Experimental fork of AO2 Client made for Serenade of Flames by Osmium Sorcerer. +Features boring cryptography, new audio engine, up-to-date components, various +small improvements, and opinions. -[Attorney Online](https://aceattorneyonline.com) is a world-renowned courtroom drama simulator that allows you to create and play out cases in an off-the-cuff format. +Adds SoF extensions compatible with the CSDWASASH server. -**[Refer to the docs](https://github.com/AttorneyOnline/docs/blob/master/docs/index.md) for more information.** +Upstream: -## Setting up for development +This branch is frequently rebased against the upstream `master`. -### Prerequisites +My contributions are alternatively available under the MIT license; the project +as a whole remains under GPLv3. -Unix-like systems will expect a C toolchain, installed using eg.: +## Why -Ubuntu: `sudo apt install build-essential` -macOS: `xcode-select --install` +I've started working on this primarily to implement secure connections and +authentication, which became essential as I was writing CSDWASASH, the server. -You may also need openGL libraries to compile QApng, eg: +Authentication on AO typically involves exchanging plaintext passwords over +insecure connections (which are most certainly stored in clear in the server +configs). Instead, I proposed [public-key +authentication](https://git.sof.beauty/sof-auth-model/about). Users have secret +keys that they keep on the client (protected by a passphrase). They only share +their _public keys_ with the server, so authentication never requires sending +secrets or storing them on the server (unlike modpasses). -Ubuntu: `sudo apt install libgl1-mesa-dev` -macOS: `brew install glfw glew` +Next, Secure WebSocket (WSS). The upstream [now supports +WSS](https://github.com/AttorneyOnline/AO2-Client/pull/1114) (thank you, sD), +and it rightfully prioritizes WSS ports for servers that advertise it on +the public list. I rebased my WSS implementation on this idea, additionally +extending support to favorite servers and to the direct connect. The UI now +provides a clear distinction for WSS servers. -### Setup +The audio engine has been rewritten, completely getting rid of BASS in favor of +[miniaudio](https://miniaud.io). BASS was the only proprietary component that +had to be separately bundled as a DLL and linked dynamically, so I replaced it +with the high-quality, simple, public-domain audio library. -This program's main dependency is Qt and the currently recommended version for development is **6.5.3**. See [this link](https://doc.qt.io/qt-6/qt-online-installation.html) -on how to install Qt. You will need to check off the following under "Additional Libraries": -- Qt Image formats -- Qt WebSockets +Finally, protocol experiments. Thanks to WebSocket already providing different +frames for text and binary messages, I can integrate a custom subprotocol using +binary frames while leaving the AO packet distribution in its domain of text +frames. The subprotocol is used to implement the authentication with its own +wire format. This extended protocol can only be used with CSDWASASH and is +incompatible with the vanilla AO. -Under "Developer and Designer tools", you may also want to check off: -- CMake -- Ninja -- If you're on Windows, a toolchain (MinGW) +Other small additions: -Assuming all this is in place, you should be able to run `configure.sh` to generate the necessary build files. -This also compiles the program and shows a cmake command that can be used to recreate the build files. +- Passworded characters. Specifically, a way for the server to tell the client + which characters are passworded. Servers could already use passwords. +- Removed some obsolete features, like unused packets or listing of legacy + server entries (we haven't been able to connect to them for a few years now). +- Strictly use HTTPS to connect to the masterserver. +- Show area list by default instead of music, as it's more important. +- IC message input is cleared as soon as the message is sent instead of checking + the sender of incoming messages. Should prevent accidental spam. -### Content +Limitations: no APNG support, no music flags in the player, extensions only work +on CSDWASASH. -To test key features, you may need the vanilla base content, which is not included in this repository. -You can get it from https://ao-dl.b-cdn.net/vanilla_full_2024_8_2.zip +Further development: -This should be put in `./bin/base` +- AVIF support. +- Proper static linking everywhere. Generally, a sensible build system. +- Removal of legacy cruft (such as the feature list). +- Protocol redesign. -### Formatting +## Building -All code should be formatted according to the `.clang-format` file. -This will be checked by CI and will fail if the code is not formatted correctly. +Upstream build scripts are unused, and instead I use CMake directly with LLVM +toolchain. Note: this process is bad and barely works. -## Running Tests -Running tests requires Catch2 and cmake +Three profiles are provided: Release (optimized), Dev (unoptimized, fast +build), Debug (added debugging information and AddressSanitizer, slow). -```sh -mkdir cbuild && cd cbuild -cmake .. -make test +On Linux, with CMake and Ninja: -# usage: run all tests -./test/test +1. `cmake -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_COMPILER=clang + -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_LINKER_TYPE=LLD -GNinja -Bbuild` +2. `ninja -Cbuild` -# usage: Optionally specify tests and success verbosity -./test/test [bass] --success -``` +For Windows, I [cross-compile via +Clang](https://clang.llvm.org/docs/CrossCompilation.html) with +`x86_64-pc-windows-gnu` target and a custom sysroot (not included in this +repository because it's all dependencies rebuilt from source). -`[noci]` tag is used to disable a test on GitHub actions +Dependencies (CMake will look for them): +- Qt6: Base, WebSockets, ImageFormats, Tools +- [libvorbis](https://xiph.org/vorbis) +- [libopusfile](https://opus-codec.org/docs) +- [libsodium](https://libsodium.org) + +Additional dependencies you might have to provide manually (in `lib`): + +- [Discord RPC](https://github.com/discord/discord-rpc) if you build with + `-DAO_ENABLE_DISCORD_RPC=ON`. +- APNG image plugin (don't bother, it doesn't work unless you build a fully + static plugin). ## Credits @@ -71,12 +105,12 @@ The original Attorney Online client was created by FanatSors. This is an open-source remake of that client created by OmniTroid. -The logo (`logo.png` and `logo.ico`) was designed by Lucas Carbí. The characters depicted in the logo are owned by Capcom. +The logo (`logo.png` and `logo.ico`) was designed by Lucas Carbí. The characters +depicted in the logo are owned by Capcom. ## Copyright The project is licensed under the GPLv3 license. -Code that was released under the MIT/GPLv3 dual-license can be found [here](https://github.com/AttorneyOnline/AO2-Client/tree/last-dual-licensed). Copyright (c) 2016-2018 OmniTroid @@ -86,6 +120,4 @@ Case Café additions copyright (c) 2018 Cerapter Killing Fever Online additions copyright (c) 2019 Crystalwarrior -## Contact - -You can find us in the official Attorney Online Discord server: https://discord.gg/wWvQ3pw +Serenade of Flames additions © 2026 Osmium Sorcerer -- cgit