diff --git a/src/client/component/branding.cpp b/src/client/component/branding.cpp index ad2ee0d1..fb336251 100644 --- a/src/client/component/branding.cpp +++ b/src/client/component/branding.cpp @@ -7,23 +7,83 @@ #include +#include "utils/string.hpp" + namespace branding { namespace { + std::map connectivity_bits = { + {0x10000000, "???"}, + {0x01000000, "LiveInventory_IsValid"}, + {0x02000000, "LiveStorage_AreDDLsInSync"}, + {0x04000000, "LiveInventory_InitialCODPointsChecked"}, + {0x08000000, "Marketing_HaveMessages"}, + {0x00100000, "LivePublisherVariables_AreVariablesAvailable"}, + {0x00200000, "SaveGame_IsDataReady(controllerIndex, MODE_NETWORK_ONLINE)"}, + {0x00400000, "LPC_IsLPCReady() || !Dvar_GetBool(live_useLPC)"}, + {0x00800000, "LiveAntiCheat_ConsoleDetailsReported"}, + {0x00010000, "Live_Qos_Finished"}, + {0x00080000, "???"}, + {0x00002000, "Live_IsGeoLocationDataRetrieved"}, + {0x00000100, "LiveStorage_DoWeHavePlaylists"}, + {0x00000200, "LiveStorage_ValidateFFOTD"}, + {0x00000010, "LiveStats_Loadouts_Ready(controllerIndex, MODE_NETWORK_ONLINE)"}, + {0x00000040, "g_dwNetStatus == 6"}, + {0x00000080, "LiveStorage_DoWeHaveFFOTD"}, + {0x00000002, "LiveUser_IsUserSignedInToLive"}, + {0x00000004, "Live_IsUserSignedInToDemonware"}, + {0x00000008, "LiveStats_Core_Ready(controllerIndex, MODE_NETWORK_ONLINE)"}, + }; + + std::string GetConnectivityInfo() + { + int bits = 0; + game::Live_GetConnectivityInformation(0, &bits, false); + std::string str = utils::string::va("Bits: %X\n", bits); + + int required_mask = 0x1FF923DE; + for (int i = 0; (1 << i) <= 0x10000000; ++i) + { + auto value = 1 << i; + + bool set = bits & value; + bool req = required_mask & value; + if (!req) continue; + + std::string name = "?"; + + auto entry = connectivity_bits.find(value); + if (entry != connectivity_bits.end()) + { + name = entry->second; + } + + str += utils::string::va("%08X - %d - %s\n", value, (int)set, name.data()); + } + + for (const auto& bit : connectivity_bits) + { + } + + return str; + } + void draw_branding() { constexpr auto x = 4; constexpr auto y = 0; constexpr auto scale = 0.45f; - float color[4] = {0.666f, 0.666f, 0.666f, 0.666f}; + float color[4] = {0.666f, 0.666f, 0.666f, 1.0f}; auto* font = reinterpret_cast(0x141CAC8E0_g)(); if (!font) return; - game::R_AddCmdDrawText("BOIII: " VERSION, 0x7FFFFFFF, font, static_cast(x), + std::string str = "BOIII: " VERSION; + //str += "\n\n" + GetConnectivityInfo(); + game::R_AddCmdDrawText(str.data(), 0x7FFFFFFF, font, static_cast(x), y + static_cast(font[2]) * scale, - scale, scale, 0.0f, color, game::ITEM_TEXTSTYLE_NORMAL); + scale, scale, 0.0f, color, game::ITEM_TEXTSTYLE_MONOSPACESHADOWED); } }