Version 2.2.3
9:29 PM 3/28/2026
# Bug Fixes
New version of the packaging tool structures different. So fixed the client to take in account this issue.

Version 2.2.2
7:21 AM 3/27/2026
# Changes
Quick hot fix to address a typo that crashed the client for me, and maybe others.

Version 2.2.1
8:49 PM 3/26/2026
# New Features
Add support for narrator with the client, although it falls back using SAPI version 5 (Microsoft Speech API Version 5) as I have literally no idea how to hook it into Narrator directly.
NVDA supports SAPI5 and OneCore voices, too.

# Bug Fixes
Fixed an issue when loading screen reader stack when it got to WindowEyes.

# Changes
Removed debugs from the system when you've lost internet, for whatever reason and hit enter, or type a command to reconnect.
Added debugs to see if we can find out why an error shows up sometimes when receiving data.


Version 2.2.0
# New Features
*** Client works on MacOS Intel and Apple Silicon. *** - Launcher packages coming soon.
Log searching VIA ALT+S on windows (OPTIONS+S on MacOS) now uses true multi threading.
Created a custom edit dialog handler for edit boxes.
Added a explainer hint to changing your auto login command under manage session
You can now disable timestamps for logs under file menu logs scroll down to find it. It comes on by default.
Added splitter windows with sashes for resizing things like output, and input to your liking. Automatically saves your setting when you let go with the mouce and applys saved settings when you reload the client. Starts 80% for output, 20% for input. Drag the sash around to resize them.
Sounds only updates what it needs to update, not just deleting everything and installing again.
Updater shows completion time, and average download speed.
Added a toggle in window/scrolling or whatever SubMenu that when disabled (is by default) it will scroll the input window to the bottom if you tab or alt+tab in and out. If you enable this, it will leave you where you were in the input window. Think of it like a scroll lock for the input window, until you hit enter on a command or scroll to the bottom manually.
The offset manager when adding an offset, will now print a menu using our new menu system. It will also pull folders into the menu, then when you pick the folder it will put all the sounds in that folder into a menu.
Added so you can select your own VoiceOver voice, rate, volume, and pitch for MacOS users that use VoiceOver. It saves in settings.json. You can do this under Accessibility in the file menu. It will not show the options for windows users.
VoiceOver will now murge multi lines in the queue on one utterence, so that it's faster and you don't notice it spin down the system and bring it back up. This makes speach much faster on MacOS.
VoiceOver custom wrapper now gets interrupted when you start typing, hit ctrl+1/0, and tab in/out of the output window.
Updating a font will say the current size when you pick option 1 to change the size.
Updating a font style will now print the current font style.

# Bug Fixes
Copy and paste from Bunk channel message -- Fixed edit window. If you start a command, scroll up or down away from it, go back to it, add to it, and scroll again it will always keep it in place in the history until you hit enter on it, more commands are sent under, and all the edits you add to it stick even if you scroll away. Nice for typing long emote, scroll down send OOC for typing, go up, start writing more of the emote, scroll down again to look at someone, then go back and finish the emote. No text gets deleted, and all multiple edits to the previously sent, or unset yet command get saved/updated.
Alt+0 now works.
Fixed bug that would sometimes scroll up the input window once to the last command sent, even when you literally didn't do it.
Fixed the new menu system for the client to respect multiple matches.
Tabbing out of the input window into output will now save editing of a line in the command history of the input window. It also does if you're editing something in command history and you ALT+TAB out of the window.
Logs now properly use microseconds, they don't put the timestamp on the next line (they do it on the current line where the message is as they should have always done...)
Searching logs for keywords no longer says unknown time because logging is fixed with inserting timestamps.
MacOS CTRL key detection is a lot better for interrupting speach.
Fixed an issue where speach was super slow on windows if there were massive chunks.

