Add cb_type ## _is_registered function for GOLDBERG_CALLBACK_INTERNAL
macro to allow external checking of the callback's registration status
with CCallbackMgr.
Lock the buffers when modifying them.
Notify when callers change a set avatar image.
Create a get function for images.
Allow deletion of previously loaded images, and reuse of their ids.
Init callback related objects in Steam_Client before initing anything
else.
Fix missing global_mutex lock in Steam_Client::RegisterCallback() and
Steam_Client::UnregisterCallback().
... and fix the debug messages.
This changes the filenames to be "avatar_*" instead of "profile_*" to
keep things consistent with the proper naming elsewhere.
As we need to add a file chooser to the overlay, we need the backend
functions for it to use.
This commit adds:
Local_Storage::get_parent_directory().
Local_Storage::is_directory().
Local_Storage::get_user_pictures_path().
Local_Storage::get_drive_list().
Posix version of DirectoryExists().
... settings directory.
Also adds some additional related debug logging, and a utility function
for converting between std::vector<image_pixel_t> used by Local_Storage::load_image(),
and std::string used by Settings::add_image().
... changes.
Implements STEAM_CALL_RESULT( AvatarImageLoaded_t ).
Adds support for a sending a STEAM_CALL_RESULT( PersonaStateChange_t ) with the k_EPersonaChangeAvatar flag.
Creates a mapping in Settings to hold the avatar image data.
Also adds additional debug logging to indicate which image handle is
returned for each user / image size.
... hardcoding a path to a font file from the system directory.
Wine doesn't have anything in there, and doing it this way allows
Wine to "just work" without using Winetricks.
Display achievement icons in steam_overlay, and during achievement
notifications.
Add total achievement counts and progress bar to steam_overlay.
Add new global settings for displaying unearned hidden achievements in
the achievement list and displaying achievement descriptions in unlock
notifications. (Both disabled by default.)
For consistency have the CI use the same build path as
the end-user builds.
Use where.exe from wine-10.0.
CI's version is a stub. Use one that actually works, until the CI gets
updated.
Also, fix broken RtlGenRandom by importing ADVAPI32's GetUserNameW(),
and calling GetModuleHandleW() / GetProcAddress() for SystemFunction032().
Instead of trying to use a fake import lib.
Bonus: Can now use the host system's username as the default for the
steam user name instead of "Noob".
("Noob" is still used as the fallback if this call fails, or the host
system's username is invalid.)
Fix list:
- Make cmd not choke on recursive calls to build_env_x*.bat.
- Create build directories and move build output there instead of
polluting the root of the source tree.
- Make proper debug builds with pdb output.
- Make proper x64 builds of lobby_connect, and steamclient_loader. (lobby_connect_x64.exe, and steamclient_loader_x64.exe)
- Rename x86 build of lobby_connect.exe to lobby_connect_x86.exe.
- Rename x86 build of steamclient_loader.exe to steamclient_loader_x86.exe.
- Make proper distrib directories. (I.e. <release,debug>/<build type>/<arch>/<binaries>.)
This creates a new "custom_master_server.txt" file that can be used to pre-seed a master server list.
This also allows for steam apps to manipulate the master server list in memory.
I.e. This implements:
Steam_Masterserver_Updater::AddMasterServer()
Steam_Masterserver_Updater::RemoveMasterServer()
Steam_Masterserver_Updater::GetNumMasterServers()
Steam_Masterserver_Updater::GetMasterServerAddress()
Signed-off-by: redpolline <11156324-redpolline@users.noreply.gitlab.com>
This (along with the existing custom_broadcasts support) allows for users on different read: _routed_ subnets to see and connect to each other's games.
To use this mode:
Build lobby_connect and run it with the "-d" argument.
Create the custom_broadcasts.txt file in the steam_settings folder next to steam_api.dll / steam_api64.dll and put the IP address of the host running lobby_connect in it.
Run games.
Note: This should even work with existing installations, _provided_ that at least one of them creates the custom_broadcasts.txt file as described above.
(This is because existing installations use broadcast packets to establish new connections, forwarding all of their knowledge to each other.
Thus having at least one host on the current subnet configured in this new way turns it into a "proxy" for the other hosts.)
Caveat: This will _NOT_ work if NAT is involved. This is due to the lack of NAT traversal support in the emu.
(I.e. The lobby_connect daemon will get the info from the NAT'ed hosts and forward it to the others, but hosts outside the NAT won't be able to connect.)
Signed-off-by: redpolline <11156324-redpolline@users.noreply.gitlab.com>