aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOsmium Sorcerer <os@sof.beauty>2026-03-23 21:44:04 +0000
committerOsmium Sorcerer <os@sof.beauty>2026-03-30 13:07:11 +0000
commit4bb7dc795d672ce709bdb2969e6220933d651f6f (patch)
tree391693413c8657bb95af44e80de935a0d898ef31
parent4c2ca07ee4c71fae4778b895d17c8e56439a369d (diff)
Document fork information in README
-rw-r--r--README.md126
1 files changed, 79 insertions, 47 deletions
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)<br>
+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: <https://github.com/AttorneyOnline/AO2-Client>
-## 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