# Changes
Completely from the ground up, redesigned how everything with key commands work. Moved everything out of a hot mess of an on_key_down evt handler, into proper key accelerators.
Fixed it so that page up/down and home/end and ctrl+home/ctrl+end work in the input window, and mimic how it works in the output window.
Rewrote window toggling with the TAB key. This should also help with the stray up arrow a like issue in input.
Try to help more with update announcements when updater is running. Only modifying updater.
Jaws will no longer sometimes read 'Panel' when you navigate into the window or out.
Added proper labeling to panels and roles.
Rewrote everything to do with structure management for path resolving for MacOS.
Rewrote bits about how the windows are created to launch on MacOS.
Rewrote the updater update logic to work on MacOS.
Converted bad code to be faster, and so that the client will run on Intel MacOS and Apple Silicon MacOS natively.
Adjusted stuff with the frames for ANSI to work on MacOS.
Changed code for up/down arrow navigation in the input window to help with MacOS.
Use better word wrap in output window, allowing platforms to pick what they think is best.
Screen readers now auto switch. So going from Jaws to NVDA will auto use NVDA without having to run a shortcut or anything. Removed all the shortcuts to re-initialize them.
Removed the PLATFORM command.
Removed the FMENU command.
Rewrote ANSI support from the ground up to be faster, and gutted and redesigned the entire pipeline to the screen/output window.

# Documentation
Removed an item from ##ToDo in ReadMe.txt

Version 2.1.4
4:09 PM 2/26/2026
# Bug Fixes
The auto reconnection system no longer tries once and times out if internet is kind of back, but router or Modem haven't fully finished rebooting. Looking at you, automatic network reboots...
Improved network validity checking when launching the client. Helps if WIFI card needs to wake up.
Put the sounds folder back in full downloads... Oops.

# New Features
Added a client based menu system to mimic how menus in at least Vast Horizon work. - ! equals first in the menu, @ equals random, $ equals last. Can type integer for option IE, 1 for first, 8 for 8th. Can also do word matching IE cat for cat. It supports fuzzy matching, so should help with some things.

Version 2.1.3
5:32 PM 2/25/2026
# New Features
The updater will no longer run for updating the client (sounds not in cluded) if there are multiple processes running for the client based out of that folder, as it can break it. Only effects few, but...

Version 2.1.2
9:29 AM 2/25/2026
# Packaging
Another try at this!

Version 2.1.1
7:33 AM 2/25/2026
# Packaging
Modified stuff with packaging to help with false posatives with Defender and the stuff.

Version 2.1.0
3:15 PM 2/24/2026
# New Features
The add new session screen now has Vast Horizon as a preset. It shows up as a combo box right after session name. If you have Vast Horizon select, it will pre-fill our port information, host name, and game name of Vast Horizon. You can down arrow to Custom in the Box, if you'd like.

# Bug Fixes
Fixed an issue with auto login with slower networks/machines. We now use CallAfter and CallLater to delay 50MS.
Fixed an issue with auto login. If you type sleep, or anything and disconnect and lets say you type 'L' for look, it would restart connection, and make auto login fail. Now it blocks the command for example 'L' so auto login will still work.
Fixed the login window where add session, remove session is etc to make cancel correctly cancel.
Fixed the OFFSETS command so that cancel correctly cancels.
Fixed cancel everywhere, and added better just OK buttons where needed.
Changing tls port through session manager now sets and doesn't traceback. Oops.
Fixed auto login breaking on other games.
Disabled Vast Horizon based code for the client and negotiation between server and client, if you're not connected to Vast Horizon.
You can use left/right arrow keys in the port fields on the add session screen.

# Packaging
Fixed Nuitka to correctly package .dll files for screen readers as we're using AccessibleOutput2.

# Documentation
The ##ToDo section of ReadMe.txt has been updated.
The ##Bugs section in ReadMe.txt has been removed.
Updated ##Features or whatever in ReadMe.txt

Version 2.0.2
9:19 PM 2/23/2026
# Bug Fixes
Fixed NVDA support. Mainly only happened if you did a fresh download and install.

Version 2.0.1
4:56 PM 2/23/2026
# Bug Fixes
Fixed the session menu for adding not displaying label names to screen readers.
Fixed internet timeout checks for... People with super slow internet. Sorry if you feel called out.

