<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ao2-client/src/courtroom.cpp, branch master</title>
<subtitle>AO2 client fork</subtitle>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/'/>
<entry>
<title>Add authentication dialog</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T18:55:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=a124f46861d549ddc13485536962e34d80de939a'/>
<id>a124f46861d549ddc13485536962e34d80de939a</id>
<content type='text'>
Introduce start_auth_flow, a function invoked by typing `/auth username`
in OOC. It sends an public-key authentication request to the server,
starting the entire flow.

The flow invoves two dialogs: to select the key, and to enter the
passphrase to unlock the key. For convenience, each successful unlock
also remembers the key for that username on the server, storing this
in `saved_auth.json` (I chose JSON because I wanted it to stay
human-editable; INI would be better, but it suffers from bad platform
quirks in Qt).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Introduce start_auth_flow, a function invoked by typing `/auth username`
in OOC. It sends an public-key authentication request to the server,
starting the entire flow.

The flow invoves two dialogs: to select the key, and to enter the
passphrase to unlock the key. For convenience, each successful unlock
also remembers the key for that username on the server, storing this
in `saved_auth.json` (I chose JSON because I wanted it to stay
human-editable; INI would be better, but it suffers from bad platform
quirks in Qt).
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove IL packet</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:50:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=5541e36f81d5d565f7a205ad1f7db2b2463ff553'/>
<id>5541e36f81d5d565f7a205ad1f7db2b2463ff553</id>
<content type='text'>
IL packet is a relic from pre-IPID days when moderators used it to get
the "IP list" of connected users.

Its function is to display a list of strings in the OOC chat box. That's
it. Not even some obscure feature that can be revived. Everything IL can
do, CT can do (the "OOC message" packet).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
IL packet is a relic from pre-IPID days when moderators used it to get
the "IP list" of connected users.

Its function is to display a list of strings in the OOC chat box. That's
it. Not even some obscure feature that can be revived. Everything IL can
do, CT can do (the "OOC message" packet).
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove clientside /pos command behavior</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:45:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=321eed09a06113e52b29c98d3678cc8841789b05'/>
<id>321eed09a06113e52b29c98d3678cc8841789b05</id>
<content type='text'>
We have SP and JD to precisely handle positions and judge buttons.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We have SP and JD to precisely handle positions and judge buttons.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix warnings and deprecated functions</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:44:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=d4e99dcee4f48bcb34e6f6a38d5bae4fa380c841'/>
<id>d4e99dcee4f48bcb34e6f6a38d5bae4fa380c841</id>
<content type='text'>
- For QCheckBox: stateChanged -&gt; checkStateChanged

- QChar(PREANIM) -&gt; QLatin1Char(PREANIM)

- Unused result on demo_file.open()

- QPointer include was missing from lobby.h

- Missing const and override qualifiers
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- For QCheckBox: stateChanged -&gt; checkStateChanged

- QChar(PREANIM) -&gt; QLatin1Char(PREANIM)

- Unused result on demo_file.open()

- QPointer include was missing from lobby.h

- Missing const and override qualifiers
</pre>
</div>
</content>
</entry>
<entry>
<title>Reset IC message text input on send</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:40:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=7cc36dc9ccad26dad216217f0527c1fe5c1072eb'/>
<id>7cc36dc9ccad26dad216217f0527c1fe5c1072eb</id>
<content type='text'>
Instead of waiting for the incoming message and checking that you've
sent it by comparing character IDs, reset it right away after pressing
Enter.

From the network standpoint, there's no reason to wait and acknowledge
the IC message this way because TCP already ensures reliabile delivery.

Removing this avoids sending duplicate messages during lag spikes. It
also subjectively improves responsiveness.

We lose a bit of convenience. The text box will be cleared even if your
message was never broadcast (due to serverside mute, for example), but
Ctrl+Z fixes that, and that's how OOC chat has always worked.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Instead of waiting for the incoming message and checking that you've
sent it by comparing character IDs, reset it right away after pressing
Enter.

From the network standpoint, there's no reason to wait and acknowledge
the IC message this way because TCP already ensures reliabile delivery.

Removing this avoids sending duplicate messages during lag spikes. It
also subjectively improves responsiveness.

We lose a bit of convenience. The text box will be cleared even if your
message was never broadcast (due to serverside mute, for example), but
Ctrl+Z fixes that, and that's how OOC chat has always worked.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove redundant authentication success message</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:40:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=834d2a370a1ca4c8ca36289ed9e6bd1bc1f69912'/>
<id>834d2a370a1ca4c8ca36289ed9e6bd1bc1f69912</id>
<content type='text'>
Server already gives the response to our authentication atttempt,
there's no need for CLIENT to tell us about the "Disable Modcalls"
button (which is actually labeled "Guard").
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Server already gives the response to our authentication atttempt,
there's no need for CLIENT to tell us about the "Disable Modcalls"
button (which is actually labeled "Guard").
</pre>
</div>
</content>
</entry>
<entry>
<title>Show area list by default instead of music</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:39:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=71ec10c205c756efec92ac5bee8bc9f623efdd60'/>
<id>71ec10c205c756efec92ac5bee8bc9f623efdd60</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow saving character side in update_character</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:38:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=ec3cf52e24ca53cc339bef32bc2288c3b57d52df'/>
<id>ec3cf52e24ca53cc339bef32bc2288c3b57d52df</id>
<content type='text'>
This fixes "Reload theme" button resetting position.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This fixes "Reload theme" button resetting position.
</pre>
</div>
</content>
</entry>
<entry>
<title>Support passworded characters in character list</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:30:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=3b8bc386d316b6e177c814920f21f5ab5d798ee6'/>
<id>3b8bc386d316b6e177c814920f21f5ab5d798ee6</id>
<content type='text'>
This obscure feature has been present for years, from sending passwords
to the server to showing `char_passworded` image over character icons.

Servers could already exploit clients sending `PW` with a password every
time they select a character to implement passworded characters. The
clients had no way of knowing which ones were passworded, however, and
couldn't filter them despite "Passworded" checkbox being here all along.

The approach used by this commit is a hack. During loading, server sends
SC which is a list of characters, each one having name, description, and
evidence. In practice, only names were used. Descriptions were stored in
memory but unused, and evidence was ignored altogether. By adding a
magic value "P" in this "character evidence" field, server can mark
passworded characters without breaking Vanilla compatibility.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This obscure feature has been present for years, from sending passwords
to the server to showing `char_passworded` image over character icons.

Servers could already exploit clients sending `PW` with a password every
time they select a character to implement passworded characters. The
clients had no way of knowing which ones were passworded, however, and
couldn't filter them despite "Passworded" checkbox being here all along.

The approach used by this commit is a hack. During loading, server sends
SC which is a list of characters, each one having name, description, and
evidence. In practice, only names were used. Descriptions were stored in
memory but unused, and evidence was ignored altogether. By adding a
magic value "P" in this "character evidence" field, server can mark
passworded characters without breaking Vanilla compatibility.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stop setting volume on evidence show</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:34:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=39372432b78b3d0980b004903739539e565c0948'/>
<id>39372432b78b3d0980b004903739539e565c0948</id>
<content type='text'>
Presenting evidence took volume as a parameter which it also set. It's
unnecessary as the evidence uses the same SFX player, the volume of
which is controlled by the player with a slider.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Presenting evidence took volume as a parameter which it also set. It's
unnecessary as the evidence uses the same SFX player, the volume of
which is controlled by the player with a slider.
</pre>
</div>
</content>
</entry>
</feed>
