aboutsummaryrefslogtreecommitdiff
path: root/src/aoapplication.cpp
AgeCommit message (Collapse)Author
2026-03-30Constrain the lifetime of the demo serverOsmium Sorcerer
Demo server was being deleted and recreated every time the lobby was constructed, so it was always active. This rendered the "are we playing a demo" checks useless as they always assumed we did. Logs didn't work because of it, for example. Construct the demo server only when the user selects demo playback, and destroy it during the destruction of courtroom. Make log_filename based on the application path, so `logs` subdirectory is created relative to the executable rather than the working directory.
2026-03-29Rewrite audio engine: replace BASS with miniaudioOsmium Sorcerer
SFX and blip players largely remain the same. For the music player, we now have to implement network streaming natively, we no longer have a convenient function that did everything for us. I introduced QNetworkRequest to download the stream in memory and signal when it's ready to be decoded and played back. The size is guarded to prevent the client from accidentally downloading terabytes of audio. Delete QFutureWatcher, we no longer need it for concurrency. miniaudio uses a separate audio thread. Network donwloads and communication with the track name display are handled by Qt signals. Also, delete an odd "music.txt" feature. Its purpose was specifying offsets for loops in a text file per track, but it remained obscure and unused in practice. Unsupported: - Large streams, including unbounded ones (radio). We'll need a ring buffer for that, and a mechanism to write to it from the network and feed it to the audio thread. - Effect flags: fade in, fade out, sync pos. Ignored. - Audio device selection.
2024-11-02Remove RC label (#1054)Salanto
2024-10-01Bump version label (#1050)Salanto
2024-09-08Fix evidence not being consistently presentable (#1048)Salanto
* Fixup evidence presentation code, methink * Bump RC, because I can
2024-08-31[Feature] Add support for custom playerlist formatting, show all users when ↵Salanto
authenticated (#1046) * Playerlist QoL * Remove excessive whitespaces * Add placeholder when displayname is unavailable
2024-08-24[Bugfix] Fix slides not applying the X offset during slide position ↵Salanto
calculaiton (#1038) * Make slides correctly respect X offset * Bump to RC4 cause I am cute like that
2024-08-02Send username when connecting (#1031)Salanto
Hack af, but the alternative is breaking compatability on the last mile.
2024-07-31V2.11.0 rc1 fixes (#1029)Salanto
* Use unix timestamp to transmit ban duration * Cleanup compiler warning due to narrowing conversion * Fix preanim not being visible This is apparently not a feature we want from WebAO :^) * Bump to RC2 * Use std::chrono instead * Remove random include and debug call
2024-07-21Attorney Online 2.11 Release Candidate 1 (#1026)Salanto
* Version bump and minor fixes * Remove unecessary headers Thanks QtCreator
2024-07-12Merge pull request #1016 from AttorneyOnline/restore-window-positionLeifa
[Feature] Add support for windows position restore
2024-07-12Removing debug statementsSalanto
2024-07-12Restore position in AOApplicationSalanto
2024-07-12Add playerlist widget element (#996)Salanto
* Commit * Boyfailure code commit * Cooking code spaghetti * Accidental overwrite recursive function call hell * Implemented player list * Add partial moderator widget Sleepy time! Hee-Hoo! * Moderator Dialog - Step 1 - WIP * Appease the clang gods * Clang appeasement policy * *sacrifices goat to clang* * Added player report, reworked implementation, ... * Added player-specific report * Reworked implementation * No longer uses JSON. * Removed preset loader. --------- Co-authored-by: TrickyLeifa <date.epoch@gmail.com> Co-authored-by: Leifa <26681464+TrickyLeifa@users.noreply.github.com>
2024-07-12Harden screen position check against missing monitorsSalanto
2024-07-11Merge branch 'master' into restore-window-positionSalanto
2024-07-11QApplication less! (#1017)Leifa
2024-07-11Add to lobbySalanto
2024-07-07Removed MIDI, removed undocumented (yet supported) formats (#1008)Leifa
* Removed MIDI, removed undocumented (yet supported) formats Resolve #1006 * Adjusted CI for MIDI removal
2024-05-22Complete AOLayer reimplementation, ...TrickyLeifa
* Complete AOLayer reimplementation * Reimplemented sliding as well.
2024-05-17Changed include definitions to reflect third-party statureTrickyLeifa
2024-05-17Lightly reworked `NetworkManager`, ...TrickyLeifa
* Lightly reworked `NetworkManager` * Added new modules to handle various connection types. * TCP * WebSocket * Added general string splitter alias based on Qt version. * Replaced `lobby_constructed` and `courtroom_constructed` * Refactored and partially reimplemented the following classes: * `AOBlipPlayer` * `AOEmotePreview` * `AOMusicPlayer` * `AOSfxPlayer` * `AOTextArea`
2024-05-15Ported to CMake, ...TrickyLeifa
* Ported the project to CMake * Android and Mac support dropped for the time being. * Tests, BASS and Discord-RPC are now options * Restructured and reformated the project. * Merged `include` and `src` * Renamed `resource` to `data` * Renamed various files * External libraries headers are no longer included in `src` * Replaced header guards with #pragma once * Multiple refactors (keywords, headers) * Added Qt6 compatibility * Removed various unused functions and headers * Reworked AOPacket * When content is passed to AOPacket, it should be ensured that the content is already decoded. * Encoding/decoding are now static methods. * Fixed various memory leaks * Removed animation code for AOImage * AOImage is always using static images * Simplified ChatLogPiece
2023-05-312.10.1 Changes (#888)Salanto
* Utilise .ui file to create settings dialog (#858) * Remove config loading from AOApplications Removes most, but not all config functions from AOApplication and moves them into their own class. Not even remotely done here. but holy shit I'm tired. * First steps towards UI file * Fixed your UI layout issue * Leifa bullies me * Set all the setters Reminder : Figure out why username and ooc_name exist. Are they the same? Maybe. Maybe not. Gonna have to look at it and migrate the key. Todo : Cleanup key naming. Most of these are terrible, imprecise or I just don't like them. * Make layout appear proper * Minor option dialog update * Hookup AOOptionsdialogue to Options Getter/setter Not done yet, but parts of the options interactions work again. * More settings menu working * Mostly working settings dialogue Restore default and cancel still need work * Fix asset widget * Tooltips Also removes the commented out tooltip code * Finish Tooltips Move widget implementation to its own folder * Migrate callwords to config.ini Also correct sleep deprived code. * Fix widget translation * Language dropdown changes We might want to look into doing this a bit better. * Remove QSettings from AOApplication Try cleaning up stray references to said object anymore * Fix constructor order to prevent runtime crash * Slightly sort implementation file * Remove unused label declarations from header Fix some comments * Formatting * Fix buttons Also fixes restore settings when a restore to default is aborted. * Raise pair list after courtroom construction (#859) * Don't reset evidence selection (#860) They are defaulted in the header. This SHOULD not affect the client negatively. * Hitting the emergency exit (#861) Don't change the widget state when the ID exceeds the current widget list due to pages being changed while evidence is being edited. * add CI and license badge * add contributors * Handle config.temp after confirmation * Deletes config.temp when the user has confirmed they want to keep the current settings. * Make reset to default destructive Don't worry, we ask first! :) * Fix case of self_offset received without a y offset (#864) caused by typos in #701 it's possible for older clients to send x offsets without a y offset. if you think this case is annoying you can remove it in the next version and handle it server-side instead * Change default settings (#839) * Make default config enable features for most cases except for Continuous Playback due to it introducing performance issues according to tooltip and confirmed in testing * Increase log size to 1000 * Default disable animated themes Co-authored-by: Salanto <62221668+Salanto@users.noreply.github.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> * Make it a singleton? Maybe? I dunno? Ask Longbyte * Commit suggestions * More suggestions Also try fixing a memory leak. Not going to well. * Return to dialog Otherwise we don't have Exec. * Cleanup * Deprecate ooc_name, implement username * Remove ooc_name key and copy its value to default_showname if its empty. * Consistent naming in AOOptionsDialog * Clang format * Don't write the username to the showname * Fix theme dropdown being incorrectly set * Bandaid callword playing every message * Remove unused or duplicate includes * More include removals Removes lobby and courtroom direct includes from the dialog source * Burn baby, burn! * Remove reload_theme function * Remove "Case Alert Supported Message" All servers I tested on master supported it. The text is redundant in operation. Co-authored-by: TrickyLeifa <date.epoch@gmail.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: Crystalwarrior <Varsash@Gmail.com> * Cleanup lobby (#880) * Remove config loading from AOApplications Removes most, but not all config functions from AOApplication and moves them into their own class. Not even remotely done here. but holy shit I'm tired. * First steps towards UI file * Fixed your UI layout issue * Leifa bullies me * Set all the setters Reminder : Figure out why username and ooc_name exist. Are they the same? Maybe. Maybe not. Gonna have to look at it and migrate the key. Todo : Cleanup key naming. Most of these are terrible, imprecise or I just don't like them. * Make layout appear proper * Minor option dialog update * Hookup AOOptionsdialogue to Options Getter/setter Not done yet, but parts of the options interactions work again. * More settings menu working * Mostly working settings dialogue Restore default and cancel still need work * Fix asset widget * Tooltips Also removes the commented out tooltip code * Finish Tooltips Move widget implementation to its own folder * Migrate callwords to config.ini Also correct sleep deprived code. * Fix widget translation * Language dropdown changes We might want to look into doing this a bit better. * Remove QSettings from AOApplication Try cleaning up stray references to said object anymore * Fix constructor order to prevent runtime crash * Slightly sort implementation file * Remove unused label declarations from header Fix some comments * Formatting * Fix buttons Also fixes restore settings when a restore to default is aborted. * Raise pair list after courtroom construction (#859) * Don't reset evidence selection (#860) They are defaulted in the header. This SHOULD not affect the client negatively. * Hitting the emergency exit (#861) Don't change the widget state when the ID exceeds the current widget list due to pages being changed while evidence is being edited. * add CI and license badge * add contributors * Handle config.temp after confirmation * Deletes config.temp when the user has confirmed they want to keep the current settings. * Make reset to default destructive Don't worry, we ask first! :) * Fix case of self_offset received without a y offset (#864) caused by typos in #701 it's possible for older clients to send x offsets without a y offset. if you think this case is annoying you can remove it in the next version and handle it server-side instead * Change default settings (#839) * Make default config enable features for most cases except for Continuous Playback due to it introducing performance issues according to tooltip and confirmed in testing * Increase log size to 1000 * Default disable animated themes Co-authored-by: Salanto <62221668+Salanto@users.noreply.github.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> * Make it a singleton? Maybe? I dunno? Ask Longbyte * Commit suggestions * More suggestions Also try fixing a memory leak. Not going to well. * Return to dialog Otherwise we don't have Exec. * Cleanup * Deprecate ooc_name, implement username * Remove ooc_name key and copy its value to default_showname if its empty. * Consistent naming in AOOptionsDialog * Clang format * Don't write the username to the showname * Fix theme dropdown being incorrectly set * Bandaid callword playing every message * Remove unused or duplicate includes * More include removals Removes lobby and courtroom direct includes from the dialog source * Burn baby, burn! * Remove reload_theme function * Remove "Case Alert Supported Message" All servers I tested on master supported it. The text is redundant in operation. * Create preliminary lobby design Attempts to slightly modernize the aging lobby to a scheme more akin to modern server browsers. * Fix missing header, add necessary search lineedits * More UI changes * Start hooking up new UI elements * Hookup Serverbrowser to new UI frontend Still need to fix the favorites AND implement the NEW demolist * Fixup demo ui and make demoserver functional * More demoserver cleanup * Remove jarring ao_app pointer shenigans Still a bit to do before we can safely remove that pointer, but hey, its something. * *unholy screeches* Tried to untangle the tange of dependencies that is connection behaviour * Rip out loading screen Some servers are not even sending proper values anymore, like vanilla, so why keep it? * Optimise includes, format header Lobby should not even have to know what an AOPacket is, smh * Formatting fixes and turn settings menu opening into a signal * Why does netmanager never emit when the server is connected * Fixup final parts About as well implemented as I can do rn. Missing the load screen, but that was more flair than anything else * Correct start page * demo qol Co-authored-by: TrickyLeifa <date.epoch@gmail.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: Crystalwarrior <Varsash@Gmail.com> * Delete rebase artifact * only set setting codec on qt5 * fix old regex * qlocale include was missing * Add default soundfont value + cleaup stream checks * Remove Case Announcement * Add add_server dialog and move logic to options.h * Add Direction Connection Widget and function * Visual Fluff, don't show direct connection on demo screen * Implement ui-file reload and RCC mounting. * Add edit menu to favorites * Add Server remains active when no server is selected * Hack together window title for courtroom I hate this. * Fix incorrect subtheme location code * Cleanup * Make all charicons appear on first join This entire system needs a rework, but this will do for now. Also slightly improves performance by not making it load the character list 4 times, only 2 now :^) closes #854 * Fix evidence hover selector under Qt5 #closes #890 * Remove options calling itself trough pointer * Fix Android CI (#891) * pro gamer move * remove pregenerated android files * version * install old ass android platform * Revert "remove pregenerated android files" This reverts commit c81a94c6fd337e187af61e9dd706fac5cd51bcc0. * switch to 24 * CharButton - Fix enterEvent override in Qt5 Also mark them as override. Also make the preprocessor if a bit less copypastey. * version bump * Update embeeded lobby ui color sheme Shoutout to Dumb Fuck (That is their real discord name). Co-Authored-By: Crystalwarrior <3470436+Crystalwarrior@users.noreply.github.com> * Add changelog.md loading logic from main mount path * Expand tabbar of optional Tabbar widget * Fix order column being incorrectly sized * missed a space * remove fonts * change margins * fix minimum sizes * Allow theme overwrite of settings menu * Cleanup iterator for subthemes * Allow reload of settings menu Might aswell do them all :shrug: * AO base path (#893) * make get_base_path global and move parts that use base to use it * options uses base * sal moved a bunch of code * fix creating case folder --------- Co-authored-by: stonedDiscord <10584181+stonedDiscord@users.noreply.github.com> * Android 2 10 1 (#894) * ask for file permissions before trying to load a file * create armv7 gitignore * extract all the abis * don't fail if the dir exists * Clear options map before reloading the UI * Fix runtime warning for theme/subtheme combobox Shouldn't do the job of something that the template can do for me. Also fix formatting cause it was busted. Also made the subtheme/theme load code not give me cancer. * Sort dropdown numerically to match explorer preview closes #793 * fuck bass * copy mingw * copy other dll * wrong folder * Account for server subtheme * Replace incorrect subtheme check * Settings, not server * Remove debug * Add compatibility code, suppress compiler warning (#896) lobby.cpp: * Added compatibility code so 2.10.1 can run on Qt versions older than 5.14, such as the version that ships with Ubuntu 20.04 courtroom.cpp: * Used a Q_UNUSED macro on an unused variable to suppress a compiler warning * Resolve Qt6(.5.0) compiler errors * Undo incompetence. * Force theme reload on theme change If a user saves a new theme and does not reload the UI it will cause misplacement of widgets inside of courtroom. This is mitigated by forcing a reload. * make speedlines stretch by default (in *actually* non-stupid way this time) (#901) * Rework default volume settings (#903) * rework volume default settings * remove default volume settings in options dialog * make client remember last volume settings instead * fix options starting tab * Reworked direct connect (#906) Resolve issue #905 Works as advertised. * Set join text when double-click on connected server Good enough. I would handle this a bit smarter and lock based on the connection state of NetworkManager, but NetworkManager sucks and I refuse to fix it this close before 2.10.1 is done. * remove unused m_looping * remove useless underflow check * do not fall from server to favorites * Ci android fix (#899) * pro gamer move * remove pregenerated android files * version * install old ass android platform * Revert "remove pregenerated android files" This reverts commit c81a94c6fd337e187af61e9dd706fac5cd51bcc0. * switch to 24 * use android\src\android\templates instead * deprecate "chat" deskmod (#910) * ignore deskmod when zoom speaking * clean up deskmod a bit * adds an enum for deskmods * deprecates the "chat" deskmood * modifies set_scene since it never rly used the deskmod argument meaningfully * actually use the enums i made lol * fix typo * Add credits for lamdacalculus --------- Co-authored-by: TrickyLeifa <date.epoch@gmail.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: Crystalwarrior <Varsash@Gmail.com> Co-authored-by: Crystalwarrior <3470436+Crystalwarrior@users.noreply.github.com> Co-authored-by: stonedDiscord <10584181+stonedDiscord@users.noreply.github.com> Co-authored-by: segfault <128277930+memsecviolator@users.noreply.github.com> Co-authored-by: lambdcalculus <64238778+lambdcalculus@users.noreply.github.com> Co-authored-by: Leifa♥ <26681464+TrickyLeifa@users.noreply.github.com>
2022-12-28Qt6 (#824)stonedDiscord
* Major cleanup of screenshake code * Add pre-5.10 support for screenshake math * more compat, uglier too * add surprise tool * we don't need inline functions * only run qsrand on old versions * Squash compiler warnings * >= not > please * don't set codec in qt6 * switch to new regex * remove qdesktopwidget (was unused) * make enter event an enter event * forgot header file * rename emote_mod enum as there is an enum of the same name in chat_message * regexp * no more codec * fix warning about emote_mod type * change to new qtconcurrent * misc was unused * fix run * change qtconcurrent for music * codecs came back * make CI run on qt6 too * seperate artifacts * qFormatLogMessage is wonky here * maybe actually use the qt version from matrix * change qt version here as well * even lower * use my own fixed installer * use my own fixed version of qapng * get websockets * minor spelling mistake * yOu nEeD aDdOnS * aaaaaaaaaaaaaaaaaaaaaaaaaaaaa * Revert "maybe actually use the qt version from matrix" This reverts commit 7ab6b1b4c2f1200318d52f325efd2ef46c3fbd6a. * Revert "Revert "maybe actually use the qt version from matrix"" This reverts commit a6f7c5bedf214a1992c15b296edd195f96a9196a. * use jurplels again * Revert "use jurplels again" This reverts commit 5795474bca64590f1479af3ccbf7d8cc57f427e7. * revert CI to master * main not master Co-authored-by: in1tiate <woodward.randall02+github@gmail.com>
2022-08-01Removed unused function.TrickyLeifa
The function removed was meant to provide a prompt before removing the favorite server. I accidentally left it in, removing it will not affect the functionality of the client.
2022-07-31Added server list context menu, ... (#835)Leifa♥
* Added server list context menu, ... Resolve #832, #560 * The demo server listing now always appears at the top for consistency. * Add a context menu to server listing. Only appears during favorite server listing. Requires a valid item under cursor. Cannot be the demo server item. * Add a new UI element: `remove_from_fav` Only appears during favorite server listing. Require a selection to remove. Cannot be the demo server. Uses `removefromfav.png` and `removefromfav_pressed.png` images as textures. * Favorite servers are now loaded whenever the Lobby is created in addition to refresh and server listing switch. * `serverlist.txt` is now renamed to `(deprecated)serverlist.txt` if read from. * Updated comments * Typos
2022-06-06save and load server description in favorites (#783)stonedDiscord
2022-06-06Dual-Stack AO2 Client to handle both TCP and Websocket connections ↵Salanto
seemlessly (#696) * Replace TCP Serversocket with Websocket * Have TCP sockets live harmoniously with WS "like 5 lines" yeah probably lost a bet. * Update .gitlab-ci.yml * hack to fix favorites * Add support for websockets in the favorites list (serverlist.txt) Make "add_favorite_server" remember the socket type * Preserve old serverlist style This will keep new entries compatible with 2.9 and prior clients. Makes parsing the list easier too. * Add lookup table and correct write code to use lowercase * I have no idea what a lookup table is, but this looks close enough * Fix lookup table * Otherwise backend selection behaviour is inverted * clang-tidy had one job * Yet it did not do it. Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> * const p_data * Switch serverlist.txt to an ini format * Fixes an Omni bug where : would split the servername * Utilises internally QSettings properly for low parsing effort and clear structure * Automatically migrates the legacy serverlist.txt to favorite_servers.ini * Pleases my OCD * Replace sample serverlist. Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> Co-authored-by: Alex Noir <Varsash@gmail.com>
2022-05-23Fix messy window title and make it all nice and pretty (#705)Crystalwarrior
2022-03-25Midi music (#614)stonedDiscord
* add bassmidi everywhere but CI * hello CI please don't ban me from github * add lib and open midi files with the lib * overlooked windows CI * yes, overwrite everything * add tracker support * add file formats that bass supports * forgot .mid smh * load all plugins in one function
2022-01-08Fix Qt application version being emptyoldmud0
2021-12-30Merge branch 'master' into feature/http-msoldmud0
# Conflicts: # src/networkmanager.cpp
2021-12-25Change master chat in courtroom to debug logoldmud0
Since the MS chat has been disabled for quite some time now (and we aren't planning on bringing it back since Discord, Guilded etc. have better chat features), I decided to go ahead and change the pane into a debug log to keep it useful and avoid creating a gaping hole in themes. Though, maybe it is worth removing the whole switcher and keeping the debug log hidden away where it can't scare people.
2021-12-18Roll back unintended changesoldmud0
2021-12-18Merge branch 'master' into feature/http-msoldmud0
2021-12-18Qt 5.9 compat; remove dead codeoldmud0
2021-12-11Update slots/signals to Qt5 connection style and eliminate some clazy warningsSalanto
2021-07-29swap out custom UNUSED macro for Q_UNUSEDin1tiate
2021-06-18Set BASS_CONFIG_DEV_DEFAULT to 1 to enable automatic reinitialization of the ↵Rose Witchaven
default device when it is lost (#564) fixes #561
2021-06-13Use new HTTP-based master server clientoldmud0
2021-06-09Merge pull request #554 from AttorneyOnline/feature/mountingoldmud0
Add support for mounting multiple base folders
2021-06-08Move global stylesheet to lobby and courtroomoldmud0
This way, it will not affect the options dialog.
2021-06-06Fix minor memory leak with configinioldmud0
2021-06-05Finish mounting featureoldmud0
To pull this one off, a new class called VPath was created that denotes "virtual" paths that can exist anywhere among the list of mount points. It is functionally identical to QString, except that implicit conversion between QString and VPath is not allowed. This makes it easy to spot errors in path resolution at compile time, since get_real_path must be called to resolve a VPath into an absolute path that can be passed into a Qt function as a QString. Other functions, such as the get_*_suffix functions, also return an absolute path QString for convenience. As for the rest of the functions that return a VPath, you will need to call get_real_path yourself. Finally, a path resolution cache was added to try to avoid blowing up what is already a massive lookup cost for assets. The cache is invalidated when the mount path list is changed. Currently, this cache isn't bounded. Might need to write an LRU cache if issues arise.
2021-05-29Partial: Add mount list to options dialogoldmud0
2021-03-20Add timer packets to demo playback (#494)Crystalwarrior
When the demo skips by some number of seconds, the timer will also skip forward by that duration. Co-authored-by: in1tiate <32779090+in1tiate@users.noreply.github.com> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-02-26set default .css behavior to match established conventionCrystalwarrior
2021-01-19unused macro and update QTime to QElapsedTimer (#417)in1tiate
2021-01-13[2.8.6] Demo Recording/Playback (#337)Crystalwarrior
* initial commit with horrible code dupcliation haha lol Set up elapsedtimer to generate wait# stuff between packets recorded * implement groundwork for internal demo server * add core playback functionality * make it work kinda by including SC packet in demo * Add a file dialog for loading a demo file instead of a hardcoded path * Change /play to > in OOC to begin playback or skip to next element Pop up file dialog box *before* establishing the connection, not after. TODO: * Fix having to load the same file *twice* to be able to connect to the demo server for some reason * Fix the segfault caused by calling the playback() function when there's no remaining data, it's almost like demo_data.isEmpty() is ignored for whatever reason??? * Clear demo data when loading a demo file to prevent stacking demos * Properly disconnect the client when sending the request for file browser fails to obtain a good demo file * Fix append_to_file newlining even if file didn't exist prior to calling this function * Add a very scuffed exception to not log or demo record anything that happens in the Demo playback local server * Reduce invalid file spam by checking for non-logging server better Use file_exists() to be more consistent in append_to_file * Fix the client crashing when receiving loading packets etc. at runtime such as SC, SM, CI etc. (TODO: parity???) Remove useless debug stuff * Preserve newlines for demo packets such as "CT", "MS" etc. * Implement /max_wait, /min_wait for adjusting the maximum and minimum wait in milliseconds between wait packets Add /pause or | shorthand to pause playback Re-add /play and keep > as a shorthand Remove clientside restrictions from sending empty OOC messages and sending OOC messages without a name - these should be serverside. * Empty music list Default the character to Spectator char no matter the selection in CSS * Allow -1 character ID or character ID that does not fit into the local Character Select Screen list to still be parsed corectly, using the character folder in the MS packet as reference. Allow servers with no selectable characters to still be properly loaded Bypass the Character Select Screen when joining a server with no character select screen and automatically become a spectator * Properly handle demo files without SC packet to dictate which chars exist Add a /load command letting you load a demo file without rejoining the demo server (the CS packet will not be properly handled but I cannot think of a single tangible problem this causes lol) Make sure all DEMO CT messages are colored properly * Fix logs bleeding into each other if you disabled logging or you joined a demo server after leaving another * Prevent logging even if log_filename is defined because a user might disable auto logging when running the game * Fix custom shownames not appearing in the IC logs * Set up new logic for max_wait, meaning that dead air being skipped is prioritized with MS (IC chat) packets being used as the anchor. * Better logic for min_wait to only affect important packets (IC Chat) * Fix encoding not being performed on packets that are saved to the .demo file, resulting in characters having something like "#1" in their message breaking that specific message * Fix a weird setup in courtroom.cpp that happened out of the merge and bugged the code Fix aopacket being busted up as well * add missing feature flags to the demoserver * use random port * move writing to the demo file to a function * only listen on localhost Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> * remove copypasta * add a help to the demo server * fix empty demo disconnecting the server * tell the user how to begin Co-authored-by: scatterflower <marisaposs@gameboyprinter.moe> Co-authored-by: stonedDiscord <10584181+stonedDiscord@users.noreply.github.com> Co-authored-by: stonedDiscord <stoned@derpymail.org> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>