# Documentation
Updated changelog this time... Sorry.

Version 2.0.0
# New Features
When launching the program, a sessions screen will now show up, and show all your sessions followed by add, remove, exit. Exit exits, add moves into a window to add a new session, and remove goes into a menu to remove a session.
The sound engine now re-initializes when you change the buffer size, not forcing you to restart the client. How annoying that was.
Added auto updating. If you've been idle for an hour or longer, and you have it enabled under tools in the file menu, the client will auto update.
Added multiple sessions under one version of the client. Is version correct? Anyways, can use the same .exe for different characters and different log folders.
Added a Manage Session category in the file menu.
Added auto login. Configure under Manage Session. When you turn it on, go back and manage it. The command should be formatted like: connect username password 1 (Where username equals your username, password equals your password, and 1 equals the first option in the menu, which will be to log into your character).
Added auto reconnection, can change it under tools. This is if you lose internet and it comes back.
Added MCP simpleedit for local editing for MOO programmers. Toggle under tools.
Enable or disable a yes/no prompt for local editing confirmation under tools.
Completely gutted how the key press handling is done for input/output window for inserting characters, and handle it... The proper way. This will truly help with other languages and keyboard layouts.
When you're connected to a session, and it updates the client you won't be put back into the session window. It'll just auto connect you to the last connected session.
Redesigned logs entirely  to handle sessions.

# Bug Fixes
Redesigned part of the updater so that it timesout correctly with internet that is slow, flakes out, etc. It will try the update 3 times before just giving up.
The updater now gives better errors when a download fails.
Added progress reports with the updater, and we now download in chunks.
The current buffer value now properly updates after you change it in the filebar/file menu.
If someone makes you read a piece of paper that gives the disconnection message, the client no longer kills the connection. It actually checks the socket.
Went through and redesigned file paths completely to use pathlibs Path as it's cleaner and more cross platform vs the junk I was doing before. Now we know!
Went through and made sure there wasn't multiple imports in each section, as sometimes I didn't import things correctly so just did it multiple ways. Mainly my own modgules.

# Structure
We now compile with Nuitka. Helps with speed of loading, and just isn't crap or something. Guess it does more with C++? I dunno.

Version 1.7.3
# Bug Fixes
The client will now auto maximize the window on launch.
Most systems initialized at 48000 anyways, but the sound system was told to initialize at the wrong freq from forever ago, 44100. Corrected to 48000.

# New Features
Added a sidebar on the right. Can put things like connection status in there, etc. More coming later.

# Adjustments
Adjusted the logo more, and put it into a sidebar on the right. Logo is now in top right.

Version 1.7.2
2:14 PM 2/16/2026
# Adjustments
Adjusted the logo so it's in the top left of the screen and is small.

# Bug Fixes
Rewrote all of how the client initializes the frame to make it faster, how it imports python libraries, and how it starts the connection. This will indicate more than likely a much better time when the client loads. Faster, I hope...

Version 1.7.1
# New Features
Added a way to create a shortcut on your desktop. It follows the name of your session and Vast Horizon. So what you see when you alt tab into the window. Found under Tools in the file menu.
Added our logo to the client. Sighted people, let us know if it looks... Stupid, or you know, doesn't even work.

# Bug Fixes
Rewrote the screen reader detection so that it doesn't try and detect helper functions for them.
Fixed the hot-key not triggering to re-initialize the screen reader. Had to change to Ctrl+Alt+R for reader.
Fixed it so that aliases like UPDATE, DND, CMD, CHANGELOG, OFFSETS etc show in command history when you up arrow.

# Documents
Fixe screen reader check command in commands.txt.

# Structure
Tried to clean up how many folders deep the contents go.

Version 1.7.0
12:28 PM 2/12/2026# New Features
Added an UPDATE command, also under About in File Menu. Allows you to update the client, and sounds, or just client, and just sounds. Must be connected to the game. It keeps things like logs, settings.json, errors.txt and offsets.json in tact.

# Documentation
Added update command to commands.txt.
Removed the client updating stuff from ##ToDo in Readme.txt

# Structure
Moved Readme.txt to the same Docs folder for changelog and commands.

Version 1.6.1
9:03 AM 2/11/2026
# Bug Fixes
Fixed the CONTRIBS, CONTRIBUTORS and CONTRIBUTOR command so it works if you're calling it with the alias.
Changed formatting of the CONTRIBUTORS text slightly.

Version 1.6.0
8:03 AM 2/11/2026
# Bug Fixes
Made all aliases get cleaned up for whitespace, and made sure they work no matter what capitalization you use.

# New Features
Added a CHANGELOG (CL) command to open the changelog in notepad.
Added a CMD command to open the commands file for the client.
Added a proper file menu. Use the ALT key and arrows to explore.
Moved all hot keys into helper functions, but still kept the shortcuts.
Moved all the helper functions into their own .py file. Yay for cleaner!

# Documentation
Added the CMD and CL/CHANGELOG commands to the commands file.
Removed the file menu from ##ToDo in ReadMe.txt.

# Structure
Moved the commands.txt and changelog.txt file into a Docs folder, inside the directory of the Vast Horizon.exe directory.

Version 1.5.0
2:19 PM 2/6/2026
# Bug Fixes
The client no longer crashes if you lose connection and don't get it back while you've already been connected once. It now shows a try again to try again and cancel to stop trying again.
If you try and log into the game with out internet, you now also get a notice and a try again/cancel. Cancel in this case, will close the client out completely.
Fixed decode issues on strings when data is read from the socket.
Fixed a couple other crashes.
Fixed some other multi connection issues.
Tightened up some other code to help with speed down stream.
The sound always plays at what you have volume set to, not what you played it at when it was cached. Example. You laugh with sounds at 30%. Change sounds to 50% and laugh. The sound would play at 30% volume, because it's playing from cache and skipping the resetting of sound.

# New Features
Added a DND command. The commands file explains more.
Added a states module to retrieve properties/holders throughout the entire client.
Added a PORT command to see what port you're connected with. 7979 is normal, while 7799 is TLS/SSL.
Added a CONTRIBUTOR (CONTRIB) command to view who has supplied code, sounds, or any kind of perduction help to the client or soundpack sounds.

# Documentation
Updated commands.txt to call out the DND, PORT and CONTRIBUTORS commands.

# Sounds
Added a sound for when a client update is made. - Sound creator Maya Macsha. - Editor Kat Crapinski.
Added a sound for when a can of Arxlon-7 is empty and you toss it away. Or someone else tosses it away. - Sound creator Greg White. - Editor Kat Crapinski.
Added a sound when you spray someone or yourself with a can of Arxlon-7. - Sound creator Greg White and wife. - Editor Kat Crapinski.
Added a sound for starting Motorcycles, Dune Buggies, ATV's and maybe something else. - Sound creator Maya Macsha. - Editor Kat Crapinski.
Added a sound for the Bunk channel. - Creator/editor Tracy Wade.
Added a sound for when a creature walks into the room with you. - Creator/editor Tracy Wade.
Added a sound for when you connect with new replies to supports.

#Notes
The file menu clearly didn't come with 1.0.3, because we've jumped to 1.5.0. However, it still is in the works. Just note that if you read down passed 1.5.0 it will say it's coming in the next. It didn't, but it will come one day.

Version 1.0.2
10:47 PM 7/13/2025
# Bug Fixes
Fixed the backspace key not deleting all highlighted text.
Fixed an issue where logs didn't roll over and create a new file at midnight and open a new .txt.
 Changed sound buffer size to try and speed up playing sounds.
Rewrote about 5 or 6 major functions to make them much faster.
If you highlight (select) text in the output window, and new text comes in it no longer unhighlights what you selected.
Added much better support for keyboards that aren't English US. If you start typing in the output window, it still might have issues, but maybe not.
The capslock when enabled now properly works when typing.
Fixed an issue where typing a command, and using ALT+1-ALT+0 wouldn't move you to the bottom of the input window after the command was sent again.
Fixed a couple keybindings that would still trigger if a secondary modifier key was down.
Hitting down arrow key in the input window will no longer make you lose your command forever. It now gets saved, hit up arrow and you'll see it. No more crap, emote is gone!
Made text that comes into the output window way, way faster.
Resolved the chunk size issue. Before pushed it up into an insane 64,000 bytes that it could pull from the server, as the buffer wasn't properly saving once full and dis batched in the recv() size call on the socket. Now, partial lines get properly saved and put back together in the next call. This allowed us to lower to 4096 bytes, which vastly improved speed for the entire client.
Fixed columns of text that is properly formatted not alining correct visually.
Sending multiple blank lines in a row, will only keep one. So you won't have a command history in the input window full of 10+ blank lines in a row.
Not sure when this got added, but F6 for toggling speach gags no longer says it's on, when really it's off. Rolls were reversed.
Fixed the smart screen warnings when downloading the client. This involved changing the folder structure. Please look at ReadMe.txt, ##Contents for new information.
Starting the client via the windows search will now allow the sounds to play again. Oops.
Fixed an issue if you lost network connection you couldn't connect again without closing the client and opening it again. This was because of a status bar timer for how long you've been in the session (client has been running) not noticing that network connection was completely lost. Oops.
Sound player fixes: First, stereo supported files really open in stereo now. Oops. Second, removed threading as it could create lag because the media player is already non-blocking. Will revert if life hates us. Third, the cache invalidates after 128 different sounds. So, when sound 129 is played that is different the oldest played sound gets deleted from the cache. This effectivly also fixes a memory leak in the caching where it saved every sound no matter if it's been played before, mirking memory usage in the client.
Fixed it where you had to go into task manager to close the client if the server crashed, or was shut down by a staff member.

# New Features
SHIFT+F2 to toggle hiding blank lines in output window.
Alt+f4 now opens a dialog box asking yes or no if you want to disconnect. Yes is pre-highlighted.
@LAG will calculate your network lag. This is a round trip calculation, not a one-way trip.
CTRL+L will open the current days log file.
CTRL+S will open a text field. Enter the date of a log you want, such as: 4/9/2025 for April 9th, 2025. It will open that file automatically if found. Otherwise, it will tell you one wasn't found.
For this change, please keep in mind you shouldn't be using this for information to be utalized in character. - ALT+S will allow you to type in a search term. Example: Maya - That will do a couple things: 1. Search every log file for that term. Then, group them via the date that the match was found. Put all matches under that date with the full context of the line on it with timestamps at the bottom. Then, it will put it into a .txt, and a .html and open in your systems default web browser. Each date example April 9th, 2025 as a heading and a bullet list of each result for that day under it. You can download the plane-text or html version to your downloads via a link at the top. It will also copy the plane-text version to your clipboard. Note that this can make and will likely make the clients memory footprint go up. It will also take a little time to complete the search.
Added a status bar. Current time in 12 hour, and total time connected to the client from last client restart. - JAWS users you can do JAWS page down.
Alt+T will read the status bar like thing. Current time in 12 hour, and session length for the client (how long it has been open. - Did this because don't know how to do it with NVDA for screen reader users.
CTRL+M checks the current memory (ram footprint) for the client.
Added error tracking found in errors.txt.
Added code into a development validation for tracking memory usage to make sure we're not leaking memory.
Added support for scrolllock. Detection is captured by your default scrolllock keybinding.
Rewrote how settings are loaded and saved, so that we don't have to load every setting, or save every setting when we only need one.
ALT+B will allow you to toggle between the sound buffer size. 128 default, and 512 not. 128 is much heavier than 512. If you notice crackling or stuttering on sounds, change to 512 and restart the client.
If you even want faster output window drawing, hit f7 and turn that on. The screen reader calls will be faster. It will read the entire chunk. However, this makes it sound like it runs together a little. If you don't like this, hit f7 to turn fast reader off. Makes it read/send each line to the screen reader at a time, not the entire chunk of multiple lines. If you're not a screen reader user, it's no problem for you and this change doesn't mean anything to you.
CTRL+F to pull open a find box. Type term, hit enter. Scroll gets move to it. Hit F3 to go to next result, SHIFT+F3 to go to previous.
Alt+F to open a menu to change font size, font style, forground and background coloring.
ALT+N to input a session name. This way tabbing into the window will say the session name, and Vast Horizon. IE, Maya; Vast Horizon
ALT+O to count number of lines in the output window.
Added ansi support. Supports 8-bit, XTerm, and Truecolor 24-bit.
Made sure that ansi tags are stripped off logs.
Did a lot of general cleanup.
We now support the ZDSR screen reader.
The screen reader checker no longer runs every 5 seconds. If you switch from say JAWS to NVDA, once you have NVDA loaded you will need to do CTRL+ALT+S in the client window to initialize with NVDA. This helps the client memory usage.
CTRL+SHIFT+O to see how large the output window is in MB.
CTRL+SHIFT+ALT+C to clear the output window.
We expandtabs into 4 spaces using .expandtabs(4) to replace a tab character with 4 spaces. If you hate this, suggest a toggle.
The client now has support to replace a command that you send with something else. IE aliases. Unlikely that support will ever be given to create your own, but this is framework for something else coming for the client.
Added a command OFFSET OR OFFSETS. Typing that command will let you pick from add, remove, and list. adding you will input the sound file name (please make sure you note capitlization and all) and hit enter. After that, you will inputthe offset. If you want the sound to play 30% louder than default volume, do 30 - If you want it to play 30% lower than default do -30. If you set to -100 it will mute the sound. Doing 100 will play it at full volume. Picking option 2 will let you pick the one to remove, and option 3 will show you all of your current offsets in the output window. There is a new JSON called offsets.json.
Added an exit option to the offset manager.

# Documentation
Fixed an oversight where the ReadMe.txt indicated that in settings.json it saved speech gags across reloads. It doesn't.
Added documentation in ReadMe.txt for settings.json for the commands in output window toggle.
Added documentation in ReadMe.txt and Commands.txt for SHIFT+f1.
Updated Commands.txt and ReadMe.txt with all the new commands, and removed a few known bugs/and features from ReadMe.txt.
Updated ReadMe.txt to note the fact of the new files that could show up, Errors.txt, and the search_results.html, and search_results.txt files after you use the Alt+S command.
Put a new item under #TODO in ReadMe.txt.

# Sounds
Fixed the name of the reload sound to properly only trigger that one when reloading, not the possibility of the end reloading sound.

# Notes
You may see your memory usage go way up over time. This is because the output window stores text for the entire length of the client session. In a later update, you will be able to configure if you want it to be limitless, or if you want it to hold like 500 or so items. Just to help get more stable memory usage. We just thought that we would inform of this reason here, now that you can check memory usage easily without going into task manager.
This is version 1.0.2, however 1.0.3 will have a proper file menu for settings. We know that all of the random key commands are frustrating and hard to remember. Some work has been done to split them up into better written helper functions so you can have the shortcut keys plus the file menu.

Version 1.0.1-Beta
7:52 PM 4/20/2025
# Bug Fixes
Fixed a bug where output could always get dropped and not show up in the output window.
Fixed issues where under some display settings, your output could get lost. Why this was a case, I have zero idea.
Fixed issues where blank lines got stripped from output.
Fixed for programmers where lines of code were stripped from the output window.
Fixed it so that when a sound plays it no longer inserts a blank line into the output history/window.
Fixed an issue that would break sounds from playing if more than 8 played at one time.
Fixed it so that the delete key properly deletes.

# New Features
Tabbing in or out of the input window, always sets focus to the bottom of the output window. Scroll point only gets saved while output window is in focus.
SHIFT+F1 to toggle if commands are logged into the output window. This comes on by default.

Version 1.0.0-Beta
11:20 AM 4/18/2025
First release!
