[
  {
    "path": "README.md",
    "content": "# BakkesModSDK\nBakkesMod is a mod for Rocket League initially built as an enhancement for freeplay. Over time it has grown and now it features enhancements such as a dollycam, variance options to the ingame custom trainer, multiplayer game hosting, POV goal replays and much more.\n\nBakkesMod also provides a software development kit/API which interfaces with Rocket League. For now it is mostly used for creating freeplay trainings and replay enhancements (such as analysis tools). The plan is to also extend the SDK so (limited) information can be retrieved from online games, which can be used to for example keep track of advanced statistics during gameplay.\n\nExamples of plugins that are embedded with the mod when it is installed can be found [here](https://github.com/Bakkes/BakkesMod2-Plugins). The dollycam plugin is also open source and can be found [here](https://github.com/Bakkes/DollyCamPlugin2)\n\nTo get started using BakkesMod, simply go to http://bakkesmod.com and download the injector. If you wish to create plugins for the mod follow the steps that are described further down this page.\n\nCurrently the SDK is being extended to make it easier for plugin developers to create their own multiplayer gamemodes/training scenarios. BakkesMod has the ability to host an online game server which other players can connect to. For now only freeplay is supported but support for Team soccar/rumble is being added. Simply type \"host\" in the BakkesMod console to host a game, other players need to type \"connect 127.0.0.1\" to connect to your server (where 127.0.0.1 is your IP of course). In order for this to work you need to have forwarded port 27016 or use an utility such as Hamachi to emulate a LAN environment.\n\n## Getting started\nIn order to create plugins for Rocket League with BakkesMod you need the SDK. By default the SDK will be included with the BakkesMod installation and can be found in %appdata%\\bakkesmod\\bakkesmod\\bakkesmodsdk\\. You could also simply clone this repository as this also contains the full SDK and is often more up to date.\n\n### IDE\nTo get started quickly, check out the [template](https://github.com/Martinii89/BakkesmodPluginTemplate) to automatically generate a project skeleton. In order to load your plugin ingame make sure the generated .dll is placed in the plugins folder of BakkesMod. Next, in Rocket League open the console and type ```plugin load filename``` (without the .dll extension!). To unload your plugin you can use ```plugin unload filename```. Any cvars/notifiers/drawables that are registered when a plugin is loaded are automatically removed when a plugin is unloaded, so you don't have to worry about that!\n\n### Command Line\n\nYou'll still need to have Visual Studio installed for its included compilers.\n\n1. Open `x64 Native Tools Command Prompt for VS 2019`.\n2. Replace the paths to `bakkesmodsdk` below with the correct ones for your system\n   and `plugin.cpp` with the actual name of the plugin.\n\n```powershell\ncl /LD -I bakkesmodsdk/include/ bakkesmodsdk/lib/pluginsdk.lib plugin.cpp\n```\n\n## Help & more info\n\nIf you have any questions feel free to drop by the [BakkesMod programming discord](https://discord.gg/HMptXSzCvU). This discord is also full of many tutorials on how to get started.\n"
  },
  {
    "path": "bakkes_patchplugin.py",
    "content": "\"\"\"Script to hotswap plugin from bakkesmod process.\n\n1. Connects to BakkesMod rcon\n2. Unloads plugin\n3. Replaces DLL file\n4. Loads plugin\n\nTODO: save config?\n\"\"\"\nimport sys, os, shutil, websockets, time\nimport asyncio\n\nbakkesmod_plugin_folder = \"F:/SteamLibrary/steamapps/common/rocketleague/Binaries/Win32/bakkesmod/plugins/\"\nbakkesmod_server = 'ws://127.0.0.1:9002'\nrcon_password = 'password'\nswap_file = \"\"\n\ndef replace_plugin_file():\n\tfilename = os.path.basename(swap_file)\n\tdst_file = bakkesmod_plugin_folder + filename\n\tprint(dst_file)\n\t\n\tif os.path.exists(dst_file):\n\t\tos.remove(dst_file)\n\tshutil.copyfile(swap_file, dst_file)\n\nasync def main_loop():\n\ttry:\n\t\tasync with websockets.connect(bakkesmod_server, timeout=.1) as websocket:\n\t\t\tawait websocket.send('rcon_password ' + rcon_password)\n\t\t\tauth_status = await websocket.recv()\n\t\t\tassert auth_status == 'authyes'\n\n\t\t\tfilename = os.path.basename(swap_file)\n\t\t\tplugin_name = filename[0:filename.index('.')]\n\t\t\tprint(\"Copying \" + filename + \"\")\n\t\t\tawait websocket.send(\"plugin unload \" + plugin_name)\n\t\t\ttime.sleep(0.1)\n\t\t\treplace_plugin_file()\n\t\t\ttime.sleep(0.1)\n\t\t\tawait websocket.send(\"plugin load \" + plugin_name)\n\texcept:\n\t\treplace_plugin_file()\n\n\nif __name__ == '__main__':\n\tif len(sys.argv) == 1:\n\t\texit()\n\n\tswap_file = sys.argv[1]\n\tasyncio.get_event_loop().run_until_complete(main_loop())"
  },
  {
    "path": "include/bakkesmod/core/bot_loadout_structs.h",
    "content": "﻿#pragma once\n\n#include <map>\n#include <vector>\n\nstruct BotLoadoutData\n{\n\tstruct Attribute\n\t{\n\t\tenum class Type { PAINT, ESPORTWHEEL, SPECIALEDITION };\n\n\t\tType type;\n\t\tint value;\n\t};\n\n\tstd::map<int, int> products;\n\tstd::map<int, std::vector<Attribute>> product_attributes;\n\n\t// not used, but leaving it in here \"just in case\" for later.\n\tunsigned char team = 0;\n\n\tint team_finish_id = 0;\n\tint custom_finish_id = 0;\n\tunsigned char team_color_id = 0;\n\tunsigned char custom_color_id = 0;\n};\n"
  },
  {
    "path": "include/bakkesmod/core/compiler_toggles.h",
    "content": "﻿#pragma once\n\n#ifndef BM_CPP20_SUPPORT\n    #if __cplusplus >= 202002L\n        #define BM_CPP20_SUPPORT\n    #elif defined( __cpp_concepts )\n            #if __cpp_concepts >= 201907L\n                #define BM_CPP20_SUPPORT\n            #endif\n    #elif defined(__cpp_constexpr)\n            #if __cpp_constexpr >= 201806L\n                #define BM_CPP20_SUPPORT\n            #endif\n        #elif \n    #endif\n#endif\n\n\n#ifdef BM_CPP20_SUPPORT\n\t#define DEFAULTEQUALITY(clazz)\\\n\t    bool operator==(const clazz&) const = default;\n\t#define DEFAULTCOMPARE(clazz)\\\n\t    auto operator<=>(const clazz&) const = default;\n#else\n\t#define DEFAULTEQUALITY(clazz)\n\t#define DEFAULTCOMPARE(clazz)\n#endif"
  },
  {
    "path": "include/bakkesmod/core/custom_decals_structs.h",
    "content": "﻿#pragma once\n#include \"bakkesmod/core/compiler_toggles.h\"\n\nnamespace pluginsdk\n{\n\tusing Tex = std::shared_ptr<ImageWrapper>;\n\tusing TextureOverride = std::map<std::string, Tex>;\n\tusing ColorOverride = std::map<std::string, LinearColor>;\n\tusing ScalarOverride = std::map<std::string, float>;\n\n\tstruct ShaderOverride\n\t{\n\t\tTextureOverride textures;\n\t\tColorOverride colors;\n\t\tScalarOverride scalar;\n\n\t\tDEFAULTEQUALITY(ShaderOverride)\n\t};\n\n\tstruct BodyShaderOverride\n\t{\n\t\tShaderOverride body_mic_override;\n\t\tShaderOverride chassis_mic_override;\n\t\tint body_id = -1;\n\t\tint skin_id = -1;\n\n\t\tDEFAULTEQUALITY(BodyShaderOverride)\n\t};\n}\n"
  },
  {
    "path": "include/bakkesmod/core/http_structs.h",
    "content": "﻿#pragma once\n\n/// <summary>\n/// key value pair for field name and field data.\n/// If you use a file field. the data should be the path to the file\n/// </summary>\nstruct FormField\n{\n\tenum class Type\n\t{\n\t\tkString,\n\t\tkFile\n\t};\n\n\tType field_type;\n\t// curlpp doesn't seem to support wstring for the formparts\n\tstd::string data;\n\tstd::string name;\n};\n\ntypedef std::function<void(double download_size, double downloaded, double upload_size, double uploaded)> CurlProgressFunction; \ntypedef std::function<void(int http_status_code, std::string data)> CurlRequestDoneStringReturn;\ntypedef std::function<void(int http_status_code, std::wstring path)> CurlRequestDoneFileReturn;\ntypedef std::function<void(int http_status_code, char* data_ptr, size_t data_size)> CurlRequestDoneBinaryReturn;\n\nstruct CurlRequest\n{\n\tstd::string url;\n\tstd::string verb;\n\t//std::vector<std::string> headers;\n\tstd::map<std::string, std::string> headers;\n\tstd::string body;\n\tstd::vector<FormField> form_data;\n\tCurlProgressFunction progress_function;\n};\n"
  },
  {
    "path": "include/bakkesmod/core/loadout_structs.h",
    "content": "﻿#pragma once\n#include \"bakkesmod/wrappers/wrapperstructs.h\"\n#include \"bakkesmod/core/compiler_toggles.h\"\n\nstruct FColorPosition;\nstruct FLoadoutTeamPaint;\n\nnamespace pluginsdk\n{\n\tenum class Itempaint: int\n\t{\n\t\tNONE = 0,\n\t\tCRIMSON = 1,\n\t\tLIME = 2,\n\t\tBLACK = 3,\n\t\tSKYBLUE = 4,\n\t\tCOBALT = 5,\n\t\tBURNTSIENNA = 6,\n\t\tFORESTGREEN = 7,\n\t\tPURPLE = 8,\n\t\tPINK = 9,\n\t\tORANGE = 10,\n\t\tGREY = 11,\n\t\tTITANIUMWHITE = 12,\n\t\tSAFFRON = 13,\n\t\tGOLD = 14,\n\t\tROSEGOLD = 15,\n\t\tWHITEGOLD = 16,\n\t\tONYX = 17,\n\t\tPLATINUM = 18\n\t};\n\n\tenum class Equipslot: int\n\t{\n\t\tBODY = 0,\n\t\tDECAL = 1,\n\t\tWHEELS = 2,\n\t\tROCKETBOOST = 3,\n\t\tANTENNA = 4,\n\t\tTOPPER = 5,\n\t\tBUMPER = 6,\n\t\tPAINTFINISH = 7,\n\t\tBOT = 8,\n\t\tLOGO = 9,\n\t\tUNDERGLOW = 10,\n\t\tCRATES = 11,\n\t\tCUSTOMFINISH = 12,\n\t\tENGINEAUDIO = 13,\n\t\tTRAIL = 14,\n\t\tGOALEXPLOSION = 15,\n\t\tPLAYERBANNER = 16,\n\t\tGARAGECOMPLEXROW = 17,\n\t\tGOALSTINGER = 18,\n\t\tPLAYERAVATAR = 19,\n\t\tAVATARBORDER = 20,\n\t\tPLAYERTITLE = 21,\n\t\tESPORTSTEAM = 22,\n\t\tARCHIVEDITEMS = 23,\n\t\tBLUEPRINTS = 24,\n\t\tSHOPITEM = 25,\n\t\tCURRENCY = 26,\n\t\tMAX = 27,\n\t};\n\n\tstruct TeamPaint\n\t{\n\t\tunsigned char team;\n\t\tunsigned char team_color_id = 255;\n\t\tunsigned char custom_color_id = 255;\n\n\t\tDEFAULTEQUALITY(TeamPaint)\n\t};\n\n\tstruct CarColors\n\t{\n\t\tstd::optional<TeamPaint> team_paint;\n\n\t\tinline static LinearColor const default_color{0.0f, 0.0f, 0.0f, 1.0f};\n\t\t// null or default_color for the overrides means that the value from team_paint will be used\n\t\tstd::optional<LinearColor> team_color_override = std::nullopt;\n\t\tstd::optional<LinearColor> custom_color_override = std::nullopt;\n\n\t\tDEFAULTEQUALITY(CarColors)\n\t};\n\n\tstruct ColorPosition\n\t{\n\t\tColorPosition() = default;\n\t\tColorPosition(int row, int column): row{row}, column{column} {}\n\t\texplicit ColorPosition(const FColorPosition& other);\n\t\texplicit operator FColorPosition() const;\n\n\t\tint row;\n\t\tint column;\n\n\t\tDEFAULTEQUALITY(ColorPosition)\n\t};\n\n\tstruct PaintFinishColor\n\t{\n\t\tLinearColor color{0, 0, 0, 1};\n\t\tColorPosition position{-1, -1};\n\t\tint index = 0;\n\n\t\tDEFAULTEQUALITY(PaintFinishColor)\n\t};\n\n\tstruct ItemAttribute\n\t{\n\t\tenum class AttributeType { UNKNOWN, PAINT, ESPORT, SPECIALEDITION, USERCOLOR };\n\n\t\tAttributeType type = AttributeType::UNKNOWN;\n\t\tint value = 0;\n\t\tUnrealColor color{0, 0, 0, 0};\n\n\t\tDEFAULTEQUALITY(ItemAttribute)\n\t};\n\n\tstruct ItemData\n\t{\n\t\tEquipslot slot = Equipslot::MAX;\n\t\tint product_id = 0;\n\t\tstd::vector<ItemAttribute> attributes = {};\n\n\t\tDEFAULTEQUALITY(ItemData)\n\t};\n\n\tusing ItemDataMap = std::map<Equipslot, ItemData>;\n\n\tstruct Loadout\n\t{\n\t\tItemDataMap items;\n\t\tCarColors paint_finish;\n\n\t\tDEFAULTEQUALITY(Loadout)\n\t};\n}\n"
  },
  {
    "path": "include/bakkesmod/core/replay_structs.h",
    "content": "﻿#pragma once\n\nstruct FScoredGoal;\nstruct FHighlight;\nstruct FReplayPlayerStats;\n\nstruct ScoredGoal\n{\n\tScoredGoal() = default;\n\texplicit ScoredGoal(const FScoredGoal& other);\n\texplicit operator FScoredGoal() const;\n\n\tint frame{};\n\tstd::string player_name;\n\tint player_team{};\n};\n\n\nstruct Highlight\n{\n\tHighlight() = default;\n\texplicit Highlight(const FHighlight& other);\n\texplicit operator FHighlight() const;\n\n\tint frame;\n\tint car_name_index;\n\tint ball_name_index;\n\tint goal_actor_name_index;\n};\n\n\nstruct ReplayPlayerStats\n{\n\tReplayPlayerStats() = default;\n\texplicit ReplayPlayerStats(const FReplayPlayerStats& other);\n\texplicit operator FReplayPlayerStats() const;\n\n\tstd::string name;\n\tunsigned char platform{}; /*U_Types_Core_OnlinePlatform*/\n\tunsigned long long online_id{};\n\tint team{};\n\tint score{};\n\tint goals{};\n\tint assists{};\n\tint saves{};\n\tint shots{};\n\tbool is_bot{};\n};"
  },
  {
    "path": "include/bakkesmod/plugin/PluginSettingsWindow.h",
    "content": "﻿#pragma once\n\nnamespace BakkesMod::Plugin\n{\n\tclass PluginSettingsWindow\n\t{\n\tpublic:\n\t\tvirtual ~PluginSettingsWindow() = default;\n\t\t/// <summary>\n\t\t/// This is where you draw your settings gui. It will be drawn in the BakkesMod plugin tab.\n\t\t/// IMPORTANT: This runs in the render thread.\n\t\t/// So if you call any game function from the wrappers you're very likely to crash the game.\n\t\t/// Solve this by wrapping any game function calls in a gameWrapper->Execute to make it run in the game thread\n\t\t/// </summary>\n\t\tvirtual void RenderSettings() = 0;\n\t\tvirtual std::string GetPluginName() = 0;\n\n\t\t/// <summary>\n\t\t/// Don't call this yourself, BM will call this function with a pointer to the current ImGui context\n\t\t/// </summary>\n\t\t/// <param name=\"ctx\"></param>\n\t\tvirtual void SetImGuiContext(uintptr_t ctx) = 0;\n\t};\n}\n\n"
  },
  {
    "path": "include/bakkesmod/plugin/bakkesmodplugin.h",
    "content": "#pragma once\r\n#include \"bakkesmod/wrappers/CVarManagerWrapper.h\"\r\n#include \"bakkesmod/wrappers/GameWrapper.h\"\r\n#include \"bakkesmodsdk.h\"\r\n#include <memory>\r\n//#include <windows.h>\r\n\r\n#ifndef _WINDEF_\r\nclass HINSTANCE__; // Forward or never\r\ntypedef HINSTANCE__* HINSTANCE;\r\n#endif\r\n\r\nnamespace BakkesMod {\r\n\tnamespace Plugin {\r\n\t\tclass BakkesModPlugin;\r\n\t\ttypedef uintptr_t(*GetPluginFunc)();\r\n\t\ttypedef void(*deleteFunc)();\r\n\t\tstruct PluginInfo {\r\n\t\t\tshort apiBuildVersion; //The bakkesmod API version this plugin was built for.\r\n\t\t\tconst char* fileName; //The filename of the built DLL\r\n\t\t\tconst char* className; //The classname of the plugin which is loaded\r\n\t\t\tconst char* pluginName; //Name of the plugin, shown to the user\r\n\t\t\tconst char* pluginVersion; //The version of the plugin, shown to the user\r\n\t\t\tconst unsigned long pluginType; //The type of plugin, can be freeplay, soccar, replay etc\r\n\t\t\tGetPluginFunc initializeFunc; //The function that is called to construct the plugin\r\n\t\t\tdeleteFunc delFunc;\r\n\t\t};\r\n\r\n\t\ttypedef PluginInfo*(__stdcall *export_func)();\r\n\r\n\t\t//Default plugin stuff, which is api version and file path\r\n#define BAKKESMOD_STANDARD_PLUGIN_STUFF \\\r\n    BAKKESMOD_PLUGIN_API_VERSION,       \\\r\n    __FILE__\r\n\r\n#define BAKKESMOD_PLUGIN(classType, pluginName, pluginVersion, pluginType)     \\\r\nstatic std::shared_ptr<classType> singleton;\\\r\n\textern \"C\" { \\\r\n      BAKKESMOD_PLUGIN_EXPORT uintptr_t getPlugin()     \\\r\n      {                                                      \\\r\n                 \\\r\n          if(!singleton) {\t\t\t\t\t\t\t\t\t \\\r\n\t\t\t\tsingleton = std::shared_ptr<classType>(new classType());\\\r\n\t\t  }\t\t\t\t\t\t\t\t\t\t\t\t\t \\\r\n          return reinterpret_cast<std::uintptr_t>(&singleton);                                  \\\r\n      }                                                      \\\r\n\t  BAKKESMOD_PLUGIN_EXPORT void deleteMe() { \\\r\n\t\t\tif(singleton) \\\r\n\t\t\t\tsingleton = nullptr;\\\r\n\t\t}\\\r\n      BAKKESMOD_PLUGIN_EXPORT BakkesMod::Plugin::PluginInfo exports =  \\\r\n      {                                                      \\\r\n          BAKKESMOD_STANDARD_PLUGIN_STUFF,                   \\\r\n          #classType,                                        \\\r\n          pluginName,                                        \\\r\n          pluginVersion,                                     \\\r\n\t\t  pluginType,\t\t\t\t\t\t\t\t\t\t \\\r\n          getPlugin,                                         \\\r\n\t\t  deleteMe\t\t\t\t\t\t\t\t\t\t\t \\\r\n\t  };                                                     \\\r\n\t}\r\n\r\n\t\tclass BAKKESMOD_PLUGIN_EXPORT BakkesModPlugin\r\n\t\t{\r\n\t\tpublic:\r\n            __pragma(warning(suppress:4251));\r\n\t\t\tstd::shared_ptr<CVarManagerWrapper> cvarManager;\r\n            __pragma(warning(suppress:4251));\r\n\t\t\tstd::shared_ptr<GameWrapper> gameWrapper;\r\n\t\t\tvirtual void onLoad() {};\r\n\r\n\t\t\t//Unload stuff here, notifiers/cvars are automatically cleared.\r\n\t\t\tvirtual void onUnload() {};\r\n\t\t};\r\n\r\n\r\n\t\tstruct LoadedPlugin {\r\n\t\t\tstd::shared_ptr<PluginInfo> _details;\r\n\t\t\tstd::shared_ptr<BakkesModPlugin> _plugin;\r\n\t\t\tHINSTANCE _instance;\r\n\t\t\tstd::string _filename;\r\n\t\t\tstd::shared_ptr<std::type_index> _typeid;\r\n\r\n\t\t\tLoadedPlugin(std::shared_ptr<PluginInfo> details, std::shared_ptr<BakkesModPlugin> plugin, HINSTANCE instance, std::string filename) {\r\n\t\t\t\t_details = details;\r\n\t\t\t\t_plugin = plugin;\r\n\t\t\t\t_instance = instance;\r\n\t\t\t\t_filename = filename;\r\n\t\t\t\t_typeid = std::make_shared<std::type_index>(typeid(*plugin));\r\n\t\t\t}\r\n\t\t\t~LoadedPlugin() {\r\n\t\t\t\t//_details.get()->delFunc();\r\n\t\t\t\t/*if (_instance)\r\n\t\t\t\t\tFreeLibrary(_instance);*/\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n}\r\n"
  },
  {
    "path": "include/bakkesmod/plugin/bakkesmodsdk.h",
    "content": "#pragma once\r\nenum PLUGINTYPE {\r\n\tPLUGINTYPE_FREEPLAY = 0x01,\r\n\tPLUGINTYPE_CUSTOM_TRAINING = 0x02,\r\n\tPLUGINTYPE_SPECTATOR = 0x04,\r\n\tPLUGINTYPE_BOTAI = 0x08,\r\n\tPLUGINTYPE_REPLAY = 0x10,\r\n\tPLUGINTYPE_THREADED = 0x20,\r\n\tPLUGINTYPE_THREADEDUNLOAD = 0x40\r\n};\r\n\r\n//Permissions you can set for notifiers, 0x00 = ALL\r\nenum NOTIFIER_PERMISSION {\r\n\tPERMISSION_ALL = 0,\r\n\tPERMISSION_MENU = (1 << 0),\r\n\tPERMISSION_SOCCAR = (1 << 1),\r\n\tPERMISSION_FREEPLAY = (1 << 2),\r\n\tPERMISSION_CUSTOM_TRAINING = (1 << 3),\r\n\tPERMISSION_ONLINE = (1 << 4),\r\n\tPERMISSION_PAUSEMENU_CLOSED = (1 << 5),\r\n\tPERMISSION_REPLAY = (1 << 6),\r\n\tPERMISSION_OFFLINE = (1 << 7) //Only when not in an online game\r\n};\r\n\r\n#ifdef _BAKKESMOD //Only define _BAKKESMOD if you're building bakkesmod, don't define it when building a plugin!\r\n#define BAKKESMOD_PLUGIN_EXPORT\r\n#define BAKKESMOD_PLUGIN_IMPORT __declspec(dllexport)\r\n#else\r\n#define BAKKESMOD_PLUGIN_EXPORT __declspec(dllexport)\r\n#define BAKKESMOD_PLUGIN_IMPORT __declspec(dllimport)\r\n#endif\r\n\r\n#define BAKKESMOD_PLUGIN_API_VERSION 95\r\n"
  },
  {
    "path": "include/bakkesmod/plugin/botplugin.h",
    "content": "#pragma once\r\n//#include \"bakkesmodplugin.h\"\r\n\r\nnamespace BakkesMod {\r\n\tnamespace Plugin {\r\n\t\tclass BotPlugin// : public BakkesModPlugin\r\n\t\t{\r\n\t\t\tvirtual void OnNewGameEvent(); //Clear your old data and register your new bots here!\r\n\t\t\t//TODO: find good cleanup\r\n\t\t};\r\n\t}\r\n}"
  },
  {
    "path": "include/bakkesmod/plugin/pluginwindow.h",
    "content": "#pragma once\n#include <string>\nnamespace BakkesMod {\n\tnamespace Plugin {\n\t\tclass PluginWindow\n\t\t{\n\t\tpublic:\n\t\t\t/*\n\t\t\tDo ImGui rendering here\n\t\t\t*/\n\t\t\tvirtual void Render() = 0; \n\n\t\t\t/*\n\t\t\tName of the menu that is used to toggle the window.\n\t\t\t*/\n\t\t\tvirtual std::string GetMenuName() = 0;\n\n\t\t\t/*\n\t\t\tTitle to give the menu\n\t\t\t*/\n\t\t\tvirtual std::string GetMenuTitle() = 0;\n\n\t\t\t/*\n\t\t\tDon't call this yourself, BM will call this function with a pointer to the current ImGui context\n\t\t\t*/\n\t\t\tvirtual void SetImGuiContext(uintptr_t ctx) = 0;\n\n\t\t\t/*\n\t\t\tShould events such as mouse clicks/key inputs be blocked so they won't reach the game\n\t\t\t*/\n\t\t\tvirtual bool ShouldBlockInput() = 0;\n\n\t\t\t/*\n\t\t\tReturn true if overlay which isn't interacted with\n\t\t\t*/\n\t\t\tvirtual bool IsActiveOverlay() = 0;\n\n\t\t\t/*\n\t\t\tCalled when window is opened\n\t\t\t*/\n\t\t\tvirtual void OnOpen() = 0;\n\n\t\t\t/*\n\t\t\tCalled when window is closed\n\t\t\t*/\n\t\t\tvirtual void OnClose() = 0;\n\t\t};\n\t}\n}"
  },
  {
    "path": "include/bakkesmod/utilities/DecalUtilities.h",
    "content": "﻿#pragma once\n#include \"bakkesmod/core/custom_decals_structs.h\"\n#include \"../../utils/expected.hpp\"\n\nstruct ApplyDecalToCarResult\n{\n\tbool body_applied = false;\n\tbool chassis_applied = false;\n};\n\nstruct BodyAssetIdsCheckResult\n{\n\tint body_id;\n\tint skin_id;\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT DecalUtilities\n{\npublic:\n\t_NODISCARD static tl::expected<ApplyDecalToCarResult, std::string> ApplyDecalToCar(const CarWrapper& car_wrapper,\n\t                                                                                   const pluginsdk::BodyShaderOverride& custom_body_decal);\n\t_NODISCARD static tl::expected<BodyAssetIdsCheckResult, std::string> GetBodyAssetIds(const CarWrapper& car_wrapper);\n\n\t_NODISCARD static tl::expected<bool, std::string> ApplyDecalToBall(const BallWrapper& ball_wrapper, const pluginsdk::ShaderOverride& shader_override);\n\n};\n"
  },
  {
    "path": "include/bakkesmod/utilities/LoadoutUtilities.h",
    "content": "﻿#pragma once\n#include \"bakkesmod/core/loadout_structs.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT LoadoutUtilities\n{\npublic:\n\n\t// only works in replays\n\tvoid static SetLoadoutItems(const PriWrapper& pri_wrapper, const pluginsdk::ItemDataMap& loadout);\n\tvoid static SetCarProductAttributes(const CarWrapper& car_wrapper, const pluginsdk::ItemDataMap& loadout);\n\tvoid static SetLoadoutPaintFinishColors(const CarWrapper& car_wrapper, const pluginsdk::CarColors& paint_finish);\n\tvoid static ForceSetLoadout(const PriWrapper& pri_wrapper, const pluginsdk::Loadout& loadout);\n\n\t// can be called any time\n\t_NODISCARD static pluginsdk::CarColors GetPaintFinishColors(const CarWrapper& car_wrapper);\n\t_NODISCARD static std::optional<pluginsdk::Loadout> GetLoadoutFromPri(const PriWrapper& pri_wrapper, int team_index);\n\t_NODISCARD static std::vector<pluginsdk::PaintFinishColor> GetBlueColorSet();\n\t_NODISCARD static std::vector<pluginsdk::PaintFinishColor> GetOrangeColorSet();\n\t_NODISCARD static std::vector<pluginsdk::PaintFinishColor> GetCustomColorSet();\n\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/AIControllerWrapper.h",
    "content": "#pragma once\ntemplate<class T> class ArrayWrapper;\ntemplate<typename T> class StructArrayWrapper;\n#include \"WrapperStructs.h\"\n#include \"ControllerWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT AIControllerWrapper : public ControllerWrapper {\npublic:\n    CONSTRUCTORS(AIControllerWrapper)\n\n        void DoNothing();\n\nprivate:\n    PIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/CareerStatsWrapper.h",
    "content": "﻿#pragma once\n\n\nclass BAKKESMOD_PLUGIN_IMPORT CareerStatsWrapper\n{\npublic:\n\tstruct StatValue\n\t{\n\t\tstd::string stat_name;\n\t\tint private_;\n\t\tint unranked;\n\t\tint ranked;\n\t};\n\n\t_NODISCARD static std::vector<StatValue> GetStatValues();\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/ControllerWrapper.h",
    "content": "#pragma once\ntemplate<class T> class ArrayWrapper;\ntemplate<typename T> class StructArrayWrapper;\n#include \"WrapperStructs.h\"\n#include \"./Engine/ActorWrapper.h\"\n\nclass PlayerReplicationInfoWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT ControllerWrapper : public ActorWrapper {\npublic:\n    CONSTRUCTORS(ControllerWrapper)\n\n    PlayerReplicationInfoWrapper GetPlayerReplicationInfo();\n\nprivate:\n    PIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/ActorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\nclass PrimitiveComponentWrapper;\r\nclass WorldInfoWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ActorWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(ActorWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tVector GetLocation();\r\n\tvoid SetLocation(const Vector location);\r\n\tVector GetVelocity();\r\n\tvoid SetVelocity(const Vector velocity);\r\n\tvoid AddVelocity(const Vector velocity);\r\n\tRotator GetRotation();\r\n\tvoid SetRotation(const Rotator rotation);\r\n\tvoid SetTorque(const Vector torq);\r\n\tvoid Stop();\r\n\tVector GetAngularVelocity();\r\n\tvoid SetAngularVelocity(const Vector v, bool addToCurrent);\r\n\tbool IsNull();\r\n\tbool IsNull() const;\r\n\texplicit operator bool();\r\n\texplicit operator bool() const;\r\n\tWorldInfoWrapper GetWorldInfo();\r\n\t//END SELF IMPLEMENTED\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetDrawScale();\r\n\tvoid SetDrawScale(float newDrawScale);\r\n\tVector GetDrawScale3D();\r\n\tvoid SetDrawScale3D(Vector newDrawScale3D);\r\n\tVector GetPrePivot();\r\n\tvoid SetPrePivot(Vector newPrePivot);\r\n\tUnrealColor GetEditorIconColor();\r\n\tvoid SetEditorIconColor(UnrealColor newEditorIconColor);\r\n\tfloat GetCustomTimeDilation();\r\n\tvoid SetCustomTimeDilation(float newCustomTimeDilation);\r\n\tunsigned char GetPhysics();\r\n\tvoid SetPhysics(unsigned char newPhysics);\r\n\tunsigned char GetRemoteRole();\r\n\tvoid SetRemoteRole(unsigned char newRemoteRole);\r\n\tunsigned char GetRole();\r\n\tvoid SetRole(unsigned char newRole);\r\n\tunsigned char GetCollisionType();\r\n\tvoid SetCollisionType(unsigned char newCollisionType);\r\n\tunsigned char GetReplicatedCollisionType();\r\n\tvoid SetReplicatedCollisionType(unsigned char newReplicatedCollisionType);\r\n\tActorWrapper GetOwner();\r\n\tActorWrapper GetBase();\r\n\tunsigned long GetbStatic();\r\n\tunsigned long GetbHidden();\r\n\tunsigned long GetbHiddenSelf();\r\n\tvoid SetbHiddenSelf(unsigned long newbHiddenSelf);\r\n\tunsigned long GetbNoDelete();\r\n\tvoid SetbNoDelete(unsigned long newbNoDelete);\r\n\tunsigned long GetbDeleteMe();\r\n\tvoid SetbDeleteMe(unsigned long newbDeleteMe);\r\n\tunsigned long GetbTicked();\r\n\tvoid SetbTicked(unsigned long newbTicked);\r\n\tunsigned long GetbOnlyOwnerSee();\r\n\tvoid SetbOnlyOwnerSee(unsigned long newbOnlyOwnerSee);\r\n\tunsigned long GetbTickIsDisabled();\r\n\tvoid SetbTickIsDisabled(unsigned long newbTickIsDisabled);\r\n\tunsigned long GetbWorldGeometry();\r\n\tvoid SetbWorldGeometry(unsigned long newbWorldGeometry);\r\n\tunsigned long GetbIgnoreRigidBodyPawns();\r\n\tvoid SetbIgnoreRigidBodyPawns(unsigned long newbIgnoreRigidBodyPawns);\r\n\tunsigned long GetbOrientOnSlope();\r\n\tvoid SetbOrientOnSlope(unsigned long newbOrientOnSlope);\r\n\tunsigned long GetbIsMoving();\r\n\tunsigned long GetbAlwaysEncroachCheck();\r\n\tvoid SetbAlwaysEncroachCheck(unsigned long newbAlwaysEncroachCheck);\r\n\tunsigned long GetbHasAlternateTargetLocation();\r\n\tunsigned long GetbAlwaysRelevant();\r\n\tunsigned long GetbReplicateInstigator();\r\n\tunsigned long GetbReplicateMovement();\r\n\tunsigned long GetbUpdateSimulatedPosition();\r\n\tvoid SetbUpdateSimulatedPosition(unsigned long newbUpdateSimulatedPosition);\r\n\tunsigned long GetbDemoRecording();\r\n\tvoid SetbDemoRecording(unsigned long newbDemoRecording);\r\n\tunsigned long GetbDemoOwner();\r\n\tvoid SetbDemoOwner(unsigned long newbDemoOwner);\r\n\tunsigned long GetbForceDemoRelevant();\r\n\tvoid SetbForceDemoRelevant(unsigned long newbForceDemoRelevant);\r\n\tunsigned long GetbNetInitialRotation();\r\n\tvoid SetbNetInitialRotation(unsigned long newbNetInitialRotation);\r\n\tunsigned long GetbReplicateRigidBodyLocation();\r\n\tvoid SetbReplicateRigidBodyLocation(unsigned long newbReplicateRigidBodyLocation);\r\n\tunsigned long GetbKillDuringLevelTransition();\r\n\tvoid SetbKillDuringLevelTransition(unsigned long newbKillDuringLevelTransition);\r\n\tunsigned long GetbPostRenderIfNotVisible();\r\n\tvoid SetbPostRenderIfNotVisible(unsigned long newbPostRenderIfNotVisible);\r\n\tunsigned long GetbForceNetUpdate();\r\n\tvoid SetbForceNetUpdate(unsigned long newbForceNetUpdate);\r\n\tunsigned long GetbForcePacketUpdate();\r\n\tvoid SetbForcePacketUpdate(unsigned long newbForcePacketUpdate);\r\n\tunsigned long GetbPendingNetUpdate();\r\n\tvoid SetbPendingNetUpdate(unsigned long newbPendingNetUpdate);\r\n\tunsigned long GetbGameRelevant();\r\n\tvoid SetbGameRelevant(unsigned long newbGameRelevant);\r\n\tunsigned long GetbMovable();\r\n\tvoid SetbMovable(unsigned long newbMovable);\r\n\tunsigned long GetbCanTeleport();\r\n\tvoid SetbCanTeleport(unsigned long newbCanTeleport);\r\n\tunsigned long GetbAlwaysTick();\r\n\tvoid SetbAlwaysTick(unsigned long newbAlwaysTick);\r\n\tunsigned long GetbBlocksNavigation();\r\n\tvoid SetbBlocksNavigation(unsigned long newbBlocksNavigation);\r\n\tunsigned long GetBlockRigidBody();\r\n\tvoid SetBlockRigidBody(unsigned long newBlockRigidBody);\r\n\tunsigned long GetbCollideWhenPlacing();\r\n\tvoid SetbCollideWhenPlacing(unsigned long newbCollideWhenPlacing);\r\n\tunsigned long GetbCollideActors();\r\n\tvoid SetbCollideActors(unsigned long newbCollideActors);\r\n\tunsigned long GetbCollideWorld();\r\n\tvoid SetbCollideWorld(unsigned long newbCollideWorld);\r\n\tunsigned long GetbCollideComplex();\r\n\tvoid SetbCollideComplex(unsigned long newbCollideComplex);\r\n\tunsigned long GetbBlockActors();\r\n\tvoid SetbBlockActors(unsigned long newbBlockActors);\r\n\tunsigned long GetbBlocksTeleport();\r\n\tvoid SetbBlocksTeleport(unsigned long newbBlocksTeleport);\r\n\tunsigned long GetbPhysRigidBodyOutOfWorldCheck();\r\n\tvoid SetbPhysRigidBodyOutOfWorldCheck(unsigned long newbPhysRigidBodyOutOfWorldCheck);\r\n\tunsigned long GetbComponentOutsideWorld();\r\n\tunsigned long GetbRigidBodyWasAwake();\r\n\tvoid SetbRigidBodyWasAwake(unsigned long newbRigidBodyWasAwake);\r\n\tunsigned long GetbCallRigidBodyWakeEvents();\r\n\tvoid SetbCallRigidBodyWakeEvents(unsigned long newbCallRigidBodyWakeEvents);\r\n\tunsigned long GetbBounce();\r\n\tvoid SetbBounce(unsigned long newbBounce);\r\n\tunsigned long GetbEditable();\r\n\tvoid SetbEditable(unsigned long newbEditable);\r\n\tunsigned long GetbLockLocation();\r\n\tvoid SetbLockLocation(unsigned long newbLockLocation);\r\n\tfloat GetNetUpdateTime();\r\n\tvoid SetNetUpdateTime(float newNetUpdateTime);\r\n\tfloat GetNetUpdateFrequency();\r\n\tvoid SetNetUpdateFrequency(float newNetUpdateFrequency);\r\n\tfloat GetNetPriority();\r\n\tvoid SetNetPriority(float newNetPriority);\r\n\tfloat GetLastNetUpdateTime();\r\n\tfloat GetLastForcePacketUpdateTime();\r\n\tvoid SetLastForcePacketUpdateTime(float newLastForcePacketUpdateTime);\r\n\tfloat GetTimeSinceLastTick();\r\n\tfloat GetLifeSpan();\r\n\tfloat GetCreationTime();\r\n\tfloat GetLastRenderTime();\r\n\tunsigned long long GetHiddenEditorViews();\r\n\tvoid SetHiddenEditorViews(unsigned long long newHiddenEditorViews);\r\n\tArrayWrapper<ActorWrapper> GetAttached();\r\n\tVector GetRelativeLocation();\r\n\tvoid SetRelativeLocation(Vector newRelativeLocation);\r\n\tRotator GetRelativeRotation();\r\n\tvoid SetRelativeRotation(Rotator newRelativeRotation);\r\n\tPrimitiveComponentWrapper GetCollisionComponent();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ForceNetUpdatePacket();\r\n\tvoid ForceNetUpdate2();\r\n\tbool WillOverlap(Vector& PosA, Vector& VelA, Vector& PosB, Vector& VelB, float StepSize, float Radius, float* Time);\r\n\tvoid eventReplicationEnded();\r\n\tvoid eventPostDemoRewind();\r\n\tbool IsInPersistentLevel(unsigned long bIncludeLevelStreamingPersistent);\r\n\tvoid SetHUDLocation(Vector& NewHUDLocation);\r\n\tvoid eventSpawnedByKismet();\r\n\tVector GetTargetLocation(ActorWrapper RequestedBy, unsigned long bRequestAlternateLoc);\r\n\tunsigned char eventScriptGetTeamNum();\r\n\tunsigned char GetTeamNum2();\r\n\tbool IsPlayerOwned();\r\n\tbool IsStationary();\r\n\tvoid eventDebugMessagePlayer(std::string msg);\r\n\tVector GetGravityAcceleration();\r\n\tVector GetGravityDirection();\r\n\tfloat GetGravityZ();\r\n\tbool IsOverlapping(ActorWrapper A);\r\n\tbool ContainsPoint(Vector& Spot);\r\n\tvoid eventFellOutOfWorld();\r\n\tvoid SetTickIsDisabled(unsigned long bInDisabled);\r\n\tvoid SetPhysics2(unsigned char newPhysics);\r\n\tvoid SetHidden2(unsigned long bNewHidden);\r\n\tvoid ChartData(std::string DataName, float DataValue);\r\n\tvoid DrawDebugString(Vector& TextLocation, std::string Text, ActorWrapper TestBaseActor, UnrealColor& TextColor, float Duration);\r\n\tvoid DrawDebugCone(Vector& Origin, Vector& Direction, float Length, float AngleWidth, float AngleHeight, int NumSides, UnrealColor& DrawColor, unsigned long bPersistentLines);\r\n\tVector GetAggregateBaseVelocity(ActorWrapper TestBase);\r\n\tbool IsOwnedBy(ActorWrapper TestActor);\r\n\tbool IsBasedOn(ActorWrapper TestActor);\r\n\tfloat GetTerminalVelocity();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/EngineTAWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\nclass UnrealStringWrapper;\r\nclass StatGraphSystemWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT EngineTAWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(EngineTAWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned long GetbEnableClientPrediction();\r\n\tvoid SetbEnableClientPrediction(unsigned long newbEnableClientPrediction);\r\n\tunsigned long GetbClientPhysicsUpdate();\r\n\tvoid SetbClientPhysicsUpdate(unsigned long newbClientPhysicsUpdate);\r\n\tunsigned long GetbDisableClientCorrections();\r\n\tvoid SetbDisableClientCorrections(unsigned long newbDisableClientCorrections);\r\n\tunsigned long GetbDebugClientCorrections();\r\n\tvoid SetbDebugClientCorrections(unsigned long newbDebugClientCorrections);\r\n\tunsigned long GetbForceClientCorrection();\r\n\tvoid SetbForceClientCorrection(unsigned long newbForceClientCorrection);\r\n\tfloat GetPhysicsFramerate();\r\n\tvoid SetPhysicsFramerate(float newPhysicsFramerate);\r\n\tint GetMaxPhysicsSubsteps();\r\n\tvoid SetMaxPhysicsSubsteps(int newMaxPhysicsSubsteps);\r\n\tint GetMaxUploadedClientFrames();\r\n\tvoid SetMaxUploadedClientFrames(int newMaxUploadedClientFrames);\r\n\tint GetMaxClientReplayFrames();\r\n\tvoid SetMaxClientReplayFrames(int newMaxClientReplayFrames);\r\n\tint GetPhysicsFrame();\r\n\tvoid SetPhysicsFrame(int newPhysicsFrame);\r\n\tfloat GetRenderAlpha();\r\n\tvoid SetRenderAlpha(float newRenderAlpha);\r\n\tint GetReplicatedPhysicsFrame();\r\n\tvoid SetReplicatedPhysicsFrame(int newReplicatedPhysicsFrame);\r\n\tint GetDirtyPhysicsFrame();\r\n\tvoid SetDirtyPhysicsFrame(int newDirtyPhysicsFrame);\r\n\tint GetForceCorrectionFrames();\r\n\tvoid SetForceCorrectionFrames(int newForceCorrectionFrames);\r\n\tint GetTickNotifyIndex();\r\n\tvoid SetTickNotifyIndex(int newTickNotifyIndex);\r\n\tUnrealStringWrapper GetShellArchetypePath();\r\n\tfloat GetLastBugReportTime();\r\n\tvoid SetLastBugReportTime(float newLastBugReportTime);\r\n\tfloat GetDebugClientCorrectionStartTime();\r\n\tvoid SetDebugClientCorrectionStartTime(float newDebugClientCorrectionStartTime);\r\n\tint GetDebugClientCorrectionCount();\r\n\tvoid SetDebugClientCorrectionCount(int newDebugClientCorrectionCount);\r\n\tStatGraphSystemWrapper GetStatGraphs();\r\n\tvoid SetStatGraphs(StatGraphSystemWrapper newStatGraphs);\r\n\tfloat GetLastPhysicsDeltaTimeScale();\r\n\tvoid SetLastPhysicsDeltaTimeScale(float newLastPhysicsDeltaTimeScale);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid DebugClientCorrections2();\r\n\tfloat GetBulletFixedDeltaTime();\r\n\tvoid RunPhysicsStep(int BulletSceneIndex, float DeltaTime);\r\n\tvoid UpdateReplicatedPhysicsFrame(int ServerFrame);\r\n\tvoid DebugDedicatedServer(float ForHowLong);\r\n\tfloat GetPhysicsTime();\r\n\tvoid eventRecordAppStart();\r\n\tvoid eventInit();\r\n\tvoid EventPreAsyncTick(float DeltaTime);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/EnumWrapper.h",
    "content": "﻿#pragma once\n\n#include \"ObjectWrapper.h\"\n#include <map>\n#include <string>\n\nclass BAKKESMOD_PLUGIN_IMPORT EnumWrapper: public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(EnumWrapper)\n\n\t// Get the name of this enum.\n\t_NODISCARD std::string GetEnumName() const;\n\n\t// Throws if invalid value\n\t_NODISCARD std::string GetEnumLabel(unsigned char enum_value) const;\n\n\t// Throws if invalid label\n\t_NODISCARD unsigned char GetEnumValue(const std::string& enum_label) const;\n\n\t// Get a count of how many values this enum contains\n\t_NODISCARD size_t GetEnumValueCount() const;\n\n\t// Get a map with all the possible enum values and their labels\n\t_NODISCARD std::map<unsigned char, std::string> GetPossibleValues() const;\n\n\t// Don't forget the first rule of BMSDK!\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t/*U_Types_TA_ETeam*/\n\t_NODISCARD static EnumWrapper GetTeamEnum();\n\t/*AActor_ECollisionType*/\n\t_NODISCARD static EnumWrapper GetActorCollisionTypes();\n\t/*AActor_EForceMode*/\n\t_NODISCARD static EnumWrapper GetActorForceModes();\n\t/*AActor_ENetRole*/\n\t_NODISCARD static EnumWrapper GetActorNetRoles();\n\t/*AActor_EPhysics*/\n\t_NODISCARD static EnumWrapper GetActorPhysics();\n\t/*AActor_ETravelType*/\n\t_NODISCARD static EnumWrapper GetActorTravelModes();\n\t/*AGameEvent_TrainingEditor_TA_EPlayTestType*/\n\t_NODISCARD static EnumWrapper GetTrainingPlayTestTypes();\n\t/*AGameEvent_Tutorial_TA_ERotationType*/\n\t_NODISCARD static EnumWrapper GetTutorialRotationTypes();\n\t/*AVehiclePickup_Boost_TA_EBoostType*/\n\t_NODISCARD static EnumWrapper GetBoostTypes();\n\t/*U_Types_Core_OnlinePlatform*/\n\t_NODISCARD static EnumWrapper GetOnlinePlatforms();\n\t/*U_Types_TA_EAchievementType*/\n\t_NODISCARD static EnumWrapper GetAchievementTypes();\n\t/*U_Types_TA_EBallHitType*/\n\t_NODISCARD static EnumWrapper GetBallHitTypes();\n\t/*U_Types_TA_EBlueprintType*/\n\t_NODISCARD static EnumWrapper GetBlueprintTypes();\n\t/*U_Types_TA_ECarImpactResult*/\n\t_NODISCARD static EnumWrapper GetCarImpactResults();\n\t/*U_Types_TA_EChatChannel*/\n\t_NODISCARD static EnumWrapper GetChatChannels();\n\t/*U_Types_TA_EDemolishSpeed*/\n\t_NODISCARD static EnumWrapper GetDemolishSpeeds();\n\t/*U_Types_TA_EDemolishTarget*/\n\t_NODISCARD static EnumWrapper GetDemolishTargets();\n\t/*U_Types_TA_EDifficulty*/\n\t_NODISCARD static EnumWrapper GetDifficulties();\n\t/*U_Types_TA_EHistoryType*/\n\t_NODISCARD static EnumWrapper GetHistoryTypes();\n\t/*U_Types_TA_ENetworkInputBuffer*/\n\t_NODISCARD static EnumWrapper GetNetworkInputBuffers();\n\t/*U_Types_TA_EPawnType*/\n\t_NODISCARD static EnumWrapper GetPawnTypes();\n\t/*U_Types_TA_EProductQuality*/\n\t_NODISCARD static EnumWrapper GetProductQualities();\n\t/*U_Types_TA_EStatGraphLevel*/\n\t_NODISCARD static EnumWrapper GetStatGraphLevels();\n\t/*U_Types_TA_ETrainingSaveType*/\n\t_NODISCARD static EnumWrapper GetTrainingSaveTypes();\n\t/*U_Types_TA_ETrainingType*/\n\t_NODISCARD static EnumWrapper GetTrainingTypes();\n\t/*U_Types_TA_EUnlockMethod*/\n\t_NODISCARD static EnumWrapper GetUnlockMethods();\n\t/*U_Types_TA_EVoiceFilter*/\n\t_NODISCARD static EnumWrapper GetVoiceFilters();\n\t/*UAudioDevice_ETTSSpeaker*/\n\t_NODISCARD static EnumWrapper GetTTSSpeakers();\n\t/*UClientConnectionTracker_TA_EConnectionQualityState*/\n\t_NODISCARD static EnumWrapper GetConnectionQualityStates();\n\t/*UPrimitiveComponent_ERadialImpulseFalloff*/\n\t_NODISCARD static EnumWrapper GetRadialImpulseFalloffs();\n\t/*UPrimitiveComponent_ERBCollisionChannel*/\n\t_NODISCARD static EnumWrapper GetRBCollisionChannels();\n\t/*UReplay_TA_EReplayState*/\n\t_NODISCARD static EnumWrapper GetReplayStates();\n\t/*USampleHistory_TA_EGraphSummaryType*/\n\t_NODISCARD static EnumWrapper GetGraphSummaryTypes();\n\t/*U_TrainingTypes_TA_ETrainingRoundAttempt*/\n\t_NODISCARD static EnumWrapper GetTrainingRoundAttempts();\n\t//UGFxEngine_EWeatherVariant\n\t_NODISCARD static EnumWrapper GetWeatherVariant();\n\t//U_Types_TA_EPaintFinishType\n\t_NODISCARD static EnumWrapper GetPaintFinishTyp();\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/ObjectWrapper.h",
    "content": "#pragma once\r\n#include \"bakkesmod/plugin/bakkesmodsdk.h\"\r\n#include \"../WrapperStructs.h\"\r\n#include <functional>\r\n#include <memory>\r\n#include <string>\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ObjectWrapper\r\n{\r\npublic:\r\n\tstd::uintptr_t memory_address;\r\n\tObjectWrapper(std::uintptr_t mem);\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/UnrealStringWrapper.h",
    "content": "#pragma once\r\n#include <cwchar>\r\n#include \"../WrapperStructs.h\"\r\n#include \"../ArrayWrapper.h\"\r\nclass PrimitiveComponentWrapper;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<wchar_t>;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT UnrealStringWrapper : public ArrayWrapper<wchar_t> {\r\npublic:\r\n\tCONSTRUCTORS(UnrealStringWrapper)\r\npublic:\r\n\tstd::string ToString();\r\n\tstd::wstring ToWideString();\r\n\tbool IsNull();\r\n\texplicit operator bool();\r\nprivate:\r\n\tPIMPL\r\n};\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/Engine/WorldInfoWrapper.h",
    "content": "#pragma once\n#include \"ActorWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT WorldInfoWrapper : public ActorWrapper {\npublic:\n\tCONSTRUCTORS(WorldInfoWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tfloat GetTimeDilation();\n\tfloat GetDemoPlayTimeDilation();\n\tfloat GetTimeSeconds();\n\tfloat GetRealTimeSeconds();\n\tfloat GetRealDeltaSeconds();\n\tfloat GetAudioTimeSeconds();\n\tfloat GetDeltaSeconds();\n\tfloat GetPauseDelay();\n\tfloat GetRealTimeToUnPause();\n\tfloat GetStallZ();\n\tfloat GetWorldGravityZ();\n\tfloat GetDefaultGravityZ();\n\tfloat GetGlobalGravityZ();\n\tfloat GetRBPhysicsGravityScaling();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/GameEditorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameEvent/ServerWrapper.h\"\r\nclass PlayerControllerWrapper;\r\nclass CarWrapper;\r\nclass ActorWrapper;\r\nclass FXActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GameEditorWrapper : public ServerWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GameEditorWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tint GetActiveRoundNumber();\r\n\tvoid SetActiveRoundNumber(int newActiveRoundNumber);\r\n\tint GetMaxRounds();\r\n\tvoid SetMaxRounds(int newMaxRounds);\r\n\tint GetHistoryPosition();\r\n\tvoid SetHistoryPosition(int newHistoryPosition);\r\n\tint GetMaxUndoHistory();\r\n\tvoid SetMaxUndoHistory(int newMaxUndoHistory);\r\n\tFXActorWrapper GetFXActorArchetype();\r\n\tvoid SetFXActorArchetype(FXActorWrapper newFXActorArchetype);\r\n\tFXActorWrapper GetFXActor();\r\n\tvoid SetFXActor(FXActorWrapper newFXActor);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid RotateActor(PlayerControllerWrapper PC, unsigned long bSnapOrientation);\r\n\tvoid PrevRound();\r\n\tvoid NextRound();\r\n\tvoid DecreaseTime();\r\n\tvoid IncreaseTime();\r\n\tvoid StopEditing(PlayerControllerWrapper PC);\r\n\tvoid StartEditing();\r\n\tvoid CycleActor(PlayerControllerWrapper PC);\r\n\tvoid ReleaseGrabbedActor(PlayerControllerWrapper PC);\r\n\tvoid ReleaseRotateActor(PlayerControllerWrapper PC);\r\n\tvoid ToggleRotateActor(PlayerControllerWrapper PC);\r\n\tvoid ToggleGrabActor(PlayerControllerWrapper PC);\r\n\tvoid ToggleReleaseActor(PlayerControllerWrapper PC);\r\n\tvoid ReleaseActor2(PlayerControllerWrapper PC);\r\n\tvoid GrabActor2(PlayerControllerWrapper PC);\r\n\tbool CanQueSaveReplay();\r\n\tbool ShouldUpdateCrosshair();\r\n\tint GetPlayerTeamNumber();\r\n\tbool CanAddHistory();\r\n\tvoid ToggleEditorRound();\r\n\tvoid CommitRedoRound();\r\n\tvoid ResetRound();\r\n\tvoid Save2();\r\n\tvoid Redo2(PlayerControllerWrapper PC);\r\n\tvoid Undo2(PlayerControllerWrapper PC);\r\n\tunsigned char GetOtherHistoryType(unsigned char HistoryType);\r\n\tvoid ClampUndoHistory();\r\n\tvoid ClearRedoHistory();\r\n\tvoid ClearAllHistory();\r\n\tbool DestroyActor(ActorWrapper A, unsigned char HistoryType);\r\n\tbool IsInEditorMode();\r\n\tvoid RemoveAllPointsFromScore(int TeamIndex);\r\n\tvoid RemovePointsFromScore(int PointsToRemove, int TeamIndex);\r\n\tvoid DeleteAllExistingActorsBasedOffSpawnList();\r\n\tbool RoundContainsASwitch();\r\n\tvoid EnableTriggers(unsigned long bEnable);\r\n\tvoid HideCarSpawnPoints(unsigned long bHide);\r\n\tvoid ResetSpawnLocations();\r\n\tvoid OnSpawnedArchetype(ActorWrapper SpawnedActor, unsigned char HistoryType);\r\n\tvoid SpawnArchetype(PlayerControllerWrapper Controller, int ArchetypeIndex);\r\n\tvoid IncrementSelectedSpawnArchetypeIndex(int Direction, int* Index);\r\n\r\n\t[[deprecated(\"Removed from Rocket League, defaults to false\")]]\r\n\tbool CanChangeTeam();\r\n\tvoid ResetBallsToDefaultPosition();\r\n\tvoid FireBalls();\r\n\tvoid Interact();\r\n\tbool ShouldResetBalls();\r\n\tvoid OnVehicleSetup(CarWrapper Car);\r\n\tvoid HandleVehicleSetup(CarWrapper Car);\r\n\tvoid OnPlayerRestarted(CarWrapper PlayerCar);\r\n\tbool ChooseTeam(int TeamIndex, PlayerControllerWrapper Player);\r\n\tvoid InitFX();\r\n\tvoid eventPostBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/GameEventWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass ControllerWrapper;\r\nclass PlayerControllerWrapper;\r\nclass CarWrapper;\r\nclass UnrealStringWrapper;\r\nclass GameSettingPlaylistWrapper;\r\nclass PriWrapper;\r\nclass WrapperStructs;\r\nclass TeamInfoWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GameEventWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GameEventWrapper)\r\n\r\n\t_NODISCARD std::string GetMatchTypeName() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned char GetReplicatedStateIndex();\r\n\tvoid SetReplicatedStateIndex(unsigned char newReplicatedStateIndex);\r\n\tCarWrapper GetCarArchetype();\r\n\tvoid SetCarArchetype(CarWrapper newCarArchetype);\r\n\tint GetCountdownTime();\r\n\tvoid SetCountdownTime(int newCountdownTime);\r\n\tint GetFinishTime();\r\n\tvoid SetFinishTime(int newFinishTime);\r\n\tunsigned long GetbMultiplayer();\r\n\tvoid SetbMultiplayer(unsigned long newbMultiplayer);\r\n\tunsigned long GetbCountdownMessagesDisabled();\r\n\tvoid SetbCountdownMessagesDisabled(unsigned long newbCountdownMessagesDisabled);\r\n\tunsigned long GetbFillWithAI();\r\n\tvoid SetbFillWithAI(unsigned long newbFillWithAI);\r\n\tunsigned long GetbAllowQueueSaveReplay();\r\n\tvoid SetbAllowQueueSaveReplay(unsigned long newbAllowQueueSaveReplay);\r\n\tunsigned long GetbAllowReadyUp();\r\n\tvoid SetbAllowReadyUp(unsigned long newbAllowReadyUp);\r\n\tunsigned long GetbRestartingMatch();\r\n\tvoid SetbRestartingMatch(unsigned long newbRestartingMatch);\r\n\tunsigned long GetbRandomizedBotLoadouts();\r\n\tvoid SetbRandomizedBotLoadouts(unsigned long newbRandomizedBotLoadouts);\r\n\tunsigned long GetbHasLeaveMatchPenalty();\r\n\tvoid SetbHasLeaveMatchPenalty(unsigned long newbHasLeaveMatchPenalty);\r\n\tunsigned long GetbCanVoteToForfeit();\r\n\tvoid SetbCanVoteToForfeit(unsigned long newbCanVoteToForfeit);\r\n\tunsigned long GetbDisableAimAssist();\r\n\tvoid SetbDisableAimAssist(unsigned long newbDisableAimAssist);\r\n\tunsigned long GetbAwardAchievements();\r\n\tvoid SetbAwardAchievements(unsigned long newbAwardAchievements);\r\n\tint GetMinPlayers();\r\n\tvoid SetMinPlayers(int newMinPlayers);\r\n\tint GetMaxPlayers();\r\n\tvoid SetMaxPlayers(int newMaxPlayers);\r\n\tArrayWrapper<ActorWrapper> GetSpawnPoints();\r\n\tfloat GetBotSkill();\r\n\tvoid SetBotSkill(float newBotSkill);\r\n\tint GetRespawnTime();\r\n\tvoid SetRespawnTime(int newRespawnTime);\r\n\tfloat GetMatchTimeDilation();\r\n\tvoid SetMatchTimeDilation(float newMatchTimeDilation);\r\n\tPlayerControllerWrapper GetActivator();\r\n\tvoid SetActivator(PlayerControllerWrapper newActivator);\r\n\tCarWrapper GetActivatorCar();\r\n\tvoid SetActivatorCar(CarWrapper newActivatorCar);\r\n    ArrayWrapper<ControllerWrapper> GetPlayers();\r\n\tArrayWrapper<PriWrapper> GetPRIs();\r\n\tArrayWrapper<CarWrapper> GetCars();\r\n\tArrayWrapper<PlayerControllerWrapper> GetLocalPlayers();\r\n\tint GetStartPointIndex();\r\n\tvoid SetStartPointIndex(int newStartPointIndex);\r\n\tint GetGameStateTimeRemaining();\r\n\tvoid SetGameStateTimeRemaining(int newGameStateTimeRemaining);\r\n\tint GetReplicatedGameStateTimeRemaining();\r\n\tvoid SetReplicatedGameStateTimeRemaining(int newReplicatedGameStateTimeRemaining);\r\n\tfloat GetBotBoostThreshold_vsAI();\r\n\tvoid SetBotBoostThreshold_vsAI(float newBotBoostThreshold_vsAI);\r\n\tStructArrayWrapper<SteamID> GetForfeitInitiatorIDs();\r\n\tStructArrayWrapper<SteamID> GetBannedPlayers();\r\n\tPriWrapper GetGameOwner();\r\n\tvoid SetGameOwner(PriWrapper newGameOwner);\r\n\tUnrealStringWrapper GetRichPresenceString();\r\n\tint GetReplicatedRoundCountDownNumber();\r\n\tvoid SetReplicatedRoundCountDownNumber(int newReplicatedRoundCountDownNumber);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid InitCountDown();\r\n\tvoid StartCountdownTimer();\r\n\tvoid AllowReadyUp2();\r\n\tPriWrapper FindPlayerPRI(SteamID& UniqueId);\r\n\tvoid HandlePlayerRemoved(GameEventWrapper GameEvent, PriWrapper PRI);\r\n\tvoid UpdateGameOwner();\r\n\tvoid SetGameOwner2(PriWrapper NewOwner);\r\n\tvoid __GameEvent_TA__SetAllowReadyUp(PriWrapper P);\r\n\tbool __GameEvent_TA__CheckPlayersReady(PriWrapper P);\r\n\tSteamID __GameEvent_TA__CheckForBannedPlayers(PriWrapper PRI);\r\n\tvoid __Pylon__ChangeNotifyFunc();\r\n\tvoid PlayerResetTraining();\r\n\tbool SuppressModalDialogs();\r\n\tbool ShouldShowBallIndicator();\r\n\tvoid CheckInitiatedForfeit(PriWrapper PRI);\r\n\tvoid CheckChatBanned(PlayerControllerWrapper PC);\r\n\tPlayerControllerWrapper FindPCForUniqueID(SteamID& PlayerID);\r\n\tbool AllowSplitScreenPlayer();\r\n\tvoid AddPlayerChatMessage(SteamID& PlayerID, unsigned char ChatChannel, TeamInfoWrapper Team, std::string Message);\r\n\tvoid ConditionalStartSpectatorMatch();\r\n\tbool IsPlayingTraining();\r\n\tbool IsPlayingLan();\r\n\tbool IsPlayingOffline();\r\n\tbool IsPlayingPrivate();\r\n\tbool IsPlayingPublic();\r\n\tbool IsOnlineMultiplayer();\r\n\tvoid CreateMatchType(std::string Options);\r\n\tbool AllPlayersSelectedTeam();\r\n\tbool CanQueSaveReplay();\r\n\tvoid ForceMatchStart();\r\n\tvoid ConditionalStartMatch();\r\n\tvoid SaveLocalPlayerStats();\r\n\tbool CanUseBallCam();\r\n\tbool HandleNextGame();\r\n\tvoid SetMaxPlayers2(int InMaxPlayers);\r\n\tvoid SetRestartingMatch(unsigned long bRestart);\r\n\tbool ShouldBeFullScreen();\r\n\tbool IsFinished();\r\n\tvoid OnAllPlayersReady();\r\n\tvoid CheckPlayersReady2();\r\n\tvoid SetAllowReadyUp2(unsigned long bAllow);\r\n\tvoid AutoReadyPlayers();\r\n\tbool ShouldAutoReadyUp(PriWrapper PRI);\r\n\tvoid SendGoMessage(PlayerControllerWrapper Player);\r\n\tvoid SendCountdownMessage(int Seconds, PlayerControllerWrapper Player);\r\n\tvoid BroadcastCountdownMessage(int Seconds);\r\n\tvoid BroadcastGoMessage();\r\n\tbool AllowShutdown();\r\n\tfloat GetRealDeltaTime(float ElapsedTime);\r\n\tvoid SetTimeDilation(float NewTimeDilation);\r\n\tvoid ClearRespawnList();\r\n\tvoid ReplaceBotsWithAwaitingPlayers();\r\n\tint GetRespawnTime2();\r\n\tvoid RemoveCar(CarWrapper Car);\r\n\tvoid AddCar(CarWrapper Car);\r\n\tvoid TickRespawnTime(float DeltaTime);\r\n\tvoid SetBotSkill2(float NewSkill);\r\n\tPlayerControllerWrapper GetLocalPrimaryPlayer();\r\n\tbool HasPlayerNamed(std::string PlayerName);\r\n\tvoid RandomizeBots();\r\n\tbool MoveToGround(ActorWrapper Mover, float HeightCheck);\r\n\tvoid SetAllDriving(unsigned long bDriving);\r\n\tvoid OnFinished();\r\n\tvoid StartCountDown();\r\n\tvoid StartInitialCountDown();\r\n\tvoid OnGameStateTimeLapsed();\r\n\tvoid OnGameStateTimeUpdated();\r\n\tvoid UpdateGameStateTime();\r\n\tvoid SetGameStateTimeRemaining2(int StateTime, unsigned long bFromReplication);\r\n\tvoid SetGameStateTime2(int StateTime);\r\n\tvoid OnPlayerRestarted(CarWrapper PlayerCar);\r\n\tvoid TeleportCar(CarWrapper PlayerCar);\r\n\tvoid OnCarSpawned(CarWrapper NewCar);\r\n\tbool SpotIsEncroached(Vector& Spot);\r\n\tvoid RandomizeSpawnPoints();\r\n\tvoid RestartPlayers();\r\n\tvoid RemoveLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid AddLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid RemovePRI(PriWrapper PRI);\r\n\tvoid AddPRI(PriWrapper PRI);\r\n\tvoid AddForfeitInitiator(SteamID& PlayerID);\r\n\tvoid BanPlayerID(SteamID& PlayerID);\r\n\tint GetMaxHumans();\r\n\tint GetNumHumans();\r\n\tbool FindBotReplacement(PriWrapper PRI);\r\n\tvoid UpdateBotCount();\r\n\tvoid TimerUpdateBotCount();\r\n\tvoid InitBotSkill();\r\n\tvoid InitMutators();\r\n\tvoid HandleFinished(GameEventWrapper GameEvent);\r\n\tvoid Init2(PlayerControllerWrapper InActivator);\r\n\tvoid eventInitGame(std::string Options);\r\n\tvoid OnGameStateChanged();\r\n\tvoid OnCanVoteForfeitChanged();\r\n\tvoid UpdateCanVoteToForfeit();\r\n\tbool ShouldAllowVoteToForfeit();\r\n\tvoid OnPenaltyChanged();\r\n\tvoid UpdateLeaveMatchPenalty();\r\n\tGameSettingPlaylistWrapper GetPlaylist();\r\n\tbool ShouldHaveLeaveMatchPenalty();\r\n\tvoid OnMatchSettingsChanged();\r\n\tvoid ClearGameScoreFromCustomSettings();\r\n\tvoid EventPlayerResetTraining(GameEventWrapper GameEvent);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/GameSettingPlaylistWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GameSettingPlaylistWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GameSettingPlaylistWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\tstd::string GetLocalizedName();\r\n\tstd::string GetName();\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetTitle();\r\n\tUnrealStringWrapper GetDescription();\r\n\tint GetPlayerCount();\r\n\tvoid SetPlayerCount(int newPlayerCount);\r\n\tunsigned long GetbStandard();\r\n\tvoid SetbStandard(unsigned long newbStandard);\r\n\tunsigned long GetbRanked();\r\n\tvoid SetbRanked(unsigned long newbRanked);\r\n\tunsigned long GetbSolo();\r\n\tvoid SetbSolo(unsigned long newbSolo);\r\n\tunsigned long GetbNew();\r\n\tvoid SetbNew(unsigned long newbNew);\r\n\tunsigned long GetbApplyQuitPenalty();\r\n\tvoid SetbApplyQuitPenalty(unsigned long newbApplyQuitPenalty);\r\n\tunsigned long GetbAllowForfeit();\r\n\tvoid SetbAllowForfeit(unsigned long newbAllowForfeit);\r\n\tunsigned long GetbDisableRankedReconnect();\r\n\tvoid SetbDisableRankedReconnect(unsigned long newbDisableRankedReconnect);\r\n\tunsigned long GetbIgnoreAssignTeams();\r\n\tvoid SetbIgnoreAssignTeams(unsigned long newbIgnoreAssignTeams);\r\n\tunsigned long GetbKickOnMigrate();\r\n\tvoid SetbKickOnMigrate(unsigned long newbKickOnMigrate);\r\n\tunsigned long GetbAllowClubs();\r\n\tvoid SetbAllowClubs(unsigned long newbAllowClubs);\r\n\tunsigned long GetbPlayersVSBots();\r\n\tvoid SetbPlayersVSBots(unsigned long newbPlayersVSBots);\r\n\tint GetPlaylistId();\r\n\tvoid SetPlaylistId(int newPlaylistId);\r\n\tUnrealStringWrapper GetServerCommand();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tbool IsLanMatch();\r\n\tbool IsPrivateMatch();\r\n\tbool IsTournamentMatch();\r\n\tbool ShouldUpdateSkills();\r\n\tbool IsValidID(int InPlaylistID);\r\n\tbool IsValid2();\r\n\t\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/ReplayDirectorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass TeamWrapper;\r\nclass GameEventWrapper;\r\nclass ServerWrapper;\r\nclass ReplaySoccarWrapper;\r\nclass ReplayWrapper;\r\nclass PriWrapper;\r\nclass TeamGameEventWrapper;\r\nclass BallWrapper;\r\nclass GoalWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ReplayDirectorWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(ReplayDirectorWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetSlomoPreScoreTime();\r\n\tvoid SetSlomoPreScoreTime(float newSlomoPreScoreTime);\r\n\tfloat GetSlomoPostScoreTime();\r\n\tvoid SetSlomoPostScoreTime(float newSlomoPostScoreTime);\r\n\tfloat GetSlomoDefendTime();\r\n\tvoid SetSlomoDefendTime(float newSlomoDefendTime);\r\n\tfloat GetSlomoDefendDistance();\r\n\tvoid SetSlomoDefendDistance(float newSlomoDefendDistance);\r\n\tfloat GetSlomoTimeDilation();\r\n\tvoid SetSlomoTimeDilation(float newSlomoTimeDilation);\r\n\tfloat GetMinReplayTime();\r\n\tvoid SetMinReplayTime(float newMinReplayTime);\r\n\tfloat GetMaxReplayTime();\r\n\tvoid SetMaxReplayTime(float newMaxReplayTime);\r\n\tfloat GetReplayPadding();\r\n\tvoid SetReplayPadding(float newReplayPadding);\r\n\tfloat GetHighlightReplayDuration();\r\n\tvoid SetHighlightReplayDuration(float newHighlightReplayDuration);\r\n\tfloat GetTimeBeforeHighlightReplay();\r\n\tvoid SetTimeBeforeHighlightReplay(float newTimeBeforeHighlightReplay);\r\n\tReplaySoccarWrapper GetReplay();\r\n\tvoid SetReplay(ReplaySoccarWrapper newReplay);\r\n\tActorWrapper GetFocusCar();\r\n\tvoid SetFocusCar(ActorWrapper newFocusCar);\r\n\tfloat GetFocusCarChangeTime();\r\n\tvoid SetFocusCarChangeTime(float newFocusCarChangeTime);\r\n\tActorWrapper GetFocusBall();\r\n\tvoid SetFocusBall(ActorWrapper newFocusBall);\r\n\tfloat GetScoreTime();\r\n\tvoid SetScoreTime(float newScoreTime);\r\n\tint GetScoreHitIndex();\r\n\tvoid SetScoreHitIndex(int newScoreHitIndex);\r\n\tGoalWrapper GetScoredGoal();\r\n\tvoid SetScoredGoal(GoalWrapper newScoredGoal);\r\n    ReplayScoreData GetReplayScoreData();\r\n\tunsigned long GetbSlomo();\r\n\tvoid SetbSlomo(unsigned long newbSlomo);\r\n\tunsigned long GetbSlomoForDefender();\r\n\tvoid SetbSlomoForDefender(unsigned long newbSlomoForDefender);\r\n\tunsigned long GetbAutoSave();\r\n\tvoid SetbAutoSave(unsigned long newbAutoSave);\r\n\tint GetFocusHitIndex();\r\n\tvoid SetFocusHitIndex(int newFocusHitIndex);\r\n\tint GetFocusCarIdx();\r\n\tvoid SetFocusCarIdx(int newFocusCarIdx);\r\n\tfloat GetReplayStartGameTime();\r\n\tvoid SetReplayStartGameTime(float newReplayStartGameTime);\r\n\tfloat GetBallSpawnTime();\r\n\tvoid SetBallSpawnTime(float newBallSpawnTime);\r\n\tServerWrapper GetSoccarGame();\r\n\tvoid SetSoccarGame(ServerWrapper newSoccarGame);\r\n\tunsigned char GetScoredOnTeam();\r\n\tvoid SetScoredOnTeam(unsigned char newScoredOnTeam);\r\n\tint GetForceCutToFocusActors();\r\n\tvoid SetForceCutToFocusActors(int newForceCutToFocusActors);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid HandleReplayFinished(ReplayWrapper InReplay);\r\n\tbool ShouldSlomo();\r\n\tvoid UpdateSlomo();\r\n\tvoid UpdateFocusActors();\r\n\tvoid PlayRandomHighlight();\r\n\tint GetNextHighlightFrame();\r\n\tvoid SetAutoSave();\r\n\tvoid SaveUserKeyframe();\r\n\tvoid BuildFocusCars();\r\n\tvoid SetSlomo2(unsigned long bNewSlomo);\r\n\tvoid eventTick(float DeltaTime);\r\n\tvoid eventDestroyed();\r\n\tfloat GetReplayTimeSeconds();\r\n\tvoid SetFocusActors(ActorWrapper NewCar, ActorWrapper NewBall);\r\n\tfloat GetReplayStartTime();\r\n\tvoid SetSlomoForDefender(BallWrapper Ball, int DefendingTeam);\r\n\tvoid OnScoreDataChanged();\r\n\tvoid HandleScoreUpdated(TeamWrapper Team);\r\n\tvoid HandleAllTeamsCreated(TeamGameEventWrapper TeamGame);\r\n\tvoid RecordPlayers();\r\n\tvoid HandleGameStateChanged(GameEventWrapper G);\r\n\tvoid OnSoccarGameSet();\r\n\tvoid SetGameEvent(ServerWrapper InGameEvent);\r\n\tvoid EventFocusCarChanged(ActorWrapper NewFocusCar);\r\n\tvoid EventAutoSaveChanged(ReplayDirectorWrapper Director);\r\n\tvoid EventScoreDataChanged(ReplayDirectorWrapper Director);\r\n\tvoid EventReplayFinished(ReplayDirectorWrapper Director);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/ReplaySoccarWrapper.h",
    "content": "#pragma once\r\n#include \"bakkesmod/wrappers/GameEvent/ReplayWrapper.h\"\r\n#include \"bakkesmod/core/replay_structs.h\"\r\n\r\nclass PriWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ReplaySoccarWrapper : public ReplayWrapper\r\n{\r\npublic:\r\n\tCONSTRUCTORS(ReplaySoccarWrapper)\r\n\r\n\t_NODISCARD std::vector<ScoredGoal> GetGoals() const;\r\n\t_NODISCARD std::vector<Highlight> GetHighlights() const;\r\n\t_NODISCARD std::vector<ReplayPlayerStats> GetPlayerStats() const;\r\n\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tint GetTeamSize();\r\n\tvoid SetTeamSize(int newTeamSize);\r\n\tint GetUnfairTeamSize();\r\n\tvoid SetUnfairTeamSize(int newUnfairTeamSize);\r\n\tunsigned long GetbUnfairBots();\r\n\tvoid SetbUnfairBots(unsigned long newbUnfairBots);\r\n\tint GetPrimaryPlayerTeam();\r\n\tvoid SetPrimaryPlayerTeam(int newPrimaryPlayerTeam);\r\n\tint GetTeam0Score();\r\n\tvoid SetTeam0Score(int newTeam0Score);\r\n\tint GetTeam1Score();\r\n\tvoid SetTeam1Score(int newTeam1Score);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventPreExport();\r\n\tvoid RemoveTimelineKeyframe(int KeyframeIndex);\r\n\tvoid RecordUserEvent();\r\n\tvoid AddPlayer(PriWrapper PRI);\r\n\r\nprivate:\r\n\tPIMPL\r\n};\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/ReplayWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\nclass ActorWrapper;\r\nclass UnrealStringWrapper;\r\n#ifdef __cpp_lib_filesystem\r\n#include <filesystem>\r\n#endif\r\n#undef GetCurrentTime\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ReplayWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(ReplayWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetReplayName();\r\n\tint GetEngineVersion();\r\n\tvoid SetEngineVersion(int newEngineVersion);\r\n\tint GetLicenseeVersion();\r\n\tvoid SetLicenseeVersion(int newLicenseeVersion);\r\n\tint GetNetVersion();\r\n\tvoid SetNetVersion(int newNetVersion);\r\n\tint GetReplayVersion();\r\n\tvoid SetReplayVersion(int newReplayVersion);\r\n\tint GetReplayLastSaveVersion();\r\n\tvoid SetReplayLastSaveVersion(int newReplayLastSaveVersion);\r\n\tint GetGameVersion();\r\n\tvoid SetGameVersion(int newGameVersion);\r\n\tint GetBuildID();\r\n\tvoid SetBuildID(int newBuildID);\r\n\tint GetChangelist();\r\n\tvoid SetChangelist(int newChangelist);\r\n\tUnrealStringWrapper GetBuildVersion();\r\n\tint GetReserveMegabytes();\r\n\tvoid SetReserveMegabytes(int newReserveMegabytes);\r\n\tfloat GetRecordFPS();\r\n\tvoid SetRecordFPS(float newRecordFPS);\r\n\tfloat GetKeyframeDelay();\r\n\tvoid SetKeyframeDelay(float newKeyframeDelay);\r\n\tint GetMaxChannels();\r\n\tvoid SetMaxChannels(int newMaxChannels);\r\n\tint GetMaxReplaySizeMB();\r\n\tvoid SetMaxReplaySizeMB(int newMaxReplaySizeMB);\r\n\t[[deprecated(\"Removed from Rocket League, returns the same as GetId\")]]\r\n\tUnrealStringWrapper GetFilename();\r\n\t_NODISCARD UnrealStringWrapper GetFilePath() const;\r\n\tUnrealStringWrapper GetId();\r\n\tUnrealStringWrapper GetDate();\r\n\tstd::string GetMapName() const;\r\n\tint GetNumFrames();\r\n\tvoid SetNumFrames(int newNumFrames);\r\n\tstd::string GetMatchType() const;\r\n\tUnrealStringWrapper GetPlayerName();\r\n\tunsigned long GetbFileCorrupted();\r\n\tvoid SetbFileCorrupted(unsigned long newbFileCorrupted);\r\n\tunsigned long GetbForceKeyframe();\r\n\tvoid SetbForceKeyframe(unsigned long newbForceKeyframe);\r\n\tunsigned long GetbLoadedNetPackages();\r\n\tvoid SetbLoadedNetPackages(unsigned long newbLoadedNetPackages);\r\n\tunsigned long GetbDebug();\r\n\tvoid SetbDebug(unsigned long newbDebug);\r\n\tunsigned char GetReplayState();\r\n\tvoid SetReplayState(unsigned char newReplayState);\r\n\tint GetCurrentFrame();\r\n\tvoid SetCurrentFrame(int newCurrentFrame);\r\n\tint GetNextKeyframe();\r\n\tvoid SetNextKeyframe(int newNextKeyframe);\r\n\tfloat GetCurrentTime();\r\n\tvoid SetCurrentTime(float newCurrentTime);\r\n\tfloat GetAccumulatedDeltaTime();\r\n\tvoid SetAccumulatedDeltaTime(float newAccumulatedDeltaTime);\r\n\tfloat GetTimeToSkipTo();\r\n\tvoid SetTimeToSkipTo(float newTimeToSkipTo);\r\n\tint GetFrameToSkipTo();\r\n\tvoid SetFrameToSkipTo(int newFrameToSkipTo);\r\n\tint GetPlayersOnlyTicks();\r\n\tvoid SetPlayersOnlyTicks(int newPlayersOnlyTicks);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tfloat GetPlaybackTime();\r\n\tbool IsFromBeforeGameVersion(unsigned char BeforeGameVersion);\r\n\tbool IsFromBeforeReplayVersion(unsigned char BeforeReplayVersion);\r\n\tvoid SetReplayName(std::string NewName);\r\n\tvoid RemoveTimelineKeyframe(int KeyframeIndex);\r\n\tvoid eventTrimData(int FirstKeyframe, int FirstFrame);\r\n\tReplayWrapper CreateCopy(float StartTime);\r\n\tvoid ImportReplay(std::string Path);\r\n\tvoid ExportReplay(std::string Path);\r\n#ifdef __cpp_lib_filesystem\r\n\tvoid ImportReplay(std::filesystem::path Path);\r\n\tvoid ExportReplay(std::filesystem::path Path);\r\n#endif\r\n\r\n\r\n\tvoid SkipToFrame(int frame, unsigned long bFlush);\r\n\tvoid SkipToTime(float Time, unsigned long bFlush);\r\n\tfloat GetReplayTimeSeconds();\r\n\tvoid StopPlayback();\r\n\tvoid StartPlaybackAtFrame(int StartFrame);\r\n\tvoid StartPlaybackAtTimeSeconds(float StartTime);\r\n\tvoid StopRecord();\r\n\tvoid StartRecord();\r\n\tvoid Tick2(float DeltaTime);\r\n\tvoid eventPreExport();\r\n\tvoid EventPlayedFrame(ReplayWrapper Replay);\r\n\tvoid EventPostTimeSkip(ReplayWrapper Replay);\r\n\tvoid EventPreTimeSkip(ReplayWrapper Replay);\r\n\tvoid EventSpawned(ReplayWrapper Replay, ActorWrapper A);\r\n\tvoid EventPlaybackStopped(ReplayWrapper Replay);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/SaveData/GameEditorSaveDataWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameEvent/SaveData/SaveDataWrapper.h\"\r\nclass TrainingEditorSaveDataWrapper;\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GameEditorSaveDataWrapper : public SaveDataWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GameEditorSaveDataWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetLoadedSaveName();\r\n\tTrainingEditorSaveDataWrapper GetTrainingData();\r\n\tvoid SetTrainingData(TrainingEditorSaveDataWrapper newTrainingData);\r\n\tint GetPlayerTeamNumber();\r\n\tvoid SetPlayerTeamNumber(int newPlayerTeamNumber);\r\n\tunsigned long GetbUnowned();\r\n\tvoid SetbUnowned(unsigned long newbUnowned);\r\n\tint GetShotsCompleted();\r\n\tvoid SetShotsCompleted(int newShotsCompleted);\r\n\tUnrealStringWrapper GetFavoritesFolderPath();\r\n\tUnrealStringWrapper GetMyTrainingFolderPath();\r\n\tUnrealStringWrapper GetDownloadedFolderPath();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tunsigned char GetTrainingSaveType(unsigned long bOwned, unsigned long bFavorited);\r\n\tvoid Init();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/SaveData/SaveDataWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT SaveDataWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(SaveDataWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetDirectoryPath();\r\n\tUnrealStringWrapper GetSaveType();\r\n\tUnrealStringWrapper GetSaveExt();\r\n\tunsigned long GetbExactFileMatch();\r\n\tvoid SetbExactFileMatch(unsigned long newbExactFileMatch);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid Init();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/SaveData/TrainingEditorSaveDataWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TrainingEditorSaveDataWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TrainingEditorSaveDataWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetCode();\r\n\tUnrealStringWrapper GetTM_Name();\r\n\tunsigned char GetType();\r\n\tvoid SetType(unsigned char newType);\r\n\tunsigned char GetDifficulty();\r\n\tvoid SetDifficulty(unsigned char newDifficulty);\r\n\tUnrealStringWrapper GetCreatorName();\r\n\tUnrealStringWrapper GetDescription();\r\n\tint GetNumRounds();\r\n\tvoid SetNumRounds(int newNumRounds);\r\n\tunsigned long long GetCreatedAt();\r\n\tvoid SetCreatedAt(unsigned long long newCreatedAt);\r\n\tunsigned long long GetUpdatedAt();\r\n\tvoid SetUpdatedAt(unsigned long long newUpdatedAt);\r\n\r\n\t[[deprecated(\"Use GetCreatorPlayerUniqueID instead\")]]\r\n\tSteamID GetCreatorPlayerID(); //DEPRECATED\r\n\t\r\n\tvoid SetCreatorPlayerID(SteamID newCreatorPlayerID);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid Init();\r\n\r\n\t//SELF-IMPLEMENTED\r\n\tUniqueIDWrapper GetCreatorPlayerUniqueID();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/ServerWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameEvent/TeamGameEventWrapper.h\"\r\nclass ControllerWrapper;\r\nclass PlayerControllerWrapper;\r\nclass CarWrapper;\r\nclass ReplayDirectorWrapper;\r\nclass TeamWrapper;\r\nclass ActorWrapper;\r\nclass PriWrapper;\r\nclass BallWrapper;\r\nclass GoalWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT ServerWrapper : public TeamGameEventWrapper {\r\npublic:\r\n\tCONSTRUCTORS(ServerWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tBallWrapper GetBall();\r\n\tvoid SpawnCar(int carBody, std::string name);\r\n\tvoid SpawnBot(int carBody, std::string name);\r\n\tBallWrapper SpawnBall(const Vector position, bool wake, bool spawnCannon);\r\n\tbool HasAuthority();\r\n\tGETSETH(float, GameSpeed)\r\n\tGETSETH(float, SecondsElapsed)\t\r\n\t\t\r\n\t\tCarWrapper GetGameCar();\r\n\tbool IsBallMovingTowardsGoal(int goalNo, BallWrapper bw);\r\n\tbool IsInGoal(Vector vec);\r\n\tvoid DisableGoalReset();\r\n\tvoid EnableGoalReset();\r\n\t//void SpawnCar(int body = 0);\r\n\t//Speed from 0 to 2000 pls\r\n\tVector GenerateShot(Vector startPos, Vector destination, float speed);\r\n\tVector GenerateGoalAimLocation(int goalNumber, Vector currentBallLocation);\r\n\tVector GetGoalExtent(int goalNumber = 0);\r\n\tVector GetGoalLocation(int goalNumber = 0);//END SELF IMPLEMENTED\r\n\t\t//END SELF IMPLEMENTED\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tCarWrapper GetTestCarArchetype();\r\n\tvoid SetTestCarArchetype(CarWrapper newTestCarArchetype);\r\n\tBallWrapper GetBallArchetype();\r\n\tvoid SetBallArchetype(BallWrapper newBallArchetype);\r\n\tActorWrapper GetBallSpawnPoint();\r\n\tvoid SetBallSpawnPoint(ActorWrapper newBallSpawnPoint);\r\n\tint GetSeriesLength();\r\n\tvoid SetSeriesLength(int newSeriesLength);\r\n\tint GetGameTime();\r\n\tvoid SetGameTime(int newGameTime);\r\n\tint GetWarmupTime();\r\n\tvoid SetWarmupTime(int newWarmupTime);\r\n\tint GetMaxScore();\r\n\tvoid SetMaxScore(int newMaxScore);\r\n\tint GetAutoBalanceDifference();\r\n\tvoid SetAutoBalanceDifference(int newAutoBalanceDifference);\r\n\tfloat GetScoreSlomoTime();\r\n\tvoid SetScoreSlomoTime(float newScoreSlomoTime);\r\n\tfloat GetGameTimeRemaining();\r\n\tvoid SetGameTimeRemaining(float newGameTimeRemaining);\r\n\tint GetSecondsRemaining();\r\n\tvoid SetSecondsRemaining(int newSecondsRemaining);\r\n\tint GetWaitTimeRemaining();\r\n\tvoid SetWaitTimeRemaining(int newWaitTimeRemaining);\r\n\tfloat GetTotalGameTimePlayed();\r\n\tvoid SetTotalGameTimePlayed(float newTotalGameTimePlayed);\r\n\tfloat GetOvertimeTimePlayed();\r\n\tvoid SetOvertimeTimePlayed(float newOvertimeTimePlayed);\r\n\tunsigned long GetbRoundActive();\r\n\tvoid SetbRoundActive(unsigned long newbRoundActive);\r\n\tunsigned long GetbPlayReplays();\r\n\tvoid SetbPlayReplays(unsigned long newbPlayReplays);\r\n\tunsigned long GetbBallHasBeenHit();\r\n\tvoid SetbBallHasBeenHit(unsigned long newbBallHasBeenHit);\r\n\tunsigned long GetbOverTime();\r\n\tvoid SetbOverTime(unsigned long newbOverTime);\r\n\tunsigned long GetbUnlimitedTime();\r\n\tvoid SetbUnlimitedTime(unsigned long newbUnlimitedTime);\r\n\tunsigned long GetbNoContest();\r\n\tvoid SetbNoContest(unsigned long newbNoContest);\r\n\tunsigned long GetbDisableGoalDelay();\r\n\tvoid SetbDisableGoalDelay(unsigned long newbDisableGoalDelay);\r\n\tunsigned long GetbShowNoScorerGoalMessage();\r\n\tvoid SetbShowNoScorerGoalMessage(unsigned long newbShowNoScorerGoalMessage);\r\n\tunsigned long GetbMatchEnded();\r\n\tvoid SetbMatchEnded(unsigned long newbMatchEnded);\r\n\tunsigned long GetbShowIntroScene();\r\n\tvoid SetbShowIntroScene(unsigned long newbShowIntroScene);\r\n\tunsigned long GetbClubMatch();\r\n\tvoid SetbClubMatch(unsigned long newbClubMatch);\r\n\tint GetNextSpawnIndex();\r\n\tvoid SetNextSpawnIndex(int newNextSpawnIndex);\r\n\tReplayDirectorWrapper GetReplayDirectorArchetype();\r\n\tvoid SetReplayDirectorArchetype(ReplayDirectorWrapper newReplayDirectorArchetype);\r\n\tReplayDirectorWrapper GetReplayDirector();\r\n\tvoid SetReplayDirector(ReplayDirectorWrapper newReplayDirector);\r\n\tArrayWrapper<BallWrapper> GetGameBalls();\r\n\tint GetTotalGameBalls();\r\n\tvoid SetTotalGameBalls(int newTotalGameBalls);\r\n\tfloat GetPostGoalTime();\r\n\tvoid SetPostGoalTime(float newPostGoalTime);\r\n\tArrayWrapper<GoalWrapper> GetGoals();\r\n\tint GetSecondsRemainingCountdown();\r\n\tvoid SetSecondsRemainingCountdown(int newSecondsRemainingCountdown);\r\n\tVector GetFieldCenter();\r\n\tvoid SetFieldCenter(Vector newFieldCenter);\r\n\tTeamWrapper GetGameWinner();\r\n\tvoid SetGameWinner(TeamWrapper newGameWinner);\r\n\tTeamWrapper GetMatchWinner();\r\n\tvoid SetMatchWinner(TeamWrapper newMatchWinner);\r\n\tPriWrapper GetMVP();\r\n\tvoid SetMVP(PriWrapper newMVP);\r\n\tPriWrapper GetFastestGoalPlayer();\r\n\tvoid SetFastestGoalPlayer(PriWrapper newFastestGoalPlayer);\r\n\tPriWrapper GetSlowestGoalPlayer();\r\n\tvoid SetSlowestGoalPlayer(PriWrapper newSlowestGoalPlayer);\r\n\tPriWrapper GetFurthestGoalPlayer();\r\n\tvoid SetFurthestGoalPlayer(PriWrapper newFurthestGoalPlayer);\r\n\tfloat GetFastestGoalSpeed();\r\n\tvoid SetFastestGoalSpeed(float newFastestGoalSpeed);\r\n\tfloat GetSlowestGoalSpeed();\r\n\tvoid SetSlowestGoalSpeed(float newSlowestGoalSpeed);\r\n\tfloat GetFurthestGoal();\r\n\tvoid SetFurthestGoal(float newFurthestGoal);\r\n\tunsigned char GetReplicatedScoredOnTeam();\r\n\tvoid SetReplicatedScoredOnTeam(unsigned char newReplicatedScoredOnTeam);\r\n\tunsigned char GetReplicatedServerPerformanceState();\r\n\tvoid SetReplicatedServerPerformanceState(unsigned char newReplicatedServerPerformanceState);\r\n\tint GetRoundNum();\r\n\tvoid SetRoundNum(int newRoundNum);\r\n\tfloat GetAssistMaxTime();\r\n\tvoid SetAssistMaxTime(float newAssistMaxTime);\r\n\tfloat GetBallHasBeenHitStartDelay();\r\n\tvoid SetBallHasBeenHitStartDelay(float newBallHasBeenHitStartDelay);\r\n\tfloat GetPodiumDelay();\r\n\tvoid SetPodiumDelay(float newPodiumDelay);\r\n\tfloat GetPodiumTime();\r\n\tvoid SetPodiumTime(float newPodiumTime);\r\n\tint GetLobbyEndCountdown();\r\n\tvoid SetLobbyEndCountdown(int newLobbyEndCountdown);\r\n\tint GetLobbyCountdown();\r\n\tvoid SetLobbyCountdown(int newLobbyCountdown);\r\n\tfloat GetLobbyTime();\r\n\tvoid SetLobbyTime(float newLobbyTime);\r\n\tint GetLobbySpawnRestartTime();\r\n\tvoid SetLobbySpawnRestartTime(int newLobbySpawnRestartTime);\r\n\tPlayerControllerWrapper GetPauser();\r\n\tvoid SetPauser(PlayerControllerWrapper newPauser);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid SetNumPlayers(int numPlayers);\r\n\tint GetNumPlayers();\r\n\tint GetPlayerCarCount();\r\n\tvoid ReplicateSkillTiers();\r\n\tvoid RemoveTeamSelection();\r\n\tvoid CheckStart();\r\n\tvoid StartLobbyTimer();\r\n\tvoid HandleCountdownTick();\r\n\tvoid CheckForCountdownAction();\r\n\tvoid LobbyCountdownTick();\r\n\tbool CanSpawnBots();\r\n\tvoid StartRound();\r\n\tvoid EndRound();\r\n\tvoid SetBallEventListeners(BallWrapper Ball, unsigned long bListen);\r\n\tbool CanAwardPoints();\r\n\tvoid HandleCarTouch(BallWrapper Ball, CarWrapper HitCar, unsigned char HitType);\r\n\tvoid SetBallHasBeenHit2();\r\n\tint DetermineScoreTouchIndex(BallWrapper Ball, GoalWrapper Goal);\r\n\tint DetermineAssistTouchIndex(BallWrapper Ball, int ScoreIdx);\r\n\tvoid UpdateTotalGameTimePlayed(float DeltaTime);\r\n\tvoid UpdateGameTime(float DeltaTime);\r\n\tbool CanUpdateGameTime();\r\n\tvoid StartReplay();\r\n\tvoid HandleReplayFinished(ReplayDirectorWrapper InReplay);\r\n\tvoid GotoPodiumSpotlight();\r\n\tvoid UpdateSpotlight();\r\n\tvoid SpawnPodiumCars();\r\n\tbool CanEnableCarPodiumMovement();\r\n\tvoid FinishEvent();\r\n\tbool __GameEvent_Soccar_TA__UpdateTeamScores(TeamWrapper T);\r\n\tvoid __GameEvent_Soccar_TA__SubmitMatchComplete(PriWrapper PRI);\r\n\tvoid __GameEvent_Soccar_TA__CheckStart(TeamWrapper T);\r\n\tvoid __GameEvent_Soccar_TA__EndState(TeamWrapper T);\r\n\tvoid __ReplicatedServerPerformanceState__ChangeNotifyFunc();\r\n\tvoid __bClubMatch__ChangeNotifyFunc();\r\n\tvoid __bShowIntroScene__ChangeNotifyFunc();\r\n\tvoid __WaitTimeRemaining__ChangeNotifyFunc();\r\n\tvoid CheckJoinInProgress(PriWrapper PRI);\r\n\tbool AllowDynamicCrowd();\r\n\tvoid AddBallTrajectory(BallWrapper InBall);\r\n\tbool ShowScorerGoalMessage();\r\n\tbool CanUseBallCam();\r\n\tbool DisableStatXP();\r\n\tvoid SetDisableGoalDelay(unsigned long bInDisableGoalDelay);\r\n\tvoid ForceMatchStart();\r\n\tvoid RemoveLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid AddLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid DestroyGoalIndicators(PlayerControllerWrapper Player);\r\n\tvoid CreateGoalIndicators(PlayerControllerWrapper Player);\r\n\tvoid BeginHighlightsReplay();\r\n\tbool ShouldCountUp();\r\n\tbool ShouldAllowVoteToForfeit();\r\n\tbool ShouldHaveLeaveMatchPenalty();\r\n\tvoid SetPaused(PlayerControllerWrapper InPauser, unsigned long bInPaused);\r\n\tbool ShouldCountdownResumeFromPause();\r\n\tvoid SetScoreAndTime(PlayerControllerWrapper PC, int NewScoreTeam0, int NewScoreTeam1, int InGameTimeRemaining, unsigned long bInOvertime, unsigned long bRestartRound);\r\n\tvoid SaveLocalPlayerStats();\r\n\tbool ShouldPlayReplay();\r\n\tbool ShouldRecordReplay();\r\n\tvoid OnBallHasBeenHit();\r\n\tBallWrapper SpawnBall2(Vector& SpawnLoc, unsigned long bWake, unsigned long bSpawnCannon, std::string BallArch);\r\n\tint GetTotalScore();\r\n\tvoid HandleCarSet(PriWrapper InPRI);\r\n    void RemovePlayer(ControllerWrapper Player);\r\n\tvoid RemovePRI(PriWrapper PRI);\r\n\tvoid AddPRI(PriWrapper PRI);\r\n\tvoid OnMatchWinnerSet();\r\n\tvoid OnGameWinnerSet();\r\n\tint MVPSort(PriWrapper A, PriWrapper B);\r\n\tvoid HandleHitGoal(BallWrapper Ball, GoalWrapper Goal);\r\n\tvoid ClearReplicatedScoredOnTeam();\r\n\tvoid TriggerScoreChangedEvent();\r\n\tvoid HandleScoreUpdated(TeamWrapper Team);\r\n\tvoid OnAllTeamsCreated();\r\n\tvoid TriggerGoalScoreEvent(int TeamScoredOn, CarWrapper Scorer);\r\n\tvoid SetTotalGameBalls2(int TotalBalls);\r\n\tvoid RecordRecentPlayers();\r\n\tvoid UpdateStats();\r\n\tvoid NotifyKismetOfCurrentTime();\r\n\tbool EnoughTimePassedToForfeit();\r\n\tvoid OnGameTimeUpdated();\r\n\tvoid OnOvertimeUpdated();\r\n\tvoid ForceOvertime();\r\n\tvoid StartOvertime();\r\n\tbool OnMyHalf(Vector& TestLocation, unsigned char TeamNum);\r\n\tTeamWrapper GetWinningTeam();\r\n\tvoid ResetPickups();\r\n\tvoid ResetPlayers();\r\n\tvoid OnBallSpawned(BallWrapper NewBall);\r\n\tvoid ResetBalls();\r\n\tvoid DestroyCars();\r\n\tvoid FreezePawns();\r\n\tvoid DestroyBalls();\r\n\tvoid RemoveGameBall(BallWrapper Ball);\r\n\tvoid AddGameBall(BallWrapper Ball);\r\n\tvoid StartNewRound();\r\n\tvoid CheckForAutoBalance();\r\n\tbool HasWinner();\r\n\tvoid SubmitMatch2();\r\n\tvoid SubmitMatchComplete2();\r\n\tvoid OnMatchEnded();\r\n\tbool ShouldDoPodiumSpotlight();\r\n\tvoid EndGame();\r\n\tvoid UpdateTeamScores2();\r\n\tvoid StartNewGame();\r\n\tvoid ResetGame();\r\n\tvoid ClearReplicatedStatEvent();\r\n\tvoid eventDestroyed();\r\n\tvoid InitBotDetection();\r\n\tvoid InitCrowdManager();\r\n\tvoid InitField();\r\n\tvoid InitGameObserver();\r\n\tvoid OnInit();\r\n\tvoid InitMutators();\r\n\tvoid OnClubMatch();\r\n\tbool CanInitClubMatch();\r\n\tvoid AssignCustomTeamSettings();\r\n\tvoid InitGame2(std::string Options);\r\n\tstd::string GetMatchGUID();\r\n\tvoid SetMatchGUID(std::string s);\r\n\tvoid EventGameWinnerSet(ServerWrapper GameEvent);\r\n\tvoid EventGoalScored(ServerWrapper GameEvent, BallWrapper Ball, GoalWrapper Goal, int ScoreIndex, int AssistIdx);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/TeamGameEventWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameEvent/GameEventWrapper.h\"\r\nclass PlayerControllerWrapper;\r\nclass CarWrapper;\r\nclass PriWrapper;\r\nclass TeamWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TeamGameEventWrapper : public GameEventWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TeamGameEventWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tArrayWrapper<TeamWrapper> GetTeamArchetypes();\r\n\tArrayWrapper<TeamWrapper> GetTeams();\r\n\tint GetMaxTeamSize();\r\n\tvoid SetMaxTeamSize(int newMaxTeamSize);\r\n\tint GetNumBots();\r\n\tvoid SetNumBots(int newNumBots);\r\n\tunsigned long GetbMuteOppositeTeams();\r\n\tvoid SetbMuteOppositeTeams(unsigned long newbMuteOppositeTeams);\r\n\tunsigned long GetbDisableMutingOtherTeam();\r\n\tvoid SetbDisableMutingOtherTeam(unsigned long newbDisableMutingOtherTeam);\r\n\tunsigned long GetbForfeit();\r\n\tvoid SetbForfeit(unsigned long newbForfeit);\r\n\tunsigned long GetbUnfairTeams();\r\n\tvoid SetbUnfairTeams(unsigned long newbUnfairTeams);\r\n\tunsigned long GetbAlwaysAutoSelectTeam();\r\n\tvoid SetbAlwaysAutoSelectTeam(unsigned long newbAlwaysAutoSelectTeam);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid StartRematchVote();\r\n\tvoid CheckRematchVote();\r\n\tbool __GameEvent_Team_TA__AllTeamsHaveHumans(TeamWrapper Team);\r\n\tvoid UpdatePlayerShortcuts();\r\n\tvoid ClearTemporarySpawnSpots();\r\n\tbool ChooseTeam(int TeamIndex, PlayerControllerWrapper Player);\r\n\r\n\t[[deprecated(\"Removed from Rocket League, defaults to false\")]]\r\n\tbool CanChangeTeam();\r\n\tvoid OnPenaltyChanged();\r\n\tvoid OnTeamForfeited(TeamWrapper Team);\r\n\tvoid HandleTeamForfeit(TeamWrapper Team);\r\n\tvoid MuteOppositeTeams2(unsigned long bMute);\r\n\tvoid UpdateBotCount();\r\n\tbool FindBotReplacement(PriWrapper PRI);\r\n\tvoid EndGame();\r\n\tvoid ForceNoContest();\r\n\tvoid AddTemporarySpawnSpot(TeamWrapper Team, CarWrapper Car);\r\n\tvoid HandleSelectedLoadout(PriWrapper PlayerPRI);\r\n\tvoid DestroyTeams();\r\n\tvoid OnAllTeamsCreated();\r\n\tvoid AssignCustomTeamSettings();\r\n\tvoid OnMatchSettingsChanged();\r\n\tbool AllTeamsHaveHumans2();\r\n\tbool AllTeamsCreated2();\r\n\tvoid SetTeam(int TeamNum, TeamWrapper NewTeam);\r\n\tvoid CreateTeams();\r\n\tvoid PreloadBots();\r\n\tvoid OnInit();\r\n\tvoid SetMaxTeamSize2(int MaxSize);\r\n\tvoid UpdateMaxTeamSize();\r\n\tvoid SetUnfairTeams(unsigned long bUnfair);\r\n\tvoid InitBotSkill();\r\n\tvoid eventInitGame(std::string Options);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/TrainingEditorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameEvent/GameEditorWrapper.h\"\r\nclass PlayerControllerWrapper;\r\nclass UnrealStringWrapper;\r\nclass ActorWrapper;\r\nclass GameEditorSaveDataWrapper;\r\nclass BallWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TrainingEditorWrapper : public GameEditorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TrainingEditorWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetMinRoundTime();\r\n\tvoid SetMinRoundTime(float newMinRoundTime);\r\n\tfloat GetMaxRoundTime();\r\n\tvoid SetMaxRoundTime(float newMaxRoundTime);\r\n\tunsigned long GetbNoEditor();\r\n\tvoid SetbNoEditor(unsigned long newbNoEditor);\r\n\tunsigned long GetbDisplayedRedoPenaltyMessage();\r\n\tvoid SetbDisplayedRedoPenaltyMessage(unsigned long newbDisplayedRedoPenaltyMessage);\r\n\tunsigned long GetbUnsavedChanges();\r\n\tvoid SetbUnsavedChanges(unsigned long newbUnsavedChanges);\r\n\tint GetPointsScoredThisRound();\r\n\tvoid SetPointsScoredThisRound(int newPointsScoredThisRound);\r\n\tint GetShotAttempt();\r\n\tvoid SetShotAttempt(int newShotAttempt);\r\n\tint GetGoalieScore();\r\n\tvoid SetGoalieScore(int newGoalieScore);\r\n\tunsigned char GetPlayTestType();\r\n\tvoid SetPlayTestType(unsigned char newPlayTestType);\r\n\tArrayWrapper<ActorWrapper> GetGoalMeshBlockers();\r\n\tActorWrapper GetGoalMeshBlockerArchetype();\r\n\tvoid SetGoalMeshBlockerArchetype(ActorWrapper newGoalMeshBlockerArchetype);\r\n\tGameEditorSaveDataWrapper GetTrainingData();\r\n\tvoid SetTrainingData(GameEditorSaveDataWrapper newTrainingData);\r\n\tfloat GetSaveDelayTime();\r\n\tvoid SetSaveDelayTime(float newSaveDelayTime);\r\n\tfloat GetSaveCooldown();\r\n\tvoid SetSaveCooldown(float newSaveCooldown);\r\n\tUnrealStringWrapper GetTrainingFileName();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid OnLoadingMovieClosed();\r\n\tvoid TagHistoryChanges();\r\n\tvoid MarkAsDirty();\r\n\tvoid ForceTagHistoryChanges();\r\n\tvoid SetTracedCrosshairActor(PlayerControllerWrapper PC, ActorWrapper NewActor);\r\n\tbool DestroyBall(BallWrapper Ball);\r\n\tbool AllowDynamicCrowd();\r\n\tvoid BroadcastGoMessage();\r\n\tint GetTotalRounds();\r\n\tunsigned char GetDifficulty();\r\n\tunsigned char GetTrainingType();\r\n\tvoid Save2();\r\n\tvoid OnTrainingModeLoaded();\r\n\tvoid DuplicateRound(int Index);\r\n\tvoid ReorderRound(int FromIndex, int ToIndex);\r\n\tvoid SetRoundTimeLimit(float NewRoundTime);\r\n\tbool HandleNextGame();\r\n\tvoid ResetBalls();\r\n\tvoid Load2(std::string SaveName, PlayerControllerWrapper PC);\r\n\tvoid DestroyGoalMeshBlockers();\r\n\tvoid UpdateGoalMeshBlocker();\r\n\tint GetScore();\r\n\tvoid RemovePointsFromScore(int PointsToRemove, int TeamIndex);\r\n\tbool ShowScorerGoalMessage();\r\n\tvoid ShowResetRoundMessage();\r\n\tbool ShowPenaltyMessage();\r\n\tint GetPlayerTeamNumber();\r\n\tint GetBallGoalScoreNumber();\r\n\tvoid RemoveAllPointsFromScore(int TeamIndex);\r\n\tbool IncrementRound(unsigned long bLoop);\r\n\tVector AdjustToFloorLocation(Vector& TraceStart, Vector& CollsionExtent);\r\n\tActorWrapper SpawnArchetypeAtAndAdjustToFloor(ActorWrapper Archetype, Vector& SpawnLocation, Rotator& SpawnRotation);\r\n\tvoid SpawnBallAndStartPointAt(Vector& BallSpawnLocation, Rotator& BallSpawnRotation, Vector& StartPointSpawnLocation, Rotator& StartPointSpawnRotation);\r\n\tvoid SetupDefaultRound();\r\n\tvoid SwitchToRoundNumber(int RoundNumber, unsigned long BackupCurrentRound);\r\n\tvoid DeleteRound(int RoundToDelete);\r\n\tvoid RestartPlayTest();\r\n\tvoid EndPlayTest();\r\n\tvoid StartPlayTest(unsigned char InPlayTestType);\r\n\tbool CanPlayTestRoundNumber(int RoundNumber);\r\n\tvoid SetUnsavedChanges(unsigned long bInUnsavedChanges);\r\n\tvoid UpdateActiveRoundData();\r\n\tvoid StartNewRound();\r\n\tbool IsValidRoundIndex(int ArrayIndex);\r\n\tvoid AddLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid OnInit();\r\n\tvoid eventDestroyed();\r\n\tvoid eventPostBeginPlay();\r\n\tvoid EventSaveResult(unsigned long bSuccess);\r\n\tvoid EventUnsavedChanges(unsigned long bOutUnsavedChanges);\r\n\tvoid EventPlaytestStarted(TrainingEditorWrapper GamEvent);\r\n\tvoid EventRoundChanged(TrainingEditorWrapper GamEvent);\r\n\tvoid EventRoundTimeChanged(TrainingEditorWrapper GameEvent);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameEvent/TutorialWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameEvent/ServerWrapper.h\"\r\nclass PlayerControllerWrapper;\r\nclass UnrealStringWrapper;\r\nclass CarWrapper;\r\nclass GameEventWrapper;\r\nclass BallWrapper;\r\nclass GoalWrapper;\r\nclass TeamWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TutorialWrapper : public ServerWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TutorialWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tvoid Redo();\r\n\tVector GetCarSpawnLocation();\r\n\tvoid SetCarSpawnLocation(Vector v);\r\n\tRotator GetCarSpawnRotation();\r\n\tvoid SetCarSpawnRotation(Rotator v);\r\n\tCarWrapper GetGameCar();\r\n\tbool IsBallMovingTowardsGoal(int goalNo, BallWrapper bw);\r\n\tbool IsInGoal(Vector vec);\r\n\tvoid DisableGoalReset();\r\n\tvoid EnableGoalReset();\r\n\t//void SpawnCar(int body = 0);\r\n\t//Speed from 0 to 2000 pls\r\n\tVector GenerateShot(Vector startPos, Vector destination, float speed);\r\n\tVector GenerateGoalAimLocation(int goalNumber, Vector currentBallLocation);\r\n\tVector GetGoalExtent(int goalNumber = 0);\r\n\tVector GetGoalLocation(int goalNumber = 0);\t//END SELF IMPLEMENTED\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tVector GetTotalFieldExtent();\r\n\tvoid SetTotalFieldExtent(Vector newTotalFieldExtent);\r\n\tint GetTeamNum();\r\n\tvoid SetTeamNum(int newTeamNum);\r\n\tint GetBallGoalNum();\r\n\tvoid SetBallGoalNum(int newBallGoalNum);\r\n\tunsigned long GetbOnlyScoreInBallGoalNum();\r\n\tvoid SetbOnlyScoreInBallGoalNum(unsigned long newbOnlyScoreInBallGoalNum);\r\n\tunsigned long GetbRedoRound();\r\n\tvoid SetbRedoRound(unsigned long newbRedoRound);\r\n\tunsigned long GetbAllowSuperBoost();\r\n\tvoid SetbAllowSuperBoost(unsigned long newbAllowSuperBoost);\r\n\tunsigned long GetbDisplayedRedoPenaltyMessage();\r\n\tvoid SetbDisplayedRedoPenaltyMessage(unsigned long newbDisplayedRedoPenaltyMessage);\r\n\tunsigned long GetbShowBoostMeter();\r\n\tvoid SetbShowBoostMeter(unsigned long newbShowBoostMeter);\r\n\tunsigned char GetDifficulty();\r\n\tvoid SetDifficulty(unsigned char newDifficulty);\r\n\tunsigned char GetDebugRotationType();\r\n\tvoid SetDebugRotationType(unsigned char newDebugRotationType);\r\n\tfloat GetGoalDepth();\r\n\tvoid SetGoalDepth(float newGoalDepth);\r\n\tint GetGameEventRounds();\r\n\tvoid SetGameEventRounds(int newGameEventRounds);\r\n\tfloat GetEventStartTime();\r\n\tvoid SetEventStartTime(float newEventStartTime);\r\n\tVector GetBallInitialVelocity();\r\n\tvoid SetBallInitialVelocity(Vector newBallInitialVelocity);\r\n\tint GetSpawnIndexTypeOverride();\r\n\tvoid SetSpawnIndexTypeOverride(int newSpawnIndexTypeOverride);\r\n\tint GetWaveIndex();\r\n\tvoid SetWaveIndex(int newWaveIndex);\r\n\tint GetWaveSpawnCount();\r\n\tvoid SetWaveSpawnCount(int newWaveSpawnCount);\r\n\tint GetRandomSpawnIndex();\r\n\tvoid SetRandomSpawnIndex(int newRandomSpawnIndex);\r\n\tUnrealStringWrapper GetStartMessageArchetype();\r\n\tVector GetBallSpawnLocation();\r\n\tvoid SetBallSpawnLocation(Vector newBallSpawnLocation);\r\n\tint GetPointsScoredThisRound();\r\n\tvoid SetPointsScoredThisRound(int newPointsScoredThisRound);\r\n\tint GetBallSpawnCount();\r\n\tvoid SetBallSpawnCount(int newBallSpawnCount);\r\n\tfloat GetBallBounceScale();\r\n\tvoid SetBallBounceScale(float newBallBounceScale);\r\n\tint GetCurrentDebugStepX();\r\n\tvoid SetCurrentDebugStepX(int newCurrentDebugStepX);\r\n\tint GetCurrentDebugStepY();\r\n\tvoid SetCurrentDebugStepY(int newCurrentDebugStepY);\r\n\tint GetCurrentDebugStepZ();\r\n\tvoid SetCurrentDebugStepZ(int newCurrentDebugStepZ);\r\n\tint GetRedoCount();\r\n\tvoid SetRedoCount(int newRedoCount);\r\n\tint GetRedoTotal();\r\n\tvoid SetRedoTotal(int newRedoTotal);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid InitIntro();\r\n\tvoid OnLoadingMovieClosed();\r\n\tvoid StartTimers();\r\n\tvoid UpdateMVP();\r\n\tbool AllowDynamicCrowd();\r\n\tvoid SetTutorialTip(std::string NewTip);\r\n\tvoid SetShowBoostMeter(unsigned long bShow);\r\n\tfloat GetStepLoc(int Steps, float TotalDist, unsigned long bIncrement, int* Out_CurrentStep);\r\n\tVector GetDebugLocationInExtent(Vector& Extent);\r\n\tvoid InitDebugSetup(CarWrapper Car);\r\n\tvoid SkipTutorial();\r\n\tvoid UpdateBotCount();\r\n\tvoid InitMutators();\r\n\tbool IsPrimaryPlayer(CarWrapper Car);\r\n\tbool CanAwardPoints();\r\n\tvoid ShowResetRoundMessage();\r\n\tvoid Destroyed();\r\n\tbool EndTutorial();\r\n\tvoid CommitRedoRound();\r\n\tvoid RedoRound2();\r\n\tbool CanRedoRound();\r\n\tvoid StartNewRound();\r\n\tvoid SaveLocalPlayerStats();\r\n\tTeamWrapper GetWinningTeam();\r\n\tvoid CleanupRoundActors();\r\n\tbool CanQueSaveReplay();\r\n\tvoid ResetBalls();\r\n\tint GetScore();\r\n\tvoid StartRound();\r\n\tint GetGameEventRounds2();\r\n\tint GetTotalRounds();\r\n\tvoid ResetRoundTime();\r\n\tvoid OnPlayerRestarted(CarWrapper PlayerCar);\r\n\tunsigned char GetTrainingType();\r\n\tvoid EndGame();\r\n\tVector GetRandomLocationInExtent(Vector& Extent);\r\n\tbool Chance(int Chances);\r\n\tint GetOppositeTeamNum();\r\n\tVector GetDirectionToGoal(int GoalNum);\r\n\tbool IsGameEventComplete();\r\n\tVector ClampPointToExtent(Vector& ExtentCenter, Vector& Point, Vector& Extent);\r\n\tVector PredictInitialVelocity(Vector& StartLoc, Vector& EndLoc, float Z);\r\n\tBallWrapper GetGameBall();\r\n\tCarWrapper GetGamePawn();\r\n\tvoid ResetGameEvent();\r\n\tvoid CheckForReset();\r\n\tfloat GetGoalViewWidth(GoalWrapper Goal, Vector& ViewerLoc);\r\n\tbool IsBallMovingTowardsGoal2(GoalWrapper Goal, BallWrapper Ball, float MinVelocityForDestroy, float InGoalDepth);\r\n\tvoid SetGoalDepth2();\r\n\tint GetShuffledSpawnIndex();\r\n\tvoid DestroyCannon();\r\n\tvoid SetCannonOrientation(Vector& NewLocation, Rotator& NewRotation);\r\n\tBallWrapper SpawnBall(Vector& SpawnLoc, unsigned long bWake, unsigned long bSpawnCannon, std::string BallArch);\r\n\tvoid InitBallEffects();\r\n\tvoid InitBallVelocity();\r\n\tVector GetRandomGoalAimLocation(int InTeamNum, Vector& BallLoc);\r\n\tVector GetGoalExtent2(GoalWrapper Goal);\r\n\tvoid SetBallVelocity(Vector& InitialVelocity, BallWrapper Ball);\r\n\tvoid InitGameSetup(CarWrapper Car);\r\n\tbool ShouldAllowSuperBoost();\r\n\tvoid OnVehicleSetup(CarWrapper Car);\r\n\tvoid HandleVehicleSetup(CarWrapper Car);\r\n\tvoid InitCrowdManager();\r\n\tvoid HandleScoreUpdated(TeamWrapper Team);\r\n\tvoid SetDifficulty2(int InDifficulty);\r\n\tvoid UpdateStats();\r\n\tvoid AddLocalPlayer(PlayerControllerWrapper Player);\r\n\tvoid HandlePlayerResetTraining(GameEventWrapper GameEvent);\r\n\tvoid OnInit();\r\n\tvoid EventTutorialTipChanged(TutorialWrapper GameEvent, std::string NewTip);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BallBreakoutWrapper.h",
    "content": "#pragma once\n#include \"BallWrapper.h\"\nclass CarWrapper;\n\nstruct AppliedBreakoutDamage\n{\n\tunsigned char Id;\n\tVector Location;\n\tint DamageIndex;\n\tint TotalDamage;\n};\n\n\n\nclass BAKKESMOD_PLUGIN_IMPORT BallBreakoutWrapper : public BallWrapper {\npublic:\n\tCONSTRUCTORS(BallBreakoutWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\tAppliedBreakoutDamage GetAppliedBreakoutDamage() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tunsigned int GetbClearTeamOnDamage();\n\tvoid SetbClearTeamOnDamage(unsigned int bClearTeamOnDamage);\n\tunsigned int GetbCanDamageOwnTeam();\n\tvoid SetbCanDamageOwnTeam(unsigned int bCanDamageOwnTeam);\n\tfloat GetMinDamageVelocity();\n\tvoid SetMinDamageVelocity(float MinDamageVelocity);\n\tfloat GetMinDamageTime();\n\tvoid SetMinDamageTime(float MinDamageTime);\n\tunsigned int GetMinImpactSpeedForCharge();\n\tvoid SetMinImpactSpeedForCharge(unsigned int MinImpactSpeedForCharge);\n\tfloat GetDoubleTapTime();\n\tvoid SetDoubleTapTime(float DoubleTapTime);\n\tfloat GetForceAccumDecayPerSecond();\n\tvoid SetForceAccumDecayPerSecond(float ForceAccumDecayPerSecond);\n\tfloat GetForceAccumMax();\n\tvoid SetForceAccumMax(float ForceAccumMax);\n\tfloat GetForceAccumRecent();\n\tvoid SetForceAccumRecent(float ForceAccumRecent);\n\tunsigned char GetLastTeamTouch();\n\tvoid SetLastTeamTouch(unsigned char LastTeamTouch);\n\tCarWrapper GetLastCarTouch();\n\tvoid SetLastCarTouch(CarWrapper LastCarTouch);\n\tunsigned int GetLastDamage();\n\tvoid SetLastDamage(unsigned int LastDamage);\n\tfloat GetLastDamageTime();\n\tvoid SetLastDamageTime(float LastDamageTime);\n\tunsigned int GetDamageIndex();\n\tvoid SetDamageIndex(unsigned int DamageIndex);\n\tfloat GetAbsorbedForce();\n\tvoid SetAbsorbedForce(float AbsorbedForce);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tfloat GetDamagePercent();\n\tbool WillDamage();\n\tunsigned int GetDamageIndexForForce(float Force);\n\tunsigned int GetDamageIndexForTime(float Time);\n\tvoid SetLastTeamTouch2(unsigned char InLastTeamTouch);\n\tvoid ForceDamageIndex(unsigned int InIndex);\n\tvoid SetDamageIndex2(unsigned int InIndex);\n\tvoid OnCarTouch(CarWrapper HitCar, unsigned char HitType);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BallGodWrapper.h",
    "content": "#pragma once\n#include \"BallWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT BallGodWrapper : public BallWrapper {\npublic:\n\tCONSTRUCTORS(BallGodWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tfloat GetWallBounceSpeed();\n\tvoid SetWallBounceSpeed(float WallBounceSpeed);\n\tfloat GetWallBounceBlend();\n\tvoid SetWallBounceBlend(float WallBounceBlend);\n\tfloat GetWallBounceBackDistance();\n\tvoid SetWallBounceBackDistance(float WallBounceBackDistance);\n\tfloat GetTargetBlendScaleXY();\n\tvoid SetTargetBlendScaleXY(float TargetBlendScaleXY);\n\tfloat GetTargetBlendScaleZ();\n\tvoid SetTargetBlendScaleZ(float TargetBlendScaleZ);\n\tfloat GetTargetSpeed();\n\tvoid SetTargetSpeed(float TargetSpeed);\n\tfloat GetTargetSpeedIncrement();\n\tvoid SetTargetSpeedIncrement(float TargetSpeedIncrement);\n\tfloat GetTargetSpeedBlend();\n\tvoid SetTargetSpeedBlend(float TargetSpeedBlend);\n\tfloat GetMaxVelocityPitch();\n\tvoid SetMaxVelocityPitch(float MaxVelocityPitch);\n\tfloat GetLastSpeedIncrementTime();\n\tvoid SetLastSpeedIncrementTime(float LastSpeedIncrementTime);\n\tfloat GetTargetSpeedIncrementTime();\n\tvoid SetTargetSpeedIncrementTime(float TargetSpeedIncrementTime);\n\tfloat GetMinGlowBrightness();\n\tvoid SetMinGlowBrightness(float MinGlowBrightness);\n\tfloat GetMaxGlowBrightness();\n\tvoid SetMaxGlowBrightness(float MaxGlowBrightness);\n\tfloat GetPulseSpeedScale();\n\tvoid SetPulseSpeedScale(float PulseSpeedScale);\n\tfloat GetPulseBrightnessScale();\n\tvoid SetPulseBrightnessScale(float PulseBrightnessScale);\n\tfloat GetPulseMinBrightness();\n\tvoid SetPulseMinBrightness(float PulseMinBrightness);\n\tfloat GetPulseLifetime();\n\tvoid SetPulseLifetime(float PulseLifetime);\n\tLinearColor GetGlowDefaultColor();\n\tvoid SetGlowDefaultColor(LinearColor GlowDefaultColor);\n\tLinearColor GetMaxSpeedColor();\n\tvoid SetMaxSpeedColor(LinearColor MaxSpeedColor);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tVector GetDirectionToTarget();\n\tVector GetAimLocation();\n\tLinearColor GetMaxSpeedColor2();\n\tbool AtMaxSpeed();\n\tfloat GetGlowBrightness();\n\tfloat GetTargetSpeedAlpha();\n\tvoid UpdatePulse();\n\tvoid OnTargetSpeedChanged();\n\tvoid TryIncrementTargetSpeed();\n\tvoid UpdateColor();\n\tvoid OnHitTeamNumChanged();\n\tvoid SetCarHitTeamNum(unsigned char TeamNum);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BallHauntedWrapper.h",
    "content": "#pragma once\n#include \"BallWrapper.h\"\nclass GoalWrapper;\nclass CarWrapper;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT BallHauntedWrapper : public BallWrapper {\npublic:\n\tCONSTRUCTORS(BallHauntedWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tfloat GetTrappedHoverHeight();\n\tvoid SetTrappedHoverHeight(float TrappedHoverHeight);\n\tfloat GetHorizontalSpeed();\n\tvoid SetHorizontalSpeed(float HorizontalSpeed);\n\tfloat GetVerticalSpeed();\n\tvoid SetVerticalSpeed(float VerticalSpeed);\n\tfloat GetArrivalDistance();\n\tvoid SetArrivalDistance(float ArrivalDistance);\n\tfloat GetTrappedHorizontalSpeed();\n\tvoid SetTrappedHorizontalSpeed(float TrappedHorizontalSpeed);\n\tfloat GetTrappedVerticalSpeed();\n\tvoid SetTrappedVerticalSpeed(float TrappedVerticalSpeed);\n\tfloat GetTrappedCaptureTime();\n\tvoid SetTrappedCaptureTime(float TrappedCaptureTime);\n\tfloat GetHitPhysicsDuration();\n\tvoid SetHitPhysicsDuration(float HitPhysicsDuration);\n\tunsigned char GetReplicatedBeamBrokenValue();\n\tvoid SetReplicatedBeamBrokenValue(unsigned char ReplicatedBeamBrokenValue);\n\tunsigned char GetLastTeamTouch();\n\tvoid SetLastTeamTouch(unsigned char LastTeamTouch);\n\tunsigned char GetDeactivatedGoalIndex();\n\tvoid SetDeactivatedGoalIndex(unsigned char DeactivatedGoalIndex);\n\tunsigned char GetTotalActiveBeams();\n\tvoid SetTotalActiveBeams(unsigned char TotalActiveBeams);\n\tVector GetSeekTarget();\n\tvoid SetSeekTarget(Vector SeekTarget);\n\tfloat GetNextNeutralTime();\n\tvoid SetNextNeutralTime(float NextNeutralTime);\n\tunsigned int GetbHitPhysicsActive();\n\tvoid SetbHitPhysicsActive(unsigned int bHitPhysicsActive);\n\tunsigned int GetbIsBallBeamed();\n\tvoid SetbIsBallBeamed(unsigned int bIsBallBeamed);\n\tunsigned int GetbIsTrapped();\n\tvoid SetbIsTrapped(unsigned int bIsTrapped);\n\tfloat GetCurrentCaptureTime();\n\tvoid SetCurrentCaptureTime(float CurrentCaptureTime);\n\tfloat GetCaptureTimePercentage();\n\tvoid SetCaptureTimePercentage(float CaptureTimePercentage);\n\tfloat GetCaptureTimeAtExit();\n\tvoid SetCaptureTimeAtExit(float CaptureTimeAtExit);\n\tGoalWrapper GetActiveGoal();\n\tvoid SetActiveGoal(GoalWrapper ActiveGoal);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tVector GetBallDestination();\n\tfloat GetVerticalVelocity(Vector& Destination);\n\tVector GetDesiredVelocity();\n\tvoid AddHauntedForces();\n\tvoid ScoreTrapGoal();\n\tvoid SetLastTeamTouch2(unsigned char InLastTeamTouch);\n\tvoid SetBallIsTrapped(unsigned int bValue, GoalWrapper Goal);\n\tvoid SetBallHitData(CarWrapper HitCar, Vector& HitLocation, Vector& HitNormal, unsigned char HitType);\n\tvoid TryBreakBeam(CarWrapper HitCar);\n\tvoid OnCarTouch(CarWrapper HitCar, unsigned char HitType);\n\tvoid ActivateHitPhysics();\n\tvoid SetBallPhased(unsigned int bValue, unsigned int TeamIndex);\n\tvoid SetBallTarget();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BallWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/RBActorWrapper.h\"\r\nclass CarWrapper;\r\nclass ServerWrapper;\r\nclass PriWrapper;\r\nclass FXActorWrapper;\r\nclass GoalWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BallWrapper : public RBActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BallWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tfloat GetLastTouchTime();\r\n\tPredictionInfo PredictPosition(float timeAhead);\t//END SELF IMPLEMENTED\r\n\t_NODISCARD bool IsDropshotBall() const;\r\n\t_NODISCARD bool IsHauntedtBall() const;\r\n\t_NODISCARD bool IsGodBall() const;\r\n\r\n\tvoid FadeOutBall();\r\n\tvoid FadeInBall();\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tFXActorWrapper GetEndOfGameFXArchetype();\r\n\tvoid SetEndOfGameFXArchetype(FXActorWrapper newEndOfGameFXArchetype);\r\n\tunsigned long GetbAllowPlayerExplosionOverride();\r\n\tvoid SetbAllowPlayerExplosionOverride(unsigned long newbAllowPlayerExplosionOverride);\r\n\tunsigned long GetbNotifyGroundHit();\r\n\tvoid SetbNotifyGroundHit(unsigned long newbNotifyGroundHit);\r\n\tunsigned long GetbEndOfGameHidden();\r\n\tvoid SetbEndOfGameHidden(unsigned long newbEndOfGameHidden);\r\n\tunsigned long GetbFadeIn();\r\n\tvoid SetbFadeIn(unsigned long newbFadeIn);\r\n\tunsigned long GetbFadeOut();\r\n\tvoid SetbFadeOut(unsigned long newbFadeOut);\r\n\tunsigned long GetbPredictionOnGround();\r\n\tvoid SetbPredictionOnGround(unsigned long newbPredictionOnGround);\r\n\tunsigned long GetbCanBeAttached();\r\n\tvoid SetbCanBeAttached(unsigned long newbCanBeAttached);\r\n\tunsigned long GetbItemFreeze();\r\n\tvoid SetbItemFreeze(unsigned long newbItemFreeze);\r\n\tVector GetMagnusCoefficient();\r\n\tvoid SetMagnusCoefficient(Vector newMagnusCoefficient);\r\n\tfloat GetRadius();\r\n\tvoid SetRadius(float newRadius);\r\n\tfloat GetVisualRadius();\r\n\tvoid SetVisualRadius(float newVisualRadius);\r\n\tfloat GetLastCalculateCarHit();\r\n\tVector GetInitialLocation();\r\n\tvoid SetInitialLocation(Vector newInitialLocation);\r\n\tvoid SetInitialRotation(Rotator newInitialRotation);\r\n\tfloat GetLastHitWorldTime();\r\n\tfloat GetReplicatedBallScale();\r\n\tvoid SetReplicatedBallScale(float newReplicatedBallScale);\r\n\tfloat GetReplicatedWorldBounceScale();\r\n\tvoid SetReplicatedWorldBounceScale(float newReplicatedWorldBounceScale);\r\n\tfloat GetReplicatedBallGravityScale();\r\n\tvoid SetReplicatedBallGravityScale(float newReplicatedBallGravityScale);\r\n\tfloat GetReplicatedBallMaxLinearSpeedScale();\r\n\tvoid SetReplicatedBallMaxLinearSpeedScale(float newReplicatedBallMaxLinearSpeedScale);\r\n\tfloat GetReplicatedAddedCarBounceScale();\r\n\tvoid SetReplicatedAddedCarBounceScale(float newReplicatedAddedCarBounceScale);\r\n\tfloat GetAdditionalCarGroundBounceScaleZ();\r\n\tvoid SetAdditionalCarGroundBounceScaleZ(float newAdditionalCarGroundBounceScaleZ);\r\n\tfloat GetAdditionalCarGroundBounceScaleXY();\r\n\tvoid SetAdditionalCarGroundBounceScaleXY(float newAdditionalCarGroundBounceScaleXY);\r\n\tunsigned char GetHitTeamNum();\r\n\tvoid SetHitTeamNum(unsigned char newHitTeamNum);\r\n\tServerWrapper GetGameEvent();\r\n\tfloat GetExplosionTime();\r\n\tvoid SetExplosionTime(float newExplosionTime);\r\n\tVector GetOldLocation();\r\n\tvoid SetOldLocation(Vector newOldLocation);\r\n\tfloat GetPredictionTimestep();\r\n\tvoid SetPredictionTimestep(float newPredictionTimestep);\r\n\tfloat GetLastPredictionTime();\r\n\tvoid SetLastPredictionTime(float newLastPredictionTime);\r\n\tfloat GetGroundForce();\r\n\tvoid SetGroundForce(float newGroundForce);\r\n\tCarWrapper GetCurrentAffector();\r\n\tvoid SetCurrentAffector(CarWrapper newCurrentAffector);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tVector GetTrajectoryStartVelocity();\r\n\tRotator GetTrajectoryStartRotation();\r\n\tVector GetTrajectoryStartLocation();\r\n\tbool ShouldDrawTrajectory();\r\n\tfloat GetAdditionalCarBounceScaleZ(CarWrapper Car);\r\n\tvoid SetEndOfGameHidden();\r\n\tvoid Explode(GoalWrapper ExplosionGoal, Vector& ExplodeLocation, PriWrapper Scorer);\r\n\tvoid DoDestroy();\r\n\tvoid DoExplode();\r\n\tvoid Launch(Vector& LaunchPosition, Vector& LaunchDirection);\r\n\tvoid OnCarTouch(CarWrapper HitCar, unsigned char HitType);\r\n\tvoid RecordCarHit(CarWrapper HitCar, Vector& HitLocation, Vector& HitNormal, unsigned char HitType);\r\n\tbool IsGroundHit(Vector& HitNormal);\r\n\tvoid FellOutOfWorld();\r\n\tbool IsRoundActive();\r\n\tvoid eventOnHitGoal(GoalWrapper Goal, Vector& HitLoc);\r\n\tvoid TurnOff();\r\n\tvoid InitAk();\r\n\tvoid SetWorldBounceScale(float NewScale);\r\n\tvoid SetCarBounceScale(float NewScale);\r\n\tvoid SetBallMaxLinearSpeedScale(float InMaxLinearSpeedScale);\r\n\tvoid SetBallGravityScale(float InBallGravityScale);\r\n\tvoid SetBallScale(float NewScale);\r\n\tvoid EventHitGoal(BallWrapper Ball, GoalWrapper Goal);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BaseCameraWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BaseCameraWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BaseCameraWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetDefaultFOV();\r\n\tvoid SetDefaultFOV(float newDefaultFOV);\r\n\tunsigned long GetbLockedFOV();\r\n\tvoid SetbLockedFOV(unsigned long newbLockedFOV);\r\n\tunsigned long GetbConstrainAspectRatio();\r\n\tvoid SetbConstrainAspectRatio(unsigned long newbConstrainAspectRatio);\r\n\tunsigned long GetbEnableFading();\r\n\tvoid SetbEnableFading(unsigned long newbEnableFading);\r\n\tunsigned long GetbFadeAudio();\r\n\tvoid SetbFadeAudio(unsigned long newbFadeAudio);\r\n\tunsigned long GetbForceDisableTemporalAA();\r\n\tvoid SetbForceDisableTemporalAA(unsigned long newbForceDisableTemporalAA);\r\n\tunsigned long GetbEnableColorScaling();\r\n\tvoid SetbEnableColorScaling(unsigned long newbEnableColorScaling);\r\n\tunsigned long GetbEnableColorScaleInterp();\r\n\tvoid SetbEnableColorScaleInterp(unsigned long newbEnableColorScaleInterp);\r\n\tunsigned long GetbUseClientSideCameraUpdates();\r\n\tvoid SetbUseClientSideCameraUpdates(unsigned long newbUseClientSideCameraUpdates);\r\n\tunsigned long GetbDebugClientSideCamera();\r\n\tvoid SetbDebugClientSideCamera(unsigned long newbDebugClientSideCamera);\r\n\tunsigned long GetbShouldSendClientSideCameraUpdate();\r\n\tvoid SetbShouldSendClientSideCameraUpdate(unsigned long newbShouldSendClientSideCameraUpdate);\r\n\tfloat GetLockedFOV();\r\n\tvoid SetLockedFOV(float newLockedFOV);\r\n\tfloat GetConstrainedAspectRatio();\r\n\tvoid SetConstrainedAspectRatio(float newConstrainedAspectRatio);\r\n\tfloat GetDefaultAspectRatio();\r\n\tvoid SetDefaultAspectRatio(float newDefaultAspectRatio);\r\n\tfloat GetOffAxisYawAngle();\r\n\tvoid SetOffAxisYawAngle(float newOffAxisYawAngle);\r\n\tfloat GetOffAxisPitchAngle();\r\n\tvoid SetOffAxisPitchAngle(float newOffAxisPitchAngle);\r\n\tUnrealColor GetFadeColor();\r\n\tvoid SetFadeColor(UnrealColor newFadeColor);\r\n\tfloat GetFadeAmount();\r\n\tvoid SetFadeAmount(float newFadeAmount);\r\n\tfloat GetCamOverridePostProcessAlpha();\r\n\tvoid SetCamOverridePostProcessAlpha(float newCamOverridePostProcessAlpha);\r\n\tVector GetColorScale();\r\n\tvoid SetColorScale(Vector newColorScale);\r\n\tVector GetDesiredColorScale();\r\n\tvoid SetDesiredColorScale(Vector newDesiredColorScale);\r\n\tVector GetOriginalColorScale();\r\n\tvoid SetOriginalColorScale(Vector newOriginalColorScale);\r\n\tfloat GetColorScaleInterpDuration();\r\n\tvoid SetColorScaleInterpDuration(float newColorScaleInterpDuration);\r\n\tfloat GetColorScaleInterpStartTime();\r\n\tvoid SetColorScaleInterpStartTime(float newColorScaleInterpStartTime);\r\n\tViewTarget GetViewTarget();\r\n\tvoid SetViewTarget(ViewTarget newViewTarget);\r\n\tViewTarget GetPendingViewTarget();\r\n\tvoid SetPendingViewTarget(ViewTarget newPendingViewTarget);\r\n\tfloat GetBlendTimeToGo();\r\n\tvoid SetBlendTimeToGo(float newBlendTimeToGo);\r\n\tfloat GetFreeCamDistance();\r\n\tvoid SetFreeCamDistance(float newFreeCamDistance);\r\n\tVector GetFreeCamOffset();\r\n\tvoid SetFreeCamOffset(Vector newFreeCamOffset);\r\n\tfloat GetFadeTime();\r\n\tvoid SetFadeTime(float newFadeTime);\r\n\tfloat GetFadeTimeRemaining();\r\n\tvoid SetFadeTimeRemaining(float newFadeTimeRemaining);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid StopAllCameraAnims(unsigned long bImmediate);\r\n\tvoid ClearAllCameraShakes();\r\n\tfloat CalcRadialShakeScale(BaseCameraWrapper Cam, Vector& Epicenter, float InnerRadius, float OuterRadius, float Falloff);\r\n\tvoid ClearCameraLensEffects();\r\n\tvoid ApplyAudioFade();\r\n\tvoid UpdateFade(float DeltaTime);\r\n\tvoid DoUpdateCamera(float DeltaTime);\r\n\tvoid eventUpdateCamera(float DeltaTime);\r\n\tvoid SetDesiredColorScale2(Vector& NewColorScale, float InterpTime);\r\n\tRotator GetCameraRotation();\r\n\tvoid SetFOV(float NewFOV);\r\n\tfloat GetFOVAngle();\r\n\tvoid eventDestroyed();\r\n\tvoid PostBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BoostPickupWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/VehiclePickupWrapper.h\"\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BoostPickupWrapper : public VehiclePickupWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BoostPickupWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetBoostAmount();\r\n\tvoid SetBoostAmount(float newBoostAmount);\r\n\tunsigned char GetBoostType();\r\n\tvoid SetBoostType(unsigned char newBoostType);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PlayPickedUpFX();\r\n\tvoid Pickup2(CarWrapper Car);\r\n\tbool CanPickup(CarWrapper Car);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/BreakOutActorPlatformWrapper.h",
    "content": "#pragma once\n#include \"..\\Engine\\ActorWrapper.h\"\nclass BallWrapper;\nclass PriWrapper;\n#include <vector>\n\nstruct BreakoutDamageState\n{\n\tunsigned char State;\n\tPriWrapper Causer {0};\n\tVector DamageLocation;\n\tbool bDirectDamage;\n\tbool bImmediate;\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT BreakOutActorPlatformWrapper : public ActorWrapper {\npublic:\n\tCONSTRUCTORS(BreakOutActorPlatformWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t// Slow(ish) method!\n\tstatic std::vector<BreakOutActorPlatformWrapper> GetAllPlatforms();\n\tBreakoutDamageState GetDamagestate() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tunsigned int GetSides();\n\tunsigned int GetbPrimaryPlayerStart();\n\tunsigned int GetTeamIndex();\n\tvoid SetTeamIndex(unsigned int TeamIndex);\n\tunsigned int GetMaxDamage();\n\tvoid SetMaxDamage(unsigned int MaxDamage);\n\tfloat GetNeighborRadius();\n\tvoid SetNeighborRadius(float NeighborRadius);\n\tArrayWrapper<BreakOutActorPlatformWrapper> GetNeighbors();\n\tfloat GetLastHitTime();\n\tvoid SetLastHitTime(float LastHitTime);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tbool IsBroken();\n\tbool IsDamaged();\n\tvoid Reset();\n\tvoid SetDamageState2(unsigned char InDamageState, PriWrapper InDamageCauser, Vector& InLocation, unsigned int bDirectDamage, unsigned int bImmediate);\n\tvoid IncreaseDamage(PriWrapper DamageCauser, Vector& FromLocation, unsigned int bDirectDamage);\n\tbool NeighborDamage(BallWrapper Ball, unsigned int InDamage, Vector& HitLocation);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraSettingsActorWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraSettingsActorWrapper : public ActorWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraSettingsActorWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD PriWrapper GetPri() const;\n\t_NODISCARD ProfileCameraSettings GetProfileSettings() const;\n\t_NODISCARD void SetProfileSettings(const ProfileCameraSettings& profileCameraSettings);\n\t\n\t_NODISCARD bool GetUsingBehindView() const;\n\tvoid SetUsingBehindView(bool bUsingBehindView);\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraStates/CameraStateBlenderWrapper.h",
    "content": "﻿#pragma once\n#include \"CameraStateXWrapper.h\"\n\n\nstruct FViewTargetTransitionParams;\nstruct FCameraOrientation;\nstruct FCameraTransition;\n\nstruct ViewTargetTransitionParams\n{\n\texplicit ViewTargetTransitionParams(const FViewTargetTransitionParams&);\n\texplicit operator FViewTargetTransitionParams() const;\n\n\tfloat blend_time;\n\tunsigned char blend_function;/*ACamera_EViewTargetBlendFunction*/\n\tfloat blend_exp;\n\tbool lock_outgoing;\n};\n\n\nstruct CameraOrientation\n{\n\texplicit CameraOrientation(const FCameraOrientation&);\n\texplicit operator FCameraOrientation() const;\n\n\tVector focus;\n\tRotator rotation;\n\tfloat distance;\n\tfloat fov;\n\tVector calculated_location;\n};\n\nstruct CameraTransition\n{\n\texplicit CameraTransition(const FCameraTransition&);\n\texplicit operator FCameraTransition() const;\n\n\tvoid* camera_state; //CameraStateWrapperX                                      \t\n\tViewTargetTransitionParams blend_params;\n\tfloat remaining_time;\n\tCameraOrientation snapshot_pov;\n\tbool started;\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraStateBlenderWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraStateBlenderWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD CameraStateXWrapper GetCameraState() const;\n\t_NODISCARD CameraTransition GetTransition() const;\n\t_NODISCARD void SetTransition(const CameraTransition& transition) const;\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraStates/CameraStateCarRefWrapper.h",
    "content": "﻿#pragma once\n#include \"CameraStateWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraStateCarRefWrapper : public CameraStateWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraStateCarRefWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraStates/CameraStateCarWrapper.h",
    "content": "﻿#pragma once\n#include \"CameraStateCarRefWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraStateCarWrapper : public CameraStateCarRefWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraStateCarWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\tstatic const CameraStateCarWrapper GetInstanceWithDefaultValues();\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD float GetInterpToGroundRate() const;\n\t_NODISCARD float GetInterpToAirRate() const;\n\t_NODISCARD float GetGroundRotationInterpRate() const;\n\t_NODISCARD float GetGroundRotationInterpRateWall() const;\n\t_NODISCARD float GetFOVInterpSpeed() const;\n\t_NODISCARD float GetSupersonicFOVInterpSpeed() const;\n\t_NODISCARD float GetGroundNormalInterpRate() const;\n\n\tvoid SetInterpToGroundRate(float value);\n\tvoid SetInterpToAirRate(float value);\n\tvoid SetGroundRotationInterpRate(float value);\n\tvoid SetGroundRotationInterpRateWall(float value);\n\tvoid SetFOVInterpSpeed(float value);\n\tvoid SetSupersonicFOVInterpSpeed(float value);\n\tvoid SetGroundNormalInterpRate(float value);\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraStates/CameraStateWrapper.h",
    "content": "﻿#pragma once\n#include \"CameraStateXWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraStateWrapper : public CameraStateXWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraStateWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraStates/CameraStateXWrapper.h",
    "content": "﻿#pragma once\n\n#include \"bakkesmod/wrappers/Engine/ObjectWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT CameraStateXWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(CameraStateXWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t_NODISCARD std::string GetStateType() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraWrapper.h",
    "content": "#pragma once\r\n#include \"CameraStates/CameraStateBlenderWrapper.h\"\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/CameraXWrapper.h\"\r\nclass ActorWrapper;\r\nclass RBActorWrapper;\r\nclass WrapperStructs;\r\nclass CameraSettingsActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CameraWrapper : public CameraXWrapper {\r\npublic:\r\n\tCONSTRUCTORS(CameraWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tVector GetLocation();\r\n\tvoid SetLocation(Vector location);\r\n\tRotator GetRotation();\r\n\tvoid SetRotation(Rotator rotation);\r\n\tProfileCameraSettings GetCameraSettings();\r\n\tvoid SetCameraSettings(ProfileCameraSettings settings);\r\n\tbool IsCameraShakeOn();\r\n\tPOV GetPOV();\r\n\tvoid SetPOV(POV pov); \r\n\tvoid SetFOV(float fov);\r\n\tfloat GetFOV();\r\n\tvoid SetLockedFOV(bool lock);\r\n\tActorWrapper GetCameraAsActor();\r\n\tstd::string GetCameraState();\r\n\tvoid SetCameraState(std::string stateName);\r\n\tVector linterp(Vector start, Vector end, float elapsed, float speed);\t//END SELF IMPLEMENTED\r\n\tstd::string GetFocusActor();\r\n\tbool SetFocusActor(std::string actorName);\r\n    bool SetFlyCamBallTargetMode();\r\n\t_NODISCARD CameraStateBlenderWrapper GetBlender() const;\r\n\t_NODISCARD CameraSettingsActorWrapper GetCameraSettingsActor() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetSwivelFastSpeed();\r\n\tvoid SetSwivelFastSpeed(float newSwivelFastSpeed);\r\n\tfloat GetSwivelDieRate();\r\n\tvoid SetSwivelDieRate(float newSwivelDieRate);\r\n\tStructArrayWrapper<ProfileCameraSettings> GetCameraPresetSettings();\r\n\tfloat GetHorizontalSplitscreenHeightOffset();\r\n\tvoid SetHorizontalSplitscreenHeightOffset(float newHorizontalSplitscreenHeightOffset);\r\n\tfloat GetHorizontalSplitscreenFOVOffset();\r\n\tvoid SetHorizontalSplitscreenFOVOffset(float newHorizontalSplitscreenFOVOffset);\r\n\tfloat GetVerticalSplitscreenFOVOffset();\r\n\tvoid SetVerticalSplitscreenFOVOffset(float newVerticalSplitscreenFOVOffset);\r\n\tfloat GetClipRate();\r\n\tvoid SetClipRate(float newClipRate);\r\n\tRotator GetCurrentSwivel();\r\n\tvoid SetCurrentSwivel(Rotator newCurrentSwivel);\r\n\tRBActorWrapper GetDemolisher();\r\n\tvoid SetDemolisher(RBActorWrapper newDemolisher);\r\n\tunsigned long GetbDemolished();\r\n\tvoid SetbDemolished(unsigned long newbDemolished);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tfloat ClipToField(float CameraLocationZ);\r\n\tvoid Demolished2(RBActorWrapper InDemolisher);\r\n\tRotator GetDesiredSwivel(float LookUp, float LookRight);\r\n\tvoid UpdateSwivel(float DeltaTime);\r\n\tfloat GetDefaultFOVOffset();\r\n\tfloat GetDefaultViewHeightOffset();\r\n\tvoid UpdateFOV();\r\n\tvoid EventCameraTargetChanged(CameraWrapper Camera, ActorWrapper Target);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CameraXWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/BaseCameraWrapper.h\"\r\nclass ActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CameraXWrapper : public BaseCameraWrapper {\r\npublic:\r\n\tCONSTRUCTORS(CameraXWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tRotator GetPCDeltaRotation();\r\n\tvoid SetPCDeltaRotation(Rotator newPCDeltaRotation);\r\n\tRotator GetOldControllerRotation();\r\n\tvoid SetOldControllerRotation(Rotator newOldControllerRotation);\r\n\tVector GetPCDeltaLocation();\r\n\tvoid SetPCDeltaLocation(Vector newPCDeltaLocation);\r\n\tVector GetOldControllerLocation();\r\n\tvoid SetOldControllerLocation(Vector newOldControllerLocation);\r\n\tVector GetShakeLocationOffset();\r\n\tvoid SetShakeLocationOffset(Vector newShakeLocationOffset);\r\n\tRotator GetShakeRotationOffset();\r\n\tvoid SetShakeRotationOffset(Rotator newShakeRotationOffset);\r\n\tfloat GetShakeFOVOffset();\r\n\tvoid SetShakeFOVOffset(float newShakeFOVOffset);\r\n\tUnrealColor GetStartFadeColor();\r\n\tvoid SetStartFadeColor(UnrealColor newStartFadeColor);\r\n\tUnrealColor GetEndFadeColor();\r\n\tvoid SetEndFadeColor(UnrealColor newEndFadeColor);\r\n\tVector GetClipOffset();\r\n\tvoid SetClipOffset(Vector newClipOffset);\r\n\tunsigned long GetbDisableCameraShake();\r\n\tvoid SetbDisableCameraShake(unsigned long newbDisableCameraShake);\r\n\tunsigned long GetbSnapNextTransition();\r\n\tvoid SetbSnapNextTransition(unsigned long newbSnapNextTransition);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventOnViewTargetChanged();\r\n\tbool IsTransitioning();\r\n\tvoid SnapTransition();\r\n\tvoid CopyFade(CameraXWrapper Other);\r\n\tvoid UpdateFade(float DeltaTime);\r\n\tvoid eventUpdateCamera(float DeltaTime);\r\n\tRotator RemoveRoll(Rotator& InRot);\r\n\tvoid UpdateCameraState();\r\n\tvoid InstanceCameraStates();\r\n\tvoid OnLoadingMovieClosesd();\r\n\tvoid eventPostBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/AirControlComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT AirControlComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(AirControlComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tRotator GetAirTorque();\r\n\tvoid SetAirTorque(Rotator newAirTorque);\r\n\tRotator GetAirDamping();\r\n\tvoid SetAirDamping(Rotator newAirDamping);\r\n\tfloat GetThrottleForce();\r\n\tvoid SetThrottleForce(float newThrottleForce);\r\n\tfloat GetDodgeDisableTimeRemaining();\r\n\tvoid SetDodgeDisableTimeRemaining(float newDodgeDisableTimeRemaining);\r\n\tfloat GetControlScale();\r\n\tvoid SetControlScale(float newControlScale);\r\n\tfloat GetAirControlSensitivity();\r\n\tvoid SetAirControlSensitivity(float newAirControlSensitivity);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid OnCreated();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/BoostWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BoostWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BoostWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\t//END SELF IMPLEMENTED\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetBoostConsumptionRate();\r\n\tvoid SetBoostConsumptionRate(float newBoostConsumptionRate);\r\n\tfloat GetMaxBoostAmount();\r\n\tvoid SetMaxBoostAmount(float newMaxBoostAmount);\r\n\tfloat GetStartBoostAmount();\r\n\tvoid SetStartBoostAmount(float newStartBoostAmount);\r\n\tfloat GetCurrentBoostAmount();\r\n\tvoid SetCurrentBoostAmount(float newCurrentBoostAmount);\r\n\tfloat GetBoostModifier();\r\n\tvoid SetBoostModifier(float newBoostModifier);\r\n\tfloat GetLastBoostAmountRequestTime();\r\n\tvoid SetLastBoostAmountRequestTime(float newLastBoostAmountRequestTime);\r\n\tfloat GetLastBoostAmount();\r\n\tvoid SetLastBoostAmount(float newLastBoostAmount);\r\n\tunsigned long GetbPendingConfirmBoostAmount();\r\n\tvoid SetbPendingConfirmBoostAmount(unsigned long newbPendingConfirmBoostAmount);\r\n\tunsigned long GetbNoBoost();\r\n\tvoid SetbNoBoost(unsigned long newbNoBoost);\r\n\tfloat GetBoostForce();\r\n\tvoid SetBoostForce(float newBoostForce);\r\n\tfloat GetMinBoostTime();\r\n\tvoid SetMinBoostTime(float newMinBoostTime);\r\n\tfloat GetRechargeRate();\r\n\tvoid SetRechargeRate(float newRechargeRate);\r\n\tfloat GetRechargeDelay();\r\n\tvoid SetRechargeDelay(float newRechargeDelay);\r\n\tint GetUnlimitedBoostRefCount();\r\n\tvoid SetUnlimitedBoostRefCount(int newUnlimitedBoostRefCount);\r\n\tunsigned char GetReplicatedBoostAmount();\r\n\tvoid SetReplicatedBoostAmount(unsigned char newReplicatedBoostAmount);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tbool ShouldPredictBoostConsumption();\r\n\tvoid ReadReplicatedBoostAmount();\r\n\tvoid eventSetReplicatedBoostAmount();\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid ClientGiveBoost(float Amount);\r\n\tvoid ConfirmBoostAmount2();\r\n\tvoid SendConfirmBoostAmount();\r\n\tvoid ClientFixBoostAmount(float TimeStamp, float Amount);\r\n\tvoid ServerConfirmBoostAmount(float TimeStamp, float Amount);\r\n\tvoid SetRechargeDelay2(float InRechargeDelay);\r\n\tvoid SetRechargeRate2(float InRechargeRate);\r\n\tvoid SetNoBoost(unsigned long Enabled);\r\n\tvoid SetUnlimitedBoost2(unsigned long Enabled);\r\n\tvoid SetUnlimitedBoostDelayed(unsigned long Enabled);\r\n\tvoid SetBoostModifier2(float Modifier);\r\n\tvoid SetBoostAmount(float Amount);\r\n\tvoid GiveBoost2(float Amount);\r\n\tvoid GiveStartingBoost();\r\n\tvoid GiveFullBoost();\r\n\tfloat GetPercentBoostFull();\r\n\tbool IsFull();\r\n\tvoid RemoveFromCar();\r\n\tbool CanDeactivate();\r\n\tbool CanActivate();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/CarComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ActorWrapper.h\"\r\nclass CarWrapper;\r\nclass PriWrapper;\r\nclass FXActorWrapper;\r\nclass VehicleWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CarComponentWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(CarComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tFXActorWrapper GetFXActorArchetype();\r\n\tvoid SetFXActorArchetype(FXActorWrapper newFXActorArchetype);\r\n\tunsigned long GetbDisabled();\r\n\tvoid SetbDisabled(unsigned long newbDisabled);\r\n\tunsigned long GetbAutoActivate();\r\n\tvoid SetbAutoActivate(unsigned long newbAutoActivate);\r\n\tunsigned long GetbSimulateComponent();\r\n\tvoid SetbSimulateComponent(unsigned long newbSimulateComponent);\r\n\tunsigned long GetbCreated();\r\n\tvoid SetbCreated(unsigned long newbCreated);\r\n\tunsigned long GetbActive();\r\n\tvoid SetbActive(unsigned long newbActive);\r\n\tunsigned long GetbRemovedFromCar();\r\n\tvoid SetbRemovedFromCar(unsigned long newbRemovedFromCar);\r\n\tunsigned char GetComponentData();\r\n\tvoid SetComponentData(unsigned char newComponentData);\r\n\tunsigned char GetReplicatedActive();\r\n\tvoid SetReplicatedActive(unsigned char newReplicatedActive);\r\n\tPriWrapper GetActivator();\r\n\tvoid SetActivator(PriWrapper newActivator);\r\n\tVehicleWrapper GetVehicle();\r\n\tvoid SetVehicle(VehicleWrapper newVehicle);\r\n\tCarWrapper GetCar();\r\n\tvoid SetCar(CarWrapper newCar);\r\n\tfloat GetActivityTime();\r\n\tvoid SetActivityTime(float newActivityTime);\r\n\tfloat GetReplicatedActivityTime();\r\n\tvoid SetReplicatedActivityTime(float newReplicatedActivityTime);\r\n\tFXActorWrapper GetFXActor();\r\n\tvoid SetFXActor(FXActorWrapper newFXActor);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventFellOutOfWorld();\r\n\tfloat GetInactiveTime();\r\n\tfloat GetActiveTime();\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid PrePhysicsStep(float DeltaTime);\r\n\tvoid RemoveFromCar();\r\n\tbool CanDeactivate();\r\n\tbool ConditionalDeactivate();\r\n\tbool CanActivate();\r\n\tbool ConditionalActivate();\r\n\tvoid SetActive(unsigned long bNewActive);\r\n\tvoid Deactivate2();\r\n\tvoid Activate2();\r\n\tvoid UnregisterCarEvents();\r\n\tvoid RegisterCarEvents();\r\n\tvoid HandleVehicleSetup(CarWrapper InCar);\r\n\tvoid OnVehicleSetupComplete();\r\n\tvoid Create2(CarWrapper OwnerCar, PriWrapper InActivator);\r\n\tvoid ClientUpdateActive();\r\n\tvoid EventActivationChanged(CarComponentWrapper CarComponent);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/DodgeComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT DodgeComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(DodgeComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetDodgeInputThreshold();\r\n\tvoid SetDodgeInputThreshold(float newDodgeInputThreshold);\r\n\tfloat GetSideDodgeImpulse();\r\n\tvoid SetSideDodgeImpulse(float newSideDodgeImpulse);\r\n\tfloat GetSideDodgeImpulseMaxSpeedScale();\r\n\tvoid SetSideDodgeImpulseMaxSpeedScale(float newSideDodgeImpulseMaxSpeedScale);\r\n\tfloat GetForwardDodgeImpulse();\r\n\tvoid SetForwardDodgeImpulse(float newForwardDodgeImpulse);\r\n\tfloat GetForwardDodgeImpulseMaxSpeedScale();\r\n\tvoid SetForwardDodgeImpulseMaxSpeedScale(float newForwardDodgeImpulseMaxSpeedScale);\r\n\tfloat GetBackwardDodgeImpulse();\r\n\tvoid SetBackwardDodgeImpulse(float newBackwardDodgeImpulse);\r\n\tfloat GetBackwardDodgeImpulseMaxSpeedScale();\r\n\tvoid SetBackwardDodgeImpulseMaxSpeedScale(float newBackwardDodgeImpulseMaxSpeedScale);\r\n\tfloat GetSideDodgeTorque();\r\n\tvoid SetSideDodgeTorque(float newSideDodgeTorque);\r\n\tfloat GetForwardDodgeTorque();\r\n\tvoid SetForwardDodgeTorque(float newForwardDodgeTorque);\r\n\tfloat GetDodgeTorqueTime();\r\n\tvoid SetDodgeTorqueTime(float newDodgeTorqueTime);\r\n\tfloat GetMinDodgeTorqueTime();\r\n\tvoid SetMinDodgeTorqueTime(float newMinDodgeTorqueTime);\r\n\tfloat GetDodgeZDamping();\r\n\tvoid SetDodgeZDamping(float newDodgeZDamping);\r\n\tfloat GetDodgeZDampingDelay();\r\n\tvoid SetDodgeZDampingDelay(float newDodgeZDampingDelay);\r\n\tfloat GetDodgeZDampingUpTime();\r\n\tvoid SetDodgeZDampingUpTime(float newDodgeZDampingUpTime);\r\n\tfloat GetDodgeImpulseScale();\r\n\tvoid SetDodgeImpulseScale(float newDodgeImpulseScale);\r\n\tfloat GetDodgeTorqueScale();\r\n\tvoid SetDodgeTorqueScale(float newDodgeTorqueScale);\r\n\tVector GetDodgeTorque();\r\n\tvoid SetDodgeTorque(Vector newDodgeTorque);\r\n\tVector GetDodgeDirection();\r\n\tvoid SetDodgeDirection(Vector newDodgeDirection);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid SetDodgeSettings();\r\n\tvoid ApplyTorqueForces(float ActiveTime);\r\n\tvoid ApplyDodgeImpulse();\r\n\tVector GetDodgeImpulse2(Vector& DodgeDir);\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tbool CanActivate();\r\n\tvoid OnCreated();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/DoubleJumpComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT DoubleJumpComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(DoubleJumpComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tvoid SetJumpImpulse(float newJumpImpulse);\r\n\tfloat GetImpulseScale();\r\n\tvoid SetImpulseScale(float newImpulseScale);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid OnCreated();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/FlipCarComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT FlipCarComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(FlipCarComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetFlipCarImpulse();\r\n\tvoid SetFlipCarImpulse(float newFlipCarImpulse);\r\n\tfloat GetFlipCarTorque();\r\n\tvoid SetFlipCarTorque(float newFlipCarTorque);\r\n\tfloat GetFlipCarTime();\r\n\tvoid SetFlipCarTime(float newFlipCarTime);\r\n\tunsigned long GetbFlipRight();\r\n\tvoid SetbFlipRight(unsigned long newbFlipRight);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid InitFlip();\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tbool CanActivate();\r\n\tvoid OnCreated();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/JumpComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT JumpComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(JumpComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetMinJumpTime();\r\n\tvoid SetMinJumpTime(float newMinJumpTime);\r\n\tfloat GetJumpImpulse();\r\n\tvoid SetJumpImpulse(float newJumpImpulse);\r\n\tfloat GetJumpForce();\r\n\tvoid SetJumpForce(float newJumpForce);\r\n\tfloat GetJumpForceTime();\r\n\tvoid SetJumpForceTime(float newJumpForceTime);\r\n\tfloat GetPodiumJumpForceTime();\r\n\tvoid SetPodiumJumpForceTime(float newPodiumJumpForceTime);\r\n\tfloat GetJumpImpulseSpeed();\r\n\tvoid SetJumpImpulseSpeed(float newJumpImpulseSpeed);\r\n\tfloat GetJumpAccel();\r\n\tvoid SetJumpAccel(float newJumpAccel);\r\n\tfloat GetMaxJumpHeight();\r\n\tvoid SetMaxJumpHeight(float newMaxJumpHeight);\r\n\tfloat GetMaxJumpHeightTime();\r\n\tvoid SetMaxJumpHeightTime(float newMaxJumpHeightTime);\r\n\tunsigned long GetbDeactivate();\r\n\tvoid SetbDeactivate(unsigned long newbDeactivate);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid CacheJumpData();\r\n\tvoid OnCreated();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/PrimitiveComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PrimitiveComponentWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PrimitiveComponentWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\tvoid SetOwnerNoSee(bool newOwnerNoSee);\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned char GetRBChannel();\r\n\tvoid SetRBChannel(unsigned char newRBChannel);\r\n\tunsigned char GetRBDominanceGroup();\r\n\tvoid SetRBDominanceGroup(unsigned char newRBDominanceGroup);\r\n\tunsigned long GetbOnlyBlockActorMovement();\r\n\tvoid SetbOnlyBlockActorMovement(unsigned long newbOnlyBlockActorMovement);\r\n\tunsigned long GetHiddenGame();\r\n\tvoid SetHiddenGame(unsigned long newHiddenGame);\r\n\tunsigned long GetbOwnerNoSee();\r\n\tvoid SetbOwnerNoSee(unsigned long newbOwnerNoSee);\r\n\tunsigned long GetbOnlyOwnerSee();\r\n\tvoid SetbOnlyOwnerSee(unsigned long newbOnlyOwnerSee);\r\n\tunsigned long GetbIgnoreOwnerHidden();\r\n\tvoid SetbIgnoreOwnerHidden(unsigned long newbIgnoreOwnerHidden);\r\n\tunsigned long GetbUseAsOccluder();\r\n\tvoid SetbUseAsOccluder(unsigned long newbUseAsOccluder);\r\n\tunsigned long GetbAllowApproximateOcclusion();\r\n\tvoid SetbAllowApproximateOcclusion(unsigned long newbAllowApproximateOcclusion);\r\n\tunsigned long GetbFirstFrameOcclusion();\r\n\tvoid SetbFirstFrameOcclusion(unsigned long newbFirstFrameOcclusion);\r\n\tunsigned long GetbIgnoreNearPlaneIntersection();\r\n\tvoid SetbIgnoreNearPlaneIntersection(unsigned long newbIgnoreNearPlaneIntersection);\r\n\tunsigned long GetbAcceptsStaticDecals();\r\n\tunsigned long GetbAcceptsDynamicDecals();\r\n\tunsigned long GetbIsRefreshingDecals();\r\n\tunsigned long GetCastShadow();\r\n\tvoid SetCastShadow(unsigned long newCastShadow);\r\n\tunsigned long GetbForceDirectLightMap();\r\n\tvoid SetbForceDirectLightMap(unsigned long newbForceDirectLightMap);\r\n\tunsigned long GetbCastDynamicShadow();\r\n\tvoid SetbCastDynamicShadow(unsigned long newbCastDynamicShadow);\r\n\tunsigned long GetbCastStaticShadow();\r\n\tvoid SetbCastStaticShadow(unsigned long newbCastStaticShadow);\r\n\tunsigned long GetbSelfShadowOnly();\r\n\tvoid SetbSelfShadowOnly(unsigned long newbSelfShadowOnly);\r\n\tunsigned long GetbNoModSelfShadow();\r\n\tvoid SetbNoModSelfShadow(unsigned long newbNoModSelfShadow);\r\n\tunsigned long GetbAcceptsDynamicDominantLightShadows();\r\n\tvoid SetbAcceptsDynamicDominantLightShadows(unsigned long newbAcceptsDynamicDominantLightShadows);\r\n\tunsigned long GetbCastHiddenShadow();\r\n\tvoid SetbCastHiddenShadow(unsigned long newbCastHiddenShadow);\r\n\tunsigned long GetbCastShadowAsTwoSided();\r\n\tvoid SetbCastShadowAsTwoSided(unsigned long newbCastShadowAsTwoSided);\r\n\tunsigned long GetbAcceptsLights();\r\n\tvoid SetbAcceptsLights(unsigned long newbAcceptsLights);\r\n\tunsigned long GetbAcceptsDynamicLights();\r\n\tvoid SetbAcceptsDynamicLights(unsigned long newbAcceptsDynamicLights);\r\n\tunsigned long GetbUseOnePassLightingOnTranslucency();\r\n\tvoid SetbUseOnePassLightingOnTranslucency(unsigned long newbUseOnePassLightingOnTranslucency);\r\n\tunsigned long GetbUsePrecomputedShadows();\r\n\tunsigned long GetbHasExplicitShadowParent();\r\n\tunsigned long GetCollideActors();\r\n\tvoid SetCollideActors(unsigned long newCollideActors);\r\n\tunsigned long GetAlwaysCheckCollision();\r\n\tvoid SetAlwaysCheckCollision(unsigned long newAlwaysCheckCollision);\r\n\tunsigned long GetBlockActors();\r\n\tvoid SetBlockActors(unsigned long newBlockActors);\r\n\tunsigned long GetBlockZeroExtent();\r\n\tvoid SetBlockZeroExtent(unsigned long newBlockZeroExtent);\r\n\tunsigned long GetBlockNonZeroExtent();\r\n\tvoid SetBlockNonZeroExtent(unsigned long newBlockNonZeroExtent);\r\n\tunsigned long GetCanBlockCamera();\r\n\tvoid SetCanBlockCamera(unsigned long newCanBlockCamera);\r\n\tunsigned long GetBlockRigidBody();\r\n\tvoid SetBlockRigidBody(unsigned long newBlockRigidBody);\r\n\tunsigned long GetbBlockFootPlacement();\r\n\tvoid SetbBlockFootPlacement(unsigned long newbBlockFootPlacement);\r\n\tunsigned long GetbDisableAllRigidBody();\r\n\tvoid SetbDisableAllRigidBody(unsigned long newbDisableAllRigidBody);\r\n\tunsigned long GetbSkipRBGeomCreation();\r\n\tvoid SetbSkipRBGeomCreation(unsigned long newbSkipRBGeomCreation);\r\n\tunsigned long GetbNotifyRigidBodyCollision();\r\n\tvoid SetbNotifyRigidBodyCollision(unsigned long newbNotifyRigidBodyCollision);\r\n\tunsigned long GetbFluidDrain();\r\n\tvoid SetbFluidDrain(unsigned long newbFluidDrain);\r\n\tunsigned long GetbFluidTwoWay();\r\n\tvoid SetbFluidTwoWay(unsigned long newbFluidTwoWay);\r\n\tunsigned long GetbIgnoreRadialImpulse();\r\n\tvoid SetbIgnoreRadialImpulse(unsigned long newbIgnoreRadialImpulse);\r\n\tunsigned long GetbIgnoreRadialForce();\r\n\tvoid SetbIgnoreRadialForce(unsigned long newbIgnoreRadialForce);\r\n\tunsigned long GetbIgnoreForceField();\r\n\tvoid SetbIgnoreForceField(unsigned long newbIgnoreForceField);\r\n\tunsigned long GetbUseCompartment();\r\n\tvoid SetbUseCompartment(unsigned long newbUseCompartment);\r\n\tunsigned long GetAlwaysLoadOnClient();\r\n\tvoid SetAlwaysLoadOnClient(unsigned long newAlwaysLoadOnClient);\r\n\tunsigned long GetAlwaysLoadOnServer();\r\n\tvoid SetAlwaysLoadOnServer(unsigned long newAlwaysLoadOnServer);\r\n\tunsigned long GetbIgnoreHiddenActorsMembership();\r\n\tvoid SetbIgnoreHiddenActorsMembership(unsigned long newbIgnoreHiddenActorsMembership);\r\n\tunsigned long GetAbsoluteTranslation();\r\n\tvoid SetAbsoluteTranslation(unsigned long newAbsoluteTranslation);\r\n\tunsigned long GetAbsoluteRotation();\r\n\tvoid SetAbsoluteRotation(unsigned long newAbsoluteRotation);\r\n\tunsigned long GetAbsoluteScale();\r\n\tvoid SetAbsoluteScale(unsigned long newAbsoluteScale);\r\n\tint GetVisibilityId();\r\n\tvoid SetVisibilityId(int newVisibilityId);\r\n\tVector GetTranslation();\r\n\tvoid SetTranslation(Vector newTranslation);\r\n\tRotator GetRotation();\r\n\tvoid SetRotation(Rotator newRotation);\r\n\tfloat GetScale();\r\n\tvoid SetScale(float newScale);\r\n\tVector GetScale3D();\r\n\tvoid SetScale3D(Vector newScale3D);\r\n\tfloat GetBoundsScale();\r\n\tvoid SetBoundsScale(float newBoundsScale);\r\n\tvoid SetLastSubmitTime(float newLastSubmitTime);\r\n\tfloat GetLastRenderTime();\r\n\tfloat GetScriptRigidBodyCollisionThreshold();\r\n\tvoid SetScriptRigidBodyCollisionThreshold(float newScriptRigidBodyCollisionThreshold);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid TermRBPhys();\r\n\tvoid InitRBPhys();\r\n\tvoid SetNotifyRigidBodyCollision(unsigned long bNewNotifyRigidBodyCollision);\r\n\tvoid SetRBChannel2(unsigned char Channel);\r\n\tvoid SetRBCollidesWithChannel(unsigned char Channel, unsigned long bNewCollides);\r\n\tvoid SetBlockRigidBody2(unsigned long bNewBlockRigidBody);\r\n\tvoid RetardRBLinearVelocity(Vector& RetardDir, float VelScale);\r\n\tvoid SetRBAngularVelocity(Vector& NewAngVel, unsigned long bAddToCurrent);\r\n\tvoid SetRBLinearVelocity(Vector& NewVel, unsigned long bAddToCurrent);\r\n\tvoid AddRadialForce(Vector& Origin, float Radius, float Strength, unsigned char Falloff);\r\n\tvoid AddRadialImpulse(Vector& Origin, float Radius, float Strength, unsigned char Falloff, unsigned long bVelChange);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/VehicleSimWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass VehicleWrapper;\r\nclass CarWrapper;\r\nclass WheelWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT VehicleSimWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(VehicleSimWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tArrayWrapper<WheelWrapper> GetWheels();\r\n\tfloat GetDriveTorque();\r\n\tvoid SetDriveTorque(float newDriveTorque);\r\n\tfloat GetBrakeTorque();\r\n\tvoid SetBrakeTorque(float newBrakeTorque);\r\n\tfloat GetStopThreshold();\r\n\tvoid SetStopThreshold(float newStopThreshold);\r\n\tfloat GetIdleBrakeFactor();\r\n\tvoid SetIdleBrakeFactor(float newIdleBrakeFactor);\r\n\tfloat GetOppositeBrakeFactor();\r\n\tvoid SetOppositeBrakeFactor(float newOppositeBrakeFactor);\r\n\tunsigned long GetbUseAckermannSteering();\r\n\tvoid SetbUseAckermannSteering(unsigned long newbUseAckermannSteering);\r\n\tunsigned long GetbWasAttached();\r\n\tvoid SetbWasAttached(unsigned long newbWasAttached);\r\n\tfloat GetOutputThrottle();\r\n\tvoid SetOutputThrottle(float newOutputThrottle);\r\n\tfloat GetOutputSteer();\r\n\tvoid SetOutputSteer(float newOutputSteer);\r\n\tfloat GetOutputBrake();\r\n\tvoid SetOutputBrake(float newOutputBrake);\r\n\tfloat GetOutputHandbrake();\r\n\tvoid SetOutputHandbrake(float newOutputHandbrake);\r\n\tVehicleWrapper GetVehicle();\r\n\tvoid SetVehicle(VehicleWrapper newVehicle);\r\n\tCarWrapper GetCar();\r\n\tvoid SetCar(CarWrapper newCar);\r\n\tfloat GetSteeringSensitivity();\r\n\tvoid SetSteeringSensitivity(float newSteeringSensitivity);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarComponent/WheelWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass VehicleSimWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT WheelWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(WheelWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetSteerFactor();\r\n\tvoid SetSteerFactor(float newSteerFactor);\r\n\tfloat GetWheelRadius();\r\n\tvoid SetWheelRadius(float newWheelRadius);\r\n\tfloat GetSuspensionStiffness();\r\n\tvoid SetSuspensionStiffness(float newSuspensionStiffness);\r\n\tfloat GetSuspensionDampingCompression();\r\n\tvoid SetSuspensionDampingCompression(float newSuspensionDampingCompression);\r\n\tfloat GetSuspensionDampingRelaxation();\r\n\tvoid SetSuspensionDampingRelaxation(float newSuspensionDampingRelaxation);\r\n\tfloat GetSuspensionTravel();\r\n\tvoid SetSuspensionTravel(float newSuspensionTravel);\r\n\tfloat GetSuspensionMaxRaise();\r\n\tvoid SetSuspensionMaxRaise(float newSuspensionMaxRaise);\r\n\tfloat GetContactForceDistance();\r\n\tvoid SetContactForceDistance(float newContactForceDistance);\r\n\tfloat GetSpinSpeedDecayRate();\r\n\tvoid SetSpinSpeedDecayRate(float newSpinSpeedDecayRate);\r\n\tVector GetBoneOffset();\r\n\tvoid SetBoneOffset(Vector newBoneOffset);\r\n\tVector GetPresetRestPosition();\r\n\tvoid SetPresetRestPosition(Vector newPresetRestPosition);\r\n\tVector GetLocalSuspensionRayStart();\r\n\tvoid SetLocalSuspensionRayStart(Vector newLocalSuspensionRayStart);\r\n\tVector GetLocalRestPosition();\r\n\tvoid SetLocalRestPosition(Vector newLocalRestPosition);\r\n\tVehicleSimWrapper GetVehicleSim();\r\n\tvoid SetVehicleSim(VehicleSimWrapper newVehicleSim);\r\n\tint GetWheelIndex();\r\n\tvoid SetWheelIndex(int newWheelIndex);\r\n\tWheelContactData GetContact();\r\n\tvoid SetContact(WheelContactData newContact);\r\n\tunsigned long GetbDrawDebug();\r\n\tvoid SetbDrawDebug(unsigned long newbDrawDebug);\r\n\tunsigned long GetbHadContact();\r\n\tvoid SetbHadContact(unsigned long newbHadContact);\r\n\tfloat GetFrictionCurveInput();\r\n\tvoid SetFrictionCurveInput(float newFrictionCurveInput);\r\n\tfloat GetAerialThrottleToVelocityFactor();\r\n\tvoid SetAerialThrottleToVelocityFactor(float newAerialThrottleToVelocityFactor);\r\n\tfloat GetAerialAccelerationFactor();\r\n\tvoid SetAerialAccelerationFactor(float newAerialAccelerationFactor);\r\n\tfloat GetSpinSpeed();\r\n\tvoid SetSpinSpeed(float newSpinSpeed);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tVector GetRefWheelLocation();\r\n\tfloat GetSuspensionDistance();\r\n\tfloat GetSteer2();\r\n\tVector GetLinearVelocity();\r\n\tvoid EventContactChanged(WheelWrapper Wheel);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/CarWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/VehicleWrapper.h\"\r\nclass WheelWrapper;\r\nclass PriXWrapper;\r\nclass GameEventWrapper;\r\nclass RumblePickupComponentWrapper;\r\nclass ActorWrapper;\r\nclass RBActorWrapper;\r\nclass PriWrapper;\r\nclass FXActorWrapper;\r\nclass CarComponentWrapper;\r\nclass FlipCarComponentWrapper;\r\nclass BallWrapper;\r\nclass PrimitiveComponentWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CarWrapper : public VehicleWrapper {\r\npublic:\r\n\tCONSTRUCTORS(CarWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tbool IsBoostCheap();\r\n\tvoid SetBoostCheap(bool b);\r\n\tvoid SetCarRotation(Rotator rotation);\r\n\tvoid ForceBoost(bool force);\r\n    std::string GetOwnerName();\r\n\tvoid Unfreeze();\r\n\tControllerInput GetInput();\r\n\tvoid SetInput(ControllerInput input);\r\n\tvoid Destroy();\r\n\tvoid Demolish();\r\n\tunsigned long HasFlip();\r\n\tint GetLoadoutBody();\t//END SELF IMPLEMENTED\r\n\r\n\tPrimitiveComponentWrapper GetNameplateMeshComponent();\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\t//Only works in freeplay\r\n\tvoid SetCarColor(LinearColor mainColor, LinearColor secondaryColor);\r\n\r\n\tArrayWrapper<CarComponentWrapper> GetDefaultCarComponents();\r\n\tFlipCarComponentWrapper GetFlipComponent();\r\n\tunsigned char GetDemolishTarget();\r\n\tvoid SetDemolishTarget(unsigned char newDemolishTarget);\r\n\tunsigned char GetDemolishSpeed();\r\n\tvoid SetDemolishSpeed(unsigned char newDemolishSpeed);\r\n\tunsigned long GetbLoadoutSet();\r\n\tvoid SetbLoadoutSet(unsigned long newbLoadoutSet);\r\n\tunsigned long GetbDemolishOnOpposingGround();\r\n\tvoid SetbDemolishOnOpposingGround(unsigned long newbDemolishOnOpposingGround);\r\n\tunsigned long GetbWasOnOpposingGround();\r\n\tvoid SetbWasOnOpposingGround(unsigned long newbWasOnOpposingGround);\r\n\tunsigned long GetbDemolishOnGoalZone();\r\n\tvoid SetbDemolishOnGoalZone(unsigned long newbDemolishOnGoalZone);\r\n\tunsigned long GetbWasInGoalZone();\r\n\tvoid SetbWasInGoalZone(unsigned long newbWasInGoalZone);\r\n\tunsigned long GetbOverrideHandbrakeOn();\r\n\tvoid SetbOverrideHandbrakeOn(unsigned long newbOverrideHandbrakeOn);\r\n\tunsigned long GetbCollidesWithVehicles();\r\n\tvoid SetbCollidesWithVehicles(unsigned long newbCollidesWithVehicles);\r\n\tunsigned long GetbOverrideBoostOn();\r\n\tvoid SetbOverrideBoostOn(unsigned long newbOverrideBoostOn);\r\n\tFXActorWrapper GetExitFXArchetype();\r\n\tvoid SetExitFXArchetype(FXActorWrapper newExitFXArchetype);\r\n\tfloat GetMaxTimeForDodge();\r\n\tvoid SetMaxTimeForDodge(float newMaxTimeForDodge);\r\n\tfloat GetLastWheelsHitBallTime();\r\n\tvoid SetLastWheelsHitBallTime(float newLastWheelsHitBallTime);\r\n\tfloat GetReplicatedCarScale();\r\n\tvoid SetReplicatedCarScale(float newReplicatedCarScale);\r\n\tFXActorWrapper GetBodyFXActor();\r\n\tvoid SetBodyFXActor(FXActorWrapper newBodyFXActor);\r\n\tPriWrapper GetAttackerPRI();\r\n\tvoid SetAttackerPRI(PriWrapper newAttackerPRI);\r\n\tVector GetMouseAccel();\r\n\tvoid SetMouseAccel(Vector newMouseAccel);\r\n\tVector GetMouseAirAccel();\r\n\tvoid SetMouseAirAccel(Vector newMouseAirAccel);\r\n\tRumblePickupComponentWrapper GetAttachedPickup();\r\n\tvoid SetAttachedPickup(RumblePickupComponentWrapper newAttachedPickup);\r\n\tVector GetReplayFocusOffset();\r\n\tvoid SetReplayFocusOffset(Vector newReplayFocusOffset);\r\n\tfloat GetAddedBallForceMultiplier();\r\n\tvoid SetAddedBallForceMultiplier(float newAddedBallForceMultiplier);\r\n\tfloat GetAddedCarForceMultiplier();\r\n\tvoid SetAddedCarForceMultiplier(float newAddedCarForceMultiplier);\r\n\tGameEventWrapper GetGameEvent();\r\n\tvoid SetGameEvent(GameEventWrapper newGameEvent);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tfloat GetMaxDriveBackwardsSpeed();\r\n\tfloat GetMaxDriveForwardSpeed();\r\n\tVector GetReplayFocusLocation();\r\n\tvoid OnPickupChanged(RumblePickupComponentWrapper InPickup);\r\n\tvoid SetAttachedPickup2(RumblePickupComponentWrapper InPickup);\r\n\tvoid EnablePodiumMode();\r\n\tvoid CopyPushFactorCurve();\r\n\tvoid ClearAttacker();\r\n\tvoid NotifyNewAttacker(PriWrapper Attacker);\r\n\tvoid UpdateBallIndicator();\r\n\tvoid eventOnSuperSonicChanged();\r\n\tvoid eventOnGroundChanged();\r\n\tvoid FellOutOfWorld();\r\n\tvoid DemolishDestroyTimer();\r\n\tvoid Demolish2(RBActorWrapper Demolisher);\r\n\tbool Teleport(Vector& SpawnLocation, Rotator& SpawnRotation, unsigned long bStopVelocity, unsigned long bUpdateRotation, float ExtraForce);\r\n\tvoid OnJumpReleased();\r\n\tvoid OnJumpPressed();\r\n\tvoid eventSetVehicleInput(ControllerInput& NewInput);\r\n\tbool CanDemolish(CarWrapper HitCar);\r\n\tbool ShouldDemolish(CarWrapper HitCar, Vector& HitLocation, Vector& HitNormal, unsigned char* Result);\r\n\tunsigned char ApplyCarImpactForces(CarWrapper OtherCar, Vector& HitLocation, Vector& HitNormal);\r\n\tbool IsBumperHit(CarWrapper OtherCar);\r\n\tvoid ApplyBallImpactForces(BallWrapper Ball, Vector& HitLocation);\r\n\tbool IsDodging();\r\n\tvoid OnHitBall(BallWrapper Ball, Vector& HitLocation, Vector& HitNormal);\r\n\tbool AnyWheelTouchingGround();\r\n\tCarComponentWrapper GiveCarComponent(CarComponentWrapper ComponentArchetype, PriWrapper Activator);\r\n\tvoid AddDefaultCarComponents();\r\n\tvoid DetachPrimitiveComponent(PrimitiveComponentWrapper Component);\r\n\tvoid HandleWheelBallHit(WheelWrapper Wheel);\r\n\tvoid RespawnInPlace();\r\n\tvoid SetCarScale(float NewScale);\r\n\tvoid OnClubColorsChanged();\r\n\tvoid HandleTeamChanged(PriXWrapper MyPRI);\r\n\tbool UpdateTeamLoadout();\r\n\tvoid InitTeamPaint();\r\n\tint GetLoadoutTeamIndex();\r\n\tint GetPreviewTeamIndex();\r\n\tbool HasTeam();\r\n\tvoid HandleLoadoutSelected(PriWrapper MyPRI);\r\n\tvoid HandleGameEventChanged(PriWrapper MyPRI);\r\n\tvoid OnPRIChanged();\r\n\tvoid OnControllerChanged();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/ClubDetailsWrapper.h",
    "content": "#pragma once\n#include \"../Engine/UnrealStringWrapper.h\"\n#include \"../StructArrayWrapper.h\"\n#include \"ClubSettingsWrapper.h\"\n#include \"../UniqueIDWrapper.h\"\n\nstruct BAKKESMOD_PLUGIN_IMPORT ClubMember {\n\tunsigned char paddingForReasons[72];\n\t[[deprecated(\"Use GetUniqueID instead\")]]\n\tSteamID GetSteamId(); //DEPRECATED\n\tUniqueIDWrapper GetUniqueID();\n\tUnrealStringWrapper GetName();\n};\n\n//SteamID steamID;\n//unsigned char padding[48];\n//UnrealStringWrapper name;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ClubDetailsWrapper : public ClubSettingsWrapper {\npublic:\n\tCONSTRUCTORS(ClubDetailsWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tunsigned long long GetClubID();\n\t[[deprecated(\"Use GetOwnerPlayerUniqueID instead\")]]\n\tSteamID GetOwnerPlayerID(); //DEPRECATED\n\tUniqueIDWrapper GetOwnerPlayerUniqueID();\n\tUnrealStringWrapper GetMotD();\n\tunsigned long GetbVerified();\n\tunsigned long long GetLastUpdatedTime();\n\tStructArrayWrapper<ClubMember> GetMembers();\n\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/ClubSettingsWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../Engine/UnrealStringWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ClubSettingsWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(ClubSettingsWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tUnrealStringWrapper GetClubName();\n\tUnrealStringWrapper GetClubTag();\n\tint GetPrimaryColor();\n\tint GetAccentColor();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/FXActorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT FXActorWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(FXActorWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned long GetbDeactivateWhenOwnerDestroyed();\r\n\tvoid SetbDeactivateWhenOwnerDestroyed(unsigned long newbDeactivateWhenOwnerDestroyed);\r\n\tunsigned long GetbAllowShadowCasting();\r\n\tvoid SetbAllowShadowCasting(unsigned long newbAllowShadowCasting);\r\n\tunsigned long GetbAutoActivate();\r\n\tvoid SetbAutoActivate(unsigned long newbAutoActivate);\r\n\tunsigned long GetbRenderInactive();\r\n\tvoid SetbRenderInactive(unsigned long newbRenderInactive);\r\n\tunsigned long GetbActive();\r\n\tvoid SetbActive(unsigned long newbActive);\r\n\tunsigned long GetbHadOwner();\r\n\tvoid SetbHadOwner(unsigned long newbHadOwner);\r\n\tFXActorWrapper GetParent();\r\n\tvoid SetParent(FXActorWrapper newParent);\r\n\tActorWrapper GetAttachmentActor();\r\n\tvoid SetAttachmentActor(ActorWrapper newAttachmentActor);\r\n\tfloat GetDestroyWaitTime();\r\n\tvoid SetDestroyWaitTime(float newDestroyWaitTime);\r\n\tfloat GetDestroyTime();\r\n\tvoid SetDestroyTime(float newDestroyTime);\r\n\tint GetEditID();\r\n\tvoid SetEditID(int newEditID);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventDumpDebugInfo();\r\n\tvoid eventDestroyed();\r\n\tvoid Inherit(FXActorWrapper Other);\r\n\tvoid ResetParticles();\r\n\tvoid StopAllEffects();\r\n\tvoid eventDeactivateAndDestroy();\r\n\tvoid UpdateFXStates();\r\n\tbool IsLocallyControlled();\r\n\tvoid Deactivate2();\r\n\tvoid Activate2();\r\n\tvoid BindTo(FXActorWrapper ParentFXActor);\r\n\tvoid SetAttachmentActor2(ActorWrapper AttachToActor);\r\n\tvoid PostBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/GoalHoopsWrapper.h",
    "content": "#pragma once\n#include \"GoalWrapper.h\"\nclass ActorWrapper;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT GoalHoopsWrapper : public GoalWrapper {\npublic:\n\tCONSTRUCTORS(GoalHoopsWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tActorWrapper GetBackboard();\n\tfloat GetRadius();\n\tVector GetBackboardLocation();\n\tVector GetBackboardDirection();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/GoalWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\nclass FXActorWrapper;\r\nclass ActorWrapper;\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GoalWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GoalWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tActorWrapper GetGoalOrientation();\r\n\tvoid SetGoalOrientation(ActorWrapper newGoalOrientation);\r\n\tArrayWrapper<ActorWrapper> GetOverrideGoalIndicatorOrientations();\r\n\tunsigned char GetTeamNum();\r\n\tvoid SetTeamNum(unsigned char newTeamNum);\r\n\tFXActorWrapper GetScoreFX();\r\n\tvoid SetScoreFX(FXActorWrapper newScoreFX);\r\n\tUnrealStringWrapper GetGoalIndicatorArchetype();\r\n\tunsigned long GetbNoGoalIndicator();\r\n\tvoid SetbNoGoalIndicator(unsigned long newbNoGoalIndicator);\r\n\tunsigned long GetbOnlyGoalsFromDirection();\r\n\tvoid SetbOnlyGoalsFromDirection(unsigned long newbOnlyGoalsFromDirection);\r\n\tunsigned long GetbShowFocusExtent();\r\n\tvoid SetbShowFocusExtent(unsigned long newbShowFocusExtent);\r\n\tActorWrapper GetGoalDirection();\r\n\tvoid SetGoalDirection(ActorWrapper newGoalDirection);\r\n\tint GetPointsToAward();\r\n\tvoid SetPointsToAward(int newPointsToAward);\r\n\tVector GetAutoCamFocusExtent();\r\n\tvoid SetAutoCamFocusExtent(Vector newAutoCamFocusExtent);\r\n\tVector GetGoalFocusLocationOffset();\r\n\tvoid SetGoalFocusLocationOffset(Vector newGoalFocusLocationOffset);\r\n\tfloat GetMaxGoalScorerAttachRadius();\r\n\tvoid SetMaxGoalScorerAttachRadius(float newMaxGoalScorerAttachRadius);\r\n\tVector GetGoalScoredDotDirection();\r\n\tvoid SetGoalScoredDotDirection(Vector newGoalScoredDotDirection);\r\n\tfloat GetMinAttachGoalToScorerDot();\r\n\tvoid SetMinAttachGoalToScorerDot(float newMinAttachGoalToScorerDot);\r\n\tVector GetLocation();\r\n\tvoid SetLocation(Vector newLocation);\r\n\tVector GetDirection();\r\n\tvoid SetDirection(Vector newDirection);\r\n\tVector GetRight();\r\n\tvoid SetRight(Vector newRight);\r\n\tVector GetUp();\r\n\tvoid SetUp(Vector newUp);\r\n\tRotator GetRotation();\r\n\tvoid SetRotation(Rotator newRotation);\r\n\tVector GetLocalExtent();\r\n\tvoid SetLocalExtent(Vector newLocalExtent);\r\n\tVector GetWorldCenter();\r\n\tvoid SetWorldCenter(Vector newWorldCenter);\r\n\tVector GetWorldExtent();\r\n\tvoid SetWorldExtent(Vector newWorldExtent);\r\n\tVector GetWorldFrontCenter();\r\n\tvoid SetWorldFrontCenter(Vector newWorldFrontCenter);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tVector GetGoalFocusExtentCenter();\r\n\tvoid Init();\r\n\tvoid eventBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/MapDataWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT MapDataWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(MapDataWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD std::string GetName() const;\n\t_NODISCARD std::string GetLocalizedName() const;\n\t_NODISCARD std::string GetLocalizedVariantName() const;\n\tMapDataWrapper GetIsVariantOf() const;\n\n\t/**\n\t * \\brief Use EnumWrapper::GetWeatherVariant to interpret this value\n\t * \\return A enum value for the WeatherVariant\n\t */\n\t_NODISCARD unsigned char GetWeatherVariant() const;\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/MapListWrapper.h",
    "content": "﻿#pragma once\n#include \"MapDataWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT MapListWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(MapListWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD ArrayWrapper<MapDataWrapper> GetSortedMaps() const;\n\nprivate:\n\tPIMPL\n\t\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/MeshComponents/CarMeshComponentBaseWrapper.h",
    "content": "﻿#pragma once\n#include \"SkeletalMeshComponentWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT CarMeshComponentBaseWrapper : public SkeletalMeshComponentWrapper\n{\npublic:\n\tCONSTRUCTORS(CarMeshComponentBaseWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t_NODISCARD CarWrapper GetCar() const;\n\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/MeshComponents/MeshComponentWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT MeshComponentWrapper : public PrimitiveComponentWrapper\n{\npublic:\n\tCONSTRUCTORS(MeshComponentWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/MeshComponents/SkeletalMeshComponentWrapper.h",
    "content": "﻿#pragma once\n#include \"MeshComponentWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT SkeletalMeshComponentWrapper : public MeshComponentWrapper\n{\npublic:\n\tCONSTRUCTORS(SkeletalMeshComponentWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/InputBufferGraphWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/PerformanceStats/StatGraphWrapper.h\"\r\nclass SampleHistoryWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT InputBufferGraphWrapper : public StatGraphWrapper {\r\npublic:\r\n\tCONSTRUCTORS(InputBufferGraphWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tSampleHistoryWrapper GetBuffer();\r\n\tvoid SetBuffer(SampleHistoryWrapper newBuffer);\r\n\tSampleHistoryWrapper GetBufferTarget();\r\n\tvoid SetBufferTarget(SampleHistoryWrapper newBufferTarget);\r\n\tSampleHistoryWrapper GetOverUnderFrames();\r\n\tvoid SetOverUnderFrames(SampleHistoryWrapper newOverUnderFrames);\r\n\tSampleHistoryWrapper GetPhysicsRate();\r\n\tvoid SetPhysicsRate(SampleHistoryWrapper newPhysicsRate);\r\n\tfloat GetMaxPhysicsRate();\r\n\tvoid SetMaxPhysicsRate(float newMaxPhysicsRate);\r\n\tfloat GetMinPhysicsRate();\r\n\tvoid SetMinPhysicsRate(float newMinPhysicsRate);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tSampleHistoryWrapper CreateBufferHistory(std::string Title);\r\n\tvoid eventConstruct();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/NetStatGraphWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/PerformanceStats/StatGraphWrapper.h\"\r\nclass SampleHistoryWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT NetStatGraphWrapper : public StatGraphWrapper {\r\npublic:\r\n\tCONSTRUCTORS(NetStatGraphWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tSampleHistoryWrapper GetPacketsOut();\r\n\tvoid SetPacketsOut(SampleHistoryWrapper newPacketsOut);\r\n\tSampleHistoryWrapper GetPacketsIn();\r\n\tvoid SetPacketsIn(SampleHistoryWrapper newPacketsIn);\r\n\tSampleHistoryWrapper GetLostPacketsOut();\r\n\tvoid SetLostPacketsOut(SampleHistoryWrapper newLostPacketsOut);\r\n\tSampleHistoryWrapper GetLostPacketsIn();\r\n\tvoid SetLostPacketsIn(SampleHistoryWrapper newLostPacketsIn);\r\n\tSampleHistoryWrapper GetBytesOut();\r\n\tvoid SetBytesOut(SampleHistoryWrapper newBytesOut);\r\n\tSampleHistoryWrapper GetBytesIn();\r\n\tvoid SetBytesIn(SampleHistoryWrapper newBytesIn);\r\n\tSampleHistoryWrapper GetLatency();\r\n\tvoid SetLatency(SampleHistoryWrapper newLatency);\r\n\tfloat GetExpectedOutPacketRate();\r\n\tvoid SetExpectedOutPacketRate(float newExpectedOutPacketRate);\r\n\tfloat GetExpectedInPacketRate();\r\n\tvoid SetExpectedInPacketRate(float newExpectedInPacketRate);\r\n\tfloat GetMaxBytesRate();\r\n\tvoid SetMaxBytesRate(float newMaxBytesRate);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventUpdateGraphRanges();\r\n\tSampleHistoryWrapper CreateBytesSummary(std::string Title);\r\n\tSampleHistoryWrapper CreateLossSummary(std::string Title);\r\n\tSampleHistoryWrapper CreatePktSummary(std::string Title);\r\n\tvoid eventConstruct();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/PerfStatGraphWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/PerformanceStats/StatGraphWrapper.h\"\r\nclass SampleHistoryWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PerfStatGraphWrapper : public StatGraphWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PerfStatGraphWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tSampleHistoryWrapper GetFPS();\r\n\tvoid SetFPS(SampleHistoryWrapper newFPS);\r\n\tSampleHistoryWrapper GetFrameTime();\r\n\tvoid SetFrameTime(SampleHistoryWrapper newFrameTime);\r\n\tSampleHistoryWrapper GetGameThreadTime();\r\n\tvoid SetGameThreadTime(SampleHistoryWrapper newGameThreadTime);\r\n\tSampleHistoryWrapper GetRenderThreadTime();\r\n\tvoid SetRenderThreadTime(SampleHistoryWrapper newRenderThreadTime);\r\n\tSampleHistoryWrapper GetGPUFrameTime();\r\n\tvoid SetGPUFrameTime(SampleHistoryWrapper newGPUFrameTime);\r\n\tArrayWrapper<SampleHistoryWrapper> GetFrameTimeHistories();\r\n\tfloat GetMaxFPS();\r\n\tvoid SetMaxFPS(float newMaxFPS);\r\n\tfloat GetTargetFPS();\r\n\tvoid SetTargetFPS(float newTargetFPS);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventUpdateGraphRanges();\r\n\tSampleHistoryWrapper CreateFrameTimeHistory(std::string Title);\r\n\tSampleHistoryWrapper CreateFpsHistory(std::string Title);\r\n\tvoid eventConstruct();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/SampleHistoryWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass SampleRecordSettingsWrapper;\r\nclass WrapperStructs;\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT SampleHistoryWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(SampleHistoryWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tSampleRecordSettingsWrapper GetRecordSettings();\r\n\tvoid SetRecordSettings(SampleRecordSettingsWrapper newRecordSettings);\r\n\tUnrealStringWrapper GetTitle();\r\n\tfloat GetYMin();\r\n\tvoid SetYMin(float newYMin);\r\n\tfloat GetYMax();\r\n\tvoid SetYMax(float newYMax);\r\n\tfloat GetGoodValue();\r\n\tvoid SetGoodValue(float newGoodValue);\r\n\tfloat GetBadValue();\r\n\tvoid SetBadValue(float newBadValue);\r\n\tfloat GetBaseValue();\r\n\tvoid SetBaseValue(float newBaseValue);\r\n\tStructArrayWrapper<RecordedSample> GetSamples();\r\n\tint GetSampleIndex();\r\n\tvoid SetSampleIndex(int newSampleIndex);\r\n\tfloat GetAccumTime();\r\n\tvoid SetAccumTime(float newAccumTime);\r\n\tRecordedSample GetPendingSample();\r\n\tvoid SetPendingSample(RecordedSample newPendingSample);\r\n\tunsigned long GetbHasPendingSample();\r\n\tvoid SetbHasPendingSample(unsigned long newbHasPendingSample);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid Tick(float DeltaTime);\r\n\tvoid AddSample(float NewValue);\r\n\tfloat GetSummaryValue(unsigned char Type, float MaxSampleAge, unsigned long bAbsoluteValue);\r\n\tSampleHistoryWrapper SetBaseValue2(float InBaseValue);\r\n\tSampleHistoryWrapper SetGoodBadValues(float InGoodValue, float InBadValue);\r\n\tSampleHistoryWrapper SetGraphMaxMin(float MaxValue, float MinValue);\r\n\tSampleHistoryWrapper SetTitle(std::string InTitle);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/SampleRecordSettingsWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT SampleRecordSettingsWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(SampleRecordSettingsWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetMaxSampleAge();\r\n\tvoid SetMaxSampleAge(float newMaxSampleAge);\r\n\tfloat GetRecordRate();\r\n\tvoid SetRecordRate(float newRecordRate);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/StartGraphSystemWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass InputBufferGraphWrapper;\r\nclass NetStatGraphWrapper;\r\nclass PerfStatGraphWrapper;\r\nclass StatGraphWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT StartGraphSystemWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(StartGraphSystemWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetGraphSampleTime();\r\n\tvoid SetGraphSampleTime(float newGraphSampleTime);\r\n\tunsigned char GetGraphLevel();\r\n\tvoid SetGraphLevel(unsigned char newGraphLevel);\r\n\tPerfStatGraphWrapper GetPerfStatGraph();\r\n\tvoid SetPerfStatGraph(PerfStatGraphWrapper newPerfStatGraph);\r\n\tNetStatGraphWrapper GetNetStatGraph();\r\n\tvoid SetNetStatGraph(NetStatGraphWrapper newNetStatGraph);\r\n\tInputBufferGraphWrapper GetInputBufferGraph();\r\n\tvoid SetInputBufferGraph(InputBufferGraphWrapper newInputBufferGraph);\r\n\tArrayWrapper<StatGraphWrapper> GetStatGraphs();\r\n\tArrayWrapper<StatGraphWrapper> GetVisibleStatGraphs();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid Graphtime(float Seconds);\r\n\tvoid StatGraphNext();\r\n\tfloat GetGraphSampleTime2(unsigned char Level);\r\n\tvoid SetGraphLevel2(unsigned char Level);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/StatGraphSystemWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass StatGraphWrapper;\r\nclass PerfStatGraphWrapper;\r\nclass InputBufferGraphWrapper;\r\nclass NetStatGraphWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT StatGraphSystemWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(StatGraphSystemWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetGraphSampleTime();\r\n\tvoid SetGraphSampleTime(float newGraphSampleTime);\r\n\tunsigned char GetGraphLevel();\r\n\tvoid SetGraphLevel(unsigned char newGraphLevel);\r\n\tPerfStatGraphWrapper GetPerfStatGraph();\r\n\tvoid SetPerfStatGraph(PerfStatGraphWrapper newPerfStatGraph);\r\n\tNetStatGraphWrapper GetNetStatGraph();\r\n\tvoid SetNetStatGraph(NetStatGraphWrapper newNetStatGraph);\r\n\tInputBufferGraphWrapper GetInputBufferGraph();\r\n\tvoid SetInputBufferGraph(InputBufferGraphWrapper newInputBufferGraph);\r\n\tArrayWrapper<StatGraphWrapper> GetStatGraphs();\r\n\tArrayWrapper<StatGraphWrapper> GetVisibleStatGraphs();\r\n\tint GetPreallocGraphLines();\r\n\tvoid SetPreallocGraphLines(int newPreallocGraphLines);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid __StatGraphSystem_TA__SetGraphLevel(StatGraphWrapper G);\r\n\tvoid PacketReceived(float Latency);\r\n\tvoid Graphtime(float Seconds);\r\n\tvoid StatGraphNext();\r\n\tfloat GetGraphSampleTime2(unsigned char Level);\r\n\tvoid SetGraphLevel2(unsigned char Level);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PerformanceStats/StatGraphWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././Engine/ObjectWrapper.h\"\r\nclass SampleRecordSettingsWrapper;\r\nclass SampleHistoryWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT StatGraphWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(StatGraphWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tSampleRecordSettingsWrapper GetRecordSettings();\r\n\tvoid SetRecordSettings(SampleRecordSettingsWrapper newRecordSettings);\r\n\tdouble GetLastTickTime();\r\n\tvoid SetLastTickTime(double newLastTickTime);\r\n\tArrayWrapper<SampleHistoryWrapper> GetSampleHistories();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid StopDrawing();\r\n\tSampleHistoryWrapper CreateSampleHistory(std::string Title);\r\n\tSampleHistoryWrapper AddSampleHistory(SampleHistoryWrapper History);\r\n\tvoid eventConstruct();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PhysicalMaterialPropertyWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ObjectWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PhysicalMaterialPropertyWrapper : public ObjectWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PhysicalMaterialPropertyWrapper)\r\n\r\n\t_NODISCARD bool IsNull() const;\r\n\texplicit operator bool() const;\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetTireFrictionScale();\r\n\tvoid SetTireFrictionScale(float newTireFrictionScale);\r\n\tunsigned long GetbStickyWheels();\r\n\tvoid SetbStickyWheels(unsigned long newbStickyWheels);\r\n\tunsigned long GetbConsiderForGround();\r\n\tvoid SetbConsiderForGround(unsigned long newbConsiderForGround);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PlayerReplicationInfoWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \"../UniqueIDWrapper.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass UnrealStringWrapper;\r\nclass TeamInfoWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PlayerReplicationInfoWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PlayerReplicationInfoWrapper)\r\n\r\n\t//BEGIN SELF IMPLEMENTED\r\n\tOnlinePlatform GetPlatform();\r\n\t_NODISCARD bool ChangeNameForScoreboardAndNameplateInReplay(const std::string& name); //sorry for long name..\r\n\t//END SELF IMPLEMENTED\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tint GetScore();\r\n\tvoid SetScore(int newScore);\r\n\tint GetDeaths();\r\n\tvoid SetDeaths(int newDeaths);\r\n\tunsigned char GetPing();\r\n\tvoid SetPing(unsigned char newPing);\r\n\tunsigned char GetTTSSpeaker();\r\n\tvoid SetTTSSpeaker(unsigned char newTTSSpeaker);\r\n\tint GetNumLives();\r\n\tvoid SetNumLives(int newNumLives);\r\n\tUnrealStringWrapper GetPlayerName();\r\n\tUnrealStringWrapper GetOldName();\r\n\tint GetPlayerID();\r\n\tvoid SetPlayerID(int newPlayerID);\r\n\tTeamInfoWrapper GetTeam();\r\n\tvoid SetTeam(TeamInfoWrapper newTeam);\r\n\tunsigned long GetbAdmin();\r\n\tvoid SetbAdmin(unsigned long newbAdmin);\r\n\tunsigned long GetbIsSpectator();\r\n\tvoid SetbIsSpectator(unsigned long newbIsSpectator);\r\n\tunsigned long GetbOnlySpectator();\r\n\tvoid SetbOnlySpectator(unsigned long newbOnlySpectator);\r\n\tunsigned long GetbWaitingPlayer();\r\n\tvoid SetbWaitingPlayer(unsigned long newbWaitingPlayer);\r\n\tunsigned long GetbReadyToPlay();\r\n\tvoid SetbReadyToPlay(unsigned long newbReadyToPlay);\r\n\tunsigned long GetbOutOfLives();\r\n\tvoid SetbOutOfLives(unsigned long newbOutOfLives);\r\n\tunsigned long GetbBot();\r\n\tvoid SetbBot(unsigned long newbBot);\r\n\tunsigned long GetbIsInactive();\r\n\tvoid SetbIsInactive(unsigned long newbIsInactive);\r\n\tunsigned long GetbFromPreviousLevel();\r\n\tvoid SetbFromPreviousLevel(unsigned long newbFromPreviousLevel);\r\n\tunsigned long GetbTimedOut();\r\n\tvoid SetbTimedOut(unsigned long newbTimedOut);\r\n\tunsigned long GetbUnregistered();\r\n\tvoid SetbUnregistered(unsigned long newbUnregistered);\r\n\tint GetStartTime();\r\n\tvoid SetStartTime(int newStartTime);\r\n\tUnrealStringWrapper GetStringSpectating();\r\n\tUnrealStringWrapper GetStringUnknown();\r\n\tint GetKills();\r\n\tvoid SetKills(int newKills);\r\n\tfloat GetExactPing();\r\n\tvoid SetExactPing(float newExactPing);\r\n\tUnrealStringWrapper GetSavedNetworkAddress();\r\n\t[[deprecated(\"Use GetUniqueIdWrapper instead\")]]\r\n\tSteamID GetUniqueId();//DEPRECATED\r\n\t[[deprecated(\"Use SetUniqueId that takes UniqueIDWrapper instead\")]]\r\n\tvoid SetUniqueId(SteamID newUniqueId);//DEPRECATED\r\n\r\n\tUniqueIDWrapper GetUniqueIdWrapper();\r\n\tvoid SetUniqueId(UniqueIDWrapper newUniqueId);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid UnregisterPlayerFromSession();\r\n\tvoid RegisterPlayerWithSession();\r\n\tbool IsInvalidName();\r\n\tunsigned char GetTeamNum();\r\n\t[[deprecated(\"Use SetUniqueId2 that takes UniqueIDWrapper instead\")]]\r\n\tvoid SetUniqueId2(SteamID& PlayerUniqueId);//DEPRECATED\r\n\tvoid SetUniqueId2(UniqueIDWrapper& PlayerUniqueId);\r\n\tvoid SeamlessTravelTo(PlayerReplicationInfoWrapper NewPRI);\r\n\tvoid IncrementDeaths(int Amt);\r\n\tvoid CopyProperties(PlayerReplicationInfoWrapper PRI);\r\n\tvoid OverrideWith(PlayerReplicationInfoWrapper PRI);\r\n\tPlayerReplicationInfoWrapper Duplicate();\r\n\tvoid SetWaitingPlayer(unsigned long B);\r\n\tvoid eventSetPlayerName(std::string S);\r\n\tvoid Reset();\r\n\tvoid eventDestroyed();\r\n\tvoid Unregister2();\r\n\tvoid UpdatePing(float TimeStamp);\r\n\tvoid RemoteUserDataReplicated();\r\n\tvoid SetPlayerTeam(TeamInfoWrapper NewTeam);\r\n\tvoid eventClientFillRemoteUserData();\r\n\tvoid eventPostBeginPlay();\r\n\tvoid eventOnOwnerChanged();\r\n\tvoid eventConstruct();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PriWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/PriXWrapper.h\"\r\nclass UnrealStringWrapper;\r\nclass CarWrapper;\r\nclass GameEventWrapper;\r\nclass FXActorWrapper;\r\nclass AirControlComponentWrapper;\r\nclass ClubDetailsWrapper;\r\nclass UniqueIDWrapper;\r\nclass CameraSettingsActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PriWrapper : public PriXWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PriWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tint GetMatchScore();\r\n\tvoid SetMatchScore(int newMatchScore);\r\n\tint GetMatchGoals();\r\n\tvoid SetMatchGoals(int newMatchGoals);\r\n\tint GetMatchOwnGoals();\r\n\tvoid SetMatchOwnGoals(int newMatchOwnGoals);\r\n\tint GetMatchAssists();\r\n\tvoid SetMatchAssists(int newMatchAssists);\r\n\tint GetMatchSaves();\r\n\tvoid SetMatchSaves(int newMatchSaves);\r\n\tint GetMatchShots();\r\n\tvoid SetMatchShots(int newMatchShots);\r\n\tint GetMatchDemolishes();\r\n\tvoid SetMatchDemolishes(int newMatchDemolishes);\r\n\tint GetMatchBonusXP();\r\n\tvoid SetMatchBonusXP(int newMatchBonusXP);\r\n\tint GetMatchBreakoutDamage();\r\n\tvoid SetMatchBreakoutDamage(int newMatchBreakoutDamage);\r\n\tunsigned long GetbMatchMVP();\r\n\tvoid SetbMatchMVP(unsigned long newbMatchMVP);\r\n\tunsigned long GetbMatchAdmin();\r\n\tvoid SetbMatchAdmin(unsigned long newbMatchAdmin);\r\n\tunsigned long GetbLoadoutSet();\r\n\tvoid SetbLoadoutSet(unsigned long newbLoadoutSet);\r\n\tunsigned long GetbOnlineLoadoutSet();\r\n\tvoid SetbOnlineLoadoutSet(unsigned long newbOnlineLoadoutSet);\r\n\tunsigned long GetbLoadoutsSet();\r\n\tvoid SetbLoadoutsSet(unsigned long newbLoadoutsSet);\r\n\tunsigned long GetbOnlineLoadoutsSet();\r\n\tvoid SetbOnlineLoadoutsSet(unsigned long newbOnlineLoadoutsSet);\r\n\tunsigned long GetbTeamPaintSet();\r\n\tvoid SetbTeamPaintSet(unsigned long newbTeamPaintSet);\r\n\tunsigned long GetbReady();\r\n\tvoid SetbReady(unsigned long newbReady);\r\n\tunsigned long GetbBusy();\r\n\tvoid SetbBusy(unsigned long newbBusy);\r\n\tunsigned long GetbUsingSecondaryCamera();\r\n\tvoid SetbUsingSecondaryCamera(unsigned long newbUsingSecondaryCamera);\r\n\tunsigned long GetbUsingBehindView();\r\n\tvoid SetbUsingBehindView(unsigned long newbUsingBehindView);\r\n\tunsigned long GetbUsingFreecam();\r\n\tvoid SetbUsingFreecam(unsigned long newbUsingFreecam);\r\n\tunsigned long GetbIsInSplitScreen();\r\n\tvoid SetbIsInSplitScreen(unsigned long newbIsInSplitScreen);\r\n\tunsigned long GetbStartVoteToForfeitDisabled();\r\n\tvoid SetbStartVoteToForfeitDisabled(unsigned long newbStartVoteToForfeitDisabled);\r\n\tunsigned long GetbUsingItems();\r\n\tvoid SetbUsingItems(unsigned long newbUsingItems);\r\n\tunsigned long GetPlayerHistoryValid();\r\n\tvoid SetPlayerHistoryValid(unsigned long newPlayerHistoryValid);\r\n\tGameEventWrapper GetGameEvent();\r\n\tvoid SetGameEvent(GameEventWrapper newGameEvent);\r\n\tGameEventWrapper GetReplicatedGameEvent();\r\n\tvoid SetReplicatedGameEvent(GameEventWrapper newReplicatedGameEvent);\r\n\tCarWrapper GetCar();\r\n\tvoid SetCar(CarWrapper newCar);\r\n\tint GetRespawnTimeRemaining();\r\n\tvoid SetRespawnTimeRemaining(int newRespawnTimeRemaining);\r\n\tint GetWaitingStartTime();\r\n\tvoid SetWaitingStartTime(int newWaitingStartTime);\r\n\tfloat GetTotalGameTimePlayed();\r\n\tvoid SetTotalGameTimePlayed(float newTotalGameTimePlayed);\r\n\tProfileCameraSettings GetCameraSettings();\r\n\tvoid SetCameraSettings(ProfileCameraSettings newCameraSettings);\r\n\tunsigned char GetCameraPitch();\r\n\tvoid SetCameraPitch(unsigned char newCameraPitch);\r\n\tunsigned char GetCameraYaw();\r\n\tvoid SetCameraYaw(unsigned char newCameraYaw);\r\n\tunsigned char GetPawnType();\r\n\tvoid SetPawnType(unsigned char newPawnType);\r\n\tunsigned char GetReplicatedWorstNetQualityBeyondLatency();\r\n\tvoid SetReplicatedWorstNetQualityBeyondLatency(unsigned char newReplicatedWorstNetQualityBeyondLatency);\r\n\tCameraSettingsActorWrapper GetPersistentCamera() const;\r\n\r\n\t[[deprecated(\"Use GetPartyLeaderID instead\")]]\r\n\tSteamID GetPartyLeader();//DEPRECATED\r\n\t[[deprecated(\"Use SetPartyLeader that takes UniqueIDWrapper instead\")]]\r\n\tvoid SetPartyLeader(SteamID newPartyLeader);//DEPRECATED\r\n\r\n\tUniqueIDWrapper GetPartyLeaderID();\r\n\tvoid SetPartyLeader(UniqueIDWrapper newPartyLeader);\r\n\r\n\tfloat GetDodgeInputThreshold();\r\n\tvoid SetDodgeInputThreshold(float newDodgeInputThreshold);\r\n\tfloat GetSteeringSensitivity();\r\n\tvoid SetSteeringSensitivity(float newSteeringSensitivity);\r\n\tfloat GetAirControlSensitivity();\r\n\tvoid SetAirControlSensitivity(float newAirControlSensitivity);\r\n\tfloat GetNextTimeRestrictedStatEventAllowedTime();\r\n\tvoid SetNextTimeRestrictedStatEventAllowedTime(float newNextTimeRestrictedStatEventAllowedTime);\r\n\tfloat GetLastTimeRestrictedStatEventTime();\r\n\tvoid SetLastTimeRestrictedStatEventTime(float newLastTimeRestrictedStatEventTime);\r\n\tint GetTimeTillItem();\r\n\tvoid SetTimeTillItem(int newTimeTillItem);\r\n\tint GetMaxTimeTillItem();\r\n\tvoid SetMaxTimeTillItem(int newMaxTimeTillItem);\r\n\tint GetBoostPickups();\r\n\tvoid SetBoostPickups(int newBoostPickups);\r\n\tint GetBallTouches();\r\n\tvoid SetBallTouches(int newBallTouches);\r\n\tint GetCarTouches();\r\n\tvoid SetCarTouches(int newCarTouches);\r\n\tPriWrapper GetReplacingBotPRI();\r\n\tvoid SetReplacingBotPRI(PriWrapper newReplacingBotPRI);\r\n\tunsigned long long GetClubID();\r\n\tvoid SetClubID(unsigned long long newClubID);\r\n\tUnrealStringWrapper GetPublicIP();\r\n\tint GetSpectatorShortcut();\r\n\tvoid SetSpectatorShortcut(int newSpectatorShortcut);\r\n\tClubDetailsWrapper GetClubDetails();\r\n\tint GetLastTeamIndex() const;\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid __ClubID__ChangeNotifyFunc();\r\n\tvoid __PREI__ChangeNotifyFunc();\r\n\tvoid __ReplicatedWorstNetQualityBeyondLatency__ChangeNotifyFunc();\r\n\tvoid eventDestroyed();\r\n\tvoid OnSpectatorShortcutChanged();\r\n\tvoid SetSpectatorShortcut2(int InShortcut);\r\n\tvoid ServerSetPublicIP(std::string IP);\r\n\tvoid OnUniqueIdChanged();\r\n\tvoid UpdatePlayerAvatarBorder();\r\n\tvoid UpdatePlayerBanner();\r\n\tvoid ClientAchievementProgression(int AchievementId, unsigned char AchievementType, float Progress, float MaxProgress);\r\n\tvoid ClientUnlockAchievement(int AchievementId, unsigned char AchievementType);\r\n\tvoid ServerSetPlayerActivatedFX(FXActorWrapper FX);\r\n\tvoid UpdateCarLocalPlayer();\r\n\tvoid OnReplacingBotPRIChanged();\r\n\tvoid OnTeamChanged();\r\n\tvoid ClearBotReplacement();\r\n\tvoid ReportCheater(std::string Reason);\r\n\tbool ValidateLoadoutTeamPaints();\r\n\tbool ValidateLoadoutSlots();\r\n\tvoid ValidateLoadoutDLC();\r\n\tvoid OnStartVoteToForfeitDisabledChanged();\r\n\tvoid SetStartVoteToForfeitDisabled(unsigned long bDisabled);\r\n\tvoid ServerVoteToForfeit();\r\n\tvoid SetUserCarPreferences(float NewDodgeThreshold, float NewSteeringSensitivity, float NewAirControlSensitivity);\r\n\tvoid ServerSetUserCarPreferences(float NewDodgeThreshold, float NewSteeringSensitivity, float NewAirControlSensitivity);\r\n\tint ValidateUserInt(std::string Reason, int NewValue, int Min, int Max);\r\n\tfloat ValidateUserFloat(std::string Reason, float NewValue, float Min, float Max);\r\n\tvoid OnPawnTypeChanged();\r\n\tvoid SetWaitingPlayer(unsigned long B);\r\n\tvoid SetPawnType2(unsigned char NewPawnType);\r\n\tbool IsPlayer();\r\n\tbool IsEditor();\r\n\tbool IsSpectator();\r\n\tvoid ServerSpectate();\r\n\tvoid ClientChangeTeamFailed(int TeamNum);\r\n\tvoid ServerChangeTeam(int TeamNum);\r\n\tvoid ReplicatePodiumTitles();\r\n\tvoid OnMatchAdmin();\r\n\tvoid OnMVPChange();\r\n\tvoid NotifyWonMVP();\r\n\tbool IsInvalidName();\r\n\tbool IsInWarmUpMode();\r\n\tvoid SetReady(unsigned long bNewReady);\r\n\tvoid ServerMatchAdminSetPaused(unsigned long bPause);\r\n\tvoid ServerMatchAdminSetScoreAndTime(int NewScoreTeam0, int NewScoreTeam1, int SecondsRemaining, unsigned long bOverTime, unsigned long bRestartRound);\r\n\tvoid SetMatchAdmin(unsigned long bIsMatchAdmin);\r\n\tvoid ServerReadyUp();\r\n\tbool ShouldBroadCastWelcomeMessage(unsigned long bExiting);\r\n\tvoid UpdateOnlineProductStats();\r\n\tvoid SetWaitingStartTime2();\r\n\tvoid OnRespawnTimeRemainingChanged();\r\n\tvoid SetRespawnTime2(int NewTime);\r\n\tvoid ClientScoredGoal(Vector& BallHitLocation);\r\n\tvoid OnScoredGoal(Vector& BallHitLocation);\r\n\tvoid OnRep_SteeringSensitivity();\r\n\tvoid OnRep_ClientScorePoint();\r\n\tvoid ResetScore();\r\n\tvoid RemovePoints(int Points);\r\n\tvoid ScorePoint2(int AdditionalScore);\r\n\tbool CanAwardTimeRestrictedStatEvent();\r\n\tvoid RecordTimeRestrictedStatEvent();\r\n\tvoid ResetTimeRestrictedStatEvent();\r\n\tint GetMatchXP();\r\n\tvoid CommitStats();\r\n\tvoid UpdateFromLoadout();\r\n\tvoid UpdateUserCarPreferences(AirControlComponentWrapper AirControlComponent);\r\n\tvoid HandleAirControl(AirControlComponentWrapper AirControlComp);\r\n\tvoid SetCar2(CarWrapper NewCar);\r\n\tbool IsClientPlayerPRI();\r\n\tbool IsLocalPlayerPRI();\r\n\tvoid Unregister();\r\n\tvoid AddLocalPlayerToGameEvent();\r\n\tvoid OnLoadoutsSetInternal();\r\n\tbool AreLoadoutsSet();\r\n\tvoid OnLoadoutsOnlineSet();\r\n\tvoid OnLoadoutsSet2();\r\n\tvoid RemoveCertifiedProductStat(unsigned long long InstanceID);\r\n\tvoid InitLoadoutAttributesForTeam(PriXWrapper PRI);\r\n\tbool ShouldValidateOnlineProducts();\r\n\tvoid OnSplitScreenStatusChanged();\r\n\tvoid ServerSplitScreenStatusChanged(unsigned long bInSplitScreen);\r\n\tvoid UpdateSplitScreenStatus();\r\n\tvoid OnPartyLeaderChanged();\r\n\t[[deprecated(\"Function definition is empty and thus will not work\")]]\r\n\tvoid ServerSetPartyLeader(SteamID& InPartyLeader, unsigned long bInParty);//DEPRECATED\r\n\t[[deprecated(\"Function definition is empty and thus will not work\")]]\r\n\tvoid SetPartyLeader2(SteamID& InPartyLeader, unsigned long bInParty);//DEPRECATED\r\n\tvoid UpdatePartyStatus();\r\n\tvoid OnSkillTierChanged();\r\n\tvoid ReplicateSkillTier(int NewTier);\r\n\tvoid OnTitleChanged();\r\n\tvoid SyncPlayerTitle();\r\n\tvoid UpdateTitleFromLoadout();\r\n\tvoid UpdateTitle2();\r\n\tvoid GetNewFriendKey();\r\n\tvoid ServerSetPlayerHistoryKey(unsigned char* HistoryKeyArray);\r\n\tvoid OnRep_UniqueId();\r\n\tvoid EventOwnerChanged(PriWrapper PRI);\r\n\tvoid EventSpectatorShortcutChanged(PriWrapper PRI);\r\n\tvoid EventServerAchievementProgression(PriWrapper PRI, int AchievementId, unsigned char AchievementType, float Progress, float MaxProgress);\r\n\tvoid EventStartVoteToForfeitDisabledChanged(PriWrapper PRI);\r\n\tvoid EventCarPreUpdate(PriWrapper PRI);\r\n\tvoid EventVanityChanged();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/PriXWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/PlayerReplicationInfoWrapper.h\"\r\nclass TeamInfoWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PriXWrapper : public PlayerReplicationInfoWrapper {\r\npublic:\r\n\tCONSTRUCTORS(PriXWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid eventDestroyed();\r\n\tvoid OnUniqueIdChanged();\r\n\t[[deprecated(\"Function definition is empty and thus will not work\")]]\r\n\tvoid SetUniqueId(SteamID& PlayerUniqueId);//DEPRECATED\r\n\tvoid UnregisterPlayerFromSession();\r\n\tvoid RegisterPlayerWithSession();\r\n\tvoid OnTeamChanged();\r\n\tvoid SetPlayerTeam(TeamInfoWrapper NewTeam);\r\n\tvoid eventOnOwnerChanged();\r\n\tvoid eventSetPlayerName(std::string S);\r\n\tvoid EventDestroyed(PriXWrapper PRI);\r\n\tvoid EventTeamChanged(PriXWrapper PRI);\r\n\tvoid EventUniqueIdChanged(PriXWrapper PRI);\r\n\tvoid EventPlayerNameChanged(PriXWrapper PRI);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RBActorWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass FXActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT RBActorWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(RBActorWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetMaxLinearSpeed();\r\n\tvoid SetMaxLinearSpeed(float newMaxLinearSpeed);\r\n\tfloat GetMaxAngularSpeed();\r\n\tvoid SetMaxAngularSpeed(float newMaxAngularSpeed);\r\n\tunsigned long GetbDisableSleeping();\r\n\tvoid SetbDisableSleeping(unsigned long newbDisableSleeping);\r\n\tunsigned long GetbReplayActor();\r\n\tvoid SetbReplayActor(unsigned long newbReplayActor);\r\n\tunsigned long GetbFrozen();\r\n\tvoid SetbFrozen(unsigned long newbFrozen);\r\n\tunsigned long GetbIgnoreSyncing();\r\n\tvoid SetbIgnoreSyncing(unsigned long newbIgnoreSyncing);\r\n\tunsigned long GetbPhysInitialized();\r\n\tRBState GetOldRBState();\r\n\tvoid SetOldRBState(RBState newOldRBState);\r\n\tRBState GetRBState();\r\n\tvoid SetRBState(RBState newRBState);\r\n\tRBState GetReplicatedRBState();\r\n\tvoid SetReplicatedRBState(RBState newReplicatedRBState);\r\n\tRBState GetClientCorrectionRBState();\r\n\tvoid SetClientCorrectionRBState(RBState newClientCorrectionRBState);\r\n\tWorldContactData GetWorldContact();\r\n\tvoid SetWorldContact(WorldContactData newWorldContact);\r\n\tVector GetSyncErrorLocation();\r\n\tfloat GetSyncErrorAngle();\r\n\tVector GetSyncErrorAxis();\r\n\tFXActorWrapper GetFXActorArchetype();\r\n\tvoid SetFXActorArchetype(FXActorWrapper newFXActorArchetype);\r\n\tFXActorWrapper GetFXActor();\r\n\tvoid SetFXActor(FXActorWrapper newFXActor);\r\n\tint GetLastRBCollisionsFrame();\r\n\tRBActorWrapper GetWeldedActor();\r\n\tRBActorWrapper GetWeldedTo();\r\n\tfloat GetPreWeldMass();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid SetMass(float NewMass);\r\n\tvoid SetConstrained3D(Vector& LinearLower, Vector& LinearUpper, Vector& AngularLower, Vector& AngularUpper);\r\n\tvoid SetConstrained2D(unsigned long bConstrain2D);\r\n\tvoid SetPhysicsState(RBState& NewState);\r\n\tvoid SetFrozen(unsigned long bEnabled);\r\n\tvoid SetMaxAngularSpeed2(float NewMaxSpeed);\r\n\tvoid SetMaxLinearSpeed2(float NewMaxSpeed);\r\n\tvoid AddTorque(Vector& Torque, unsigned char ForceMode);\r\n\tvoid AddForce(Vector& Force, unsigned char ForceMode);\r\n\tvoid UnWeldRBActor(RBActorWrapper Other);\r\n\tvoid WeldRBActor2(RBActorWrapper Other, Vector& WeldOffset, Rotator& WeldRotation);\r\n\tvoid ReInitRBPhys();\r\n\tvoid TerminateRBPhys();\r\n\tVector GetCurrentRBLocation();\r\n\tRBState GetCurrentRBState();\r\n\tint GetPhysicsFrame();\r\n\tfloat GetPhysicsTime();\r\n\tvoid InitAk();\r\n\tvoid eventPreBeginPlay();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/ReplayManagerWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT ReplayManagerWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ReplayManagerWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD bool LoadReplaysFromDemoFolder() const;\n\t_NODISCARD std::vector<ReplaySoccarWrapper> GetLoadedReplays() const;\n\t_NODISCARD bool IsLoadingReplayHeaders() const;\n\n\n\t/**\n\t * \\brief Starts a replay with a optional map and start time\n\t * \\param replay Replay to open\n\t * \\param map custom map name\n\t * \\param start_time  Use replay_wrapper.GetCurrentFrame() / replay_wrapper.GetRecordFPS() for a accurate start_time\n\t */\n\tvoid PlayReplay(const ReplayWrapper& replay, const std::string& map = \"\", float start_time = 0) const;\n\n\t/**\n\t * \\brief Starts a replay from a file with a optional map and start time\n\t * \\param file_path absolute path to the replay file\n\t * \\param map custom map name\n\t * \\param start_time  Use replay_wrapper.GetCurrentFrame() / replay_wrapper.GetRecordFPS() for a accurate start_time\n\t */\n\tvoid PlayReplayFile(const std::string& file_path, const std::string& map = \"\", float start_time = 0) const;\n\n\t/**\n\t * \\brief Starts a replay from a replay id with a optional map and start time\n\t * \\param replay_id id of the replay to open\n\t * \\param map custom map name\n\t * \\param start_time  Use replay_wrapper.GetCurrentFrame() / replay_wrapper.GetRecordFPS() for a accurate start_time\n\t */\n\tvoid PlayReplayId(const std::string& replay_id, const std::string& map = \"\", float start_time = 0) const;\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/AttachmentPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT AttachmentPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(AttachmentPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BallCarSpringPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/SpringPickup.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BallCarSpringPickup : public SpringPickup {\r\npublic:\r\n\tCONSTRUCTORS(BallCarSpringPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ScaleSpringMeshToLocation(Vector& NewLocation, Vector& TargetLocation);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BallFreezePickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass FXActorWrapper;\r\nclass BallWrapper;\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BallFreezePickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(BallFreezePickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tFXActorWrapper GetFreezeBreakFXArchetype();\r\n\tvoid SetFreezeBreakFXArchetype(FXActorWrapper newFreezeBreakFXArchetype);\r\n\tFXActorWrapper GetFreezeFXArchetype();\r\n\tvoid SetFreezeFXArchetype(FXActorWrapper newFreezeFXArchetype);\r\n\tunsigned long GetbMaintainMomentum();\r\n\tvoid SetbMaintainMomentum(unsigned long newbMaintainMomentum);\r\n\tunsigned long GetbTouched();\r\n\tvoid SetbTouched(unsigned long newbTouched);\r\n\tfloat GetTimeToStop();\r\n\tvoid SetTimeToStop(float newTimeToStop);\r\n\tfloat GetStopMomentumPercentage();\r\n\tvoid SetStopMomentumPercentage(float newStopMomentumPercentage);\r\n\tBallWrapper GetBall();\r\n\tvoid SetBall(BallWrapper newBall);\r\n\tVector GetOrigLinearVelocity();\r\n\tvoid SetOrigLinearVelocity(Vector newOrigLinearVelocity);\r\n\tVector GetOrigAngularVelocity();\r\n\tvoid SetOrigAngularVelocity(Vector newOrigAngularVelocity);\r\n\tfloat GetOrigSpeed();\r\n\tvoid SetOrigSpeed(float newOrigSpeed);\r\n\tfloat GetRepOrigSpeed();\r\n\tvoid SetRepOrigSpeed(float newRepOrigSpeed);\r\n\tFXActorWrapper GetFreezeFX();\r\n\tvoid SetFreezeFX(FXActorWrapper newFreezeFX);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid HandleBallExploded(BallWrapper InBall);\r\n\tvoid HandleBallHit(BallWrapper InBall, CarWrapper InCar, unsigned char HitType);\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid OnTargetChanged();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BallLassoPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/SpringPickup.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BallLassoPickup : public SpringPickup {\r\npublic:\r\n\tCONSTRUCTORS(BallLassoPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ScaleSpringMeshToLocation(Vector& NewLocation, Vector& TargetLocation);\r\n\tvoid DoSpring(unsigned long bFirstHit);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BasketballPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass BallWrapper;\r\nclass RBActorWrapper;\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BasketballPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BasketballPickup)\r\n\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BattarangPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/BallLassoPickup.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BattarangPickup : public BallLassoPickup {\r\npublic:\r\n\tCONSTRUCTORS(BattarangPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetSpinSpeed();\r\n\tvoid SetSpinSpeed(float newSpinSpeed);\r\n\tfloat GetCurRotation();\r\n\tvoid SetCurRotation(float newCurRotation);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BoostModPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BoostModPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(BoostModPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned long GetbUnlimitedBoost();\r\n\tvoid SetbUnlimitedBoost(unsigned long newbUnlimitedBoost);\r\n\tfloat GetBoostStrength();\r\n\tvoid SetBoostStrength(float newBoostStrength);\r\n\tfloat GetOldBoostStrength();\r\n\tvoid SetOldBoostStrength(float newOldBoostStrength);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/BoostOverridePickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT BoostOverridePickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(BoostOverridePickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tCarWrapper GetOtherCar();\r\n\tvoid SetOtherCar(CarWrapper newOtherCar);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid OnTargetChanged();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/CarSpeedPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CarSpeedPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(CarSpeedPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetGravityScale();\r\n\tvoid SetGravityScale(float newGravityScale);\r\n\tVector GetAddedForce();\r\n\tvoid SetAddedForce(Vector newAddedForce);\r\n\tfloat GetOrigGravityScale();\r\n\tvoid SetOrigGravityScale(float newOrigGravityScale);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/DemolishPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT DemolishPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(DemolishPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned char GetDemolishTarget();\r\n\tvoid SetDemolishTarget(unsigned char newDemolishTarget);\r\n\tunsigned char GetDemolishSpeed();\r\n\tvoid SetDemolishSpeed(unsigned char newDemolishSpeed);\r\n\tunsigned char GetOldTarget();\r\n\tvoid SetOldTarget(unsigned char newOldTarget);\r\n\tunsigned char GetOldSpeed();\r\n\tvoid SetOldSpeed(unsigned char newOldSpeed);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/FootballPickupWrapper.h",
    "content": "#pragma once\n#include \"RumblePickupComponentWrapper.h\"\nclass BallWrapper;\nclass CarWrapper;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT FootballPickupWrapper : public RumblePickupComponentWrapper {\npublic:\n\tCONSTRUCTORS(FootballPickupWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tfloat GetAttachTime();\n\tvoid SetAttachTime(float AttachTime);\n\tfloat GetDetachTime();\n\tvoid SetDetachTime(float DetachTime);\n\tVector GetAttachOffset();\n\tvoid SetAttachOffset(Vector AttachOffset);\n\tfloat GetCarFumbleForce();\n\tvoid SetCarFumbleForce(float CarFumbleForce);\n\tfloat GetDoubleJumpUpForce();\n\tvoid SetDoubleJumpUpForce(float DoubleJumpUpForce);\n\tfloat GetDemolishUpForce();\n\tvoid SetDemolishUpForce(float DemolishUpForce);\n\tfloat GetMinBreakTime();\n\tvoid SetMinBreakTime(float MinBreakTime);\n\tfloat GetMinAttachTime();\n\tvoid SetMinAttachTime(float MinAttachTime);\n\tfloat GetCheckLastTouchRate();\n\tvoid SetCheckLastTouchRate(float CheckLastTouchRate);\n\tfloat GetOutOfBoundsZ();\n\tvoid SetOutOfBoundsZ(float OutOfBoundsZ);\n\tBallWrapper GetWeldedBall();\n\tvoid SetWeldedBall(BallWrapper WeldedBall);\n\tfloat GetLastTouchCheckTime();\n\tvoid SetLastTouchCheckTime(float LastTouchCheckTime);\n\tBallWrapper GetPendingBall();\n\tvoid SetPendingBall(BallWrapper PendingBall);\n\tVector GetPendingBallDodge();\n\tvoid SetPendingBallDodge(Vector PendingBallDodge);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tbool IsDrivingOutOfBounds();\n\tbool DisableBallImpactForces();\n\tvoid DeactivationFX();\n\tvoid HandleBallExplode(BallWrapper Ball);\n\tbool GetShouldHideActivateUI();\n\tbool GetWasRecentlyAttached();\n\tvoid HandleCarTouch(BallWrapper InBall, CarWrapper InCar, unsigned char HitType);\n\tvoid FumbleBall(float UpwardForce);\n\tvoid ThrowPendingBall();\n\tvoid HandleHitBall(CarWrapper InCar, BallWrapper InBall, Vector& HitLocation, Vector& HitNormal);\n\tvoid OnWeldedBallChanged();\n\tvoid PickupTick(float DeltaTime);\n\tvoid PickupEnd();\n\tvoid PickupStart();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/GrapplingHookPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass BallWrapper;\r\nclass RBActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GrapplingHookPickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(GrapplingHookPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetImpulse();\r\n\tvoid SetImpulse(float newImpulse);\r\n\tfloat GetForce();\r\n\tvoid SetForce(float newForce);\r\n\tfloat GetMaxRopeLength();\r\n\tvoid SetMaxRopeLength(float newMaxRopeLength);\r\n\tfloat GetPredictionSpeed();\r\n\tvoid SetPredictionSpeed(float newPredictionSpeed);\r\n\tunsigned long GetbDeactivateOnTouch();\r\n\tvoid SetbDeactivateOnTouch(unsigned long newbDeactivateOnTouch);\r\n\tunsigned long GetbInstant();\r\n\tvoid SetbInstant(unsigned long newbInstant);\r\n\tunsigned long GetbBlocked();\r\n\tvoid SetbBlocked(unsigned long newbBlocked);\r\n\tunsigned long GetbAttachedToBall();\r\n\tvoid SetbAttachedToBall(unsigned long newbAttachedToBall);\r\n\tVector GetRopeMeshScale();\r\n\tvoid SetRopeMeshScale(Vector newRopeMeshScale);\r\n\tfloat GetRopeMeshInitialSize();\r\n\tvoid SetRopeMeshInitialSize(float newRopeMeshInitialSize);\r\n\tRotator GetRopeRotationOffset();\r\n\tvoid SetRopeRotationOffset(Rotator newRopeRotationOffset);\r\n\tVector GetHookMeshScale();\r\n\tvoid SetHookMeshScale(Vector newHookMeshScale);\r\n\tVector GetHookMeshOffset();\r\n\tvoid SetHookMeshOffset(Vector newHookMeshOffset);\r\n\tRotator GetHookRotationOffset();\r\n\tvoid SetHookRotationOffset(Rotator newHookRotationOffset);\r\n\tfloat GetHitDistanceOffset();\r\n\tvoid SetHitDistanceOffset(float newHitDistanceOffset);\r\n\tfloat GetAfterAttachDuration();\r\n\tvoid SetAfterAttachDuration(float newAfterAttachDuration);\r\n\tfloat GetBlockedRequiredMoveDistance();\r\n\tvoid SetBlockedRequiredMoveDistance(float newBlockedRequiredMoveDistance);\r\n\tfloat GetBlockedRequiredMoveTime();\r\n\tvoid SetBlockedRequiredMoveTime(float newBlockedRequiredMoveTime);\r\n\tfloat GetBlockedStartTime();\r\n\tvoid SetBlockedStartTime(float newBlockedStartTime);\r\n\tVector GetBlockedStartPos();\r\n\tvoid SetBlockedStartPos(Vector newBlockedStartPos);\r\n\tBallWrapper GetBall();\r\n\tvoid SetBall(BallWrapper newBall);\r\n\tVector GetRopeOrigin();\r\n\tvoid SetRopeOrigin(Vector newRopeOrigin);\r\n\tfloat GetRopeToTime();\r\n\tvoid SetRopeToTime(float newRopeToTime);\r\n\tfloat GetCurrentRopeLength();\r\n\tvoid SetCurrentRopeLength(float newCurrentRopeLength);\r\n\tfloat GetAttachTime();\r\n\tvoid SetAttachTime(float newAttachTime);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid HandleBallExploded(BallWrapper InBall);\r\n\tvoid PickupEnd();\r\n\tvoid ScaleMeshToLocation(Vector& NewLocation, Vector& TargetLocation);\r\n\tVector GetPredictedBallLocation(BallWrapper InBall);\r\n\tVector GetTargetedLocation();\r\n\tvoid UpdateVisual(float DeltaTime);\r\n\tvoid PickupTick(float DeltaTime);\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid DoAttach();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/GravityPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass BallWrapper;\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT GravityPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(GravityPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetBallGravity();\r\n\tvoid SetBallGravity(float newBallGravity);\r\n\tfloat GetRange();\r\n\tvoid SetRange(float newRange);\r\n\tVector GetOffset();\r\n\tvoid SetOffset(Vector newOffset);\r\n\tunsigned long GetbDeactivateOnTouch();\r\n\tvoid SetbDeactivateOnTouch(unsigned long newbDeactivateOnTouch);\r\n\tfloat GetRecordBallHitRate();\r\n\tvoid SetRecordBallHitRate(float newRecordBallHitRate);\r\n\tfloat GetLastRecordedBallHitTime();\r\n\tvoid SetLastRecordedBallHitTime(float newLastRecordedBallHitTime);\r\n\tBallWrapper GetPrevBall();\r\n\tvoid SetPrevBall(BallWrapper newPrevBall);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid UpdateVisual();\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/HandbrakeOverridePickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT HandbrakeOverridePickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(HandbrakeOverridePickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tCarWrapper GetOtherCar();\r\n\tvoid SetOtherCar(CarWrapper newOtherCar);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/HitForcePickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass RBActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT HitForcePickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(HitForcePickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned long GetbBallForce();\r\n\tvoid SetbBallForce(unsigned long newbBallForce);\r\n\tunsigned long GetbCarForce();\r\n\tvoid SetbCarForce(unsigned long newbCarForce);\r\n\tunsigned long GetbDemolishCars();\r\n\tvoid SetbDemolishCars(unsigned long newbDemolishCars);\r\n\tfloat GetBallHitForce();\r\n\tvoid SetBallHitForce(float newBallHitForce);\r\n\tfloat GetCarHitForce();\r\n\tvoid SetCarHitForce(float newCarHitForce);\r\n\tfloat GetMinFXTime();\r\n\tvoid SetMinFXTime(float newMinFXTime);\r\n\tfloat GetOrigBallHitForce();\r\n\tvoid SetOrigBallHitForce(float newOrigBallHitForce);\r\n\tfloat GetOrigCarHitForce();\r\n\tvoid SetOrigCarHitForce(float newOrigCarHitForce);\r\n\tfloat GetLastFXTime();\r\n\tvoid SetLastFXTime(float newLastFXTime);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/RugbyPickupWrapper.h",
    "content": "#pragma once\n#include \"RumblePickupComponentWrapper.h\"\nclass RBActorWrapper;\nclass BallWrapper;\nclass CarWrapper;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT RugbyPickupWrapper : public RumblePickupComponentWrapper {\npublic:\n\tCONSTRUCTORS(RugbyPickupWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tfloat GetAttachTime();\n\tvoid SetAttachTime(float AttachTime);\n\tfloat GetMinDetachTime();\n\tvoid SetMinDetachTime(float MinDetachTime);\n\tfloat GetMinBreakTime();\n\tvoid SetMinBreakTime(float MinBreakTime);\n\tfloat GetMinBreakForce();\n\tvoid SetMinBreakForce(float MinBreakForce);\n\tfloat GetCheckLastTouchRate();\n\tvoid SetCheckLastTouchRate(float CheckLastTouchRate);\n\tfloat GetKickOffActivationDelay();\n\tvoid SetKickOffActivationDelay(float KickOffActivationDelay);\n\tBallWrapper GetWeldedBall();\n\tvoid SetWeldedBall(BallWrapper WeldedBall);\n\tfloat GetLastTouchCheckTime();\n\tvoid SetLastTouchCheckTime(float LastTouchCheckTime);\n\tunsigned int GetbBallWelded();\n\tvoid SetbBallWelded(unsigned int bBallWelded);\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tbool DisableBallImpactForces();\n\tvoid DeactivationFX();\n\tvoid HandleBallExploded(BallWrapper Ball);\n\tbool GetShouldHideActivateUI();\n\tvoid DoBreak();\n\tbool GetWasRecentlyAttached();\n\tvoid HandleCarTouch(BallWrapper InBall, CarWrapper InCar, unsigned char HitType);\n\tvoid HandleHitBall(CarWrapper InCar, BallWrapper InBall, Vector& HitLocation, Vector& HitNormal);\n\tvoid HandleBallWeldedChanged();\n\tvoid PickupTick(float DeltaTime);\n\tvoid RemovePickupFX();\n\tvoid PickupEnd();\n\tvoid InitPickupFX();\n\tvoid PickupStart();\n\tbool GetCanDetach();\n\tbool TryActivate(RBActorWrapper TargetOverride);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/RumblePickupComponentWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/CarComponent/CarComponentWrapper.h\"\r\nclass BoostWrapper;\r\nclass UnrealStringWrapper;\r\nclass CarWrapper;\r\nclass RBActorWrapper;\r\nclass FXActorWrapper;\r\nclass BallWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT RumblePickupComponentWrapper : public CarComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(RumblePickupComponentWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetPickupName();\r\n\tunsigned long GetbHudIgnoreUseTime();\r\n\tvoid SetbHudIgnoreUseTime(unsigned long newbHudIgnoreUseTime);\r\n\tunsigned long GetbHasActivated();\r\n\tvoid SetbHasActivated(unsigned long newbHasActivated);\r\n\tunsigned long GetbIsActive();\r\n\tvoid SetbIsActive(unsigned long newbIsActive);\r\n\tfloat GetActivationDuration();\r\n\tvoid SetActivationDuration(float newActivationDuration);\r\n\tFXActorWrapper GetPickupFXArchetype();\r\n\tvoid SetPickupFXArchetype(FXActorWrapper newPickupFXArchetype);\r\n\tFXActorWrapper GetPickupFX();\r\n\tvoid SetPickupFX(FXActorWrapper newPickupFX);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tbool HasActivated2();\r\n\tRBActorWrapper GetClientTarget();\r\n\tvoid OnVehicleSetupComplete();\r\n\tfloat GetActiveTimePercent();\r\n\tvoid PickupEnd();\r\n\tvoid PickupStart();\r\n\tBoostWrapper GetBoostComponent();\r\n\tvoid DeactivatePickup();\r\n\tbool TryActivate(RBActorWrapper TargetOverride);\r\n\tvoid OnCreated();\r\n\tbool CanPickup(CarWrapper InCar);\r\n\tvoid ApplyPickup(CarWrapper InCar);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/SpringPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass BallWrapper;\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT SpringPickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(SpringPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetForce();\r\n\tvoid SetForce(float newForce);\r\n\tfloat GetVerticalForce();\r\n\tvoid SetVerticalForce(float newVerticalForce);\r\n\tVector GetTorque();\r\n\tvoid SetTorque(Vector newTorque);\r\n\tunsigned long GetbApplyRelativeForce();\r\n\tvoid SetbApplyRelativeForce(unsigned long newbApplyRelativeForce);\r\n\tunsigned long GetbApplyConstantForce();\r\n\tvoid SetbApplyConstantForce(unsigned long newbApplyConstantForce);\r\n\tunsigned long GetbBreakConstantForceWithHit();\r\n\tvoid SetbBreakConstantForceWithHit(unsigned long newbBreakConstantForceWithHit);\r\n\tunsigned long GetbApplyRelativeConstantForce();\r\n\tvoid SetbApplyRelativeConstantForce(unsigned long newbApplyRelativeConstantForce);\r\n\tunsigned long GetbInstant();\r\n\tvoid SetbInstant(unsigned long newbInstant);\r\n\tunsigned long GetbFollowAfterHit();\r\n\tvoid SetbFollowAfterHit(unsigned long newbFollowAfterHit);\r\n\tunsigned long GetbSpringed();\r\n\tvoid SetbSpringed(unsigned long newbSpringed);\r\n\tfloat GetRelativeForceNormalDirection();\r\n\tvoid SetRelativeForceNormalDirection(float newRelativeForceNormalDirection);\r\n\tfloat GetMaxSpringLength();\r\n\tvoid SetMaxSpringLength(float newMaxSpringLength);\r\n\tfloat GetConstantForce();\r\n\tvoid SetConstantForce(float newConstantForce);\r\n\tVector GetFromOffset();\r\n\tvoid SetFromOffset(Vector newFromOffset);\r\n\tVector GetSpringMeshScale();\r\n\tvoid SetSpringMeshScale(Vector newSpringMeshScale);\r\n\tfloat GetSpringMeshInitialSize();\r\n\tvoid SetSpringMeshInitialSize(float newSpringMeshInitialSize);\r\n\tRotator GetSpringRotationOffset();\r\n\tvoid SetSpringRotationOffset(Rotator newSpringRotationOffset);\r\n\tVector GetHittingMeshScale();\r\n\tvoid SetHittingMeshScale(Vector newHittingMeshScale);\r\n\tVector GetHittingMeshOffset();\r\n\tvoid SetHittingMeshOffset(Vector newHittingMeshOffset);\r\n\tRotator GetHittingRotationOffset();\r\n\tvoid SetHittingRotationOffset(Rotator newHittingRotationOffset);\r\n\tfloat GetHitDistanceOffset();\r\n\tvoid SetHitDistanceOffset(float newHitDistanceOffset);\r\n\tfloat GetAfterSpringDuration();\r\n\tvoid SetAfterSpringDuration(float newAfterSpringDuration);\r\n\tunsigned char GetBallHitType();\r\n\tvoid SetBallHitType(unsigned char newBallHitType);\r\n\tfloat GetMinSpringLength();\r\n\tvoid SetMinSpringLength(float newMinSpringLength);\r\n\tfloat GetWeldedForceScalar();\r\n\tvoid SetWeldedForceScalar(float newWeldedForceScalar);\r\n\tfloat GetWeldedVerticalForce();\r\n\tvoid SetWeldedVerticalForce(float newWeldedVerticalForce);\r\n\tfloat GetCurrentSpringLength();\r\n\tvoid SetCurrentSpringLength(float newCurrentSpringLength);\r\n\tfloat GetSpringedTime();\r\n\tvoid SetSpringedTime(float newSpringedTime);\r\n\tfloat GetAfterSpringTime();\r\n\tvoid SetAfterSpringTime(float newAfterSpringTime);\r\n\tfloat GetSpringToTime();\r\n\tvoid SetSpringToTime(float newSpringToTime);\r\n\tVector GetSpringOrigin();\r\n\tvoid SetSpringOrigin(Vector newSpringOrigin);\r\n\tVector GetSpringedLocation();\r\n\tvoid SetSpringedLocation(Vector newSpringedLocation);\r\n\tVector GetSpringedNormal();\r\n\tvoid SetSpringedNormal(Vector newSpringedNormal);\r\n\tfloat GetSpringedLength();\r\n\tvoid SetSpringedLength(float newSpringedLength);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid HandleCarTouchedBall(BallWrapper Ball, CarWrapper OtherCar, unsigned char HitType);\r\n\tvoid ScaleSpringMeshToLocation(Vector& NewLocation, Vector& TargetLoction);\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tVector GetRelativeConstantForce(Vector& Direction);\r\n\tVector GetRelativeImpulse(Vector& Direction);\r\n\tvoid DoSpring(unsigned long bFirstHit);\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/SwapperPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/TargetedPickup.h\"\r\nclass CarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT SwapperPickup : public TargetedPickup {\r\npublic:\r\n\tCONSTRUCTORS(SwapperPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tCarWrapper GetOtherCar();\r\n\tvoid SetOtherCar(CarWrapper newOtherCar);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid OnTargetChanged();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/TargetedPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass CarWrapper;\r\nclass RBActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TargetedPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TargetedPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tunsigned long GetbCanTargetBall();\r\n\tvoid SetbCanTargetBall(unsigned long newbCanTargetBall);\r\n\tunsigned long GetbCanTargetCars();\r\n\tvoid SetbCanTargetCars(unsigned long newbCanTargetCars);\r\n\tunsigned long GetbCanTargetEnemyCars();\r\n\tvoid SetbCanTargetEnemyCars(unsigned long newbCanTargetEnemyCars);\r\n\tunsigned long GetbCanTargetTeamCars();\r\n\tvoid SetbCanTargetTeamCars(unsigned long newbCanTargetTeamCars);\r\n\tunsigned long GetbUseDirectionalTargeting();\r\n\tvoid SetbUseDirectionalTargeting(unsigned long newbUseDirectionalTargeting);\r\n\tunsigned long GetbRequireTrace();\r\n\tvoid SetbRequireTrace(unsigned long newbRequireTrace);\r\n\tfloat GetRange();\r\n\tvoid SetRange(float newRange);\r\n\tfloat GetDirectionalTargetingAccuracy();\r\n\tvoid SetDirectionalTargetingAccuracy(float newDirectionalTargetingAccuracy);\r\n\tRBActorWrapper GetClientTarget();\r\n\tvoid SetClientTarget(RBActorWrapper newClientTarget);\r\n\tRBActorWrapper GetTargeted();\r\n\tvoid SetTargeted(RBActorWrapper newTargeted);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tRBActorWrapper GetClientTarget2();\r\n\tvoid TargetChanged();\r\n\tvoid OnTargetChanged();\r\n\tbool TryActivate(RBActorWrapper TargetOverride);\r\n\tbool ValidateTargetTrace(RBActorWrapper InTarget);\r\n\tbool ValidateTarget2(RBActorWrapper InTarget);\r\n\tRBActorWrapper GetTarget2();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/TimeBombPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TimeBombPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TimeBombPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetRadius();\r\n\tvoid SetRadius(float newRadius);\r\n\tfloat GetAlmostReadyDuration();\r\n\tvoid SetAlmostReadyDuration(float newAlmostReadyDuration);\r\n\tfloat GetStartMatSpeed();\r\n\tvoid SetStartMatSpeed(float newStartMatSpeed);\r\n\tfloat GetAlmostReadyMatSpeed();\r\n\tvoid SetAlmostReadyMatSpeed(float newAlmostReadyMatSpeed);\r\n\tfloat GetImpulseForce();\r\n\tvoid SetImpulseForce(float newImpulseForce);\r\n\tfloat GetCarVerticalForce();\r\n\tvoid SetCarVerticalForce(float newCarVerticalForce);\r\n\tfloat GetCarTorque();\r\n\tvoid SetCarTorque(float newCarTorque);\r\n\tunsigned long GetbDemolish();\r\n\tvoid SetbDemolish(unsigned long newbDemolish);\r\n\tunsigned long GetbImpulse();\r\n\tvoid SetbImpulse(unsigned long newbImpulse);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PickupEnd();\r\n\tvoid AlmostReady2();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/TornadoPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass RBActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TornadoPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TornadoPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetHeight();\r\n\tvoid SetHeight(float newHeight);\r\n\tfloat GetRadius();\r\n\tvoid SetRadius(float newRadius);\r\n\tVector GetOffset();\r\n\tvoid SetOffset(Vector newOffset);\r\n\tfloat GetRotationalForce();\r\n\tvoid SetRotationalForce(float newRotationalForce);\r\n\tfloat GetTorque();\r\n\tvoid SetTorque(float newTorque);\r\n\tVector GetFXScale();\r\n\tvoid SetFXScale(Vector newFXScale);\r\n\tVector GetFXOffset();\r\n\tvoid SetFXOffset(Vector newFXOffset);\r\n\tVector GetMeshOffset();\r\n\tvoid SetMeshOffset(Vector newMeshOffset);\r\n\tVector GetMeshScale();\r\n\tvoid SetMeshScale(Vector newMeshScale);\r\n\tfloat GetMaxVelocityOffset();\r\n\tvoid SetMaxVelocityOffset(float newMaxVelocityOffset);\r\n\tfloat GetBallMultiplier();\r\n\tvoid SetBallMultiplier(float newBallMultiplier);\r\n\tunsigned long GetbDebugVis();\r\n\tvoid SetbDebugVis(unsigned long newbDebugVis);\r\n\tfloat GetVelocityEase();\r\n\tvoid SetVelocityEase(float newVelocityEase);\r\n\tVector GetVel();\r\n\tvoid SetVel(Vector newVel);\r\n\tArrayWrapper<RBActorWrapper> GetAffecting();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ApplyForces(float ActiveTime);\r\n\tvoid PlayCarSFX(RBActorWrapper InActor);\r\n\tvoid PlayBallSFX(RBActorWrapper InActor);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/RumbleComponent/VelcroPickup.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../../WrapperStructs.h\"\r\n#include \"../.././GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\r\nclass BallWrapper;\r\nclass CarWrapper;\r\nclass RBActorWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT VelcroPickup : public RumblePickupComponentWrapper {\r\npublic:\r\n\tCONSTRUCTORS(VelcroPickup)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tVector GetBallOffset();\r\n\tvoid SetBallOffset(Vector newBallOffset);\r\n\tunsigned long GetbUseRealOffset();\r\n\tvoid SetbUseRealOffset(unsigned long newbUseRealOffset);\r\n\tunsigned long GetbHit();\r\n\tvoid SetbHit(unsigned long newbHit);\r\n\tunsigned long GetbBroken();\r\n\tvoid SetbBroken(unsigned long newbBroken);\r\n\tfloat GetAfterHitDuration();\r\n\tvoid SetAfterHitDuration(float newAfterHitDuration);\r\n\tfloat GetPostBreakDuration();\r\n\tvoid SetPostBreakDuration(float newPostBreakDuration);\r\n\tfloat GetMinBreakForce();\r\n\tvoid SetMinBreakForce(float newMinBreakForce);\r\n\tfloat GetMinBreakTime();\r\n\tvoid SetMinBreakTime(float newMinBreakTime);\r\n\tfloat GetCheckLastTouchRate();\r\n\tvoid SetCheckLastTouchRate(float newCheckLastTouchRate);\r\n\tBallWrapper GetWeldedBall();\r\n\tvoid SetWeldedBall(BallWrapper newWeldedBall);\r\n\tfloat GetOldBallMass();\r\n\tvoid SetOldBallMass(float newOldBallMass);\r\n\tfloat GetAttachTime();\r\n\tvoid SetAttachTime(float newAttachTime);\r\n\tfloat GetLastTouchCheckTime();\r\n\tvoid SetLastTouchCheckTime(float newLastTouchCheckTime);\r\n\tfloat GetBreakTime();\r\n\tvoid SetBreakTime(float newBreakTime);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid DoBreak();\r\n\tvoid HandleCarTouch(BallWrapper InBall, CarWrapper InCar, unsigned char HitType);\r\n\tvoid PickupEnd();\r\n\tvoid OnBallHit();\r\n\tvoid PickupStart();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/Stats/StatEventWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n#include \"../../Engine/UnrealStringWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT StatEventWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(StatEventWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetPoints();\n\tfloat GetCooldownSeconds();\n\tunsigned long GetbAddToScore();\n\tunsigned long GetbIsLeaderboardStat();\n\tunsigned long GetbNotifyTicker();\n\tunsigned long GetbShowOnHUD();\n\tunsigned long GetbPrimaryStat();\n\tunsigned long GetbSkipReplication();\n\tunsigned long GetbCanMute();\n\tunsigned long GetbCountMultiplied();\n\tUnrealStringWrapper GetLabel();\n\tUnrealStringWrapper GetPluralLabel();\n\tUnrealStringWrapper GetDescription();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tfloat GetNextCooldownTime();\n\tstd::string GetGroupName();\n    std::string GetEventName();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/TeamInfoWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass UnrealStringWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TeamInfoWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TeamInfoWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tUnrealStringWrapper GetTeamName();\r\n\tint GetSize();\r\n\tvoid SetSize(int newSize);\r\n\tint GetScore();\r\n\tvoid SetScore(int newScore);\r\n\tint GetTeamIndex();\r\n\tvoid SetTeamIndex(int newTeamIndex);\r\n\tUnrealColor GetTeamColor();\r\n\tvoid SetTeamColor(UnrealColor newTeamColor);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tunsigned char GetTeamNum();\r\n\tvoid eventDestroyed();\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/TeamWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/TeamInfoWrapper.h\"\r\nclass UnrealStringWrapper;\r\nclass ActorWrapper;\r\nclass PriWrapper;\r\nclass TeamGameEventWrapper;\r\nclass WrapperStructs;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT TeamWrapper : public TeamInfoWrapper {\r\npublic:\r\n\tCONSTRUCTORS(TeamWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n    LinearColor GetPrimaryColor();\r\n    LinearColor GetSecondaryColor();\r\n\tLinearColor GetFontColor();\r\n\tvoid SetFontColor(LinearColor newFontColor);\r\n\tLinearColor GetColorBlindFontColor();\r\n\tvoid SetColorBlindFontColor(LinearColor newColorBlindFontColor);\r\n\tUnrealColor GetTeamControllerColor();\r\n\tvoid SetTeamControllerColor(UnrealColor newTeamControllerColor);\r\n\tUnrealColor GetTeamScoreStrobeColor();\r\n\tvoid SetTeamScoreStrobeColor(UnrealColor newTeamScoreStrobeColor);\r\n\tStructArrayWrapper<LinearColor> GetDefaultColorList();\r\n\tStructArrayWrapper<LinearColor> GetColorBlindColorList();\r\n\tStructArrayWrapper<LinearColor> GetCurrentColorList();\r\n\tTeamGameEventWrapper GetGameEvent();\r\n\tvoid SetGameEvent(TeamGameEventWrapper newGameEvent);\r\n\tArrayWrapper<PriWrapper> GetMembers();\r\n\tUnrealStringWrapper GetCustomTeamName();\r\n\tUnrealStringWrapper GetSanitizedTeamName();\r\n\tunsigned long long GetClubID();\r\n\tvoid SetClubID(unsigned long long newClubID);\r\n\tunsigned long GetbForfeit();\r\n\tvoid SetbForfeit(unsigned long newbForfeit);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tbool __Team_TA__GetHumanPlayers(PriWrapper PRI);\r\n\tbool __Team_TA__GetHumanPrimaryPlayers(PriWrapper PRI);\r\n\tbool __Team_TA__GetNumOfMembersThatCanStartForfeit(PriWrapper P);\r\n\tvoid __Team_TA__EnableAllMembersStartVoteToForfeit(PriWrapper Member);\r\n\tvoid OnClubColorsChanged();\r\n\tvoid Forfeit2();\r\n\tvoid EnableAllMembersStartVoteToForfeit2();\r\n\tvoid EnableAllMembersStartVoteToForfeitIfNecessary();\r\n\tvoid VoteToForfeit22(PriWrapper PRI);\r\n\tvoid NotifyKismetTeamColorChanged();\r\n\tvoid UpdateColors();\r\n\tvoid SetLogo(int LogoID, unsigned long bSwapColors);\r\n\tvoid HandleTeamNameSanitized(std::string Original, std::string Sanitized);\r\n\tvoid SetClubID2(unsigned long long InClubID);\r\n\tvoid SetCustomTeamName(std::string NewName);\r\n\tvoid SetDefaultColors();\r\n\tbool IsSingleParty();\r\n\tPriWrapper GetTeamMemberNamed(std::string PlayerName);\r\n\tint GetNumBots();\r\n\tint GetNumHumans();\r\n\tvoid OnScoreUpdated();\r\n\tvoid ResetScore();\r\n\tvoid RemovePoints(int Points);\r\n\tvoid SetScore(int Points);\r\n\tvoid ScorePoint(int AdditionalScore);\r\n\tvoid MuteOtherTeam(TeamWrapper OtherTeam, unsigned long bMute);\r\n\tvoid ClearTemporarySpawnSpots();\r\n\tvoid ExpireTemporarySpawnSpots();\r\n\tvoid AddTemporarySpawnSpot(ActorWrapper AtActor);\r\n\tvoid OnGameEventSet();\r\n\tvoid SetGameEvent2(TeamGameEventWrapper InGameEvent);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/VehiclePickupWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././Engine/ActorWrapper.h\"\r\nclass CarWrapper;\r\nclass FXActorWrapper;\r\nclass PrimitiveComponentWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT VehiclePickupWrapper : public ActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(VehiclePickupWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tfloat GetRespawnDelay();\r\n\tvoid SetRespawnDelay(float newRespawnDelay);\r\n\tFXActorWrapper GetFXActorArchetype();\r\n\tvoid SetFXActorArchetype(FXActorWrapper newFXActorArchetype);\r\n\tFXActorWrapper GetFXActor();\r\n\tvoid SetFXActor(FXActorWrapper newFXActor);\r\n\tunsigned long GetbPickedUp();\r\n\tvoid SetbPickedUp(unsigned long newbPickedUp);\r\n\tunsigned long GetbNetRelevant();\r\n\tvoid SetbNetRelevant(unsigned long newbNetRelevant);\r\n\tunsigned long GetbNoPickup();\r\n\tvoid SetbNoPickup(unsigned long newbNoPickup);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid PlayPickedUpFX();\r\n\tbool IsTouchingAVehicle();\r\n\tvoid UpdateTickDisabled();\r\n\tvoid SetNetRelevant(unsigned long bRelevant);\r\n\tvoid Respawn2();\r\n\tvoid SetPickedUp(unsigned long bNewPickedUp, CarWrapper InInstigator);\r\n\tvoid Pickup2(CarWrapper Car);\r\n\tbool CanPickup(CarWrapper Car);\r\n\tvoid OnTouch(CarWrapper Car);\r\n\tvoid eventTouch(ActorWrapper Other, PrimitiveComponentWrapper OtherComp, Vector& HitLocation, Vector& HitNormal);\r\n\tvoid OnPickUp();\r\n\tvoid OnSpawn();\r\n\tvoid SetNoPickup();\r\n\tvoid SetupReplicateNoPickup();\r\n\tvoid InitFX();\r\n\tvoid eventPostBeginPlay();\r\n\tvoid eventPreBeginPlay();\r\n\tvoid EventPickedUp(VehiclePickupWrapper Pickup);\r\n\tvoid EventSpawned(VehiclePickupWrapper Pickup);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameObject/VehicleWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"../WrapperStructs.h\"\r\n#include \".././GameObject/RBActorWrapper.h\"\r\nclass AIControllerWrapper;\r\nclass PlayerControllerWrapper;\r\nclass BoostWrapper;\r\nclass DodgeComponentWrapper;\r\nclass JumpComponentWrapper;\r\nclass PriWrapper;\r\nclass DoubleJumpComponentWrapper;\r\nclass VehicleSimWrapper;\r\nclass AirControlComponentWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT VehicleWrapper : public RBActorWrapper {\r\npublic:\r\n\tCONSTRUCTORS(VehicleWrapper)\r\n\r\n\r\n\tunsigned long GetbCanJump();\r\n\tvoid SetbCanJump(unsigned long newbCanJump);\r\n\t\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tVehicleSimWrapper GetVehicleSim();\r\n\tvoid SetVehicleSim(VehicleSimWrapper newVehicleSim);\r\n\tStickyForceData GetStickyForce();\r\n\tvoid SetStickyForce(StickyForceData newStickyForce);\r\n\tunsigned long GetbDriving();\r\n\tvoid SetbDriving(unsigned long newbDriving);\r\n\tunsigned long GetbReplicatedHandbrake();\r\n\tvoid SetbReplicatedHandbrake(unsigned long newbReplicatedHandbrake);\r\n\tunsigned long GetbJumped();\r\n\tvoid SetbJumped(unsigned long newbJumped);\r\n\tunsigned long GetbDoubleJumped();\r\n\tvoid SetbDoubleJumped(unsigned long newbDoubleJumped);\r\n\tunsigned long GetbOnGround();\r\n\tvoid SetbOnGround(unsigned long newbOnGround);\r\n\tunsigned long GetbSuperSonic();\r\n\tvoid SetbSuperSonic(unsigned long newbSuperSonic);\r\n\tunsigned long GetbPodiumMode();\r\n\tvoid SetbPodiumMode(unsigned long newbPodiumMode);\r\n\tControllerInput GetInput();\r\n\tvoid SetInput(ControllerInput newInput);\r\n\tunsigned char GetReplicatedThrottle();\r\n\tvoid SetReplicatedThrottle(unsigned char newReplicatedThrottle);\r\n\tunsigned char GetReplicatedSteer();\r\n\tvoid SetReplicatedSteer(unsigned char newReplicatedSteer);\r\n    AIControllerWrapper GetAIController();\r\n\tPlayerControllerWrapper GetPlayerController();\r\n\tvoid SetPlayerController(PlayerControllerWrapper newPlayerController);\r\n\tPriWrapper GetPRI();\r\n\tvoid SetPRI(PriWrapper newPRI);\r\n\tint GetVehicleUpdateTag();\r\n\tvoid SetVehicleUpdateTag(int newVehicleUpdateTag);\r\n\tVector GetLocalCollisionOffset();\r\n\tvoid SetLocalCollisionOffset(Vector newLocalCollisionOffset);\r\n\tVector GetLocalCollisionExtent();\r\n\tvoid SetLocalCollisionExtent(Vector newLocalCollisionExtent);\r\n\tint GetLastBallTouchFrame();\r\n\tvoid SetLastBallTouchFrame(int newLastBallTouchFrame);\r\n\tint GetLastBallImpactFrame();\r\n\tvoid SetLastBallImpactFrame(int newLastBallImpactFrame);\r\n\tBoostWrapper GetBoostComponent();\r\n\tDodgeComponentWrapper GetDodgeComponent();\r\n\tAirControlComponentWrapper GetAirControlComponent();\r\n\tJumpComponentWrapper GetJumpComponent();\r\n\tDoubleJumpComponentWrapper GetDoubleJumpComponent();\r\n\tvoid SetDoubleJumpComponent(DoubleJumpComponentWrapper newDoubleJumpComponent);\r\n\tfloat GetTimeBelowSupersonicSpeed();\r\n\tvoid SetTimeBelowSupersonicSpeed(float newTimeBelowSupersonicSpeed);\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid ForceNetPacketIfNearBall();\r\n\tbool IsCarWithinForwardEllipticalCone(VehicleWrapper OtherCar, float YawAngleDegrees, float PitchAngleDegrees);\r\n\tfloat GetForwardSpeed();\r\n\tfloat GetTimeOffGround();\r\n\tfloat GetTimeOnGround();\r\n\tVector GetGroundNormal();\r\n\tbool IsOnWall();\r\n\tbool IsOnGround();\r\n\tint GetNumWheelWorldContacts();\r\n\tint GetNumWheelContacts();\r\n\tvoid ZeroMovementVariables();\r\n\tvoid eventSetVehicleInput(ControllerInput& NewInput);\r\n\tvoid EnablePodiumMode();\r\n\tvoid SetDriving(unsigned long bDrive);\r\n\tvoid InitAudioParams();\r\n\tvoid OnPRIChanged();\r\n\tvoid OnControllerChanged();\r\n\tvoid UnPossessed();\r\n\tvoid EventPRIChanged(VehicleWrapper Vehicle);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/GameWrapper.h",
    "content": "#pragma once\n#pragma warning(push)\n#pragma warning(disable:4251)\n\n#include <map>\n#include <queue>\n#include <mutex>\n#include <typeindex>\n#include \"canvaswrapper.h\"\n#include \"mmrwrapper.h\"\n#include \"items/LoadoutSaveWrapper.h\"\n\n#ifdef __cpp_lib_filesystem\n#include <filesystem>\n#endif\nclass GameEventWrapper;\nclass TutorialWrapper;\nclass ServerWrapper;\nclass CameraWrapper;\nclass ReplayServerWrapper;\nclass CanvasWrapper;\nclass CarWrapper;\nclass EngineTAWrapper;\nclass PlayerControllerWrapper;\nclass PluginManagerWrapper;\nclass GuiManagerWrapper;\nclass BindingsWrapper;\nclass SequenceWrapper;\nclass ItemsWrapper;\nclass ClubDetailsWrapper;\nclass UnrealStringWrapper;\nclass MatchmakingWrapper;\nclass SettingsWrapper;\nclass PriWrapper;\nclass ModalWrapper;\nclass TextInputModalWrapper;\nclass MenuStackWrapper;\nclass GfxDataTrainingWrapper;\nclass ReplayManagerWrapper;\nclass MapListWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT GameWrapper\n{\npublic:\n\tGameWrapper(std::uintptr_t mem, long pluginType, std::type_index idx);\n\tGameWrapper(const GameWrapper& other);\n\tGameWrapper& operator=(GameWrapper rhs);\n\t~GameWrapper();\n\n\tbool IsInGame();\n\tbool IsInOnlineGame();\n\t//bool IsInTutorial(); //Uncomment this later, but for now dont let plugins compile which use this as they most likely rely on broken functions\n\tbool IsInFreeplay();\n\tbool IsInReplay();\n\tbool IsInCustomTraining();\n\n\t[[deprecated(\"Doesn't work, use PriWrapper::IsSpectator() instead. (For local player, use GetPlayerController()/*nullcheck*/.GetPRI())\")]]\n\tbool IsSpectatingInOnlineGame();\n\n\tbool IsPaused();\n\tbool IsUsingEpicVersion();\n\tbool IsUsingSteamVersion();\n\n\tint GetSteamVersion();\n\tstd::string GetPsyBuildID();\n\n    ServerWrapper                   GetCurrentGameState();\n\tServerWrapper\t\t\t\t\tGetOnlineGame();\n\t//TutorialWrapper\t\t\t\tGetGameEventAsTutorial();\n\tServerWrapper\t\t\t\t\tGetGameEventAsServer();\n\tReplayServerWrapper\t\t\t\tGetGameEventAsReplay();\n\n\tMMRWrapper\t\t\t\t\t\tGetMMRWrapper();\n\tCarWrapper\t\t\t\t\t\tGetLocalCar();\n\tCameraWrapper\t\t\t\t\tGetCamera();\n\tEngineTAWrapper\t\t\t\t\tGetEngine();\n\tPluginManagerWrapper\t\t\tGetPluginManager();\n\tGuiManagerWrapper\t\t\t\tGetGUIManager();\n\tPlayerControllerWrapper\t\t\tGetPlayerController();\n\tItemsWrapper\t\t\t\t\tGetItemsWrapper();\n\t_NODISCARD LoadoutSaveWrapper\tGetUserLoadoutSave() const;\n\tMatchmakingWrapper\t\t\t\tGetMatchmakingWrapper();\n\tSettingsWrapper\t\t\t\t\tGetSettings();\n\t_NODISCARD ReplayManagerWrapper GetReplayManagerWrapper() const;\n\t_NODISCARD MapListWrapper\t\tGetMapListWrapper() const;\n\n\tModalWrapper\t\t\t\t\tCreateModal(const std::string& title);\n\tTextInputModalWrapper\t\t\tCreateTextInputModal(const std::string& title);\n\t\n\tvoid\t\t\t\t\t\t\tOverrideParams(void* src, size_t memsize);\n\n\tvoid\t\t\t\t\t\t\tSetTimeout(std::function<void(GameWrapper*)> theLambda, float time); //time in seconds, subject to change to std::shared_ptr<GameWrapper>\n\tvoid\t\t\t\t\t\t\tExecute(std::function<void(GameWrapper*)> theLambda); //Use this when calling from a different thread\n\tvoid\t\t\t\t\t\t\tRegisterDrawable(std::function<void(CanvasWrapper)> callback);\n\tvoid\t\t\t\t\t\t\tUnregisterDrawables(); //Can only unregister every drawable for now, sorry!\n\tstd::string\t\t\t\t\t\tGetFNameByIndex(int index);\n\tint\t\t\t\t\t\t\t\tGetFNameIndexByString(std::string name);\n\n\tvoid\t\t\t\t\t\t\tHookEvent(std::string eventName, std::function<void(std::string eventName)> callback);\n\tvoid\t\t\t\t\t\t\tUnhookEvent(std::string eventName);\n\n\tvoid\t\t\t\t\t\t\tHookEventPost(std::string eventName, std::function<void(std::string eventName)> callback);\n\tvoid\t\t\t\t\t\t\tUnhookEventPost(std::string eventName);\n\n\tvoid\t\t\t\t\t\t\tLogToChatbox(std::string text, std::string sender=\"BAKKESMOD\");\n\n\n\t/*\n\tWill queue up loading of a texture into memory, only has to be done once, after this it will persistently be stored in memory.\n\tLoading will be done at next toast render frame, any errors will be printed to the console.\n\tSupported file formats: Whatever D3DXCreateTextureFromFile supports.\n\t*/\n\tvoid\t\t\t\t\t\t\tLoadToastTexture(std::string name, std::string path);\n\tvoid\t\t\t\t\t\t\tLoadToastTexture(std::string name, std::wstring path);\n#ifdef __cpp_lib_filesystem\n\tvoid\t\t\t\t\t\t\tLoadToastTexture(std::string name, std::filesystem::path path);\n#endif\n\t/*\n\tTexture is the name of the texture given in LoadToastTexture, not the path! \"default\" will show the normal BakkesMod logo\n\t*/\n\tvoid\t\t\t\t\t\t\tToast(std::string title, std::string text, std::string texture = \"default\", float timeout = 3.5f, uint8_t toastType = 0, float width = 290.f, float height = 60.f);\n\tbool\t\t\t\t\t\t\tIsKeyPressed(int keyName);\n\tint\t\t\t\t\t\t\t\tIsCursorVisible(); // 1 if due to RL, 2 if ImGui\n\tvoid\t\t\t\t\t\t\tExecuteUnrealCommand(std::string command);\n\tstd::string \t\t\t\t\tGetRandomMap();\n\tstd::string \t\t\t\t\tGetCurrentMap();\n\tunsigned long long\t\t\t\tGetSteamID();\n\tstd::string\t\t\t\t\t\tGetEpicID();\n\tUniqueIDWrapper\t\t\t\t\tGetUniqueID();\n\tUnrealStringWrapper\t\t\t\tGetPlayerName();\n\tClubDetailsWrapper\t\t\t\tGetLocalClub();\n\tSequenceWrapper\t\t\t\t\tGetMainSequence();\n\t_NODISCARD GfxDataTrainingWrapper\t\tGetGfxTrainingData() const;\n\t_NODISCARD MenuStackWrapper\t\t\t\tGetMenuStack() const;\n\t\n\t[[deprecated(\"Experimental feature, use at your own risk. implementation and function signature subject to change\")]]\n\tvoid\t\t\t\t\t\t\tSetBotLoadout(PriWrapper& bot_pri, const struct BotLoadoutData& loadout_data);\n\n    Vector2\t\t\t\t\t\t\tGetScreenSize();\n    float\t\t\t\t\t\t\tGetDisplayScale();\n    float\t\t\t\t\t\t\tGetInterfaceScale();\n\t[[deprecated(\"Renamed to GetDisplayScale to match the name you see in the official interface\")]]\n    float\t\t\t\t\t\t\tGetSafeZoneRatio();\n\t[[deprecated(\"Renamed to GetInterfaceScale to match the name you see in the official interface\")]]\n    float\t\t\t\t\t\t\tGetUIScale();\n    unsigned int\t\t\t\t\tGetbMetric();\n    UnrealStringWrapper\t\t\t\tGetUILanguage();\n    bool\t\t\t\t\t\t\tGetbColorBlind();\n\t// Path utilities\n#ifdef __cpp_lib_filesystem\n\tstd::filesystem::path\t\t\tGetBakkesModPath();\n\tstd::filesystem::path\t\t\tGetDataFolder();\n\tstd::filesystem::path\t\t\tFixRelativePath(std::filesystem::path path);\n#endif\n\tstd::wstring\t\t\t\t\tGetBakkesModPathW();\n\tstd::wstring\t\t\t\t\tGetDataFolderW();\n\tint\t\t\t\t\t\t\t\tGetBakkesModVersion();\n\n\tvoid\t\t\t\t\t\t\tPlayReplay(const std::wstring& path);\n\tvoid\t\t\t\t\t\t\tPlayReplayFromTime(const std::wstring& path, float time);\n\n\ttemplate<typename T, typename std::enable_if<std::is_base_of<ObjectWrapper, T>::value>::type* = nullptr>\n\tvoid\t\t\t\t\t\t\tHookEventWithCaller(std::string eventName, std::function<void(T caller, void* params, std::string eventName)> callback);\n\ttemplate<typename T, typename std::enable_if<std::is_base_of<ObjectWrapper, T>::value>::type* = nullptr>\n\tvoid\t\t\t\t\t\t\tHookEventWithCallerPost(std::string eventName, std::function<void(T caller, void* params, std::string eventName)> callback);\npublic:\n\tstruct Impl;\n\tstd::unique_ptr<Impl> pimpl;\n};\n#include \"includes.h\"\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<ServerWrapper>(std::string eventName, std::function<void(ServerWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<ActorWrapper>(std::string eventName, std::function<void(ActorWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<CarWrapper>(std::string eventName, std::function<void(CarWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<CarComponentWrapper>(std::string eventName, std::function<void(CarComponentWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<PlayerControllerWrapper>(std::string eventName, std::function<void(PlayerControllerWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<BallWrapper>(std::string eventName, std::function<void(BallWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCaller<PriWrapper>(std::string eventName, std::function<void(PriWrapper caller, void* params, std::string eventName)> callback);\n\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<ActorWrapper>(std::string eventName, std::function<void(ActorWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<ServerWrapper>(std::string eventName, std::function<void(ServerWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<CarWrapper>(std::string eventName, std::function<void(CarWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<CarComponentWrapper>(std::string eventName, std::function<void(CarComponentWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<PlayerControllerWrapper>(std::string eventName, std::function<void(PlayerControllerWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<BallWrapper>(std::string eventName, std::function<void(BallWrapper caller, void* params, std::string eventName)> callback);\nextern template void BAKKESMOD_PLUGIN_IMPORT GameWrapper::HookEventWithCallerPost<PriWrapper>(std::string eventName, std::function<void(PriWrapper caller, void* params, std::string eventName)> callback);\n#pragma warning(pop)\n"
  },
  {
    "path": "include/bakkesmod/wrappers/GuiManagerWrapper.h",
    "content": "#pragma once\n#include \"./Engine/ObjectWrapper.h\"\n#include \"wrapperstructs.h\"\n//#include \"../imgui/imgui.h\"\n#include <tuple>\n\nclass BAKKESMOD_PLUGIN_IMPORT GuiManagerWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(GuiManagerWrapper);\n\tvoid* GetImGuiStyle();\n\t// Path is relative to \"bakkesmod/data/fonts/\"\n\t// the int is a status code\n\t// 0: fail\n\t// 1: queued for loading\n\t// 2: already loaded (ImFont*) will be a valid pointer.\n\tstd::tuple<int, ImFont*> LoadFont(std::string name, std::string path, int size, const ImFontConfig* = nullptr, const ImWchar* = nullptr);\n\t// the core fonts are named: default and title\n\tImFont* GetFont(std::string name);\n\nprivate:\n\tPIMPL\n};\n\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/ImageWrapper.h",
    "content": "#pragma once\n#include <string>\n#include <memory>\n#include \"wrapperstructs.h\"\n\n#ifdef __cpp_lib_filesystem\n#include <filesystem>\n#endif\n\nclass BAKKESMOD_PLUGIN_IMPORT ImageWrapper\n{\npublic:\n\n\texplicit ImageWrapper(std::string path, bool canvasLoad = false, bool ImGuiLoad = false);\n\texplicit ImageWrapper(std::wstring path, bool canvasLoad = false, bool ImGuiLoad = false);\n#ifdef __cpp_lib_filesystem\n\texplicit ImageWrapper(std::filesystem::path path, bool canvasLoad = false, bool ImGuiLoad = false);\n#endif\n\t// Don't make copies of this object!\n\tImageWrapper(const ImageWrapper&) = delete;\n\tImageWrapper& operator =(const ImageWrapper&) = delete;\n\n\t//ImageWrapper(ImageWrapper&&) = default;\n\t//ImageWrapper& operator = (ImageWrapper&&) = default;\n\n\t~ImageWrapper();\n\n\n\tbool LoadForCanvas();\n\tbool IsLoadedForCanvas();\n\t// Will do the load procedure if it haven't been preloaded\n\tvoid* GetCanvasTex();\n\n\tvoid LoadForImGui(std::function<void(bool)> onLoaded);\n\tbool IsLoadedForImGui();\n\t// Will do the load procedure if it haven't been preloaded\n\tvoid* GetImGuiTex();\n\n\tstd::string GetPath();\n#ifdef __cpp_lib_filesystem\n\tstd::filesystem::path GetPathFs();\n#endif\n\tstd::wstring GetPathW();\n\t\n\tVector2 GetSize();\n\tVector2F GetSizeF();\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/MMRWrapper.h",
    "content": "#pragma once\r\n#include \"./Engine/ObjectWrapper.h\"\r\n#include \"wrapperstructs.h\"\r\n#include \"UniqueIDWrapper.h\"\r\n\r\nclass MMRWrapper;\r\n\r\nstruct BAKKESMOD_PLUGIN_IMPORT MMRNotifierToken\r\n{\r\n\tfriend class MMRWrapper;\r\n\t// The deconstructor deregisters your plugin for MMR notifications.\r\n\t~MMRNotifierToken();\r\n\t\r\n\t// Copying would break the deconstruction logic. \r\n\tMMRNotifierToken(const MMRNotifierToken& other) = delete;\r\n\tMMRNotifierToken& operator=(const MMRNotifierToken& other) = delete;\r\n\t// Move is OK\r\n\tMMRNotifierToken(MMRNotifierToken&& other) noexcept = default;\r\n\tMMRNotifierToken& operator=(MMRNotifierToken&& other) noexcept = default;\r\n\t\r\n\r\nprivate:\r\n\texplicit MMRNotifierToken(unsigned long long t);\r\n\t// Do we need pimpl here?\r\n\tunsigned long long token;\r\n};\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT MMRWrapper : public ObjectWrapper\r\n{\r\npublic:\r\n\tCONSTRUCTORS(MMRWrapper);\r\n\tbool IsSyncing(UniqueIDWrapper playerID);\r\n\tbool IsSyncing(SteamID playerID);\r\n\tbool IsSynced(UniqueIDWrapper playerID, int playlistID);\r\n\tbool IsSynced(SteamID playerID, int playlistID);\r\n\tbool IsRanked(int playlistID);\r\n\r\n\tSkillRating GetPlayerSkillRating(UniqueIDWrapper playerID, int playlistID);\r\n\tSkillRank GetPlayerRank(UniqueIDWrapper playerID, int playlistID);\r\n\tfloat GetPlayerMMR(UniqueIDWrapper playerID, int playlistID);\r\n\r\n\tSkillRating GetPlayerSkillRating(SteamID playerID, int playlistID);\r\n\tSkillRank GetPlayerRank(SteamID playerID, int playlistID);\r\n\tfloat GetPlayerMMR(SteamID playerID, int playlistID);\r\n\tfloat CalculateMMR(SkillRating sr, bool disregardPlacements);\r\n\tint GetCurrentPlaylist();\r\n\r\n\t/// <summary>\r\n\t/// Subscribe to MMR updates. The callback will receive a ID wrapper for the player that the MMR update is relevant for.\r\n\t/// </summary>\r\n\t/// <param name=\"notification_callback\">The callback that will be called for each mmr update</param>\r\n\t/// <returns>a token whos lifetime controls your callback registration. When the token is destroyed, so is your registration. </returns>\r\n\tstd::unique_ptr<MMRNotifierToken> RegisterMMRNotifier(std::function<void(UniqueIDWrapper id)>);\r\n\r\n\r\nprivate:\r\n\tPIMPL\r\n};\r\n\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/MatchmakingWrapper.h",
    "content": "﻿#pragma once\n#include <string>\n#include \"Engine/ObjectWrapper.h\"\n\nenum class Region\n{\n\t// US-East\n\tUSE = 0,\n\t// Europe\n\tEU = 1,\n\t// US-West\n\tUSW = 2,\n\t// Asia-SE Mainland\n\tASC = 3,\n\t// Asia-SE Maritime\n\tASM = 4,\n\t// Asia-East\n\tJPN = 5,\n\t// Middle-East\n\tME = 6,\n\t// Oceania\n\tOCE = 7,\n\t// South Africa\n\tSAF = 8,\n\t// South America\n\tSAM = 9,\n\t// India\n\tIND = 10\n};\n\nenum class Playlist\n{\n\tCASUAL_STANDARD = 0,\n\tCASUAL_DOUBLES = 1,\n\tCASUAL_DUELS = 2,\n\tCASUAL_CHAOS = 3,\n\tRANKED_STANDARD = 4,\n\tRANKED_DOUBLES = 5,\n\tRANKED_DUELS = 6,\n\tAUTO_TOURNAMENT = 12,\n\tEXTRAS_RUMBLE = 13,\n\tEXTRAS_DROPSHOT = 14,\n\tEXTRAS_HOOPS = 15,\n\tEXTRAS_SNOWDAY = 16\n};\n\nenum class PlaylistCategory\n{\n\tCASUAL = 0,\n\tRANKED = 1,\n\tEXTRAS = 2\n};\n\nenum class PlaylistIds\n{\n\tUnknown = -1337,\n\tCasual = 0,\n\tDuel = 1,\n\tDoubles = 2,\n\tStandard = 3,\n\tChaos = 4,\n\tPrivateMatch = 6,\n\tSeason = 7,\n\tOfflineSplitscreen = 8,\n\tTraining = 9,\n\tRankedSoloDuel = 10,\n\tRankedTeamDoubles = 11,\n\tRankedStandard = 13,\n\tSnowDayPromotion = 15,\n\tExperimental = 16,\n\tBasketballDoubles = 17,\n\tRumble = 18,\n\tWorkshop = 19,\n\tUGCTrainingEditor = 20,\n\tUGCTraining = 21,\n\tTournament = 22,\n\tBreakout = 23,\n\tTenthAnniversary = 25,\n\tFaceIt = 26,\n\tRankedBasketballDoubles = 27,\n\tRankedRumble = 28,\n\tRankedBreakout = 29,\n\tRankedSnowDay = 30,\n\tHauntedBall = 31,\n\tBeachBall = 32,\n\tRugby = 33,\n\tAutoTournament = 34,\n\tRocketLabs = 35,\n\tRumShot = 37,\n\tGodBall = 38,\n\tCoopVsAI = 40,\n\tBoomerBall = 41,\n\tGodBallDoubles = 43,\n\tSpecialSnowDay = 44,\n\tFootball = 46,\n\tCubic = 47,\n\tTacticalRumble = 48,\n\tSpringLoaded = 49,\n\tSpeedDemon = 50,\n\tRumbleBM = 52,\n\tKnockout = 54,\n\tThirdwheel = 55,\n\tMagnusFutball = 62\n};\n\nstruct ClubColorSet\n{\n\tunsigned char TeamColorID = 0;\n\tunsigned char CustomColorID = 0;\n\tbool bTeamColorSet = false;\n\tbool bCustomColorSet = false;\n};\n\nstruct CustomMatchTeamSettings\n{\n\tstd::string Name;\n\tClubColorSet Colors;\n\tint GameScore = 0;\n};\n\nstruct CustomMatchSettings\n{\n\t//  GameTags are the mutators. They should be comma separated (Launch a game manually and check your launch log for potential mutator names - or ask in #programming )\n\tstd::string GameTags;\n\tstd::string MapName;\n\tstd::string ServerName;\n\tstd::string Password;\n\tCustomMatchTeamSettings BlueTeamSettings;\n\tCustomMatchTeamSettings OrangeTeamSettings;\n\tint GameMode = 0; // 0 = soccar, 1 = hoops, 2 = snowday, 3 = rumble, 5 = dropshot, 6 = heatseeker, 7 = gridiron, 8 = knockout (might change)\n\tint MaxPlayerCount = 8;\n\tbool bPartyMembersOnly = false;\n\tbool bClubServer;\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT MatchmakingWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(MatchmakingWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t//Matchmaking queue stuff\n\tbool IsSearching();\n\tint GetActiveViewTab();\n\n\tvoid SetRegionSelection(Region region, bool bSelected);\n\tvoid SetPlaylistSelection(Playlist playlist, bool bSelected);\n\tvoid SetViewTab(PlaylistCategory playlist_category);\n\tvoid StartMatchmaking(PlaylistCategory playlist_category);\n\tvoid CancelMatchmaking();\n\n\t// Private match stuff\n\tvoid CreatePrivateMatch(Region region, int playlistID, const CustomMatchSettings& match_settings);\n\t/**\n\t * \\brief Updates the settings of a private match lobby\n\t * \\param match_settings The lobby settings\n\t * \\return returns true if updating is successful\n\t */\n\t[[nodiscard]] bool UpdatePrivateMatch(const CustomMatchSettings& match_settings) const;\n\tvoid JoinPrivateMatch(const std::string& server_name, const std::string& server_password = \"\");\n\n\t// LAN stuff\n\tvoid CreateLanMatch(Region region, const CustomMatchSettings& match_settings) const;\n\tvoid JoinLanMatch(const std::string& server_id, const std::string& password) const;\n\n\t// Season stuff\n\t// If no season end date has been revealed yet, these functions will return either 0 or -1.\n\tint SeasonEndDays();\n\tint SeasonEndHours();\n\tint SeasonEndMinutes();\n\tint GetSeasonTimeRemaining();\n\tint GetSeasonEndTimeSeconds();\n\n\tbool HasSeasonEnded();\n\tint GetTotalPopulation();\n\n\t_NODISCARD int GetTotalPlayersOnline() const;\n\t_NODISCARD int GetPlayerCount(PlaylistIds playlist) const;\n\n\n\t//misc\n\tstatic std::string GetRegionID(Region region); // ID Example: USE\n\tstatic std::string GetRegionLabel(Region region); // Label Example: US-East\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/MenuStackWrapper.h",
    "content": "﻿#pragma once\n#include \"Engine/ObjectWrapper.h\"\n#include <string>\n#include <vector>\n\n/**\n * Notable Events:\\n\n * Function TAGame.GFxData_MenuStack_TA.PopMenu\\n\n * Function TAGame.GFxData_MenuStack_TA.PushMenu\\n\n */\nclass BAKKESMOD_PLUGIN_IMPORT MenuStackWrapper : public ObjectWrapper\n{\n\tpublic:\n    CONSTRUCTORS(MenuStackWrapper)\n\n    _NODISCARD std::string GetTopMenu() const;\n    _NODISCARD std::vector<std::string> GetMenuStack() const;\n    _NODISCARD bool IsNull() const;\n\t_NODISCARD explicit operator bool() const;\n\n\nprivate:\n    PIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/PlayerControllerWrapper.h",
    "content": "#pragma once\r\ntemplate<class T> class ArrayWrapper;\r\ntemplate<typename T> class StructArrayWrapper;\r\n#include \"WrapperStructs.h\"\r\n#include \"./Engine/ActorWrapper.h\"\r\n//#include \"ControllerWrapper.h\"\r\nclass BoostWrapper;\r\nclass UnrealStringWrapper;\r\nclass CarWrapper;\r\nclass PriXWrapper;\r\nclass GameEventWrapper;\r\nclass ServerWrapper;\r\nclass BaseCameraWrapper;\r\nclass RBActorWrapper;\r\nclass PriWrapper;\r\nclass EngineTAWrapper;\r\nclass PlayerReplicationInfoWrapper;\r\nclass SpectatorHUDWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PlayerControllerWrapper : public ActorWrapper /*ControllerWrapper*/ {\r\npublic:\r\n\tCONSTRUCTORS(PlayerControllerWrapper)\r\n\r\n\t//AUTO-GENERATED FROM FIELDS\r\n\tCarWrapper GetCar();\r\n\tvoid SetCar(CarWrapper newCar);\r\n\tPriWrapper GetPRI();\r\n\tvoid SetPRI(PriWrapper newPRI);\r\n\tControllerInput GetVehicleInput();\r\n\tvoid SetVehicleInput(ControllerInput newVehicleInput);\r\n\tunsigned long GetbReceivedServerShutdownMessage();\r\n\tvoid SetbReceivedServerShutdownMessage(unsigned long newbReceivedServerShutdownMessage);\r\n\tunsigned long GetbUseDebugInputs();\r\n\tvoid SetbUseDebugInputs(unsigned long newbUseDebugInputs);\r\n\tunsigned long GetbJumpPressed();\r\n\tvoid SetbJumpPressed(unsigned long newbJumpPressed);\r\n\tunsigned long GetbBoostPressed();\r\n\tvoid SetbBoostPressed(unsigned long newbBoostPressed);\r\n\tunsigned long GetbHandbrakePressed();\r\n\tvoid SetbHandbrakePressed(unsigned long newbHandbrakePressed);\r\n\tunsigned long GetbHasPitchedBack();\r\n\tvoid SetbHasPitchedBack(unsigned long newbHasPitchedBack);\r\n\tunsigned long GetbAllowAsymmetricalMute();\r\n\tvoid SetbAllowAsymmetricalMute(unsigned long newbAllowAsymmetricalMute);\r\n\tunsigned long GetbResetCamera();\r\n\tvoid SetbResetCamera(unsigned long newbResetCamera);\r\n\tUnrealStringWrapper GetLoginURL();\r\n\tunsigned char GetVoiceFilter();\r\n\tvoid SetVoiceFilter(unsigned char newVoiceFilter);\r\n\tunsigned char GetChatFilter();\r\n\tvoid SetChatFilter(unsigned char newChatFilter);\r\n\tPriWrapper GetFollowTarget();\r\n\tvoid SetFollowTarget(PriWrapper newFollowTarget);\r\n\tBaseCameraWrapper GetSpectatorCameraArchetype();\r\n\tvoid SetSpectatorCameraArchetype(BaseCameraWrapper newSpectatorCameraArchetype);\r\n\tBaseCameraWrapper GetEditorCameraArchetype();\r\n\tvoid SetEditorCameraArchetype(BaseCameraWrapper newEditorCameraArchetype);\r\n\tVector GetMoveActorGrabOffset();\r\n\tvoid SetMoveActorGrabOffset(Vector newMoveActorGrabOffset);\r\n\tfloat GetMoveActorGrabIncrement();\r\n\tvoid SetMoveActorGrabIncrement(float newMoveActorGrabIncrement);\r\n\tfloat GetMinMoveActorGrabDistance();\r\n\tvoid SetMinMoveActorGrabDistance(float newMinMoveActorGrabDistance);\r\n\tfloat GetMouseIncrementSpeed();\r\n\tvoid SetMouseIncrementSpeed(float newMouseIncrementSpeed);\r\n\tfloat GetBallVelocityIncrementAmount();\r\n\tvoid SetBallVelocityIncrementAmount(float newBallVelocityIncrementAmount);\r\n\tint GetBallVelocityIncrementFireCount();\r\n\tvoid SetBallVelocityIncrementFireCount(int newBallVelocityIncrementFireCount);\r\n\tfloat GetBallVelocityIncrementFireCountMax();\r\n\tvoid SetBallVelocityIncrementFireCountMax(float newBallVelocityIncrementFireCountMax);\r\n\tfloat GetBallVelocityIncrementSpeedDefault();\r\n\tvoid SetBallVelocityIncrementSpeedDefault(float newBallVelocityIncrementSpeedDefault);\r\n\tfloat GetBallVelocityIncrementSpeedMax();\r\n\tvoid SetBallVelocityIncrementSpeedMax(float newBallVelocityIncrementSpeedMax);\r\n\tfloat GetCrosshairTraceDistance();\r\n\tvoid SetCrosshairTraceDistance(float newCrosshairTraceDistance);\r\n\tActorWrapper GetTracedCrosshairActor();\r\n\tvoid SetTracedCrosshairActor(ActorWrapper newTracedCrosshairActor);\r\n\tVector GetRotateActorCameraLocationOffset();\r\n\tvoid SetRotateActorCameraLocationOffset(Vector newRotateActorCameraLocationOffset);\r\n\tVector GetRotateActorCameraRotationOffset();\r\n\tvoid SetRotateActorCameraRotationOffset(Vector newRotateActorCameraRotationOffset);\r\n\tint GetRotateActorCameraSide();\r\n\tvoid SetRotateActorCameraSide(int newRotateActorCameraSide);\r\n\tfloat GetDesiredCameraSide();\r\n\tvoid SetDesiredCameraSide(float newDesiredCameraSide);\r\n\tfloat GetPawnTypeChangedTime();\r\n\tvoid SetPawnTypeChangedTime(float newPawnTypeChangedTime);\r\n\tint GetSelectedSpawnArchetype();\r\n\tvoid SetSelectedSpawnArchetype(int newSelectedSpawnArchetype);\r\n\tControllerInput GetDebugInputs();\r\n\tvoid SetDebugInputs(ControllerInput newDebugInputs);\r\n\tint GetMinClientInputRate();\r\n\tvoid SetMinClientInputRate(int newMinClientInputRate);\r\n\tint GetMedianClientInputRate();\r\n\tvoid SetMedianClientInputRate(int newMedianClientInputRate);\r\n\tint GetMaxClientInputRate();\r\n\tvoid SetMaxClientInputRate(int newMaxClientInputRate);\r\n\tint GetConfiguredClientInputRate();\r\n\tvoid SetConfiguredClientInputRate(int newConfiguredClientInputRate);\r\n\tfloat GetTimeSinceLastMovePacket();\r\n\tvoid SetTimeSinceLastMovePacket(float newTimeSinceLastMovePacket);\r\n\tfloat GetTimeLastReplicatedMovePacket();\r\n\tvoid SetTimeLastReplicatedMovePacket(float newTimeLastReplicatedMovePacket);\r\n\tfloat GetMouseXDeadZone();\r\n\tvoid SetMouseXDeadZone(float newMouseXDeadZone);\r\n\tfloat GetMouseYDeadZone();\r\n\tvoid SetMouseYDeadZone(float newMouseYDeadZone);\r\n\tfloat GetMouseXDeadZoneAir();\r\n\tvoid SetMouseXDeadZoneAir(float newMouseXDeadZoneAir);\r\n\tfloat GetMouseYDeadZoneAir();\r\n\tvoid SetMouseYDeadZoneAir(float newMouseYDeadZoneAir);\r\n\tControllerInput GetLastInputs();\r\n\tvoid SetLastInputs(ControllerInput newLastInputs);\r\n\tPriWrapper GetPendingViewPRI();\r\n\tvoid SetPendingViewPRI(PriWrapper newPendingViewPRI);\r\n\tfloat GetLastInputPitchUp();\r\n\tvoid SetLastInputPitchUp(float newLastInputPitchUp);\r\n\tfloat GetLastInputPitchDown();\r\n\tvoid SetLastInputPitchDown(float newLastInputPitchDown);\r\n\tfloat GetLastInputYawLeft();\r\n\tvoid SetLastInputYawLeft(float newLastInputYawLeft);\r\n\tfloat GetLastInputYawRight();\r\n\tvoid SetLastInputYawRight(float newLastInputYawRight);\r\n\tfloat GetLastInputPitch();\r\n\tvoid SetLastInputPitch(float newLastInputPitch);\r\n\tfloat GetLastInputYaw();\r\n\tvoid SetLastInputYaw(float newLastInputYaw);\r\n\tfloat GetMouseInputMax();\r\n\tvoid SetMouseInputMax(float newMouseInputMax);\r\n\tEngineTAWrapper GetEngineShare();\r\n\tvoid SetEngineShare(EngineTAWrapper newEngineShare);\r\n\t_NODISCARD SpectatorHUDWrapper GetSpectatorHud();\r\n\r\n\t//AUTO-GENERATED FUNCTION PROXIES\r\n\tvoid HandleCarSet(PriWrapper InPRI);\r\n\tvoid SpawnSelectedArchetype();\r\n\tbool RemoveActor();\r\n\tvoid ToggleGrabActor();\r\n\tvoid ToggleRotateActor();\r\n\tvoid EditorReleaseActor();\r\n\tvoid EditorCycleActor();\r\n\tvoid DuplicateShot();\r\n\tvoid StopEditing();\r\n\tvoid EditorIncreasePower();\r\n\tvoid EditorDecreasePower();\r\n\tvoid EditorIncreasePowerToggleInterim();\r\n\tvoid EditorDecreasePowerToggleInterim();\r\n\tvoid EditorIncreasePowerToggle2(unsigned long bToggle);\r\n\tvoid EditorDecreasePowerToggle2(unsigned long bToggle);\r\n\tvoid ModifyEditorPower(int Direction);\r\n\tvoid ToggleCameraPosition();\r\n\tvoid EditorUndo();\r\n\tvoid EditorRedo();\r\n\tvoid EditorIncreaseRoundTime();\r\n\tvoid EditorDecreaseRoundTime();\r\n\tvoid EditorNextRound();\r\n\tvoid EditorPrevRound();\r\n\tvoid UpdateCrosshair();\r\n\tvoid NetClientInputRate(int Rate);\r\n\tvoid ServerCreateMatchBroadcast(ServerWrapper GameEvent);\r\n\tvoid ClampMoveActorGrabOffset();\r\n\tvoid RevertToDefaultCameraHUDInput();\r\n\tvoid SwitchToEditPawn();\r\n\tvoid ServerResetPlayer(unsigned long bFullReset);\r\n\tvoid ResetPlayerRun();\r\n\tvoid ResetPlayerCheckpoint();\r\n\tvoid ToggleEditorRound();\r\n\tvoid ToggleBetweenCarAndEditPawn();\r\n\tvoid Interact();\r\n\tvoid StopMovement(unsigned long bOnlyIfNoAccel);\r\n\tVector GetRotateActorCameraOffset(float DeltaTime, unsigned long bSnap);\r\n\tvoid RestoreEditorPawnOrientation();\r\n\tvoid BackupEditorPawnOrientation();\r\n\tvoid UpdateRotatedActorOrientation(float DeltaTime);\r\n\tvoid OnOpenPauseMenu();\r\n\tvoid ResetMouseCenter();\r\n\tfloat CalculateMouseAxis(float Center, float CurrentLocation, float Deadzone, float MaxDist);\r\n\tvoid ShowControllerApplet();\r\n\tvoid ShowAccountPicker();\r\n\tvoid QueSaveReplay();\r\n\tvoid SetFollowTarget2(PriWrapper InTarget);\r\n\tvoid FollowPlayer(PriWrapper InPlayer);\r\n\tvoid ClientSplitscreenJoinResponse(SteamID& PlayerID, unsigned long bAllow, std::string Error);\r\n\tvoid ServerRequestSplitscreenJoin(SteamID& PlayerID, std::string PlayerName);\r\n\tbool eventPreClientTravel(std::string PendingURL, unsigned char TravelType, unsigned long bIsSeamlessTravel);\r\n\tvoid NotifyGoalScored(int ScoredOnTeam);\r\n\tvoid eventDestroyed();\r\n\tbool ShouldBeMuted(PlayerControllerWrapper Other);\r\n\tbool IsCommunicationFiltered(unsigned char Filter, PlayerControllerWrapper Other, unsigned long bPreset);\r\n\tvoid RefreshMutedPlayers(unsigned long bForceRefresh);\r\n\tvoid eventServerUnmutePlayer(SteamID& PlayerNetId);\r\n\tvoid eventServerMutePlayer(SteamID& PlayerNetId);\r\n\tvoid GameplayUnmutePlayer(SteamID& PlayerNetId);\r\n\tvoid GameplayMutePlayer(SteamID& PlayerNetId);\r\n\tvoid ServerSetChatFilter(unsigned char InVoiceFilter);\r\n\tvoid ServerSetVoiceFilter(unsigned char InVoiceFilter);\r\n\tbool IsExplictlyMuted(SteamID& PlayerNetId);\r\n\tvoid DebugAI();\r\n\tvoid SendPendingRPCs();\r\n\tbool CanSendMessage(unsigned long bQuickChatMessage);\r\n\tvoid ClientNotifyChatBanned(unsigned long long ChatBanExpiration);\r\n\tvoid ClientNotifyChatDisabled(float Time);\r\n\tvoid ChatMessage_TA(PlayerReplicationInfoWrapper InPRI, std::string Message, unsigned char ChatChannel, unsigned long bPreset);\r\n\tvoid ServerSayInternal_TA(std::string Message, unsigned char ChatChannel, unsigned long bPreset);\r\n\tvoid ServerSay_TA(std::string Message, unsigned char ChatChannel, unsigned long bPreset);\r\n\tvoid Say_TA2(std::string Message, unsigned char ChatChannel, SteamID& Recipient, unsigned long bPreset);\r\n\tbool CanChatWith(PlayerControllerWrapper Other, unsigned long bPreset);\r\n\tbool AllowTextMessage(std::string msg);\r\n\tvoid PushToTalkEnd();\r\n\tvoid PushToTalk2();\r\n\tvoid HandleJoinGameMigrationCompleted(unsigned long bSuccess, std::string FailReason);\r\n\tvoid eventClientUnmutePlayer(SteamID& PlayerNetId);\r\n\tvoid eventClientMutePlayer(SteamID& PlayerNetId, unsigned long bAddToMuteList);\r\n\tvoid ClientSetOnlineStatus();\r\n\tvoid HandleGameDataSelected(int PlaylistId, int MutatorIndex);\r\n\tGameEventWrapper GetGameEvent();\r\n\tvoid ClientArbitratedMatchEnded();\r\n\tvoid BannedKick();\r\n\tvoid NoReservationKick();\r\n\tvoid IdleKick2();\r\n\tvoid ServerReportServer();\r\n\tvoid ClientUseItem(Vector& UseLocation, Rotator& UseRotation);\r\n\tvoid ServerTeleportCar(Vector& SpawnLocation, Rotator& NewRotation);\r\n\tvoid eventTeleportCar(Vector& SpawnLocation, Rotator& NewRotation);\r\n\tvoid ServerUsePickup(RBActorWrapper Target);\r\n\tvoid UsePickup2();\r\n\tvoid ToggleHandbrake(unsigned long bHandbrake);\r\n\tvoid ToggleBoost(unsigned long bBoost);\r\n\tvoid ToggleJump(unsigned long bJump);\r\n\tvoid TargetSelectLeft();\r\n\tvoid TargetSelectRight();\r\n\tvoid ReleaseRearCamera();\r\n\tvoid PressRearCamera();\r\n\tvoid ReleaseSecondaryCamera();\r\n\tvoid PressSecondaryCamera();\r\n\tvoid ReadyUp();\r\n\tvoid Spectate();\r\n\tvoid ChangeTeam(int TeamNum);\r\n\tvoid SwitchTeam();\r\n\tvoid SetDefaultCameraMode();\r\n\tvoid ResetCameraMode();\r\n\tvoid ZeroMoveInput();\r\n\tvoid PlayerMove(float DeltaTime);\r\n\tvoid IgnoreMoveInput(unsigned long bNewMoveInput);\r\n\tvoid eventSendClientAdjustment();\r\n\tPlayerControllerWrapper GetPrimaryPlayerController();\r\n\tvoid HandleAddBoostComponent(BoostWrapper Boost);\r\n\tvoid ReplicateLoadout();\r\n\tvoid ReplicateCameraRotation();\r\n\tvoid SetUsingFreecam(unsigned long bFreecam);\r\n\tvoid SetUsingBehindView(unsigned long bBehindView);\r\n\tvoid SetUsingSecondaryCamera(unsigned long bSecondaryCamera);\r\n\tvoid ReplicateCameraSettings();\r\n\tvoid HandleControllerLayoutChanged(PriWrapper InPRI);\r\n\tvoid HandlePawnTypeChanged(PriWrapper InPRI);\r\n\tvoid HandlePendingViewCarSet(PriWrapper InPRI);\r\n\tvoid HandleReplaceBot(PriWrapper InPRI);\r\n\tvoid HandleTeamChanged(PriXWrapper InPRI);\r\n\tvoid HandleMatchEnded(ServerWrapper GameEvent);\r\n\tvoid HandleStartNewRound(ServerWrapper GameEvent);\r\n\tvoid HandleGameEventChanged(PriWrapper InPRI);\r\n\tvoid HandlePRICameraChanged(PriWrapper InPRI);\r\n\tvoid SetupLightBar();\r\n\tvoid HandlePersistentCameraSet(PriWrapper InPRI);\r\n\tvoid OnReceivedPlayerAndPRI();\r\n\tvoid UpdateVoiceFilter();\r\n\tvoid ReplicateLevelSessionID();\r\n\tvoid ServerInitInputBuffer(unsigned char Type);\r\n\tvoid eventReceivedPlayer();\r\n\tvoid eventPostBeginPlay();\r\n\tvoid EventChatMessage(PlayerControllerWrapper PC, std::string Message, unsigned long bPreset);\r\n\tvoid EventResetPlayer(PlayerControllerWrapper PC, unsigned long bFullReset);\r\n\tvoid EventSelectBallCamTarget(PlayerControllerWrapper PC, int Direction);\r\n\tvoid EventTrainingEditorActorModified();\r\n\tvoid EventMuteChanged(PlayerControllerWrapper PC, SteamID& PlayerID, unsigned long bMuted);\r\n\tvoid EventLaunchControllerApplet();\r\n\tvoid EventLaunchAccountPicker(int ControllerId);\r\n    bool GetbUsingGamepad();\r\n    void SetMouseSensitivity(float NewSensitivity);\r\n    float GetMouseSensitivity();\r\n\tvoid SetAForward(float aForward);\r\n\tfloat GetAForward();\r\n\tvoid SetATurn(float aTurn);\r\n\tfloat GetATurn();\r\n\tvoid SetAStrafe(float aStrafe);\r\n\tfloat GetAStrafe();\r\n\tvoid SetAUp(float aUp);\r\n\tfloat GetAUp();\r\n\tvoid SetALookUp(float aLookUp);\r\n\tfloat GetALookUp();\r\n    void SetLookRightScale(float NewScale);\r\n    float GetLookRightScale();\r\n    void SetLookUpScale(float NewScale);\r\n    float GetLookUpScale();\r\n    void SetGamepadLookScale(float NewScale);\r\n    float GetGamepadLookScale();\r\n    void SetALookRoll(float NewLookRoll);\r\n    float GetALookRoll();\r\n    void SetbRoll(bool NewRoll);\r\n    bool GetbRoll();\r\n\tvoid SetSpectatorCameraAccel(float SpectatorCameraAccel);\r\n\tfloat GetSpectatorCameraAccel();\r\n\tvoid SetSpectatorCameraSpeed(float SpectatorCameraSpeed);\r\n\tfloat GetSpectatorCameraSpeed();\r\n\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/PluginManagerWrapper.h",
    "content": "#pragma once\r\n#include \"../plugin/bakkesmodplugin.h\"\r\n#include \"./Engine/ObjectWrapper.h\"\r\n#include \"wrapperstructs.h\"\r\n#include <vector>\r\n\r\n\r\nnamespace BakkesMod\r\n{\r\n\tnamespace Plugin\r\n\t{\r\n\t\tstruct LoadedPlugin;\r\n\t}\r\n}\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT PluginManagerWrapper : public ObjectWrapper\r\n{\r\npublic:\r\n\tCONSTRUCTORS(PluginManagerWrapper);\r\n\tstd::vector<std::shared_ptr<BakkesMod::Plugin::LoadedPlugin>>* GetLoadedPlugins();\r\n\r\nprivate:\r\n\tPIMPL\r\n};\r\n\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/ReplayServerWrapper.h",
    "content": "#pragma once\r\n#include \"./GameEvent/ServerWrapper.h\"\r\nclass ReplayWrapper;\r\nclass BAKKESMOD_PLUGIN_IMPORT ReplayServerWrapper : public ServerWrapper\r\n{\r\npublic:\r\n\tReplayServerWrapper(std::uintptr_t server, std::uintptr_t gameinfo, std::uintptr_t replaydirector);\r\n\tReplayServerWrapper(const ReplayServerWrapper& other);\r\n\tReplayServerWrapper& operator=(ReplayServerWrapper rhs);\r\n\t~ReplayServerWrapper();\r\n\tActorWrapper GetViewTarget();\r\n\tReplayWrapper GetReplay();\r\n\tfloat GetReplayTimeElapsed();\r\n\tint GetReplayFPS();\r\n\tint GetCurrentReplayFrame();\r\n\tvoid AddKeyFrame(int frame, std::string name);\r\n\tvoid RemoveKeyFrame(int frame);\r\n\tvoid SkipToFrame(int frame);\r\n\tvoid SkipToTime(float time);\r\n\t\r\n\tvoid StartPlaybackAtFrame(int frame);\r\n\tvoid StartPlaybackAtTime(float time);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/ReplayViewerDataWrapper.h",
    "content": "#pragma once\n\nstruct LocalizedCameraMode\n{\n    std::string name;\n    bool disabled;\n    std::string label;\n    std::string description;\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT ReplayViewerDataWrapper : ObjectWrapper\n{\npublic:\n    CONSTRUCTORS(ReplayViewerDataWrapper)\n\n    _NODISCARD bool IsNull() const;\n    explicit operator bool() const;\n\n    _NODISCARD int GetCurrentFrame() const;\n    _NODISCARD std::vector<LocalizedCameraMode> GetCameraModes() const;\n    _NODISCARD std::string GetDefaultCameraMode() const;\n    _NODISCARD std::string GetCameraMode() const;\n    _NODISCARD std::string GetFocusActorString() const;\n    _NODISCARD std::string GetLastFocusActorString() const;\n    _NODISCARD unsigned int GetbHighlightFocusActor() const;\n    _NODISCARD unsigned int GetbShowReplayHUD() const;\n    _NODISCARD unsigned int GetbShowMatchInfoHUD() const;\n    _NODISCARD unsigned int GetbShowPlayerNames() const;\n    _NODISCARD unsigned int GetbPausedForScrub() const;\n    _NODISCARD unsigned int GetbChangesMade() const;\n    _NODISCARD float GetSlomo() const;\n    _NODISCARD float GetFOV() const;\n    _NODISCARD int GetViewRoll() const;\n    _NODISCARD ReplayWrapper GetReplay() const;\n    _NODISCARD int GetPendingSkipToFrame() const;\n\n    void SaveReplayAndExit();\n    void SetPausedForScrub(unsigned int bPaused);\n    void SetFOV(float inFov);\n    void SetShowPlayerNames(unsigned int bVisible);\n    void SetShowMatchInfoHUD(unsigned int bVisible);\n    void SetShowReplayHUD(unsigned int bVisible);\n    void SetSlomo(float newSlomo);\n    void TimerSkipToFrame();\n    void AdvanceTime(float deltaTime);\n    void AdvanceToFrame(int frame);\n    void SetCameraMode(const std::string& modeName);\n    void SetFocusActorString(const std::string& inFocusActorString);\n    void RefreshDisabledModes();\n    void InitCameraModes();\n    void UpdateReplayData();\n\nprivate:\n    PIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/SettingsWrapper.h",
    "content": "#pragma once\n#include \"WrapperStructs.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT SettingsWrapper\n{\npublic:\n\tSettingsWrapper();\n\t~SettingsWrapper();\n\tProfileCameraSettings GetCameraSettings();\n\tCameraSave GetCameraSaveSettings();\n\n\t[[deprecated(\"Use GetAllPCBindings instead\")]]\n\tstd::map<std::string, std::string> GetPCBindings();\n\n\t[[deprecated(\"Use GetAllGamepadBindings instead\")]]\n\tstd::map<std::string, std::string> GetGamepadBindings();\n\n\tstd::vector<std::pair<std::string, std::string>> GetAllPCBindings();\n\tstd::vector<std::pair<std::string, std::string>> GetAllGamepadBindings();\n\n\tGamepadSettings GetGamepadSettings();\n\tVideoSettings GetVideoSettings();\n\n\n\n\t_NODISCARD bool GetForceDefaultColors() const;\n\tvoid SetForceDefaultColors(bool value);\n\t\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/SpectatorHUDWrapper.h",
    "content": "#pragma once\n#include \"ReplayViewerDataWrapper.h\"\n\n\n// Adding the empty bases, so we are future-proof in case we want to use something from the bases later\nclass BAKKESMOD_PLUGIN_IMPORT HudWrapper : public ActorWrapper\n{\npublic:\n    CONSTRUCTORS(HudWrapper)\nprivate:\n    PIMPL\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT HUDXWrapper: public HudWrapper\n{\npublic:\n    CONSTRUCTORS(HUDXWrapper)\nprivate:\n    PIMPL\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT HUDTABaseWrapper: public HUDXWrapper\n{\npublic:\n    CONSTRUCTORS(HUDTABaseWrapper)\nprivate:\n    PIMPL\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT HUDTAWrapper: public HUDTABaseWrapper\n{\npublic:\n    CONSTRUCTORS(HUDTAWrapper)\nprivate:\n    PIMPL\n};\n\nclass BAKKESMOD_PLUGIN_IMPORT SpectatorHUDWrapper : public HUDTAWrapper\n{\npublic:\n    CONSTRUCTORS(SpectatorHUDWrapper)\n\n    _NODISCARD bool IsNull() const;\n    explicit operator bool() const;\n\n    _NODISCARD ReplayViewerDataWrapper GetViewerData() const;\n    _NODISCARD float GetZoomSpeed() const;\n    _NODISCARD float GetZoomClickTime() const;\n    _NODISCARD PriWrapper GetTargetPlayerPRI() const;\n    _NODISCARD unsigned int GetbZoomIn() const;\n    _NODISCARD unsigned int GetbZoomOut() const;\n    _NODISCARD unsigned int GetbReplayTimeSkipped() const;\n    _NODISCARD float GetZoomInTime() const;\n    _NODISCARD float GetZoomOutTime() const;\n\n    _NODISCARD CarWrapper GetFocusCar();\n    _NODISCARD PriWrapper GetPRIFromPlayerIDString(const std::string& playerIdString);\n    void ViewCycle(int direction);\n    void ViewPrev();\n    void ViewNext();\n    void ViewFly();\n    void ViewAutoCam();\n    void ViewDefault();\n    void SetFocusActorString(const std::string& focusActorString);\n    void ViewPlayer(int team, int player);\n    void OpenReplayFXMenu();\n    void OpenCameraMenu();\n    void CycleCamera();\n    void OpenFocusMenu();\n    void CycleFocus();\n    void UpdateHudVisibility();\n    void CycleHUD();\n    void ZoomOut(unsigned int bPressed);\n    void ZoomIn(unsigned int bPressed);\n    void AdjustZoom(float deltaFov);\n\nprivate:\n    PIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/StructArrayWrapper.h",
    "content": "#pragma once\r\n#pragma warning(push)\r\n#pragma warning(disable:4661)\r\n#include \"WrapperStructs.h\"\r\n#include \"./Engine/ActorWrapper.h\"\r\n//struct RecordedSample;\r\n//struct ProfileCameraSettings;\r\n//struct SteamID;\r\n//struct LinearColor;\r\n\r\nstruct ClubMember;\r\ntemplate<typename T>\r\nclass BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper\r\n{\r\npublic:\r\n\tStructArrayWrapper(std::uintptr_t mem);\r\n\tStructArrayWrapper(const StructArrayWrapper<T>& other);\r\n\tStructArrayWrapper& operator=(StructArrayWrapper<T> rhs);\r\n\t~StructArrayWrapper();\r\n\r\n\tint Count();\r\n\tT Get(int index);\r\nprotected:\r\n    PIMPL\r\n};\r\n\r\n\r\n\r\n//\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<RecordedSample>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<ProfileCameraSettings>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<SteamID>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<LinearColor>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<ClubMember>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT StructArrayWrapper<TrainingRoundProgress>;\r\n#pragma warning(pop)"
  },
  {
    "path": "include/bakkesmod/wrappers/UniqueIDWrapper.h",
    "content": "#pragma once\n#pragma warning(push)\n#pragma warning(disable:4661)\n#include \"WrapperStructs.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT UniqueIDWrapper\n{\npublic:\n\t//Empty constructor so it can be declared in classes and we can have 0 values\n\tUniqueIDWrapper();\n\tUniqueIDWrapper(std::uintptr_t mem);\n\tUniqueIDWrapper(const UniqueIDWrapper& other);\n\tUniqueIDWrapper& operator=(UniqueIDWrapper rhs);\n\t~UniqueIDWrapper();\n\n\tOnlinePlatform GetPlatform() const;\n\tstd::string GetEpicAccountID() const;\n\tunsigned long long GetUID() const;\n\tunsigned char GetSplitscreenID() const;\n\n\t/*\n\tString representation of the ID.\n\tWill be the EpicID if nonempty. Uid otherwise\n\t*/\n\tstd::string str() const;\n\t/// <summary>\n\t/// Returns the id in the following format platform|accountId|splitScreenId\n\t/// </summary>\n\t/// <returns></returns>\n\tstd::string GetIdString() const;\npublic:\n\t/*\n\tNot 100% with the internals here, think it depends on what the game reads. \n\tFor some functionality you might get away with just the epicAccountID, others might rely on UID & platform.\n\tAnd some others you might even need both. \n\tAKA: it's best you just retrieve this wrapper from the game from existing players instead of using this function.\n\tThis wrapper is an exception to most other wrappers, as in: you're allowed to store this one! woohoo\n\t*/\n\tstatic UniqueIDWrapper FromEpicAccountID(std::string epicAccountID, unsigned long long uid, OnlinePlatform platform, unsigned char splitscreenID = 0);\n\n\tbool operator <(const UniqueIDWrapper& rhs) const;\n\tbool operator==(const UniqueIDWrapper& rhs) const;\n\tbool operator!=(const UniqueIDWrapper& rhs) const;\nprotected:\n\tPIMPL\n};\n\n#pragma warning(pop)"
  },
  {
    "path": "include/bakkesmod/wrappers/arraywrapper.h",
    "content": "#pragma once\r\n#pragma warning(push)\r\n#pragma warning(disable:4661)\r\n#include \"./Engine/ActorWrapper.h\"\r\n#include \"./GameObject/CarWrapper.h\"\r\n#include \"./GameObject/BallWrapper.h\"\r\n#include \"./GameObject/PriWrapper.h\"\r\n#include \"./GameObject/CarComponent/WheelWrapper.h\"\r\n#include \"./GameObject/RBActorWrapper.h\"\r\n#include \"./GameObject/CarComponent/CarComponentWrapper.h\"\r\n#include \"./GameObject/TeamWrapper.h\"\r\n#include \"./GameObject/GoalWrapper.h\"\r\n#include \"./GameObject/BoostPickupWrapper.h\"\r\n#include \"GameObject/BreakOutActorPlatformWrapper.h\"\r\n\r\nclass ProductPaintWrapper;\r\nclass MapDataWrapper;\r\nclass ProductSlotWrapper;\r\nclass LoadingProductWrapper;\r\nclass LoadoutSetWrapper;\r\nclass ActorWrapper;\r\nclass CarWrapper;\r\nclass BallWrapper;\r\n\r\nclass WheelWrapper;\r\nclass RBActorWrapper;\r\nclass CarComponentWrapper;\r\nclass TeamWrapper;\r\nclass GoalWrapper;\r\nclass BoostPickupWrapper;\r\nclass SampleHistoryWrapper;\r\nclass StatGraphWrapper;\r\nclass ControllerWrapper;\r\nclass PlayerControllerWrapper;\r\n\r\nclass SequenceWrapper;\r\nclass SequenceObjectWrapper;\r\nclass SequenceVariableWrapper;\r\n\r\nclass ProductWrapper;\r\nclass OnlineProductWrapper;\r\nclass ProductAttributeWrapper;\r\n\r\ntemplate<typename T>\r\nclass BAKKESMOD_PLUGIN_IMPORT ArrayWrapper\r\n{\r\npublic:\r\n\tArrayWrapper(std::uintptr_t mem);\r\n\tArrayWrapper(const ArrayWrapper<T>& other);\r\n\tArrayWrapper& operator=(ArrayWrapper<T> rhs);\r\n\t~ArrayWrapper();\r\n\r\n\tint Count();\r\n\tT Get(int index);\r\n    bool IsNull();\r\nprotected:\r\n\tPIMPL\r\n};\r\n\r\ntemplate <typename T>\r\nclass ArrayWrapperIterator\r\n{\r\npublic:\r\n    ArrayWrapperIterator(ArrayWrapper<T>& collection,\r\n        size_t const index) :\r\n        index(index), collection(collection)\r\n    { }\r\n\r\n    bool operator!= (ArrayWrapperIterator const& other) const\r\n    {\r\n        return index != other.index;\r\n    }\r\n\r\n    T operator* () const\r\n    {\r\n        return collection.Get(index);\r\n    }\r\n\r\n    ArrayWrapperIterator const& operator++ ()\r\n    {\r\n        ++index;\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    size_t   index;\r\n    ArrayWrapper<T>& collection;\r\n};\r\n\r\ntemplate <typename T>\r\ninline ArrayWrapperIterator<T> begin(\r\n    ArrayWrapper<T>& collection)\r\n{\r\n    return ArrayWrapperIterator<T>(collection, 0);\r\n}\r\n\r\ntemplate <typename T>\r\ninline ArrayWrapperIterator<T> end(\r\n    ArrayWrapper<T>& collection)\r\n{\r\n    return ArrayWrapperIterator<T>(\r\n        collection, collection.Count());\r\n}\r\n\r\n\r\n//\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ActorWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<TeamWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<CarWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<BallWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<PriWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<WheelWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<RBActorWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<CarComponentWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<GoalWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<SampleHistoryWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<StatGraphWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ControllerWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<PlayerControllerWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<wchar_t>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<SequenceWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<SequenceObjectWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<SequenceVariableWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ProductWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<OnlineProductWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ProductAttributeWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<int>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<unsigned long long>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<BreakOutActorPlatformWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<LoadoutSetWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<LoadingProductWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ProductSlotWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<MapDataWrapper>;\r\ntemplate class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<ProductPaintWrapper>;\r\n//template class BAKKESMOD_PLUGIN_IMPORT ArrayWrapper<FSample>;\r\n#pragma warning(pop)"
  },
  {
    "path": "include/bakkesmod/wrappers/canvaswrapper.h",
    "content": "#pragma once\r\n#include \"WrapperStructs.h\"\r\n#include \"./Engine/ActorWrapper.h\"\r\n#include \"ImageWrapper.h\"\r\n\r\n#include <utility>\r\n\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CanvasWrapper\r\n{\r\npublic:\r\n\tCONSTRUCTORS(CanvasWrapper)\r\n\r\n\tvoid SetPosition(Vector2F pos);\r\n\tVector2F GetPositionFloat();\r\n\tvoid SetColor(char Red, char Green, char Blue, char Alpha);//0-255\r\n\tvoid SetColor(LinearColor color);\r\n\tLinearColor GetColor();\r\n\tvoid DrawBox(Vector2F size);\r\n\tvoid FillBox(Vector2F size);\r\n\tvoid FillTriangle(Vector2F p1, Vector2F p2, Vector2F p3);\r\n\tvoid FillTriangle(Vector2F p1, Vector2F p2, Vector2F p3, LinearColor color);\r\n\tvoid DrawString(std::string text);\r\n\tvoid DrawString(std::string text, float xScale, float yScale);\r\n\tvoid DrawString(std::string text, float xScale, float yScale, bool dropShadow, bool wrapText=false);\r\n    Vector2F GetStringSize(std::string text, float xScale=1, float yScale=1);\r\n\tvoid DrawLine(Vector2F start, Vector2F end);\r\n\tvoid DrawLine(Vector2F start, Vector2F end, float width);\r\n\tvoid DrawRect(Vector2F start, Vector2F end);\r\n\tvoid DrawTexture(ImageWrapper* img, float scale);\r\n\tvoid DrawRect(float RectX, float RectY, ImageWrapper* img);\r\n\t// don't ask. try..\r\n\tvoid DrawTile(ImageWrapper* img, float XL, float YL, float U, float V, float UL, float VL, LinearColor Color, unsigned int ClipTile, unsigned char Blend);\r\n\tvoid DrawRotatedTile(ImageWrapper* img, Rotator& Rotation, float XL, float YL, float U, float V, float UL, float VL, float AnchorX, float AnchorY);\r\n\r\n\tvoid SetPosition(Vector2 pos);\r\n\tVector2 GetPosition();\r\n\tvoid DrawBox(Vector2 size);\r\n\tvoid FillBox(Vector2 size);\r\n\tvoid FillTriangle(Vector2 p1, Vector2 p2, Vector2 p3);\r\n\tvoid FillTriangle(Vector2 p1, Vector2 p2, Vector2 p3, LinearColor color);\r\n\tvoid DrawLine(Vector2 start, Vector2 end);\r\n\tvoid DrawLine(Vector2 start, Vector2 end, float width);\r\n\tvoid DrawRect(Vector2 start, Vector2 end);\r\n\r\n\tVector2 Project(Vector location);\r\n\tVector2F ProjectF(Vector location);\r\n\t/// <summary>Converts screen coordinates to world space</summary>\r\n\t/// <param name=\"screenPos\">Screen position to deproject</param>\r\n\t/// <returns>Pair of (worldOrigin, worldDirection)</returns>\r\n\tstd::pair<Vector2F, Vector2F> DeProject(Vector2F screenPos);\r\n\tVector2 GetSize();\r\nprivate:\r\n\tPIMPL\r\n};\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/cvarmanagerwrapper.h",
    "content": "#pragma once\r\n#include \"../plugin/bakkesmodsdk.h\"\r\n#include <vector>\r\n#include <typeindex>\r\n#include <string>\r\n#include \"cvarwrapper.h\"\r\n\r\ntypedef void (*commandNotifier)(std::vector<std::string>);\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CVarManagerWrapper\r\n{\r\npublic:\r\n\tCVarManagerWrapper(std::uintptr_t mem, std::type_index pluginIdx);\r\n\tCVarManagerWrapper(const CVarManagerWrapper& other);\r\n\tCVarManagerWrapper& operator=(CVarManagerWrapper rhs);\r\n\t~CVarManagerWrapper();\r\n\r\n\tvoid executeCommand(std::string command, bool log = true);\r\n\tvoid registerNotifier(std::string cvar, commandNotifier notifier, std::string description, unsigned char permissions);\r\n\tvoid registerNotifier(std::string cvar, std::function<void(std::vector<std::string>)> notifier, std::string description, unsigned char permissions);\r\n\tbool removeNotifier(std::string cvar);\r\n\r\n\tCVarWrapper registerCvar(std::string cvar, std::string defaultValue, std::string desc = \"\", bool searchAble = true, bool hasMin = false, float min = 0, bool hasMax = false, float max = 0, bool saveToCfg = true);\r\n\tbool removeCvar(std::string cvar);\r\n\r\n\tvoid log(std::string text);\r\n    void log(std::wstring text);\r\n\tCVarWrapper getCvar(std::string cvar);\r\n\r\n\tstd::string getBindStringForKey(std::string key);\r\n\tvoid setBind(std::string key, std::string command);\r\n\tvoid removeBind(std::string key);\r\n\tstd::string getAlias(std::string alias);\r\n\tvoid setAlias(std::string key, std::string script);\r\n\r\n\tvoid backupCfg(std::string path);\r\n\tvoid backupBinds(std::string path);\r\n\tvoid loadCfg(std::string path);\r\nprivate:\r\n    PIMPL\r\n};\r\n\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/cvarwrapper.h",
    "content": "#pragma once\r\n#include \"../plugin/bakkesmodsdk.h\"\r\n#include \"wrapperstructs.h\"\r\n#include <memory>\r\n#include <typeindex>\r\n#include <functional>\r\n#include <string>\r\n\r\nclass CVarWrapper;\r\n\r\nclass BAKKESMOD_PLUGIN_IMPORT CVarWrapper\r\n{\r\npublic:\r\n\tCVarWrapper(std::uintptr_t mem, std::type_index pluginIdx);\r\n\tCVarWrapper(const CVarWrapper& other);\r\n\tCVarWrapper& operator=(CVarWrapper rhs);\r\n\t~CVarWrapper();\r\n\r\nprivate:\r\n\tPIMPL\r\n\r\npublic:\r\n\tstd::string getCVarName();\r\n\tint getIntValue();\r\n\tfloat getFloatValue();\r\n\tbool getBoolValue();\r\n    LinearColor getColorValue();//Returns {0,0,0,0} if bad formatting. Good: \"(R, G, B, A)\" (0-255 range), or 6/8 hex (\"#123ABC\" or \"#1234ABCD\", capitalization doesn't matter)\r\n\tstd::string getStringValue();\r\n\tstd::string getDescription();\r\n\tconst std::string GetDefaultValue();\r\n\tbool HasMinimum();\r\n\tbool HasMaximum();\r\n\tfloat GetMinimum();\r\n\tfloat GetMaximum();\r\n\tbool IsHidden();\r\n\tbool ShouldSaveToCfg();\r\n\tvoid ResetToDefault();\r\n\tvoid notify(); //Will send a notification to all listeners, (for example when new gameevent is loaded or cvar is changed)\r\n\tvoid setValue(std::string value);\r\n\tvoid setValue(int value);\r\n\tvoid setValue(float value);\r\n    void setValue(LinearColor value);//Input should be 0-255 range\r\n\tvoid addOnValueChanged(std::function<void(std::string, CVarWrapper)> changeFunc); //string is old value, cvarwrapper is cvar now.\r\n\tvoid removeOnValueChanged();\r\n\tvoid bindTo(std::shared_ptr<int> var);\r\n\tvoid bindTo(std::shared_ptr<float> var);\r\n\tvoid bindTo(std::shared_ptr<std::string> var);\r\n\tvoid bindTo(std::shared_ptr<bool> var);\r\n    void bindTo(std::shared_ptr<LinearColor> var);\r\n\tbool IsNull();\r\n\texplicit operator bool();\r\n};\r\n\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/gfx/GfxDataTrainingWrapper.h",
    "content": "#pragma once\ntemplate<class T> class ArrayWrapper;\ntemplate<typename T> class StructArrayWrapper;\n#include \"../WrapperStructs.h\"\n#include \"../Engine/ObjectWrapper.h\"\n//#include \"../StructArrayWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT GfxDataTrainingWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(GfxDataTrainingWrapper)\n\t\texplicit operator bool();\n\tbool IsNull();\n\n\tbool CanUseMirroring();\n\tbool CanUsePlaylistOverride();\n\tbool CanUseShuffle();\n\tbool CanUseTrainingUIV2();\n\tbool HasCompletedTraining(const std::string& inType, const std::string& inDifficulty);\n\tbool HasCompletedTutorial(int InType);\n\tbool HasPerfectedTraining(const std::string& inType, const std::string& inDifficulty);\n\tbool UpdateDataFromProgress();\n\tvoid EndTrainingEditorPlaytest();\n\tvoid eventOnRemoved();\n\tvoid eventOnShellSet();\n\tvoid PlayFreeplayMap(const std::string& Map);\n\tvoid PlayTraining(const std::string& Type, const std::string& trainingDifficulty);\n\tvoid PlayTutorial(bool bAdvanced);\n\tvoid PlayV2Tutorial(int type, bool bAutoEntered);\n\tvoid ResetTrainingProgress();\n\tvoid SetCurrentPlaylist(const std::string& playlist);\n\tvoid SetTrainingEditorGameEvent(TrainingEditorWrapper inGameEvent);\n\tvoid SetTrainingGameEvent(TutorialWrapper inGameEvent);\n\tvoid StartAtPlaylistIndex(int inPlaylistIndex);\n\n\tstd::string GetTrainingType();\n\tint GetCurrentScore();\n\tint GetCurrentRound();\n\tint GetTotalRounds();\n\tUnrealStringWrapper GetDifficulty();\n\tstd::string GetSelectedFreeplayMap();\n\tUnrealStringWrapper GetTutorialTip();\n\tStructArrayWrapper<TrainingRoundProgress> GetProgressPerShot();\n\tint GetCurrentPlaylistindex();\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/http/HttpWrapper.h",
    "content": "#pragma once\n#include \"bakkesmod/core/http_structs.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT HttpWrapper\n{\npublic:\n\t// Don't expect callbacks to be run in the game thread.\n\t// Wrap them in GameWrapper->Execute if you call wrapper functions in the callback!.\n\n\n\t/// <summary>\n\t/// This one gives you a callback with the response as a string\n\t/// Returns a http code of 418 on error\n\t/// </summary>\n\t/// <param name=\"request_data\">The request options</param>\n\t/// <param name=\"on_complete\">Callback that runs when the request finishes (or on error)</param>\n\tstatic void SendCurlRequest(CurlRequest request_data, CurlRequestDoneStringReturn on_complete);\n\n\n\n\n\t/// <summary>\n\t/// This one gives you a pointer to the raw data in the response, do as you wish with it.\n\t/// The pointer is only valid in your callback. copy the data if you intend to use it later\n\t///\tReturns a http code of 418 on error\n\t/// </summary>\n\t/// <param name=\"request_data\">The request options</param>\n\t/// <param name=\"on_complete\">Callback that runs when the request finishes (or on error)</param>\n\tstatic void SendCurlRequest(CurlRequest request_data, CurlRequestDoneBinaryReturn on_complete);\n\n\t\n\n\t/// <summary>\n\t/// This one saves the response to a file and gives you a callback with the path to the file (it will just be the file_output you called it with)\n\t///\tReturns a http code of 418 on error\n\t/// </summary>\n\t/// <param name=\"request_data\">The request options</param>\n\t/// <param name=\"file_output\">Where the file will be saved</param>\n\t/// <param name=\"on_complete\">Callback that runs when the request finishes (or on error)</param>\n\tstatic void SendCurlRequest(CurlRequest request_data, const std::wstring& file_output, CurlRequestDoneFileReturn on_complete);\n\n\n\n\n\t/// <summary>\n\t/// Adds the Content-Type and Accept headers if not already set.\n\t/// Content-Type: application/json\n\t/// Accept: application/json\n\t/// Returns a http code of 418 on error\n\t/// </summary>\n\t/// <param name=\"request_data\">The request options</param>\n\t/// <param name=\"on_complete\">Callback that runs when the request finishes (or on error)</param>\n\tstatic void SendCurlJsonRequest(CurlRequest request_data, CurlRequestDoneStringReturn on_complete);\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/includes.h",
    "content": "#pragma once\n#pragma warning(push)\n#pragma warning(disable:4251)\n#include \"./Engine/ActorWrapper.h\"\n#include \"./Engine/EngineTAWrapper.h\"\n#include \"./Engine/UnrealStringWrapper.h\"\n#include \"./GameEvent/GameEditorWrapper.h\"\n#include \"./GameEvent/GameEventWrapper.h\"\n#include \"./GameEvent/GameSettingPlaylistWrapper.h\"\n#include \"./GameEvent/ReplayDirectorWrapper.h\"\n#include \"./GameEvent/ReplaySoccarWrapper.h\"\n#include \"./GameEvent/ReplayWrapper.h\"\n#include \"./GameEvent/SaveData/GameEditorSaveDataWrapper.h\"\n#include \"./GameEvent/SaveData/SaveDataWrapper.h\"\n#include \"./GameEvent/SaveData/TrainingEditorSaveDataWrapper.h\"\n#include \"./GameEvent/ServerWrapper.h\"\n#include \"./GameEvent/TeamGameEventWrapper.h\"\n#include \"./GameEvent/TrainingEditorWrapper.h\"\n#include \"./GameEvent/TutorialWrapper.h\"\n#include \"./GameObject/BallWrapper.h\"\n#include \"./GameObject/BaseCameraWrapper.h\"\n#include \"./GameObject/BoostPickupWrapper.h\"\n#include \"./GameObject/CameraWrapper.h\"\n#include \"./GameObject/CameraXWrapper.h\"\n#include \"./GameObject/CarComponent/AirControlComponentWrapper.h\"\n#include \"./GameObject/CarComponent/BoostWrapper.h\"\n#include \"./GameObject/CarComponent/CarComponentWrapper.h\"\n#include \"./GameObject/CarComponent/DodgeComponentWrapper.h\"\n#include \"./GameObject/CarComponent/DoubleJumpComponentWrapper.h\"\n#include \"./GameObject/CarComponent/FlipCarComponentWrapper.h\"\n#include \"./GameObject/CarComponent/JumpComponentWrapper.h\"\n#include \"./GameObject/CarComponent/PrimitiveComponentWrapper.h\"\n#include \"./GameObject/CarComponent/VehicleSimWrapper.h\"\n#include \"./GameObject/CarComponent/WheelWrapper.h\"\n#include \"./GameObject/CarWrapper.h\"\n#include \"./GameObject/FXActorWrapper.h\"\n#include \"./GameObject/GoalWrapper.h\"\n#include \"./GameObject/PerformanceStats/InputBufferGraphWrapper.h\"\n#include \"./GameObject/PerformanceStats/NetStatGraphWrapper.h\"\n#include \"./GameObject/PerformanceStats/PerfStatGraphWrapper.h\"\n#include \"./GameObject/PerformanceStats/SampleHistoryWrapper.h\"\n#include \"./GameObject/PerformanceStats/SampleRecordSettingsWrapper.h\"\n#include \"./GameObject/PerformanceStats/StatGraphSystemWrapper.h\"\n#include \"./GameObject/PerformanceStats/StatGraphWrapper.h\"\n#include \"./GameObject/PhysicalMaterialPropertyWrapper.h\"\n#include \"./GameObject/PlayerReplicationInfoWrapper.h\"\n#include \"./GameObject/PriWrapper.h\"\n#include \"./GameObject/PriXWrapper.h\"\n#include \"./GameObject/RBActorWrapper.h\"\n#include \"./GameObject/RumbleComponent/AttachmentPickup.h\"\n#include \"./GameObject/RumbleComponent/BallCarSpringPickup.h\"\n#include \"./GameObject/RumbleComponent/BallFreezePickup.h\"\n#include \"./GameObject/RumbleComponent/BallLassoPickup.h\"\n#include \"./GameObject/RumbleComponent/BattarangPickup.h\"\n#include \"./GameObject/RumbleComponent/BoostModPickup.h\"\n#include \"./GameObject/RumbleComponent/BoostOverridePickup.h\"\n#include \"./GameObject/RumbleComponent/CarSpeedPickup.h\"\n#include \"./GameObject/RumbleComponent/DemolishPickup.h\"\n#include \"./GameObject/RumbleComponent/GrapplingHookPickup.h\"\n#include \"./GameObject/RumbleComponent/GravityPickup.h\"\n#include \"./GameObject/RumbleComponent/HandbrakeOverridePickup.h\"\n#include \"./GameObject/RumbleComponent/HitForcePickup.h\"\n#include \"./GameObject/RumbleComponent/RumblePickupComponentWrapper.h\"\n#include \"./GameObject/RumbleComponent/SpringPickup.h\"\n#include \"./GameObject/RumbleComponent/SwapperPickup.h\"\n#include \"./GameObject/RumbleComponent/TargetedPickup.h\"\n#include \"./GameObject/RumbleComponent/TimeBombPickup.h\"\n#include \"./GameObject/RumbleComponent/TornadoPickup.h\"\n#include \"./GameObject/RumbleComponent/VelcroPickup.h\"\n#include \"./GameObject/TeamInfoWrapper.h\"\n#include \"./GameObject/TeamWrapper.h\"\n#include \"./GameObject/VehiclePickupWrapper.h\"\n#include \"./GameObject/VehicleWrapper.h\"\n#include \"./AIControllerWrapper.h\"\n#include \"./ControllerWrapper.h\"\n#include \"./PlayerControllerWrapper.h\"\n#include \"./ReplayServerWrapper.h\"\n#include \"./GameObject/ClubDetailsWrapper.h\"\n#include \"./items/ItemsWrapper.h\"\n#include \"./ImageWrapper.h\"\n#include \"./MatchmakingWrapper.h\"\n#include \"./SettingsWrapper.h\"\n#include \"./http/HttpWrapper.h\"\n#include \"bakkesmod/core/bot_loadout_structs.h\"\n#include \"bakkesmod/wrappers/modals/ModalWrapper.h\"\n#include \"bakkesmod/wrappers/modals/TextInputModalWrapper.h\"\n#include \"bakkesmod/wrappers/CareerStatsWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/BallBreakoutWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/BallGodWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/BallHauntedWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/BreakOutActorPlatformWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/GoalHoopsWrapper.h\"\n#include \"bakkesmod/wrappers/PluginManagerWrapper.h\"\n#include \"bakkesmod/wrappers/GameObject/Stats/StatEventWrapper.h\"\n#include \"bakkesmod/wrappers/MenuStackWrapper.h\"\n#include \"bakkesmod/wrappers/gfx/GfxDataTrainingWrapper.h\"\n#include \"bakkesmod/wrappers/items/LoadingProductWrapper.h\"\n#include \"bakkesmod/wrappers/items/GfxProductsWrapper.h\"\n#include \"bakkesmod/wrappers/SpectatorHUDWrapper.h\"\n#include \"bakkesmod/wrappers/ReplayViewerDataWrapper.h\"\n\n#pragma warning(pop)\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/GfxProductsWrapper.h",
    "content": "﻿#pragma once\n\n#include \"../Engine/ObjectWrapper.h\"\n#include \"LoadingProductWrapper.h\"\n#include \"../arraywrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT GfxProductsWrapper : ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(GfxProductsWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t_NODISCARD ArrayWrapper<LoadingProductWrapper> GetLoadingProducs() const;\n\nprivate:\n\tPIMPL\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ItemsWrapper.h",
    "content": "#pragma once\n#include \"GfxProductsWrapper.h\"\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../arraywrapper.h\"\n\n#include \"OnlineProductWrapper.h\"\n#include \"ProductSlotWrapper.h\"\n#include \"ProductTemplateWrapper.h\"\n#include \"ProductWrapper.h\"\n#include \"attributes/ProductAttributeWrapper.h\"\n#include \"attributes/ProductAttribute_AnimatedSkinLabelWrapper.h\"\n#include \"attributes/ProductAttribute_BlueprintCostWrapper.h\"\n#include \"attributes/ProductAttribute_BlueprintWrapper.h\"\n#include \"attributes/ProductAttribute_BodyCompatibilityWrapper.h\"\n#include \"attributes/ProductAttribute_CertifiedWrapper.h\"\n#include \"attributes/ProductAttribute_CurrencyWrapper.h\"\n#include \"attributes/ProductAttribute_PaintedWrapper.h\"\n#include \"attributes/ProductAttribute_QualityWrapper.h\"\n#include \"attributes/ProductAttribute_SpecialEditionWrapper.h\"\n#include \"attributes/ProductAttribute_SpecialEditionSettingsWrapper.h\"\n#include \"attributes/ProductAttribute_TeamEditionUploadWrapper.h\"\n#include \"attributes/ProductAttribute_TeamEditionWrapper.h\"\n#include \"attributes/ProductAttribute_UnlockMethodWrapper.h\"\n#include \"dbs/CertifiedStatDatabaseWrapper.h\"\n#include \"dbs/DataAssetDatabaseWrapper.h\"\n#include \"dbs/DataAssetDatabase_ESportsTeamWrapper.h\"\n#include \"dbs/PaintDatabaseWrapper.h\"\n#include \"dbs/SpecialEditionDatabaseWrapper.h\"\n#include \"TradeWrapper.h\"\n#include \"ProductTradeInWrapper.h\"\n#include \"LoadoutWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ItemsWrapper : public ObjectWrapper\n{\npublic:\n\tItemsWrapper(std::uintptr_t gamedata, std::uintptr_t savedata);\n\tItemsWrapper(const ItemsWrapper& other);\n\tItemsWrapper& operator=(ItemsWrapper rhs);\n\t~ItemsWrapper();\n\tbool IsNull();\n\texplicit operator bool();\n\tArrayWrapper<ProductWrapper> GetAllProducts();\n\tArrayWrapper<ProductSlotWrapper> GetAllProductSlots();\n\tProductWrapper GetProduct(int productId);\n\t[[deprecated(\"Use FProductInstanceID overload\")]]\n\tOnlineProductWrapper GetOnlineProduct(unsigned long long instanceID);\n\tOnlineProductWrapper GetOnlineProduct(const ProductInstanceID& product_instance_id) const;\n\n\t_NODISCARD static bool IsOnlineID(const ProductInstanceID& product_instance_id);\n\t_NODISCARD static int GetProductIdFromInstanceId(const ProductInstanceID& product_instance_id);\n\n\t[[deprecated(\"This will 99% for sure crash\")]]\n\tArrayWrapper<OnlineProductWrapper> GetUnlockedProducts();\n\tArrayWrapper<ProductWrapper> GetCachedUnlockedProducts();\n\tArrayWrapper<OnlineProductWrapper> GetOwnedProducts();\n\n\tCertifiedStatDatabaseWrapper GetCertifiedStatDB();\n\tDataAssetDatabase_ESportsTeamWrapper GetEsportTeamDB();\n\tPaintDatabaseWrapper GetPaintDB();\n\tSpecialEditionDatabaseWrapper GetSpecialEditionDB();\n\n\tUnrealStringWrapper GetCurrentLoadoutName();\n\tLoadoutWrapper GetCurrentLoadout(int teamIndex);\n\n\tTradeWrapper GetTradeWrapper();\n\tProductTradeInWrapper GetProductTradeInWrapper();\n\t_NODISCARD GfxProductsWrapper GetGfxProductsWrapper();\n\nprivate:\n\tPIMPL\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/LoadingProductWrapper.h",
    "content": "﻿#pragma once\n\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../arraywrapper.h\"\n#include \"OnlineProductWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT LoadingProductWrapper : ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(LoadingProductWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t_NODISCARD int GetProductId() const;\n\t_NODISCARD int GetProductHashId() const;\n\t_NODISCARD ArrayWrapper<int> GetReferencedViews() const;\n\t_NODISCARD OnlineProductWrapper GetOnlineProduct() const;\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/LoadoutSaveWrapper.h",
    "content": "﻿#pragma once\n\n#include <string>\n#include \"LoadoutSetWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT LoadoutSaveWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(LoadoutSaveWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\t_NODISCARD LoadoutSetWrapper GetPreset(const std::string& name) const;\n\t_NODISCARD LoadoutSetWrapper GetPreset(int index) const;\n\t_NODISCARD ArrayWrapper<LoadoutSetWrapper> GetPresets() const;\n\n\tvoid SetPreviewTeam(int team);\n\t_NODISCARD int GetPreviewTeam() const;\n\t_NODISCARD LoadoutSetWrapper GetEquippedLoadout() const;\n\tvoid RenamePreset(const LoadoutSetWrapper& preset_wrapper, const std::string& new_name);\n\tvoid EquipPreset(const LoadoutSetWrapper& preset) const;\n\tvoid DeletePreset(const LoadoutSetWrapper& preset_wrapper);\n\t_NODISCARD LoadoutSetWrapper AddPreset();\n\tvoid SwapPreset(const LoadoutSetWrapper& a, const LoadoutSetWrapper& b);\n\t_NODISCARD int GetIndex(const LoadoutSetWrapper& preset_wrapper) const;\n\t\nprivate:\n\tPIMPL\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/LoadoutSetWrapper.h",
    "content": "﻿#pragma once\n\n#include \"LoadoutWrapper.h\"\n#include \"OnlineProductWrapper.h\"\n#include \"wrapperstructs.h\"\n\nstruct LoadoutSetData {\n\tLoadoutWrapper blue;\n\tLoadoutWrapper orange;\n};\n\n\nclass BAKKESMOD_PLUGIN_IMPORT LoadoutSetWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(LoadoutSetWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\tvoid CopyFrom(const LoadoutSetWrapper& other);\n\t_NODISCARD std::string GetName() const;\n\tvoid Rename(const std::string& new_name);\n\tvoid EquipProduct(const OnlineProductWrapper& online_product, int team);\n\tvoid EquipProduct(const ProductInstanceID& instance_id, int slot_id, int team);\n\t_NODISCARD LoadoutSetData GetLoadoutData() const;\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/LoadoutWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../arraywrapper.h\"\n#include <vector>\n\nclass BAKKESMOD_PLUGIN_IMPORT LoadoutWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(LoadoutWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t\n\tArrayWrapper<int> GetLoadout();\n\t[[deprecated(\"Missing half the data\")]]\n\tArrayWrapper<unsigned long long> GetOnlineLoadout();\n\t_NODISCARD std::vector<ProductInstanceID> GetOnlineLoadoutV2() const;\n\tunsigned char GetPrimaryPaintColorId();\n\tunsigned char GetAccentPaintColorId();\n\tint GetPrimaryFinishId();\n\tint GetAccentFinishId();\n\t\nprivate:\n\tPIMPL\n};\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/OnlineProductWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../Engine/UnrealStringWrapper.h\"\n#include \"../arraywrapper.h\"\nclass ProductWrapper;\nclass ProductAttributeWrapper;\n\n\nclass BAKKESMOD_PLUGIN_IMPORT OnlineProductWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(OnlineProductWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\tstd::string SeriesIdToSeriesName(int seriesID);\n\t_NODISCARD bool IsFavorited() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetProductID();\n\tint GetSeriesID();\n\tint GetTradeHold(); // Se wrapperstructs for the enum\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tstd::string GetProductSeries();\n\tunsigned char GetQuality();\n\tArrayWrapper<ProductAttributeWrapper> GetAttributes();\n\tUnrealStringWrapper GetLongLabel();\n\tint GetBlueprintSeriesID();\n\tunsigned char GetBlueprintType();\n\tbool IsBlueprint();\n\tProductWrapper GetProduct();\n\tbool GetIsUntradable();\n\t[[deprecated(\"Missing half the data. Use GetInstanceIDV2\")]]\n\tunsigned long long GetInstanceID();\n\t_NODISCARD ProductInstanceID GetInstanceIDV2();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ProductPaintWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductPaintWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ProductPaintWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t_NODISCARD  std::string GetLabel() const;\n\t_NODISCARD  bool GetbVisible() const;\n\n\t_NODISCARD int GetId() const;\n\n\t/**\n\t * \\brief Use EnumWrapper::GetPaintFinishTyp() to interpret this value\n\t * \\return A enum value for the WeatherVariant\n\t */\n\t_NODISCARD unsigned char GetFinishType() const;\n\t_NODISCARD std::vector<LinearColor> GetColors() const;\n\t//END SELF IMPLEMENTED\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ProductSlotWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n#include \"../Engine/UnrealStringWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductSlotWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(ProductSlotWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tProductWrapper GetDefaultProduct() const;\n\tUnrealStringWrapper GetLabel();\n\tUnrealStringWrapper GetPluralLabel();\n\tUnrealStringWrapper GetDescription();\n\tUnrealStringWrapper GetOnlineLabel();\n\tint GetSlotIndex();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ProductTemplateWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\nclass ProductWrapper;\nclass ProductSlotWrapper;\n\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductTemplateWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(ProductTemplateWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tProductSlotWrapper GetSlot();\n\tunsigned char GetUnlockMethod(); // see wrapper structs for the enum\n\tunsigned char GetQuality(); // see wrapper structs for the enum\n\tProductWrapper GetRequiredProduct();\n\tunsigned long GetbLicensed();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ProductTradeInWrapper.h",
    "content": "﻿#pragma once\n#include \"bakkesmod/wrappers/Engine/ObjectWrapper.h\"\n#include \"bakkesmod/wrappers/arraywrapper.h\"\n#include \"OnlineProductWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductTradeInWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(ProductTradeInWrapper)\n\n\tArrayWrapper<OnlineProductWrapper> GetProducts() const;\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/ProductWrapper.h",
    "content": "#pragma once\n#include \"ProductTemplateWrapper.h\"\n#include \"../Engine/UnrealStringWrapper.h\"\nclass ProductAttributeWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductWrapper : public ProductTemplateWrapper {\npublic:\n\tCONSTRUCTORS(ProductWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\tbool IsNull();\n\texplicit operator bool();\n\tbool IsFavorited() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tstd::string GetAssetPackageName();\n\tUnrealStringWrapper GetAssetPath();\n\tUnrealStringWrapper GetLabel();\n\tUnrealStringWrapper GetAsciiLabel();\n\tUnrealStringWrapper GetLongLabel();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tbool IsPaintable();\n\tUnrealStringWrapper GetDisplayLabelSlot();\n\tunsigned char GetQuality();\n\tbool IsContainerKey();\n\tbool IsCurrency();\n\tbool IsBlueprint();\n\tbool IsContainerUnlocked();\n\tbool IsContainer();\n\tbool IsSchematic();\n\tbool IsPlatformExclusive();\n\tbool IsLicensed();\n\tbool CanEquip();\n\tArrayWrapper<ProductAttributeWrapper> GetAttributes();\n\tUnrealStringWrapper GetSortLabel();\n\tUnrealStringWrapper GetThumbnailAssetPath();\n\tUnrealStringWrapper GetThumbnailPackageNameForLoad();\n\tstd::string GetThumbnailPackageName();\n\tstd::string GetThumbnailAssetName();\n\tUnrealStringWrapper GetTrademarkLabel();\n\tint GetID();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/TradeWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n#include \"OnlineProductWrapper.h\"\n\n\n\nclass BAKKESMOD_PLUGIN_IMPORT TradeWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(TradeWrapper)\n\n\tstruct Currency\n\t{\n\t\tint currency_id;\n\t\tint quantity;\n\t};\n\n\tstd::vector<Currency> GetReceivingCurrency() const;\n\tstd::vector<Currency> GetSendingCurrency() const;\n\tArrayWrapper<OnlineProductWrapper> GetReceivingProducts();\n\tArrayWrapper<OnlineProductWrapper> GetSendingProducts();\n\tUniqueIDWrapper GetTradingPlayer() const;\n\tGUIDWrapper GetTradeGuid() const;\n\tbool IsNull();\n\texplicit operator bool();\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/assets/ProductAssetBodyWrapper.h",
    "content": "﻿#pragma once\n#include \"ProductEquipProfileWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAssetBodyWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ProductAssetBodyWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD ProductEquipProfileWrapper GetEquipProfile() const;\n\t_NODISCARD bool CanEquip(const ProductWrapper& product_wrappper) const;\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/assets/ProductAssetWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAssetWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ProductAssetWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD ProductWrapper GetProduct() const;\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/assets/ProductEquipProfileWrapper.h",
    "content": "﻿#pragma once\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductEquipProfileWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ProductEquipProfileWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t_NODISCARD std::vector<int> GetForcedProducts() const;\n\t_NODISCARD std::vector<int> GetDefaultProducts() const;\n\t_NODISCARD bool CanEquip(const ProductWrapper& product_wrappper) const;\n\nprivate:\n\tPIMPL\n\t\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttributeWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n#include \"../../Engine/UnrealStringWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttributeWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttributeWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\tstd::string GetAttributeType();\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tstd::string GetTypename();\n\tUnrealStringWrapper GetLabel();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_AnimatedSkinLabelWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_AnimatedSkinLabelWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_AnimatedSkinLabelWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tUnrealStringWrapper GetAnimatedLabel();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_BlueprintCostWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_BlueprintCostWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_BlueprintCostWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetCost();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_BlueprintWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_BlueprintWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_BlueprintWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetProductID();\n\tint GetCachedBlueprintSeriesID();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_BodyCompatibilityWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\nclass ProductWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_BodyCompatibilityWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_BodyCompatibilityWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tArrayWrapper<ProductWrapper> GetCompatibleBodies();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_CertifiedWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_CertifiedWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_CertifiedWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tstd::string GetValueKeyName();\n\tint GetStatId();\n\tint GetStatValue();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\tUnrealStringWrapper GetDescription();\n\tUnrealStringWrapper GetRankLabel();\n\tint GetRank();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_CurrencyWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_CurrencyWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_CurrencyWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetCurrencyID();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_PaintedWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_PaintedWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_PaintedWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetPaintID();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_QualityWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_QualityWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_QualityWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tunsigned char GetQuality();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper ProductQualityToString(unsigned char InQuality);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_SpecialEditionSettingsWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n#include <vector>\n\nstruct SpecialEdition {\n\tint productId;\n\tint editionId;\n\tstd::string label;\n};\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_SpecialEditionSettingsWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_SpecialEditionSettingsWrapper)\n\n\t\tstd::vector<SpecialEdition> GetEditions();\n\n\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_SpecialEditionWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_SpecialEditionWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_SpecialEditionWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetEditionID();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\tint GetOverrideProductID(int ProductID);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_TeamEditionUploadWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_TeamEditionUploadWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_TeamEditionUploadWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tArrayWrapper<int> GetSupportedTeamEditions();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_TeamEditionWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_TeamEditionWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_TeamEditionWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tint GetId();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tUnrealStringWrapper GetSortLabel();\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/attributes/ProductAttribute_UnlockMethodWrapper.h",
    "content": "#pragma once\n#include \"ProductAttributeWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT ProductAttribute_UnlockMethodWrapper : public ProductAttributeWrapper {\npublic:\n\tCONSTRUCTORS(ProductAttribute_UnlockMethodWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\tunsigned char GetUnlockMethod();\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/dbs/CertifiedStatDatabaseWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT CertifiedStatDatabaseWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(CertifiedStatDatabaseWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tstd::string GetStatName(int StatId);\n\tint GetStatId(std::string& StatName);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/dbs/DataAssetDatabaseWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT DataAssetDatabaseWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(DataAssetDatabaseWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tstd::string GetName(int DataAssetID);\n\tint GetID(std::string& DataAssetName);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/dbs/DataAssetDatabase_ESportsTeamWrapper.h",
    "content": "#pragma once\n#include \"DataAssetDatabaseWrapper.h\"\n\n\nclass BAKKESMOD_PLUGIN_IMPORT DataAssetDatabase_ESportsTeamWrapper : public DataAssetDatabaseWrapper {\npublic:\n\tCONSTRUCTORS(DataAssetDatabase_ESportsTeamWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/dbs/PaintDatabaseWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n#include \"ProductPaintWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT PaintDatabaseWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(PaintDatabaseWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t_NODISCARD ArrayWrapper<ProductPaintWrapper> GetPaints() const;\n\n\t_NODISCARD bool AddCustomPaintColor(const std::string& name, const LinearColor& color);\n\t_NODISCARD bool UpdateCustomPaintColor(const std::string& name, const LinearColor& color);\n\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tstd::string GetPaintName(int PaintID);\n\tint GetPaintID(std::string& PaintName);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/items/dbs/SpecialEditionDatabaseWrapper.h",
    "content": "#pragma once\n#include \"../../Engine/ObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT SpecialEditionDatabaseWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(SpecialEditionDatabaseWrapper)\n\n\t//BEGIN SELF IMPLEMENTED\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\t//END SELF IMPLEMENTED\n\n\t//AUTO-GENERATED FROM FIELDS\n\t//END AUTO-GENERATED FROM FIELDS\n\n\t//AUTO-GENERATED FROM METHODS\n\tstd::string GetSpecialEditionName(int EditionID);\n\tint GetSpecialEditionId(std::string& EditionName);\n\t//END AUTO-GENERATED FROM METHODS\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/kismet/SequenceObjectWrapper.h",
    "content": "#pragma once\n#include \".././Engine/ObjectWrapper.h\"\n\nclass SequenceWrapper;\nclass UnrealStringWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT SequenceObjectWrapper : public ObjectWrapper {\npublic:\n\tCONSTRUCTORS(SequenceObjectWrapper)\n\n\t_NODISCARD bool IsNull() const;\n\texplicit operator bool() const;\n\n\tSequenceWrapper     GetParentSequence();\n\tUnrealStringWrapper GetObjName();\n\tUnrealStringWrapper GetObjCategory();\n\tUnrealStringWrapper GetObjComment();\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/kismet/SequenceOpWrapper.h",
    "content": "#pragma once\n#include \"SequenceObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT SequenceOpWrapper : public SequenceObjectWrapper {\npublic:\n\tCONSTRUCTORS(SequenceOpWrapper)\n\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/kismet/SequenceVariableWrapper.h",
    "content": "#pragma once\n#include \"SequenceObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT SequenceVariableWrapper : public SequenceObjectWrapper {\npublic:\n\tCONSTRUCTORS(SequenceVariableWrapper)\n\n\tstd::string GetVarName();\n\n\t// Custom implementation\n\tbool IsInt();\n\tbool IsFloat();\n\tbool IsString();\n\tbool IsVector();\n\tbool IsBool();\n\tbool IsObjectList();\n\tbool IsActor();\n\n\tfloat GetFloat();\n\tint GetInt();\n\tstd::string GetString();\n\tVector GetVector();\n\tbool GetBool();\n\tArrayWrapper<SequenceVariableWrapper> GetObjectList();\n\n\t\n\tvoid SetFloat(float value);\n\tvoid SetInt(int value);\n\tvoid SetString(const std::string& value);\n\tvoid SetVector(Vector value);\n\tvoid SetBool(bool value);\n\tActorWrapper GetActor();\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/kismet/SequenceWrapper.h",
    "content": "#pragma once\n#include \"SequenceOpWrapper.h\"\n#include \"../arraywrapper.h\"\n#include <map>\n\nclass SequenceVariableWrapper;\n\nclass BAKKESMOD_PLUGIN_IMPORT SequenceWrapper : public SequenceOpWrapper {\npublic:\n\tCONSTRUCTORS(SequenceWrapper)\n\n\tArrayWrapper<SequenceObjectWrapper>\tGetSequenceObjects();\n\tArrayWrapper<SequenceWrapper>\t\tGetNestedSequences();\n\n\t/// <summary>\n\t/// Searches this sequence recursively for RemoteEvents with the right name and activates them\n\t/// </summary>\n\t/// <param name=\"remote_event_name\">The name of the event to activate</param>\n\t/// <returns>The amount of nodes activated</returns>\n\tint ActivateRemoteEvents(const std::string& remote_event_name) const;\n\n\t// self implemented\n\t// BFS search trough nested sequences and their contained SequenceObjects\n\t//  don't think they change, so user could probably cache this..\n\tstd::map<std::string, SequenceVariableWrapper> GetAllSequenceVariables(bool reqursive);\n\nprivate:\n\tPIMPL\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/linmath.h",
    "content": "#ifndef LINMATH_H\r\n#define LINMATH_H\r\n\r\n#include <math.h>\r\n\r\n#define LINMATH_H_DEFINE_VEC(n) \\\r\ntypedef float vec##n[n]; \\\r\nstatic inline void vec##n##_add(vec##n r, vec##n const a, vec##n const b) \\\r\n{ \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tr[i] = a[i] + b[i]; \\\r\n} \\\r\nstatic inline void vec##n##_sub(vec##n r, vec##n const a, vec##n const b) \\\r\n{ \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tr[i] = a[i] - b[i]; \\\r\n} \\\r\nstatic inline void vec##n##_scale(vec##n r, vec##n const v, float const s) \\\r\n{ \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tr[i] = v[i] * s; \\\r\n} \\\r\nstatic inline float vec##n##_mul_inner(vec##n const a, vec##n const b) \\\r\n{ \\\r\n\tfloat p = 0.; \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tp += b[i]*a[i]; \\\r\n\treturn p; \\\r\n} \\\r\nstatic inline float vec##n##_len(vec##n const v) \\\r\n{ \\\r\n\treturn sqrtf(vec##n##_mul_inner(v,v)); \\\r\n} \\\r\nstatic inline void vec##n##_norm(vec##n r, vec##n const v) \\\r\n{ \\\r\n\tfloat k = 1.f / vec##n##_len(v); \\\r\n\tvec##n##_scale(r, v, k); \\\r\n} \\\r\nstatic inline void vec##n##_min(vec##n r, vec##n a, vec##n b) \\\r\n{ \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tr[i] = a[i]<b[i] ? a[i] : b[i]; \\\r\n} \\\r\nstatic inline void vec##n##_max(vec##n r, vec##n a, vec##n b) \\\r\n{ \\\r\n\tint i; \\\r\n\tfor(i=0; i<n; ++i) \\\r\n\t\tr[i] = a[i]>b[i] ? a[i] : b[i]; \\\r\n}\r\n\r\nLINMATH_H_DEFINE_VEC(2)\r\nLINMATH_H_DEFINE_VEC(3)\r\nLINMATH_H_DEFINE_VEC(4)\r\n\r\nstatic inline float vec3_dot(vec3 const a, vec3 const b) \r\n{\r\n\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\r\n}\r\n\r\nstatic inline void vec3_mul_cross(vec3 r, vec3 const a, vec3 const b)\r\n{\r\n\tr[0] = a[1]*b[2] - a[2]*b[1];\r\n\tr[1] = a[2]*b[0] - a[0]*b[2];\r\n\tr[2] = a[0]*b[1] - a[1]*b[0];\r\n}\r\n\r\nstatic inline void vec3_reflect(vec3 r, vec3 const v, vec3 const n)\r\n{\r\n\tfloat p  = 2.f*vec3_mul_inner(v, n);\r\n\tint i;\r\n\tfor(i=0;i<3;++i)\r\n\t\tr[i] = v[i] - p*n[i];\r\n}\r\n\r\nstatic inline void vec4_mul_cross(vec4 r, vec4 a, vec4 b)\r\n{\r\n\tr[0] = a[1]*b[2] - a[2]*b[1];\r\n\tr[1] = a[2]*b[0] - a[0]*b[2];\r\n\tr[2] = a[0]*b[1] - a[1]*b[0];\r\n\tr[3] = 1.f;\r\n}\r\n\r\nstatic inline void vec4_reflect(vec4 r, vec4 v, vec4 n)\r\n{\r\n\tfloat p  = 2.f*vec4_mul_inner(v, n);\r\n\tint i;\r\n\tfor(i=0;i<4;++i)\r\n\t\tr[i] = v[i] - p*n[i];\r\n}\r\n\r\ntypedef vec4 mat4x4[4];\r\nstatic inline void mat4x4_identity(mat4x4 M)\r\n{\r\n\tint i, j;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tfor(j=0; j<4; ++j)\r\n\t\t\tM[i][j] = i==j ? 1.f : 0.f;\r\n}\r\nstatic inline void mat4x4_dup(mat4x4 M, mat4x4 N)\r\n{\r\n\tint i, j;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tfor(j=0; j<4; ++j)\r\n\t\t\tM[i][j] = N[i][j];\r\n}\r\nstatic inline void mat4x4_row(vec4 r, mat4x4 M, int i)\r\n{\r\n\tint k;\r\n\tfor(k=0; k<4; ++k)\r\n\t\tr[k] = M[k][i];\r\n}\r\nstatic inline void mat4x4_col(vec4 r, mat4x4 M, int i)\r\n{\r\n\tint k;\r\n\tfor(k=0; k<4; ++k)\r\n\t\tr[k] = M[i][k];\r\n}\r\nstatic inline void mat4x4_transpose(mat4x4 M, mat4x4 N)\r\n{\r\n\tint i, j;\r\n\tfor(j=0; j<4; ++j)\r\n\t\tfor(i=0; i<4; ++i)\r\n\t\t\tM[i][j] = N[j][i];\r\n}\r\nstatic inline void mat4x4_add(mat4x4 M, mat4x4 a, mat4x4 b)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tvec4_add(M[i], a[i], b[i]);\r\n}\r\nstatic inline void mat4x4_sub(mat4x4 M, mat4x4 a, mat4x4 b)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tvec4_sub(M[i], a[i], b[i]);\r\n}\r\nstatic inline void mat4x4_scale(mat4x4 M, mat4x4 a, float k)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tvec4_scale(M[i], a[i], k);\r\n}\r\nstatic inline void mat4x4_scale_aniso(mat4x4 M, mat4x4 a, float x, float y, float z)\r\n{\r\n\tint i;\r\n\tvec4_scale(M[0], a[0], x);\r\n\tvec4_scale(M[1], a[1], y);\r\n\tvec4_scale(M[2], a[2], z);\r\n\tfor(i = 0; i < 4; ++i) {\r\n\t\tM[3][i] = a[3][i];\r\n\t}\r\n}\r\nstatic inline void mat4x4_mul(mat4x4 M, mat4x4 a, mat4x4 b)\r\n{\r\n\tmat4x4 temp;\r\n\tint k, r, c;\r\n\tfor(c=0; c<4; ++c) for(r=0; r<4; ++r) {\r\n\t\ttemp[c][r] = 0.f;\r\n\t\tfor(k=0; k<4; ++k)\r\n\t\t\ttemp[c][r] += a[k][r] * b[c][k];\r\n\t}\r\n\tmat4x4_dup(M, temp);\r\n}\r\nstatic inline void mat4x4_mul_vec4(vec4 r, mat4x4 M, vec4 v)\r\n{\r\n\tint i, j;\r\n\tfor(j=0; j<4; ++j) {\r\n\t\tr[j] = 0.f;\r\n\t\tfor(i=0; i<4; ++i)\r\n\t\t\tr[j] += M[i][j] * v[i];\r\n\t}\r\n}\r\nstatic inline void mat4x4_translate(mat4x4 T, float x, float y, float z)\r\n{\r\n\tmat4x4_identity(T);\r\n\tT[3][0] = x;\r\n\tT[3][1] = y;\r\n\tT[3][2] = z;\r\n}\r\nstatic inline void mat4x4_translate_in_place(mat4x4 M, float x, float y, float z)\r\n{\r\n\tvec4 t = {x, y, z, 0};\r\n\tvec4 r;\r\n\tint i;\r\n\tfor (i = 0; i < 4; ++i) {\r\n\t\tmat4x4_row(r, M, i);\r\n\t\tM[3][i] += vec4_mul_inner(r, t);\r\n\t}\r\n}\r\nstatic inline void mat4x4_from_vec3_mul_outer(mat4x4 M, vec3 a, vec3 b)\r\n{\r\n\tint i, j;\r\n\tfor(i=0; i<4; ++i) for(j=0; j<4; ++j)\r\n\t\tM[i][j] = i<3 && j<3 ? a[i] * b[j] : 0.f;\r\n}\r\nstatic inline void mat4x4_rotate(mat4x4 R, mat4x4 M, float x, float y, float z, float angle)\r\n{\r\n\tfloat s = sinf(angle);\r\n\tfloat c = cosf(angle);\r\n\tvec3 u = {x, y, z};\r\n\r\n\tif(vec3_len(u) > 1e-4) {\r\n\t\tvec3_norm(u, u);\r\n\t\tmat4x4 T;\r\n\t\tmat4x4_from_vec3_mul_outer(T, u, u);\r\n\r\n\t\tmat4x4 S = {\r\n\t\t\t{    0,  u[2], -u[1], 0},\r\n\t\t\t{-u[2],     0,  u[0], 0},\r\n\t\t\t{ u[1], -u[0],     0, 0},\r\n\t\t\t{    0,     0,     0, 0}\r\n\t\t};\r\n\t\tmat4x4_scale(S, S, s);\r\n\r\n\t\tmat4x4 C;\r\n\t\tmat4x4_identity(C);\r\n\t\tmat4x4_sub(C, C, T);\r\n\r\n\t\tmat4x4_scale(C, C, c);\r\n\r\n\t\tmat4x4_add(T, T, C);\r\n\t\tmat4x4_add(T, T, S);\r\n\r\n\t\tT[3][3] = 1.;\t\t\r\n\t\tmat4x4_mul(R, M, T);\r\n\t} else {\r\n\t\tmat4x4_dup(R, M);\r\n\t}\r\n}\r\nstatic inline void mat4x4_rotate_X(mat4x4 Q, mat4x4 M, float angle)\r\n{\r\n\tfloat s = sinf(angle);\r\n\tfloat c = cosf(angle);\r\n\tmat4x4 R = {\r\n\t\t{1.f, 0.f, 0.f, 0.f},\r\n\t\t{0.f,   c,   s, 0.f},\r\n\t\t{0.f,  -s,   c, 0.f},\r\n\t\t{0.f, 0.f, 0.f, 1.f}\r\n\t};\r\n\tmat4x4_mul(Q, M, R);\r\n}\r\nstatic inline void mat4x4_rotate_Y(mat4x4 Q, mat4x4 M, float angle)\r\n{\r\n\tfloat s = sinf(angle);\r\n\tfloat c = cosf(angle);\r\n\tmat4x4 R = {\r\n\t\t{   c, 0.f,   s, 0.f},\r\n\t\t{ 0.f, 1.f, 0.f, 0.f},\r\n\t\t{  -s, 0.f,   c, 0.f},\r\n\t\t{ 0.f, 0.f, 0.f, 1.f}\r\n\t};\r\n\tmat4x4_mul(Q, M, R);\r\n}\r\nstatic inline void mat4x4_rotate_Z(mat4x4 Q, mat4x4 M, float angle)\r\n{\r\n\tfloat s = sinf(angle);\r\n\tfloat c = cosf(angle);\r\n\tmat4x4 R = {\r\n\t\t{   c,   s, 0.f, 0.f},\r\n\t\t{  -s,   c, 0.f, 0.f},\r\n\t\t{ 0.f, 0.f, 1.f, 0.f},\r\n\t\t{ 0.f, 0.f, 0.f, 1.f}\r\n\t};\r\n\tmat4x4_mul(Q, M, R);\r\n}\r\nstatic inline void mat4x4_invert(mat4x4 T, mat4x4 M)\r\n{\r\n\tfloat s[6];\r\n\tfloat c[6];\r\n\ts[0] = M[0][0]*M[1][1] - M[1][0]*M[0][1];\r\n\ts[1] = M[0][0]*M[1][2] - M[1][0]*M[0][2];\r\n\ts[2] = M[0][0]*M[1][3] - M[1][0]*M[0][3];\r\n\ts[3] = M[0][1]*M[1][2] - M[1][1]*M[0][2];\r\n\ts[4] = M[0][1]*M[1][3] - M[1][1]*M[0][3];\r\n\ts[5] = M[0][2]*M[1][3] - M[1][2]*M[0][3];\r\n\r\n\tc[0] = M[2][0]*M[3][1] - M[3][0]*M[2][1];\r\n\tc[1] = M[2][0]*M[3][2] - M[3][0]*M[2][2];\r\n\tc[2] = M[2][0]*M[3][3] - M[3][0]*M[2][3];\r\n\tc[3] = M[2][1]*M[3][2] - M[3][1]*M[2][2];\r\n\tc[4] = M[2][1]*M[3][3] - M[3][1]*M[2][3];\r\n\tc[5] = M[2][2]*M[3][3] - M[3][2]*M[2][3];\r\n\t\r\n\t/* Assumes it is invertible */\r\n\tfloat idet = 1.0f/( s[0]*c[5]-s[1]*c[4]+s[2]*c[3]+s[3]*c[2]-s[4]*c[1]+s[5]*c[0] );\r\n\t\r\n\tT[0][0] = ( M[1][1] * c[5] - M[1][2] * c[4] + M[1][3] * c[3]) * idet;\r\n\tT[0][1] = (-M[0][1] * c[5] + M[0][2] * c[4] - M[0][3] * c[3]) * idet;\r\n\tT[0][2] = ( M[3][1] * s[5] - M[3][2] * s[4] + M[3][3] * s[3]) * idet;\r\n\tT[0][3] = (-M[2][1] * s[5] + M[2][2] * s[4] - M[2][3] * s[3]) * idet;\r\n\r\n\tT[1][0] = (-M[1][0] * c[5] + M[1][2] * c[2] - M[1][3] * c[1]) * idet;\r\n\tT[1][1] = ( M[0][0] * c[5] - M[0][2] * c[2] + M[0][3] * c[1]) * idet;\r\n\tT[1][2] = (-M[3][0] * s[5] + M[3][2] * s[2] - M[3][3] * s[1]) * idet;\r\n\tT[1][3] = ( M[2][0] * s[5] - M[2][2] * s[2] + M[2][3] * s[1]) * idet;\r\n\r\n\tT[2][0] = ( M[1][0] * c[4] - M[1][1] * c[2] + M[1][3] * c[0]) * idet;\r\n\tT[2][1] = (-M[0][0] * c[4] + M[0][1] * c[2] - M[0][3] * c[0]) * idet;\r\n\tT[2][2] = ( M[3][0] * s[4] - M[3][1] * s[2] + M[3][3] * s[0]) * idet;\r\n\tT[2][3] = (-M[2][0] * s[4] + M[2][1] * s[2] - M[2][3] * s[0]) * idet;\r\n\r\n\tT[3][0] = (-M[1][0] * c[3] + M[1][1] * c[1] - M[1][2] * c[0]) * idet;\r\n\tT[3][1] = ( M[0][0] * c[3] - M[0][1] * c[1] + M[0][2] * c[0]) * idet;\r\n\tT[3][2] = (-M[3][0] * s[3] + M[3][1] * s[1] - M[3][2] * s[0]) * idet;\r\n\tT[3][3] = ( M[2][0] * s[3] - M[2][1] * s[1] + M[2][2] * s[0]) * idet;\r\n}\r\nstatic inline void mat4x4_orthonormalize(mat4x4 R, mat4x4 M)\r\n{\r\n\tmat4x4_dup(R, M);\r\n\tfloat s = 1.f;\r\n\tvec3 h;\r\n\r\n\tvec3_norm(R[2], R[2]);\r\n\t\r\n\ts = vec3_mul_inner(R[1], R[2]);\r\n\tvec3_scale(h, R[2], s);\r\n\tvec3_sub(R[1], R[1], h);\r\n\tvec3_norm(R[2], R[2]);\r\n\r\n\ts = vec3_mul_inner(R[1], R[2]);\r\n\tvec3_scale(h, R[2], s);\r\n\tvec3_sub(R[1], R[1], h);\r\n\tvec3_norm(R[1], R[1]);\r\n\r\n\ts = vec3_mul_inner(R[0], R[1]);\r\n\tvec3_scale(h, R[1], s);\r\n\tvec3_sub(R[0], R[0], h);\r\n\tvec3_norm(R[0], R[0]);\r\n}\r\n\r\nstatic inline void mat4x4_frustum(mat4x4 M, float l, float r, float b, float t, float n, float f)\r\n{\r\n\tM[0][0] = 2.f*n/(r-l);\r\n\tM[0][1] = M[0][2] = M[0][3] = 0.f;\r\n\t\r\n\tM[1][1] = 2.f*n/(t-b);\r\n\tM[1][0] = M[1][2] = M[1][3] = 0.f;\r\n\r\n\tM[2][0] = (r+l)/(r-l);\r\n\tM[2][1] = (t+b)/(t-b);\r\n\tM[2][2] = -(f+n)/(f-n);\r\n\tM[2][3] = -1.f;\r\n\t\r\n\tM[3][2] = -2.f*(f*n)/(f-n);\r\n\tM[3][0] = M[3][1] = M[3][3] = 0.f;\r\n}\r\nstatic inline void mat4x4_ortho(mat4x4 M, float l, float r, float b, float t, float n, float f)\r\n{\r\n\tM[0][0] = 2.f/(r-l);\r\n\tM[0][1] = M[0][2] = M[0][3] = 0.f;\r\n\r\n\tM[1][1] = 2.f/(t-b);\r\n\tM[1][0] = M[1][2] = M[1][3] = 0.f;\r\n\r\n\tM[2][2] = -2.f/(f-n);\r\n\tM[2][0] = M[2][1] = M[2][3] = 0.f;\r\n\t\r\n\tM[3][0] = -(r+l)/(r-l);\r\n\tM[3][1] = -(t+b)/(t-b);\r\n\tM[3][2] = -(f+n)/(f-n);\r\n\tM[3][3] = 1.f;\r\n}\r\nstatic inline void mat4x4_perspective(mat4x4 m, float y_fov, float aspect, float n, float f)\r\n{\r\n\t/* NOTE: Degrees are an unhandy unit to work with.\r\n\t * linmath.h uses radians for everything! */\r\n\tfloat const a = 1.f / tanf(y_fov / 2.f);\r\n\r\n\tm[0][0] = a / aspect;\r\n\tm[0][1] = 0.f;\r\n\tm[0][2] = 0.f;\r\n\tm[0][3] = 0.f;\r\n\r\n\tm[1][0] = 0.f;\r\n\tm[1][1] = a;\r\n\tm[1][2] = 0.f;\r\n\tm[1][3] = 0.f;\r\n\r\n\tm[2][0] = 0.f;\r\n\tm[2][1] = 0.f;\r\n\tm[2][2] = -((f + n) / (f - n));\r\n\tm[2][3] = -1.f;\r\n\r\n\tm[3][0] = 0.f;\r\n\tm[3][1] = 0.f;\r\n\tm[3][2] = -((2.f * f * n) / (f - n));\r\n\tm[3][3] = 0.f;\r\n}\r\nstatic inline void mat4x4_look_at(mat4x4 m, vec3 eye, vec3 center, vec3 up)\r\n{\r\n\t/* Adapted from Android's OpenGL Matrix.java.                        */\r\n\t/* See the OpenGL GLUT documentation for gluLookAt for a description */\r\n\t/* of the algorithm. We implement it in a straightforward way:       */\r\n\r\n\t/* TODO: The negation of of can be spared by swapping the order of\r\n\t *       operands in the following cross products in the right way. */\r\n\tvec3 f;\r\n\tvec3_sub(f, center, eye);\t\r\n\tvec3_norm(f, f);\t\r\n\t\r\n\tvec3 s;\r\n\tvec3_mul_cross(s, f, up);\r\n\tvec3_norm(s, s);\r\n\r\n\tvec3 t;\r\n\tvec3_mul_cross(t, s, f);\r\n\r\n\tm[0][0] =  s[0];\r\n\tm[0][1] =  t[0];\r\n\tm[0][2] = -f[0];\r\n\tm[0][3] =   0.f;\r\n\r\n\tm[1][0] =  s[1];\r\n\tm[1][1] =  t[1];\r\n\tm[1][2] = -f[1];\r\n\tm[1][3] =   0.f;\r\n\r\n\tm[2][0] =  s[2];\r\n\tm[2][1] =  t[2];\r\n\tm[2][2] = -f[2];\r\n\tm[2][3] =   0.f;\r\n\r\n\tm[3][0] =  0.f;\r\n\tm[3][1] =  0.f;\r\n\tm[3][2] =  0.f;\r\n\tm[3][3] =  1.f;\r\n\r\n\tmat4x4_translate_in_place(m, -eye[0], -eye[1], -eye[2]);\r\n}\r\n\r\ntypedef float quat[4];\r\nstatic inline void quat_identity(quat q)\r\n{\r\n\tq[0] = q[1] = q[2] = 0.f;\r\n\tq[3] = 1.f;\r\n}\r\nstatic inline void quat_add(quat r, quat a, quat b)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tr[i] = a[i] + b[i];\r\n}\r\nstatic inline void quat_sub(quat r, quat a, quat b)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tr[i] = a[i] - b[i];\r\n}\r\nstatic inline void quat_mul(quat r, quat p, quat q)\r\n{\r\n\tvec3 w;\r\n\tvec3_mul_cross(r, p, q);\r\n\tvec3_scale(w, p, q[3]);\r\n\tvec3_add(r, r, w);\r\n\tvec3_scale(w, q, p[3]);\r\n\tvec3_add(r, r, w);\r\n\tr[3] = p[3]*q[3] - vec3_mul_inner(p, q);\r\n}\r\nstatic inline void quat_scale(quat r, quat v, float s)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tr[i] = v[i] * s;\r\n}\r\nstatic inline float quat_inner_product(quat a, quat b)\r\n{\r\n\tfloat p = 0.f;\r\n\tint i;\r\n\tfor(i=0; i<4; ++i)\r\n\t\tp += b[i]*a[i];\r\n\treturn p;\r\n}\r\nstatic inline void quat_conj(quat r, quat q)\r\n{\r\n\tint i;\r\n\tfor(i=0; i<3; ++i)\r\n\t\tr[i] = -q[i];\r\n\tr[3] = q[3];\r\n}\r\nstatic inline void quat_rotate(quat r, float angle, vec3 axis) {\r\n\tvec3 v;\r\n\tvec3_scale(v, axis, sinf(angle / 2));\r\n\tint i;\r\n\tfor(i=0; i<3; ++i)\r\n\t\tr[i] = v[i];\r\n\tr[3] = cosf(angle / 2);\r\n}\r\n#define quat_norm vec4_norm\r\nstatic inline void quat_mul_vec3(vec3 r, quat q, vec3 v)\r\n{\r\n/*\r\n * Method by Fabian 'ryg' Giessen (of Farbrausch)\r\nt = 2 * cross(q.xyz, v)\r\nv' = v + q.w * t + cross(q.xyz, t)\r\n */\r\n\tvec3 t;\r\n\tvec3 q_xyz = {q[0], q[1], q[2]};\r\n\tvec3 u = {q[0], q[1], q[2]};\r\n\r\n\tvec3_mul_cross(t, q_xyz, v);\r\n\tvec3_scale(t, t, 2);\r\n\r\n\tvec3_mul_cross(u, q_xyz, t);\r\n\tvec3_scale(t, t, q[3]);\r\n\r\n\tvec3_add(r, v, t);\r\n\tvec3_add(r, r, u);\r\n}\r\nstatic inline void mat4x4_from_quat(mat4x4 M, quat q)\r\n{\r\n\tfloat a = q[3];\r\n\tfloat b = q[0];\r\n\tfloat c = q[1];\r\n\tfloat d = q[2];\r\n\tfloat a2 = a*a;\r\n\tfloat b2 = b*b;\r\n\tfloat c2 = c*c;\r\n\tfloat d2 = d*d;\r\n\t\r\n\tM[0][0] = a2 + b2 - c2 - d2;\r\n\tM[0][1] = 2.f*(b*c + a*d);\r\n\tM[0][2] = 2.f*(b*d - a*c);\r\n\tM[0][3] = 0.f;\r\n\r\n\tM[1][0] = 2*(b*c - a*d);\r\n\tM[1][1] = a2 - b2 + c2 - d2;\r\n\tM[1][2] = 2.f*(c*d + a*b);\r\n\tM[1][3] = 0.f;\r\n\r\n\tM[2][0] = 2.f*(b*d + a*c);\r\n\tM[2][1] = 2.f*(c*d - a*b);\r\n\tM[2][2] = a2 - b2 - c2 + d2;\r\n\tM[2][3] = 0.f;\r\n\r\n\tM[3][0] = M[3][1] = M[3][2] = 0.f;\r\n\tM[3][3] = 1.f;\r\n}\r\n\r\nstatic inline void mat4x4o_mul_quat(mat4x4 R, mat4x4 M, quat q)\r\n{\r\n/*  XXX: The way this is written only works for othogonal matrices. */\r\n/* TODO: Take care of non-orthogonal case. */\r\n\tquat_mul_vec3(R[0], q, M[0]);\r\n\tquat_mul_vec3(R[1], q, M[1]);\r\n\tquat_mul_vec3(R[2], q, M[2]);\r\n\r\n\tR[3][0] = R[3][1] = R[3][2] = 0.f;\r\n\tR[3][3] = 1.f;\r\n}\r\nstatic inline void quat_from_mat4x4(quat q, mat4x4 M)\r\n{\r\n\tfloat r=0.f;\r\n\tint i;\r\n\r\n\tint perm[] = { 0, 1, 2, 0, 1 };\r\n\tint *p = perm;\r\n\r\n\tfor(i = 0; i<3; i++) {\r\n\t\tfloat m = M[i][i];\r\n\t\tif( m < r )\r\n\t\t\tcontinue;\r\n\t\tm = r;\r\n\t\tp = &perm[i];\r\n\t}\r\n\r\n\tr = sqrtf(1.f + M[p[0]][p[0]] - M[p[1]][p[1]] - M[p[2]][p[2]] );\r\n\r\n\tif(r < 1e-6) {\r\n\t\tq[0] = 1.f;\r\n\t\tq[1] = q[2] = q[3] = 0.f;\r\n\t\treturn;\r\n\t}\r\n\r\n\tq[0] = r/2.f;\r\n\tq[1] = (M[p[0]][p[1]] - M[p[1]][p[0]])/(2.f*r);\r\n\tq[2] = (M[p[2]][p[0]] - M[p[0]][p[2]])/(2.f*r);\r\n\tq[3] = (M[p[2]][p[1]] - M[p[1]][p[2]])/(2.f*r);\r\n}\r\n\r\n#endif\r\n"
  },
  {
    "path": "include/bakkesmod/wrappers/modals/ModalWrapper.h",
    "content": "#pragma once\n#include \"../Engine/ObjectWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT ModalWrapper : public ObjectWrapper\n{\npublic:\n\tCONSTRUCTORS(ModalWrapper)\n\n\tvoid ShowModal() const;\n\tvoid CloseModal();\n\tvoid SetColor(float r, float g, float b);\n\tvoid SetIcon(const std::string& iconName);\n\tvoid SetBody(const std::string& bodyHtml);\n\tvoid AddButton(const std::string& button_text, bool is_cancel_button, std::function<void()> click_callback = nullptr);\n\n\nprivate:\n\tPIMPL\n};\n\n\n"
  },
  {
    "path": "include/bakkesmod/wrappers/modals/TextInputModalWrapper.h",
    "content": "﻿#pragma once\n#include \"ModalWrapper.h\"\n\nclass BAKKESMOD_PLUGIN_IMPORT TextInputModalWrapper : public ModalWrapper\n{\npublic:\n\tCONSTRUCTORS(TextInputModalWrapper)\n\t\n\tvoid SetTextInput(const std::string& defaultText, int32_t max_text_length, bool password, std::function<void(std::string, bool)> input_callback);\n\nprivate:\n\tPIMPL\n};\n"
  },
  {
    "path": "include/bakkesmod/wrappers/replaywrapper.h",
    "content": "#pragma once\r\n#include \"./GameEvent/ServerWrapper.h\"\r\nclass BAKKESMOD_PLUGIN_IMPORT ReplayWrapper : public ServerWrapper\r\n{\r\npublic:\r\n\tReplayWrapper(std::uintptr_t server, std::uintptr_t gameinfo, std::uintptr_t replaydirector);\r\n\tReplayWrapper(const ReplayWrapper& other);\r\n\tReplayWrapper& operator=(ReplayWrapper rhs);\r\n\t~ReplayWrapper();\r\n\tActorWrapper GetViewTarget();\r\n\tfloat GetReplayTimeElapsed();\r\n\tint GetReplayFPS();\r\n\tint GetCurrentReplayFrame();\r\n\tvoid AddKeyFrame(int frame, string name);\r\n\tvoid RemoveKeyFrame(int frame);\r\n\tvoid SkipToFrame(int frame);\r\n\tvoid SkipToTime(float time);\r\n\t\r\n\tvoid StartPlaybackAtFrame(int frame);\r\n\tvoid StartPlaybackAtTime(float time);\r\nprivate:\r\n\tPIMPL\r\n};"
  },
  {
    "path": "include/bakkesmod/wrappers/wrapperstructs.h",
    "content": "#pragma once\r\n//#include \"../shared.h\"\r\n\r\n#include \"linmath.h\"\r\n#include <map>\r\n#include <string>\r\n#include <algorithm>\r\n\r\n#include \"../core/compiler_toggles.h\"\r\n#include \"bakkesmod/plugin/bakkesmodsdk.h\"\r\n\r\n#ifndef CONST_RadToUnrRot\r\n#define CONST_RadToUnrRot    10430.3783504704527f\r\n#endif\r\n\r\n#ifndef CONST_UnrRotToRad\r\n#define CONST_UnrRotToRad    0.00009587379924285f\r\n#endif\r\n\r\n#ifndef CONST_DegToUnrRot\r\n#define CONST_DegToUnrRot    182.0444f\r\n#endif\r\n\r\n#ifndef CONST_PI_D\r\n#define CONST_PI_D           3.14159265358979323846\r\n#endif\r\n\r\n#ifndef CONST_PI_F\r\n#define CONST_PI_F           3.1415926f\r\n#endif\r\n\r\n\r\nenum ToastType\r\n{\r\n    ToastType_Info = 0,\r\n    ToastType_OK = 1,\r\n    ToastType_Warning = 2,\r\n    ToastType_Error = 3\r\n};\r\n\r\n#pragma pack ( push, 0x8 )\r\nstruct FVector;\r\nstruct FRotator;\r\n\r\n// #Vector\r\n//Forward declarations of Vector non-member operator overloads\r\nstruct Vector;\r\ninline Vector operator+(const Vector v1, const Vector v2);\r\ninline Vector operator-(const Vector v1, const Vector v2);\r\ninline Vector operator*(const Vector v1, const Vector v2);\r\ninline Vector operator/(const Vector v1, const Vector v2);\r\ninline Vector operator+(const Vector v1, const float f);\r\ninline Vector operator-(const Vector v1, const float f);\r\ninline Vector operator*(const Vector v1, const float f);\r\ninline Vector operator/(const Vector v1, const float f);\r\n\r\nstruct Vector {\r\n    float X, Y, Z;\r\n\r\n    Vector(FVector v);\r\n    Vector(float x, float y, float z) : X(x), Y(y), Z(z) {}\r\n    Vector(float def) : X(def), Y(def), Z(def) {}\r\n    Vector() : Vector(0.0) {}\r\n    operator FVector();\r\n    explicit operator FVector() const;\r\n\r\n    //Vector member operator overloads\r\n    inline Vector operator+=(const Vector v2) {\r\n        X += v2.X;\r\n        Y += v2.Y;\r\n        Z += v2.Z;\r\n        return *this;\r\n    }\r\n    inline Vector operator-=(const Vector v2) {\r\n        X -= v2.X;\r\n        Y -= v2.Y;\r\n        Z -= v2.Z;\r\n        return *this;\r\n    }\r\n    inline Vector operator*=(const Vector v2) {\r\n        X *= v2.X;\r\n        Y *= v2.Y;\r\n        Z *= v2.Z;\r\n        return *this;\r\n    }\r\n    inline Vector operator/=(const Vector v2) {\r\n        X /= v2.X;\r\n        Y /= v2.Y;\r\n        Z /= v2.Z;\r\n        return *this;\r\n    }\r\n    inline Vector operator+=(const float f) {\r\n        X += f;\r\n        Y += f;\r\n        Z += f;\r\n        return *this;\r\n    }\r\n    inline Vector operator-=(const float f) {\r\n        X -= f;\r\n        Y -= f;\r\n        Z -= f;\r\n        return *this;\r\n    }\r\n    inline Vector operator*=(const float f) {\r\n        X *= f;\r\n        Y *= f;\r\n        Z *= f;\r\n        return *this;\r\n    }\r\n    inline Vector operator/=(const float f) {\r\n        X /= f;\r\n        Y /= f;\r\n        Z /= f;\r\n        return *this;\r\n    }\r\n\r\n    inline float magnitude() const\r\n    {\r\n        return sqrtf(X * X + Y * Y + Z * Z);\r\n    }\r\n\r\n    inline void normalize()\r\n    {\r\n        float magnitudez = magnitude();\r\n        X = X / magnitudez;\r\n        Y = Y / magnitudez;\r\n        Z = Z / magnitudez;\r\n    }\r\n\r\n    inline Vector getNormalized()\r\n    {\r\n        Vector normalized = *this;\r\n        normalized.normalize();\r\n        return normalized;\r\n    }\r\n\r\n    inline Vector clone() const\r\n    {\r\n        return Vector(X, Y, Z);\r\n    }\r\n\r\n    static inline float dot(const Vector v1, const Vector v2)\r\n    {\r\n        return v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z;\r\n    }\r\n\r\n    static inline Vector cross(const Vector v1, const Vector v2)\r\n    {\r\n        float x = v1.Y * v2.Z - v1.Z * v2.Y;\r\n        float y = v1.Z * v2.X - v1.X * v2.Z;\r\n        float z = v1.X * v2.Y - v1.Y * v2.X;\r\n        return Vector(x, y, z);\r\n    }\r\n\r\n    static inline Vector lerp(const Vector v1, const Vector v2, const float t)\r\n    {\r\n        float x = (1.0f - t) * v1.X + t * v2.X;\r\n        float y = (1.0f - t) * v1.Y + t * v2.Y;\r\n        float z = (1.0f - t) * v1.Z + t * v2.Z;\r\n        return Vector(x, y, z);\r\n    }\r\n\r\n    static inline Vector slerp(const Vector v1, const Vector v2, const float t)\r\n    {\r\n        Vector a = v1.clone();\r\n        Vector b = v2.clone();\r\n        \r\n        float dot = Vector::dot(a, b);\r\n        \r\n        float theta = acosf(dot) * t;\r\n        \r\n        Vector relVector = b - (a * dot);\r\n        relVector.normalize();\r\n        float cosTheta = cosf(theta);\r\n        float sinTheta = sinf(theta);\r\n        return a * cosTheta + relVector * sinTheta;\r\n    }\r\n};\r\n\r\n//Vector non-member operator overloads\r\ninline Vector operator+(const Vector v1, const Vector v2) {\r\n    return Vector(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z);\r\n}\r\n\r\ninline Vector operator-(const Vector v1, const Vector v2) {\r\n    return Vector(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z);\r\n}\r\n\r\ninline Vector operator*(const Vector v1, const Vector v2) {\r\n    return Vector(v1.X * v2.X, v1.Y * v2.Y, v1.Z * v2.Z);\r\n}\r\n\r\ninline Vector operator/(const Vector v1, const Vector v2) {\r\n    return Vector(v1.X / v2.X, v1.Y / v2.Y, v1.Z / v2.Z);\r\n}\r\n\r\ninline Vector operator+(const Vector v1, const float f) {\r\n    return Vector(v1.X + f, v1.Y + f, v1.Z + f);\r\n}\r\n\r\ninline Vector operator-(const Vector v1, const float f) {\r\n    return Vector(v1.X - f, v1.Y - f, v1.Z - f);\r\n}\r\n\r\ninline Vector operator*(const Vector v1, const float f) {\r\n    return Vector(v1.X * f, v1.Y * f, v1.Z * f);\r\n}\r\n\r\ninline Vector operator/(const Vector v1, const float f) {\r\n    return Vector(v1.X / f, v1.Y / f, v1.Z / f);\r\n}\r\n\r\n\r\n// #Rotator\r\n//Forward declarations of Rotator non-member operator overloads\r\nstruct Rotator;\r\ninline Rotator operator+(const Rotator r1, const Rotator r2);\r\ninline Rotator operator-(const Rotator r1, const Rotator r2);\r\ninline Rotator operator*(const Rotator r1, const Rotator r2);\r\ninline Rotator operator/(const Rotator r1, const Rotator r2);\r\n\r\nstruct Rotator {\r\n    int Pitch, Yaw, Roll;\r\n    //Player rotation Min(-16364, -32768, -32768)\r\n    //Player rotation Max(16340, 32764, 32764)\r\n\r\n    Rotator(FRotator r);\r\n    Rotator(int pitch, int yaw, int roll) : Pitch(pitch), Yaw(yaw), Roll(roll) {}\r\n    Rotator(int def) : Pitch(def), Yaw(def), Roll(def) {}\r\n    Rotator() : Rotator(0) {}\r\n    operator FRotator();\r\n    explicit operator FRotator() const;\r\n\r\n    inline Rotator operator+=(const Rotator r2) {\r\n        Pitch += r2.Pitch;\r\n        Yaw   += r2.Yaw;\r\n        Roll  += r2.Roll;\r\n        return *this;\r\n    }\r\n    inline Rotator operator-=(const Rotator r2) {\r\n        Pitch -= r2.Pitch;\r\n        Yaw   -= r2.Yaw;\r\n        Roll  -= r2.Roll;\r\n        return *this;\r\n    }\r\n    inline Rotator operator*=(const Rotator r2) {\r\n        Pitch *= r2.Pitch;\r\n        Yaw   *= r2.Yaw;\r\n        Roll  *= r2.Roll;\r\n        return *this;\r\n    }\r\n    inline Rotator operator/=(const Rotator r2) {\r\n        Pitch /= r2.Pitch;\r\n        Yaw   /= r2.Yaw;\r\n        Roll  /= r2.Roll;\r\n        return *this;\r\n    }\r\n};\r\n\r\nstatic inline int fixRotator(int newRotation) {// F THIS FOR NOW\r\n    return newRotation;\r\n    //newRotation = (((int)newRotation + 32768) % (32768 + 32764)) - 32768;\r\n    //newRotation = (((int)newRotation - 32764) % (32768 + 32764)) + 32764;\r\n    ////if (newRotation >= 32767) {\r\n    ////    newRotation -= 65535;\r\n    ////    //newRotation = -32767 + (newRotation - 32767);\r\n    ////}\r\n    ////else if (newRotation <= -32767) { //-35000 \r\n    ////    newRotation += 65535;\r\n    ////    //newRotation = 32767 + (newRotation + 32767);\r\n    ////}\r\n    //return newRotation;\r\n}\r\n\r\nstatic inline int fixPitch(int newRotation) {// F THIS FOR NOW\r\n    return newRotation;\r\n    //newRotation = (((int)newRotation + 16384) % (32768)) - 16384;\r\n    //newRotation = (((int)newRotation - 16384) % (32768)) + 16384;\r\n\r\n    ////if (newRotation >= 16383) {\r\n    ////    newRotation -= 32767;\r\n    ////    //newRotation = -16383 + (newRotation - 16383);\r\n    ////}\r\n    ////else if (newRotation <= -16383) { //-35000 \r\n    ////    newRotation += 32767;\r\n    ////    //newRotation = 16383 + (newRotation + 16383);\r\n    ////}\r\n    //return newRotation;\r\n}\r\n\r\n//Rotator non-member operator overloads\r\ninline Rotator operator+(const Rotator r1, const Rotator r2) {\r\n    return Rotator(fixPitch(r1.Pitch + r2.Pitch), fixRotator(r1.Yaw + r2.Yaw), fixRotator(r1.Roll + r2.Roll));\r\n}\r\n\r\ninline Rotator operator-(const Rotator r1, const Rotator r2) {\r\n    return Rotator(fixPitch(r1.Pitch - r2.Pitch), fixRotator(r1.Yaw - r2.Yaw), fixRotator(r1.Roll - r2.Roll));\r\n}\r\n\r\ninline Rotator operator*(const Rotator r1, const Rotator r2) {\r\n    return Rotator(fixPitch(r1.Pitch * r2.Pitch), fixRotator(r1.Yaw * r2.Yaw), fixRotator(r1.Roll * r2.Roll));\r\n}\r\n\r\ninline Rotator operator/(const Rotator r1, const Rotator r2) {\r\n    return Rotator(fixPitch(r1.Pitch / r2.Pitch), fixRotator(r1.Yaw / r2.Yaw), fixRotator(r1.Roll / r2.Roll));\r\n}\r\n\r\n\r\n// #VectorRotatorConversions\r\nstatic Rotator inline VectorToRotator(const Vector vVector)\r\n{\r\n    Rotator rRotation;\r\n\r\n    rRotation.Yaw = static_cast<int>(atan2(vVector.Y, vVector.X) * CONST_RadToUnrRot);\r\n    rRotation.Pitch = static_cast<int>(atan2(vVector.Z, sqrtf(vVector.X * vVector.X + vVector.Y * vVector.Y)) * CONST_RadToUnrRot);\r\n    rRotation.Roll = 0;\r\n\r\n    return rRotation;\r\n}\r\n\r\nstatic inline Vector RotatorToVector(const Rotator R)\r\n{\r\n    Vector vec;\r\n\r\n    float fYaw = R.Yaw * static_cast<float>(CONST_UnrRotToRad);\r\n    float fPitch = R.Pitch * static_cast<float>(CONST_UnrRotToRad);\r\n    float CosPitch = cosf(fPitch);\r\n    vec.X = cosf(fYaw) * CosPitch;\r\n    vec.Y = sinf(fYaw) * CosPitch;\r\n    vec.Z = sinf(fPitch);\r\n    \r\n    return vec;\r\n}\r\n\r\n\r\n// #Quat\r\n//Forward declaration of Quat non-member operator overload\r\nstruct Quat;\r\ninline Quat operator*(const Quat q1, const Quat q2);\r\n\r\nstruct Quat {\r\n    float X, Y, Z, W;\r\n\r\n    Quat(float w, float x, float y, float z) : W(w), X(x), Y(y), Z(z) {}\r\n    Quat() : Quat(1.0, 0.0, 0.0, 0.0) {}\r\n\r\n    inline Quat conjugate() const\r\n    {\r\n        return Quat(W, -X, -Y, -Z);\r\n    }\r\n\r\n    inline Quat normalize()\r\n    {\r\n        float mag = sqrtf(X*X + Y*Y + Z*Z + W*W);\r\n        X /= mag;\r\n        Y /= mag;\r\n        Z /= mag;\r\n        return *this;\r\n    }\r\n\r\n    inline Quat operator*=(const Quat q2)\r\n    {\r\n        float mulW = W * q2.W;\r\n        mulW -= X * q2.X;\r\n        mulW -= Y * q2.Y;\r\n        mulW -= Z * q2.Z;\r\n\r\n        float mulX = W * q2.X;\r\n        mulX += X * q2.W;\r\n        mulX += Y * q2.Z;\r\n        mulX -= Z * q2.Y;\r\n\r\n        float mulY = W * q2.Y;\r\n        mulY -= X * q2.Z;\r\n        mulY += Y * q2.W;\r\n        mulY += Z * q2.X;\r\n\r\n        float mulZ = W * q2.Z;\r\n        mulZ += X * q2.Y;\r\n        mulZ -= Y * q2.X;\r\n        mulZ += Z * q2.W;\r\n\r\n        W = mulW;\r\n        X = mulX;\r\n        Y = mulY;\r\n        Z = mulZ;\r\n\r\n        return *this;\r\n    }\r\n};\r\n\r\n//Quat non-member operator overload\r\ninline Quat operator*(const Quat q1, const Quat q2)\r\n{\r\n    float mulW = q1.W * q2.W;\r\n    mulW -= q1.X * q2.X;\r\n    mulW -= q1.Y * q2.Y;\r\n    mulW -= q1.Z * q2.Z;\r\n\r\n    float mulX = q1.W * q2.X;\r\n    mulX += q1.X * q2.W;\r\n    mulX += q1.Y * q2.Z;\r\n    mulX -= q1.Z * q2.Y;\r\n\r\n    float mulY = q1.W * q2.Y;\r\n    mulY -= q1.X * q2.Z;\r\n    mulY += q1.Y * q2.W;\r\n    mulY += q1.Z * q2.X;\r\n\r\n    float mulZ = q1.W * q2.Z;\r\n    mulZ += q1.X * q2.Y;\r\n    mulZ -= q1.Y * q2.X;\r\n    mulZ += q1.Z * q2.W;\r\n\r\n    return Quat(mulW, mulX, mulY, mulZ);\r\n}\r\n\r\nstatic inline Quat QuatSlerp(const Quat q1, const Quat q2, float percent)\r\n{\r\n    //percent range: 0-1\r\n    //https://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/index.htm\r\n    float dot = q1.W*q2.W + q1.X*q2.X + q1.Y*q2.Y + q1.Z*q2.Z;\r\n    // if qa=qb or qa=-qb then theta = 0 and we can return qa\r\n    if (abs(dot) >= 1.f)\r\n    {\r\n        return q1;\r\n    }\r\n    // Calculate temporary values.\r\n    float halfTheta = acosf(dot);\r\n    float sinHalfTheta = sqrtf(1.f - dot*dot);\r\n    // if theta = 180 degrees then result is not fully defined\r\n    // we could rotate around any axis normal to qa or qb\r\n    if (fabsf(sinHalfTheta) < 0.001f)\r\n    {\r\n        Quat q;\r\n        q.W = q1.W * 0.5f + q2.W * 0.5f;\r\n        q.X = q1.X * 0.5f + q2.X * 0.5f;\r\n        q.Y = q1.Y * 0.5f + q2.Y * 0.5f;\r\n        q.Z = q1.Z * 0.5f + q2.Z * 0.5f;\r\n        return q;\r\n    }\r\n    float ratioA = sinf((1.f - percent) * halfTheta) / sinHalfTheta;\r\n    float ratioB = sinf(percent * halfTheta) / sinHalfTheta;\r\n\r\n    Quat q;\r\n    q.W = (q1.W * ratioA + q2.W * ratioB);\r\n    q.X = (q1.X * ratioA + q2.X * ratioB);\r\n    q.Y = (q1.Y * ratioA + q2.Y * ratioB);\r\n    q.Z = (q1.Z * ratioA + q2.Z * ratioB);\r\n    \r\n    return q;\r\n}\r\n\r\n\r\n// #RotateVector\r\nstatic inline Vector RotateVectorWithQuat(const Vector v, const Quat q)\r\n{\r\n    Quat p = Quat(0 ,v.X ,v.Y ,v.Z);\r\n    Quat result = (q * p) * q.conjugate();\r\n\r\n    return Vector{result.X, result.Y, result.Z};\r\n}\r\n\r\n\r\n// #RotatorQuatConversions\r\nstatic inline Quat RotatorToQuat(const Rotator rot)\r\n{\r\n    float rotatorToRadian = ((CONST_PI_F / 180.f) * .5f) / CONST_DegToUnrRot;\r\n    float sinPitch = sinf(rot.Pitch * rotatorToRadian);\r\n    float cosPitch = cosf(rot.Pitch * rotatorToRadian);\r\n    float sinYaw   = sinf(rot.Yaw   * rotatorToRadian);\r\n    float cosYaw   = cosf(rot.Yaw   * rotatorToRadian);\r\n    float sinRoll  = sinf(rot.Roll  * rotatorToRadian);\r\n    float cosRoll  = cosf(rot.Roll  * rotatorToRadian);\r\n    \r\n    Quat convertedQuat;\r\n    convertedQuat.X = (cosRoll  * sinPitch * sinYaw) - (sinRoll * cosPitch * cosYaw);\r\n    convertedQuat.Y = (-cosRoll * sinPitch * cosYaw) - (sinRoll * cosPitch * sinYaw);\r\n    convertedQuat.Z = (cosRoll  * cosPitch * sinYaw) - (sinRoll * sinPitch * cosYaw);\r\n    convertedQuat.W = (cosRoll  * cosPitch * cosYaw) + (sinRoll * sinPitch * sinYaw);\r\n\r\n    return convertedQuat;\r\n}\r\n\r\nstatic inline Rotator QuatToRotator(const Quat q)\r\n{\r\n    //From Arator's HelperFunctions\r\n    Vector fwd   = RotateVectorWithQuat(Vector(1, 0, 0), q);\r\n    Vector right = RotateVectorWithQuat(Vector(0, 1, 0), q);\r\n    Vector up    = RotateVectorWithQuat(Vector(0, 0, 1), q);\r\n    fwd.normalize();\r\n    right.normalize();\r\n    up.normalize();\r\n\r\n    //Pitch\r\n    float pitch_f = asinf(fwd.Z);\r\n    int PITCH = static_cast<int>((pitch_f / (CONST_PI_F / 2.f)) * 16384.f);\r\n\r\n    //Yaw\r\n    float hor_mag = sqrtf(fwd.X * fwd.X + fwd.Y * fwd.Y);\r\n    float fwd_y = asinf(fwd.Y / hor_mag);\r\n    if (fwd_y >= 0)\r\n    {\r\n        if (fwd.X < 0)\r\n            fwd_y = CONST_PI_F - fwd_y;\r\n    }\r\n    else\r\n    {\r\n        if (fwd.X < 0)\r\n            fwd_y = -CONST_PI_F - fwd_y;\r\n    }\r\n    int YAW = static_cast<int>((fwd_y / CONST_PI_F) * 32768.f);\r\n\r\n    //Roll\r\n    Vector vert = (up.Z < 0) ? Vector(0, 0, -1) : Vector(0, 0, 1);\r\n    Vector hor_right = Vector::cross(fwd, vert) * -1;// left-handed coordinate system\r\n    hor_right.normalize();\r\n\r\n    float roll_cos = Vector::dot(hor_right, right);\r\n    float roll_f = acosf(roll_cos);\r\n    float up_f = asinf(up.Z);\r\n    \r\n    if (right.Z >= 0)\r\n    {\r\n        if (up.Z >= 0)\r\n            roll_f = -roll_f;\r\n        else\r\n            roll_f  = -CONST_PI_F + roll_f;\r\n    }\r\n    else\r\n    {\r\n        if (up.Z < 0)\r\n            roll_f = CONST_PI_F - roll_f;\r\n    }\r\n    int ROLL = static_cast<int>((roll_f / CONST_PI_F) * 32768.f);\r\n\r\n    return Rotator(PITCH, YAW, ROLL);\r\n}\r\n\r\n\r\n\r\n// #Vector2\r\n//Forward declarations of Vector2 non-member operator overloads\r\nstruct Vector2;\r\ninline Vector2 operator+(const Vector2 v1, const Vector2 v2);\r\ninline Vector2 operator-(const Vector2 v1, const Vector2 v2);\r\ninline Vector2 operator*(const Vector2 v1, const Vector2 v2);\r\ninline Vector2 operator/(const Vector2 v1, const Vector2 v2);\r\ninline Vector2 operator+(const Vector2 v1, const int i);\r\ninline Vector2 operator-(const Vector2 v1, const int i);\r\ninline Vector2 operator*(const Vector2 v1, const int i);\r\ninline Vector2 operator/(const Vector2 v1, const int i);\r\n\r\nstruct Vector2 {\r\n    int X, Y;\r\n\r\n    Vector2 minus(const Vector2 other) const {\r\n        return{ X - other.X,  Y - other.Y };\r\n    }\r\n\r\n    inline Vector2 operator+=(const Vector2 v2) {\r\n        X += v2.X;\r\n        Y += v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator-=(const Vector2 v2) {\r\n        X -= v2.X;\r\n        Y -= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator*=(const Vector2 v2) {\r\n        X *= v2.X;\r\n        Y *= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator/=(const Vector2 v2) {\r\n        X /= v2.X;\r\n        Y /= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator+=(const int i) {\r\n        X += i;\r\n        Y += i;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator-=(const int i) {\r\n        X -= i;\r\n        Y -= i;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator*=(const int i) {\r\n        X *= i;\r\n        Y *= i;\r\n        return *this;\r\n    }\r\n    inline Vector2 operator/=(const int i) {\r\n        X /= i;\r\n        Y /= i;\r\n        return *this;\r\n    }\r\n};\r\n\r\n//Vector2 non-member operator overloads\r\ninline Vector2 operator+(const Vector2 v1, const Vector2 v2) {\r\n    return Vector2{v1.X + v2.X, v1.Y + v2.Y};\r\n}\r\n\r\ninline Vector2 operator-(const Vector2 v1, const Vector2 v2) {\r\n    return Vector2{v1.X - v2.X, v1.Y - v2.Y};\r\n}\r\n\r\ninline Vector2 operator*(const Vector2 v1, const Vector2 v2) {\r\n    return Vector2{v1.X * v2.X, v1.Y * v2.Y};\r\n}\r\n\r\ninline Vector2 operator/(const Vector2 v1, const Vector2 v2) {\r\n    return Vector2{v1.X / v2.X, v1.Y / v2.Y};\r\n}\r\n\r\ninline Vector2 operator+(const Vector2 v1, const int i) {\r\n    return Vector2{v1.X + i, v1.Y + i};\r\n}\r\n\r\ninline Vector2 operator-(const Vector2 v1, const int i) {\r\n    return Vector2{v1.X - i, v1.Y - i};\r\n}\r\n\r\ninline Vector2 operator*(const Vector2 v1, const int i) {\r\n    return Vector2{v1.X * i, v1.Y * i};\r\n}\r\n\r\ninline Vector2 operator/(const Vector2 v1, const int i) {\r\n    return Vector2{v1.X / i, v1.Y / i};\r\n}\r\n\r\n\r\n\r\n// #Vector2F\r\n//Forward declarations of Vector2F non-member operator overloads\r\nstruct Vector2F;\r\ninline Vector2F operator+(const Vector2F v1, const Vector2 v2);\r\ninline Vector2F operator-(const Vector2F v1, const Vector2 v2);\r\ninline Vector2F operator*(const Vector2F v1, const Vector2 v2);\r\ninline Vector2F operator/(const Vector2F v1, const Vector2 v2);\r\ninline Vector2F operator+(const Vector2F v1, const Vector2F v2);\r\ninline Vector2F operator-(const Vector2F v1, const Vector2F v2);\r\ninline Vector2F operator*(const Vector2F v1, const Vector2F v2);\r\ninline Vector2F operator/(const Vector2F v1, const Vector2F v2);\r\ninline Vector2F operator+(const Vector2F v1, const float f);\r\ninline Vector2F operator-(const Vector2F v1, const float f);\r\ninline Vector2F operator*(const Vector2F v1, const float f);\r\ninline Vector2F operator/(const Vector2F v1, const float f);\r\n\r\nstruct Vector2F {\r\n    float X, Y;\r\n\r\n    Vector2F minus(const Vector2 other) const {\r\n        return{ X - static_cast<float>(other.X),  Y - static_cast<float>(other.Y) };\r\n    }\r\n\r\n    Vector2F minus(const Vector2F other) const {\r\n        return{ X - other.X,  Y - other.Y };\r\n    }\r\n\r\n    inline Vector2F operator+=(const Vector2 v2) {\r\n        X += v2.X;\r\n        Y += v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator-=(const Vector2 v2) {\r\n        X -= v2.X;\r\n        Y -= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator*=(const Vector2 v2) {\r\n        X *= v2.X;\r\n        Y *= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator/=(const Vector2 v2) {\r\n        X /= v2.X;\r\n        Y /= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator+=(const Vector2F v2) {\r\n        X += v2.X;\r\n        Y += v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator-=(const Vector2F v2) {\r\n        X -= v2.X;\r\n        Y -= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator*=(const Vector2F v2) {\r\n        X *= v2.X;\r\n        Y *= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator/=(const Vector2F v2) {\r\n        X /= v2.X;\r\n        Y /= v2.Y;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator+=(const float f) {\r\n        X += f;\r\n        Y += f;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator-=(const float f) {\r\n        X -= f;\r\n        Y -= f;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator*=(const float f) {\r\n        X *= f;\r\n        Y *= f;\r\n        return *this;\r\n    }\r\n    inline Vector2F operator/=(const float f) {\r\n        X /= f;\r\n        Y /= f;\r\n        return *this;\r\n    }\r\n};\r\n\r\n//Vector2F non-member operator overloads\r\ninline Vector2F operator+(const Vector2F v1, const Vector2 v2) {\r\n    return Vector2F{v1.X + v2.X, v1.Y + v2.Y};\r\n}\r\n\r\ninline Vector2F operator-(const Vector2F v1, const Vector2 v2) {\r\n    return Vector2F{v1.X - v2.X, v1.Y - v2.Y};\r\n}\r\n\r\ninline Vector2F operator*(const Vector2F v1, const Vector2 v2) {\r\n    return Vector2F{v1.X * v2.X, v1.Y * v2.Y};\r\n}\r\n\r\ninline Vector2F operator/(const Vector2F v1, const Vector2 v2) {\r\n    return Vector2F{v1.X / v2.X, v1.Y / v2.Y};\r\n}\r\n\r\ninline Vector2F operator+(const Vector2F v1, const Vector2F v2) {\r\n    return Vector2F{v1.X + v2.X, v1.Y + v2.Y};\r\n}\r\n\r\ninline Vector2F operator-(const Vector2F v1, const Vector2F v2) {\r\n    return Vector2F{v1.X - v2.X, v1.Y - v2.Y};\r\n}\r\n\r\ninline Vector2F operator*(const Vector2F v1, const Vector2F v2) {\r\n    return Vector2F{v1.X * v2.X, v1.Y * v2.Y};\r\n}\r\n\r\ninline Vector2F operator/(const Vector2F v1, const Vector2F v2) {\r\n    return Vector2F{v1.X / v2.X, v1.Y / v2.Y};\r\n}\r\n\r\ninline Vector2F operator+(const Vector2F v1, const float f) {\r\n    return Vector2F{v1.X + f, v1.Y + f};\r\n}\r\n\r\ninline Vector2F operator-(const Vector2F v1, const float f) {\r\n    return Vector2F{v1.X - f, v1.Y - f};\r\n}\r\n\r\ninline Vector2F operator*(const Vector2F v1, const float f) {\r\n    return Vector2F{v1.X * f, v1.Y * f};\r\n}\r\n\r\ninline Vector2F operator/(const Vector2F v1, const float f) {\r\n    return Vector2F{v1.X / f, v1.Y / f};\r\n}\r\n\r\n\r\n\r\n// #LinearColor\r\n//Forward declarations of LinearColor non-member operator overloads\r\nstruct LinearColor;\r\nstruct FLinearColor;\r\ninline LinearColor operator*(const LinearColor c1, const float f);\r\ninline LinearColor operator/(const LinearColor c1, const float f);\r\ninline bool operator==(const LinearColor c1, const LinearColor c2);\r\n\r\n\r\nstruct LinearColor\r\n{\r\n\tLinearColor() = default;\r\n\texplicit LinearColor(const FLinearColor& r);\r\n\r\n\tLinearColor(float r, float g, float b, float a):\r\n\t\tR{r},G{g},B{b},A{a} {}\r\n\r\n\texplicit operator FLinearColor() const;\r\n\r\n\tfloat R, G, B, A;\r\n\r\n\tinline LinearColor operator*=(const float f)\r\n\t{\r\n\t\tR *= f;\r\n\t\tG *= f;\r\n\t\tB *= f;\r\n\t\tA *= f;\r\n\t\treturn *this;\r\n\t}\r\n\r\n\tinline LinearColor operator/=(const float f)\r\n\t{\r\n\t\tR /= f;\r\n\t\tG /= f;\r\n\t\tB /= f;\r\n\t\tA /= f;\r\n\t\treturn *this;\r\n\t}\r\n};\r\n\r\n//LinearColor non-member operator overloads\r\ninline LinearColor operator*(const LinearColor c1, const float f) {\r\n    return LinearColor{c1.R * f, c1.G * f, c1.B * f, c1.A * f};\r\n}\r\n\r\ninline LinearColor operator/(const LinearColor c1, const float f) {\r\n    return LinearColor{c1.R / f, c1.G / f, c1.B / f, c1.A / f};\r\n}\r\n\r\ninline bool operator==(const LinearColor c1, const LinearColor c2) {\r\n    return c1.R == c2.R &&\r\n           c1.G == c2.G &&\r\n           c1.B == c2.B &&\r\n           c1.A == c2.A;\r\n}\r\n\r\ninline bool operator!=(const LinearColor c1, const LinearColor c2) {\r\n    return !(c1 == c2);\r\n}\r\n\r\n\r\n\r\n// #OtherStructs\r\nstruct PredictionInfo {\r\n    float Time;\r\n    float ArchTopTime;\r\n    Vector Location;\r\n    Vector Velocity;\r\n    Vector ArchTop;\r\n    Vector ArchTopVelocity;\r\n    unsigned long bHitWall : 1;\r\n    unsigned long bHitGround : 1;\r\n};\r\n\r\nstruct SteamID\r\n{\r\n    unsigned long long ID;\r\n};\r\n\r\nstruct SkillRating {\r\n    float Mu;\r\n    float Sigma;\r\n};\r\n\r\nstruct SkillRank\r\n{\r\n    int Tier;\r\n    int Division;\r\n    int MatchesPlayed;\r\n};\r\n\r\nstruct FColor;\r\n\r\nstruct UnrealColor\r\n{\r\n\tunsigned char B;\r\n\tunsigned char G;\r\n\tunsigned char R;\r\n\tunsigned char A;\r\n\r\n\tUnrealColor() = default;\r\n    explicit UnrealColor(const FColor& other);\r\n\texplicit operator FColor() const;\r\n\tUnrealColor(unsigned char b, unsigned char g, unsigned char r, unsigned char a): B{b}, G{g}, R{r}, A{a} {}\r\n\r\n\r\n\tDEFAULTEQUALITY(UnrealColor)\r\n\tDEFAULTCOMPARE(UnrealColor)\r\n};\r\n\r\nstruct ControllerInput {\r\n    float Throttle = .0f;\r\n    float Steer = .0f;\r\n    float Pitch = .0f;\r\n    float Yaw = .0f;\r\n    float Roll = .0f;\r\n    float DodgeForward = .0f;\r\n    float DodgeStrafe = .0f;\r\n    unsigned long Handbrake : 1;\r\n    unsigned long Jump :1;\r\n    unsigned long ActivateBoost : 1;\r\n    unsigned long HoldingBoost : 1;\r\n    unsigned long Jumped : 1;\r\n};\r\n\r\nstruct RecordedSample\r\n{\r\n    float Low;\r\n    float High;\r\n};\r\n\r\nstruct POV {\r\n    Vector location;\r\n    Rotator rotation;\r\n    float FOV;\r\n};\r\n\r\nstruct ViewTarget {\r\n    void* Target;      // ActorWrapper(Target)\r\n    void* Controller;  // PlayerControllerWrapper(Controller)\r\n    struct POV POV;    // \r\n    float AspectRatio; // \r\n    void* PRI;         // PRIWrapper(PRI)\r\n};\r\n\r\nstruct CameraSave\r\n{\r\n    bool InvertSwivelPitch;\r\n    bool CameraShake;\r\n};\r\n\r\nstruct FProfileCameraSettings;\r\n\r\nstruct ProfileCameraSettings\r\n{\r\n    ProfileCameraSettings() = default;\r\n    explicit ProfileCameraSettings(const FProfileCameraSettings& other);\r\n    explicit operator FProfileCameraSettings() const;\r\n\r\n    float FOV;\r\n    float Height;\r\n    float Pitch;\r\n    float Distance;\r\n    float Stiffness;\r\n    float SwivelSpeed;\r\n    float TransitionSpeed;\r\n};\r\n\r\nstruct GamepadSettings\r\n{\r\n    float ControllerDeadzone;\r\n    float DodgeInputThreshold;\r\n    float SteeringSensitivity;\r\n    float AirControlSensitivity;\r\n};\r\n\r\nstruct RBState\r\n{\r\n    Quat Quaternion;\r\n    Vector Location;\r\n    Vector LinearVelocity;\r\n    Vector AngularVelocity;\r\n    float Time;\r\n    unsigned long bSleeping : 1;\r\n    unsigned long bNewData : 1;\r\n};\r\n\r\nstruct WorldContactData\r\n{\r\n    unsigned long bHasContact : 1;\r\n    Vector Location;\r\n    Vector Velocity;\r\n    Vector Normal;\r\n};\r\n\r\nstruct StickyForceData {\r\n    float Ground;\r\n    float Wall;\r\n};\r\n\r\nstruct WheelContactData {\r\n    unsigned long bHasContact : 1;\r\n    unsigned long bHasContactWithWorldGeometry : 1;\r\n    float HasContactChangeTime;\r\n    void* Actor;\r\n    void* Component;\r\n    Vector Location;\r\n    Vector Normal;\r\n    Vector LatDirection;\r\n    Vector LongDirection;\r\n    void* PhysMatProp;\r\n};\r\n\r\nstruct ReplayScoreData\r\n{\r\n    uintptr_t ScoredBy;   //PriWrapper\r\n    uintptr_t AssistedBy; //PriWrapper\r\n    float Speed;\r\n    float Time;\r\n    unsigned char ScoreTeam;\r\n};\r\n\r\nstruct VideoSettings\r\n{\r\n    bool bVsync;\r\n    bool bShowWeatherFX;\r\n    bool bShowLightShafts;\r\n    bool bTranslucentArenaShaders;\r\n    bool bShowLensFlares;\r\n    bool bEnableHDRSideBySideVisualizer;\r\n    bool bUncappedFramerate;\r\n    float HDRBrightnessScale;\r\n    float HDRPaperWhiteScale;\r\n    float HDRGammaScale;\r\n\r\n    int WindowMode;\r\n    std::string Resolution;\r\n    int MaxFPS;\r\n    std::map<std::string, std::string> VideoOptions;\r\n};\r\n\r\nstruct ProductInstanceID\r\n{\r\n\tunsigned long long upper_bits;\r\n\tunsigned long long lower_bits;\r\n\r\n\tfriend bool operator==(const ProductInstanceID& lhs, const ProductInstanceID& rhs)\r\n\t{\r\n\t\treturn lhs.upper_bits == rhs.upper_bits\r\n\t\t\t&& lhs.lower_bits == rhs.lower_bits;\r\n\t}\r\n\r\n\tfriend bool operator!=(const ProductInstanceID& lhs, const ProductInstanceID& rhs)\r\n\t{\r\n\t\treturn !(lhs == rhs);\r\n\t}\r\n};\r\n\r\nstruct BAKKESMOD_PLUGIN_IMPORT GUIDWrapper\r\n{\r\n    GUIDWrapper() = default;\r\n\tGUIDWrapper(int32_t a, int32_t b, int32_t c, int32_t d);\r\n\texplicit GUIDWrapper(const struct FGuid& guid);\r\n    static GUIDWrapper Create();\r\n\r\n\tenum class EGuidFormats : uint8_t\r\n\t{\r\n\t\tDigits =\t\t\t\t\t\t\t0, // Example: 00000000000000000000000000000000\r\n\t\tDigitsWithHyphens =\t\t\t\t\t1, // Example: 00000000-0000-0000-0000-000000000000\r\n\t\tDigitsWithHyphensInBraces =\t\t\t2, // Example: {00000000-0000-0000-0000-000000000000}\r\n\t\tDigitsWithHyphensInParentheses =\t3, // Example: (00000000-0000-0000-0000-000000000000)\r\n\t\tHexValuesInBraces =\t\t\t\t\t4, // Example: {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}\r\n\t\tUniqueObjectGuid =\t\t\t\t\t5, // Example: 00000000-00000000-00000000-00000000\r\n\t};\r\n\tint32_t A = 0, B = 0, C = 0, D = 0;\r\n\r\n    bool IsValid() const;\r\n\tstd::string ToString(EGuidFormats format = EGuidFormats::UniqueObjectGuid) const;\r\n\t\r\n};\r\n\r\n\r\n\r\nstruct TrainingRoundProgress {\r\n    int RoundNumber; \r\n    unsigned char Status; //See: EnumWrapper::GetTrainingRoundAttempts\r\n    unsigned char Padding[0x3];\r\n};\r\n\r\n// #Enums\r\nenum TRADEHOLD\r\n{\r\n    TRADEHOLD_P2P = -2,\r\n    TRADEHOLD_ALL = -1,\r\n    TRADEHOLD_NONE = 0,\r\n};\r\n\r\nenum [[deprecated(\"Not guaranteed to be up to date, use EnumWrapper::GetProductQualities() to future proof your code.\")]] PRODUCTQUALITY\r\n{\r\n    Common = 0,\r\n    Uncommon = 1,\r\n    Rare = 2,\r\n    VeryRare = 3,\r\n    Import = 4,\r\n    Exotic = 5,\r\n    BlackMarket = 6,\r\n    Premium = 7,\r\n    Limited = 8,\r\n    Legacy = 9,\r\n    MAX = 10\r\n};\r\n\r\nenum [[deprecated(\"Not guaranteed to be up to date, use EnumWrapper::GetUnlockMethods() to future proof your code.\")]] UNLOCKMETHOD\r\n{\r\n    Default = 0,\r\n    Drop = 1,\r\n    Special = 2,\r\n    Reward = 3,\r\n    DLC = 4,\r\n    Never = 5,\r\n    MAX_ = 6\r\n};\r\n\r\nenum [[deprecated(\"Not guaranteed to be up to date, use the ProductWrappers to future proof your code.\")]]  CARBODY\r\n{\r\n    CAR_BACKFIRE = 21,\r\n    CAR_BREAKOUT = 22,\r\n    CAR_BREAKOUTTYPES = 1416,\r\n    CAR_OCTANE = 23,\r\n    CAR_OCTANEZSR = 1568,\r\n    CAR_PALADIN = 24,\r\n    CAR_ROADHOG = 25,\r\n    CAR_ROADHOGXL = 1300,\r\n    CAR_GIZMO = 26,\r\n    CAR_SWEETTOOTH = 27, //Will just spawn merc i guess, ps4 exclusive\r\n    CAR_XDEVIL = 28,\r\n    CAR_XDEVILMK2 = 1159,\r\n    CAR_HOTSHOT = 29,\r\n    CAR_MERC = 30,\r\n    CAR_VENOM = 31,\r\n    CAR_TAKUMI = 402,\r\n    CAR_TAKUMIRXT = 1295,\r\n    CAR_DOMINUS = 403,\r\n    CAR_DOMINUSGT = 1018,\r\n    CAR_SCARAB = 404,\r\n    CAR_ZIPPY = 523,\r\n    CAR_DELOREAN = 597,\r\n    CAR_RIPPER = 600,\r\n    CAR_GROG = 607,\r\n    CAR_ARMADILLO = 625, //gears of war car, XBOX exclusive?\r\n    CAR_WARTHOG = 723, //Halo car, XBOX exclusive\r\n    CAR_BATMOBILE = 803,\r\n    CAR_MASAMUNE = 1171,\r\n    CAR_MARAUDER = 1172,\r\n    CAR_AFTERSHOCK = 1286,\r\n    CAR_ESPER = 1317,\r\n    CAR_PROTEUS = 1475,\r\n    CAR_TRITON = 1478,\r\n    CAR_VULCAN = 1533,\r\n    CAR_TWINMILL = 1603,\r\n    CAR_BONESHAKER = 1623,\r\n    CAR_ENDO = 1624,\r\n    CAR_ICECHARGER = 1675,\r\n    CAR_MANTIS = 1691,\r\n    CAR_JOGER619RS = 1856,\r\n    CAR_CENTIO = 1919,\r\n    CAR_ANIMUSGP = 1932,\r\n};\r\n\r\nenum OnlinePlatform\r\n{\r\n    OnlinePlatform_Unknown = 0,\r\n    OnlinePlatform_Steam = 1,\r\n    OnlinePlatform_PS4 = 2,\r\n    OnlinePlatform_PS3 = 3,\r\n    OnlinePlatform_Dingo = 4, //XBox?\r\n    OnlinePlatform_QQ = 5,\r\n    OnlinePlatform_OldNNX = 6,\r\n    OnlinePlatform_NNX = 7,\r\n    OnlinePlatform_PsyNet = 8,\r\n    OnlinePlatform_Deleted = 9,\r\n    OnlinePlatform_WeGame = 10,\r\n    OnlinePlatform_Epic = 11,\r\n    OnlinePlatform_MAX = 12\r\n};\r\n\r\n\r\n\r\n\r\n// #Defines\r\n#define CONSTRUCTORS(name)\\\r\nname(std::uintptr_t mem);\\\r\nname(const name& other);\\\r\nname& operator=(name rhs);\\\r\n~name();\r\n\r\n#define PIMPL \\\r\nstruct Impl;\\\r\n__pragma(warning(suppress:4251));\\\r\nstd::unique_ptr<Impl> pimpl;\r\n\r\n#define GETSETH(type, name) \\\r\nvoid Set##name(type name);\\\r\ntype Get##name();\r\n\r\n#define GETH(type, name)\\\r\ntype Get##name();\r\n\r\n#pragma pack ( pop )"
  },
  {
    "path": "include/utils/customrotator.h",
    "content": "#pragma once\r\n#include \"bakkesmod/plugin/bakkesmodsdk.h\"\r\n#include \"bakkesmod/wrappers/WrapperStructs.h\"\r\n#include \"finiteelement.h\"\r\n\r\n//Player rotation Min(-16364, -32768, -32768)\r\n//Player rotation Max(16340, 32764, 32764)\r\nclass BAKKESMOD_PLUGIN_IMPORT CustomRotator {\r\npublic:\r\n\tFiniteElement<float> Pitch = FiniteElement<float>(0, -16364, 16340);\r\n\tFiniteElement<float> Yaw = FiniteElement<float>(0, -32768, 32764);\r\n\tFiniteElement<float> Roll = FiniteElement<float>(0, -32768, 32764);\r\n\r\n\tCustomRotator(); \r\n\tCustomRotator(float defaultValue);\r\n\tCustomRotator(float pitch, float yaw, float roll); \r\n\tCustomRotator(FiniteElement<float> pitch, FiniteElement<float> yaw, FiniteElement<float> roll);\r\n\tCustomRotator(struct Rotator& rot);\r\n\tCustomRotator(const CustomRotator& other);\r\n\r\n\tCustomRotator& operator=(CustomRotator& other) noexcept;\r\n\tCustomRotator& operator=(Rotator& other) noexcept;\r\n\r\n\tCustomRotator diffTo(CustomRotator& other);\r\n\t//operator Rotator() { return Rotator((float)Pitch, (float)Yaw, (float)Roll); } //Do we actually want this?\r\n\tRotator ToRotator();\r\n\r\n\tCustomRotator& operator*=(const CustomRotator &other);\r\n\tCustomRotator& operator+=(const CustomRotator &other);\r\n\tCustomRotator& operator-=(const CustomRotator &other);\r\n\tCustomRotator& operator/=(const CustomRotator &other);\r\n\tCustomRotator& operator* (const CustomRotator &other);\r\n\tCustomRotator& operator+ (const CustomRotator &other);\r\n\tCustomRotator& operator- (const CustomRotator &other);\r\n\tCustomRotator& operator/ (const CustomRotator &other);\r\n\r\n\ttemplate<typename T2>\r\n\tCustomRotator& operator+=(T2 f)\r\n\t{\r\n\t\tPitch += f;\r\n\t\tYaw += f;\r\n\t\tRoll += f;\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tCustomRotator& operator*=(T2 f)\r\n\t{\r\n\t\tPitch *= f;\r\n\t\tYaw *= f;\r\n\t\tRoll *= f;\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tCustomRotator& operator-=(T2 f)\r\n\t{\r\n\t\tPitch -= f;\r\n\t\tYaw -= f;\r\n\t\tRoll -= f;\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tCustomRotator& operator/=(T2 f)\r\n\t{\r\n\t\tPitch /= f;\r\n\t\tYaw /= f;\r\n\t\tRoll /= f;\r\n\t\treturn *this;\r\n\t}\r\n};\r\n\r\n//template<typename T2>\r\n//CustomRotator operator* (T2 f, CustomRotator V) \r\n//{ \r\n//\tCustomRotator result = CustomRotator(f, f, f);\r\n//\tresult *= V;\r\n//\treturn result;\r\n//}\r\n\r\ntemplate<typename T2>\r\nCustomRotator operator* (CustomRotator V, T2 f) \r\n{\r\n\tCustomRotator result = CustomRotator(V);\r\n\tresult *= f;\r\n\treturn result;\r\n}\r\n//template<typename T2>\r\n//CustomRotator operator/ (T2 f, CustomRotator V) \r\n//{\r\n//\tCustomRotator result = CustomRotator(f, f, f);\r\n//\tresult /= V;\r\n//\treturn result;\r\n//}\r\n\r\ntemplate<typename T2>\r\nCustomRotator operator/ (CustomRotator V, T2 f) \r\n{\r\n\tCustomRotator result = CustomRotator(V);\r\n\tresult /= f;\r\n\treturn result;\r\n}\r\n//template<typename T2>\r\n//CustomRotator operator+ (T2 f, CustomRotator V) \r\n//{\r\n//\tCustomRotator result = CustomRotator(f, f, f);\r\n//\tresult += V;\r\n//\treturn result;\r\n//}\r\n\r\n//template<typename T2>\r\n//CustomRotator operator+ (CustomRotator V, T2 f) \r\n//{\r\n//\tCustomRotator result = CustomRotator(V);\r\n//\tresult += f;\r\n//\treturn result;\r\n//}\r\n\r\n//template<typename T2>\r\n//CustomRotator operator- (T2 f, CustomRotator V)\r\n//{\r\n//\tCustomRotator result = CustomRotator(f, f, f);\r\n//\tresult -= V;\r\n//\treturn result;\r\n//}\r\n\r\ntemplate<typename T2>\r\nCustomRotator operator- (CustomRotator V, T2 f)\r\n{\r\n\tCustomRotator result = CustomRotator(V);\r\n\tresult -= f;\r\n\treturn result;\r\n}"
  },
  {
    "path": "include/utils/expected.hpp",
    "content": "///\n// expected - An implementation of std::expected with extensions\n// Written in 2017 by Sy Brand (tartanllama@gmail.com, @TartanLlama)\n//\n// Documentation available at http://tl.tartanllama.xyz/\n//\n// To the extent possible under law, the author(s) have dedicated all\n// copyright and related and neighboring rights to this software to the\n// public domain worldwide. This software is distributed without any warranty.\n//\n// You should have received a copy of the CC0 Public Domain Dedication\n// along with this software. If not, see\n// <http://creativecommons.org/publicdomain/zero/1.0/>.\n///\n\n#ifndef TL_EXPECTED_HPP\n#define TL_EXPECTED_HPP\n\n#define TL_EXPECTED_VERSION_MAJOR 1\n#define TL_EXPECTED_VERSION_MINOR 1\n#define TL_EXPECTED_VERSION_PATCH 0\n\n#include <exception>\n#include <functional>\n#include <type_traits>\n#include <utility>\n\n#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)\n#define TL_EXPECTED_EXCEPTIONS_ENABLED\n#endif\n\n#if (defined(_MSC_VER) && _MSC_VER == 1900)\n#define TL_EXPECTED_MSVC2015\n#define TL_EXPECTED_MSVC2015_CONSTEXPR\n#else\n#define TL_EXPECTED_MSVC2015_CONSTEXPR constexpr\n#endif\n\n#if (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ <= 9 &&              \\\n     !defined(__clang__))\n#define TL_EXPECTED_GCC49\n#endif\n\n#if (defined(__GNUC__) && __GNUC__ == 5 && __GNUC_MINOR__ <= 4 &&              \\\n     !defined(__clang__))\n#define TL_EXPECTED_GCC54\n#endif\n\n#if (defined(__GNUC__) && __GNUC__ == 5 && __GNUC_MINOR__ <= 5 &&              \\\n     !defined(__clang__))\n#define TL_EXPECTED_GCC55\n#endif\n\n#if !defined(TL_ASSERT)\n//can't have assert in constexpr in C++11 and GCC 4.9 has a compiler bug\n#if (__cplusplus > 201103L) && !defined(TL_EXPECTED_GCC49)\n#include <cassert>\n#define TL_ASSERT(x) assert(x)\n#else \n#define TL_ASSERT(x)\n#endif\n#endif\n\n#if (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ <= 9 &&              \\\n     !defined(__clang__))\n// GCC < 5 doesn't support overloading on const&& for member functions\n\n#define TL_EXPECTED_NO_CONSTRR\n// GCC < 5 doesn't support some standard C++11 type traits\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)                         \\\n  std::has_trivial_copy_constructor<T>\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T)                            \\\n  std::has_trivial_copy_assign<T>\n\n// This one will be different for GCC 5.7 if it's ever supported\n#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T)                               \\\n  std::is_trivially_destructible<T>\n\n// GCC 5 < v < 8 has a bug in is_trivially_copy_constructible which breaks\n// std::vector for non-copyable types\n#elif (defined(__GNUC__) && __GNUC__ < 8 && !defined(__clang__))\n#ifndef TL_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX\n#define TL_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX\nnamespace tl {\nnamespace detail {\ntemplate <class T>\nstruct is_trivially_copy_constructible\n    : std::is_trivially_copy_constructible<T> {};\n#ifdef _GLIBCXX_VECTOR\ntemplate <class T, class A>\nstruct is_trivially_copy_constructible<std::vector<T, A>> : std::false_type {};\n#endif\n} // namespace detail\n} // namespace tl\n#endif\n\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)                         \\\n  tl::detail::is_trivially_copy_constructible<T>\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T)                            \\\n  std::is_trivially_copy_assignable<T>\n#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T)                               \\\n  std::is_trivially_destructible<T>\n#else\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)                         \\\n  std::is_trivially_copy_constructible<T>\n#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T)                            \\\n  std::is_trivially_copy_assignable<T>\n#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T)                               \\\n  std::is_trivially_destructible<T>\n#endif\n\n#if __cplusplus > 201103L\n#define TL_EXPECTED_CXX14\n#endif\n\n#ifdef TL_EXPECTED_GCC49\n#define TL_EXPECTED_GCC49_CONSTEXPR\n#else\n#define TL_EXPECTED_GCC49_CONSTEXPR constexpr\n#endif\n\n#if (__cplusplus == 201103L || defined(TL_EXPECTED_MSVC2015) ||                \\\n     defined(TL_EXPECTED_GCC49))\n#define TL_EXPECTED_11_CONSTEXPR\n#else\n#define TL_EXPECTED_11_CONSTEXPR constexpr\n#endif\n\nnamespace tl {\ntemplate <class T, class E> class expected;\n\n#ifndef TL_MONOSTATE_INPLACE_MUTEX\n#define TL_MONOSTATE_INPLACE_MUTEX\nclass monostate {};\n\nstruct in_place_t {\n  explicit in_place_t() = default;\n};\nstatic constexpr in_place_t in_place{};\n#endif\n\ntemplate <class E> class unexpected {\npublic:\n  static_assert(!std::is_same<E, void>::value, \"E must not be void\");\n\n  unexpected() = delete;\n  constexpr explicit unexpected(const E &e) : m_val(e) {}\n\n  constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {}\n\n  template <class... Args, typename std::enable_if<std::is_constructible<\n                               E, Args &&...>::value>::type * = nullptr>\n  constexpr explicit unexpected(Args &&...args)\n      : m_val(std::forward<Args>(args)...) {}\n  template <\n      class U, class... Args,\n      typename std::enable_if<std::is_constructible<\n          E, std::initializer_list<U> &, Args &&...>::value>::type * = nullptr>\n  constexpr explicit unexpected(std::initializer_list<U> l, Args &&...args)\n      : m_val(l, std::forward<Args>(args)...) {}\n\n  constexpr const E &value() const & { return m_val; }\n  TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; }\n  TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); }\n  constexpr const E &&value() const && { return std::move(m_val); }\n\nprivate:\n  E m_val;\n};\n\n#ifdef __cpp_deduction_guides\ntemplate <class E> unexpected(E) -> unexpected<E>;\n#endif\n\ntemplate <class E>\nconstexpr bool operator==(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() == rhs.value();\n}\ntemplate <class E>\nconstexpr bool operator!=(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() != rhs.value();\n}\ntemplate <class E>\nconstexpr bool operator<(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() < rhs.value();\n}\ntemplate <class E>\nconstexpr bool operator<=(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() <= rhs.value();\n}\ntemplate <class E>\nconstexpr bool operator>(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() > rhs.value();\n}\ntemplate <class E>\nconstexpr bool operator>=(const unexpected<E> &lhs, const unexpected<E> &rhs) {\n  return lhs.value() >= rhs.value();\n}\n\ntemplate <class E>\nunexpected<typename std::decay<E>::type> make_unexpected(E &&e) {\n  return unexpected<typename std::decay<E>::type>(std::forward<E>(e));\n}\n\nstruct unexpect_t {\n  unexpect_t() = default;\n};\nstatic constexpr unexpect_t unexpect{};\n\nnamespace detail {\ntemplate <typename E>\n[[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n  throw std::forward<E>(e);\n#else\n  (void)e;\n#ifdef _MSC_VER\n  __assume(0);\n#else\n  __builtin_unreachable();\n#endif\n#endif\n}\n\n#ifndef TL_TRAITS_MUTEX\n#define TL_TRAITS_MUTEX\n// C++14-style aliases for brevity\ntemplate <class T> using remove_const_t = typename std::remove_const<T>::type;\ntemplate <class T>\nusing remove_reference_t = typename std::remove_reference<T>::type;\ntemplate <class T> using decay_t = typename std::decay<T>::type;\ntemplate <bool E, class T = void>\nusing enable_if_t = typename std::enable_if<E, T>::type;\ntemplate <bool B, class T, class F>\nusing conditional_t = typename std::conditional<B, T, F>::type;\n\n// std::conjunction from C++17\ntemplate <class...> struct conjunction : std::true_type {};\ntemplate <class B> struct conjunction<B> : B {};\ntemplate <class B, class... Bs>\nstruct conjunction<B, Bs...>\n    : std::conditional<bool(B::value), conjunction<Bs...>, B>::type {};\n\n#if defined(_LIBCPP_VERSION) && __cplusplus == 201103L\n#define TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND\n#endif\n\n// In C++11 mode, there's an issue in libc++'s std::mem_fn\n// which results in a hard-error when using it in a noexcept expression\n// in some cases. This is a check to workaround the common failing case.\n#ifdef TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND\ntemplate <class T>\nstruct is_pointer_to_non_const_member_func : std::false_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...)>\n    : std::true_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &>\n    : std::true_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &&>\n    : std::true_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile>\n    : std::true_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &>\n    : std::true_type {};\ntemplate <class T, class Ret, class... Args>\nstruct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &&>\n    : std::true_type {};\n\ntemplate <class T> struct is_const_or_const_ref : std::false_type {};\ntemplate <class T> struct is_const_or_const_ref<T const &> : std::true_type {};\ntemplate <class T> struct is_const_or_const_ref<T const> : std::true_type {};\n#endif\n\n// std::invoke from C++17\n// https://stackoverflow.com/questions/38288042/c11-14-invoke-workaround\ntemplate <\n    typename Fn, typename... Args,\n#ifdef TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND\n    typename = enable_if_t<!(is_pointer_to_non_const_member_func<Fn>::value &&\n                             is_const_or_const_ref<Args...>::value)>,\n#endif\n    typename = enable_if_t<std::is_member_pointer<decay_t<Fn>>::value>, int = 0>\nconstexpr auto invoke(Fn &&f, Args &&...args) noexcept(\n    noexcept(std::mem_fn(f)(std::forward<Args>(args)...)))\n    -> decltype(std::mem_fn(f)(std::forward<Args>(args)...)) {\n  return std::mem_fn(f)(std::forward<Args>(args)...);\n}\n\ntemplate <typename Fn, typename... Args,\n          typename = enable_if_t<!std::is_member_pointer<decay_t<Fn>>::value>>\nconstexpr auto invoke(Fn &&f, Args &&...args) noexcept(\n    noexcept(std::forward<Fn>(f)(std::forward<Args>(args)...)))\n    -> decltype(std::forward<Fn>(f)(std::forward<Args>(args)...)) {\n  return std::forward<Fn>(f)(std::forward<Args>(args)...);\n}\n\n// std::invoke_result from C++17\ntemplate <class F, class, class... Us> struct invoke_result_impl;\n\ntemplate <class F, class... Us>\nstruct invoke_result_impl<\n    F,\n    decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...), void()),\n    Us...> {\n  using type =\n      decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...));\n};\n\ntemplate <class F, class... Us>\nusing invoke_result = invoke_result_impl<F, void, Us...>;\n\ntemplate <class F, class... Us>\nusing invoke_result_t = typename invoke_result<F, Us...>::type;\n\n#if defined(_MSC_VER) && _MSC_VER <= 1900\n// TODO make a version which works with MSVC 2015\ntemplate <class T, class U = T> struct is_swappable : std::true_type {};\n\ntemplate <class T, class U = T> struct is_nothrow_swappable : std::true_type {};\n#else\n// https://stackoverflow.com/questions/26744589/what-is-a-proper-way-to-implement-is-swappable-to-test-for-the-swappable-concept\nnamespace swap_adl_tests {\n// if swap ADL finds this then it would call std::swap otherwise (same\n// signature)\nstruct tag {};\n\ntemplate <class T> tag swap(T &, T &);\ntemplate <class T, std::size_t N> tag swap(T (&a)[N], T (&b)[N]);\n\n// helper functions to test if an unqualified swap is possible, and if it\n// becomes std::swap\ntemplate <class, class> std::false_type can_swap(...) noexcept(false);\ntemplate <class T, class U,\n          class = decltype(swap(std::declval<T &>(), std::declval<U &>()))>\nstd::true_type can_swap(int) noexcept(noexcept(swap(std::declval<T &>(),\n                                                    std::declval<U &>())));\n\ntemplate <class, class> std::false_type uses_std(...);\ntemplate <class T, class U>\nstd::is_same<decltype(swap(std::declval<T &>(), std::declval<U &>())), tag>\nuses_std(int);\n\ntemplate <class T>\nstruct is_std_swap_noexcept\n    : std::integral_constant<bool,\n                             std::is_nothrow_move_constructible<T>::value &&\n                                 std::is_nothrow_move_assignable<T>::value> {};\n\ntemplate <class T, std::size_t N>\nstruct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {};\n\ntemplate <class T, class U>\nstruct is_adl_swap_noexcept\n    : std::integral_constant<bool, noexcept(can_swap<T, U>(0))> {};\n} // namespace swap_adl_tests\n\ntemplate <class T, class U = T>\nstruct is_swappable\n    : std::integral_constant<\n          bool,\n          decltype(detail::swap_adl_tests::can_swap<T, U>(0))::value &&\n              (!decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value ||\n               (std::is_move_assignable<T>::value &&\n                std::is_move_constructible<T>::value))> {};\n\ntemplate <class T, std::size_t N>\nstruct is_swappable<T[N], T[N]>\n    : std::integral_constant<\n          bool,\n          decltype(detail::swap_adl_tests::can_swap<T[N], T[N]>(0))::value &&\n              (!decltype(detail::swap_adl_tests::uses_std<T[N], T[N]>(\n                   0))::value ||\n               is_swappable<T, T>::value)> {};\n\ntemplate <class T, class U = T>\nstruct is_nothrow_swappable\n    : std::integral_constant<\n          bool,\n          is_swappable<T, U>::value &&\n              ((decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value &&\n                detail::swap_adl_tests::is_std_swap_noexcept<T>::value) ||\n               (!decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value &&\n                detail::swap_adl_tests::is_adl_swap_noexcept<T, U>::value))> {};\n#endif\n#endif\n\n// Trait for checking if a type is a tl::expected\ntemplate <class T> struct is_expected_impl : std::false_type {};\ntemplate <class T, class E>\nstruct is_expected_impl<expected<T, E>> : std::true_type {};\ntemplate <class T> using is_expected = is_expected_impl<decay_t<T>>;\n\ntemplate <class T, class E, class U>\nusing expected_enable_forward_value = detail::enable_if_t<\n    std::is_constructible<T, U &&>::value &&\n    !std::is_same<detail::decay_t<U>, in_place_t>::value &&\n    !std::is_same<expected<T, E>, detail::decay_t<U>>::value &&\n    !std::is_same<unexpected<E>, detail::decay_t<U>>::value>;\n\ntemplate <class T, class E, class U, class G, class UR, class GR>\nusing expected_enable_from_other = detail::enable_if_t<\n    std::is_constructible<T, UR>::value &&\n    std::is_constructible<E, GR>::value &&\n    !std::is_constructible<T, expected<U, G> &>::value &&\n    !std::is_constructible<T, expected<U, G> &&>::value &&\n    !std::is_constructible<T, const expected<U, G> &>::value &&\n    !std::is_constructible<T, const expected<U, G> &&>::value &&\n    !std::is_convertible<expected<U, G> &, T>::value &&\n    !std::is_convertible<expected<U, G> &&, T>::value &&\n    !std::is_convertible<const expected<U, G> &, T>::value &&\n    !std::is_convertible<const expected<U, G> &&, T>::value>;\n\ntemplate <class T, class U>\nusing is_void_or = conditional_t<std::is_void<T>::value, std::true_type, U>;\n\ntemplate <class T>\nusing is_copy_constructible_or_void =\n    is_void_or<T, std::is_copy_constructible<T>>;\n\ntemplate <class T>\nusing is_move_constructible_or_void =\n    is_void_or<T, std::is_move_constructible<T>>;\n\ntemplate <class T>\nusing is_copy_assignable_or_void = is_void_or<T, std::is_copy_assignable<T>>;\n\ntemplate <class T>\nusing is_move_assignable_or_void = is_void_or<T, std::is_move_assignable<T>>;\n\n} // namespace detail\n\nnamespace detail {\nstruct no_init_t {};\nstatic constexpr no_init_t no_init{};\n\n// Implements the storage of the values, and ensures that the destructor is\n// trivial if it can be.\n//\n// This specialization is for where neither `T` or `E` is trivially\n// destructible, so the destructors must be called on destruction of the\n// `expected`\ntemplate <class T, class E, bool = std::is_trivially_destructible<T>::value,\n          bool = std::is_trivially_destructible<E>::value>\nstruct expected_storage_base {\n  constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}\n  constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =\n                nullptr>\n  constexpr expected_storage_base(in_place_t, Args &&...args)\n      : m_val(std::forward<Args>(args)...), m_has_val(true) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr expected_storage_base(in_place_t, std::initializer_list<U> il,\n                                  Args &&...args)\n      : m_val(il, std::forward<Args>(args)...), m_has_val(true) {}\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() {\n    if (m_has_val) {\n      m_val.~T();\n    } else {\n      m_unexpect.~unexpected<E>();\n    }\n  }\n  union {\n    T m_val;\n    unexpected<E> m_unexpect;\n    char m_no_init;\n  };\n  bool m_has_val;\n};\n\n// This specialization is for when both `T` and `E` are trivially-destructible,\n// so the destructor of the `expected` can be trivial.\ntemplate <class T, class E> struct expected_storage_base<T, E, true, true> {\n  constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}\n  constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =\n                nullptr>\n  constexpr expected_storage_base(in_place_t, Args &&...args)\n      : m_val(std::forward<Args>(args)...), m_has_val(true) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr expected_storage_base(in_place_t, std::initializer_list<U> il,\n                                  Args &&...args)\n      : m_val(il, std::forward<Args>(args)...), m_has_val(true) {}\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() = default;\n  union {\n    T m_val;\n    unexpected<E> m_unexpect;\n    char m_no_init;\n  };\n  bool m_has_val;\n};\n\n// T is trivial, E is not.\ntemplate <class T, class E> struct expected_storage_base<T, E, true, false> {\n  constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}\n  TL_EXPECTED_MSVC2015_CONSTEXPR expected_storage_base(no_init_t)\n      : m_no_init(), m_has_val(false) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =\n                nullptr>\n  constexpr expected_storage_base(in_place_t, Args &&...args)\n      : m_val(std::forward<Args>(args)...), m_has_val(true) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr expected_storage_base(in_place_t, std::initializer_list<U> il,\n                                  Args &&...args)\n      : m_val(il, std::forward<Args>(args)...), m_has_val(true) {}\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() {\n    if (!m_has_val) {\n      m_unexpect.~unexpected<E>();\n    }\n  }\n\n  union {\n    T m_val;\n    unexpected<E> m_unexpect;\n    char m_no_init;\n  };\n  bool m_has_val;\n};\n\n// E is trivial, T is not.\ntemplate <class T, class E> struct expected_storage_base<T, E, false, true> {\n  constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}\n  constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =\n                nullptr>\n  constexpr expected_storage_base(in_place_t, Args &&...args)\n      : m_val(std::forward<Args>(args)...), m_has_val(true) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr expected_storage_base(in_place_t, std::initializer_list<U> il,\n                                  Args &&...args)\n      : m_val(il, std::forward<Args>(args)...), m_has_val(true) {}\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() {\n    if (m_has_val) {\n      m_val.~T();\n    }\n  }\n  union {\n    T m_val;\n    unexpected<E> m_unexpect;\n    char m_no_init;\n  };\n  bool m_has_val;\n};\n\n// `T` is `void`, `E` is trivially-destructible\ntemplate <class E> struct expected_storage_base<void, E, false, true> {\n  #if __GNUC__ <= 5\n  //no constexpr for GCC 4/5 bug\n  #else\n  TL_EXPECTED_MSVC2015_CONSTEXPR\n  #endif \n  expected_storage_base() : m_has_val(true) {}\n     \n  constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(false) {}\n\n  constexpr expected_storage_base(in_place_t) : m_has_val(true) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() = default;\n  struct dummy {};\n  union {\n    unexpected<E> m_unexpect;\n    dummy m_val;\n  };\n  bool m_has_val;\n};\n\n// `T` is `void`, `E` is not trivially-destructible\ntemplate <class E> struct expected_storage_base<void, E, false, false> {\n  constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}\n  constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(false) {}\n\n  constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val(true) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected_storage_base(unexpect_t, Args &&...args)\n      : m_unexpect(std::forward<Args>(args)...), m_has_val(false) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected_storage_base(unexpect_t,\n                                           std::initializer_list<U> il,\n                                           Args &&...args)\n      : m_unexpect(il, std::forward<Args>(args)...), m_has_val(false) {}\n\n  ~expected_storage_base() {\n    if (!m_has_val) {\n      m_unexpect.~unexpected<E>();\n    }\n  }\n\n  union {\n    unexpected<E> m_unexpect;\n    char m_dummy;\n  };\n  bool m_has_val;\n};\n\n// This base class provides some handy member functions which can be used in\n// further derived classes\ntemplate <class T, class E>\nstruct expected_operations_base : expected_storage_base<T, E> {\n  using expected_storage_base<T, E>::expected_storage_base;\n\n  template <class... Args> void construct(Args &&...args) noexcept {\n    new (std::addressof(this->m_val)) T(std::forward<Args>(args)...);\n    this->m_has_val = true;\n  }\n\n  template <class Rhs> void construct_with(Rhs &&rhs) noexcept {\n    new (std::addressof(this->m_val)) T(std::forward<Rhs>(rhs).get());\n    this->m_has_val = true;\n  }\n\n  template <class... Args> void construct_error(Args &&...args) noexcept {\n    new (std::addressof(this->m_unexpect))\n        unexpected<E>(std::forward<Args>(args)...);\n    this->m_has_val = false;\n  }\n\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n\n  // These assign overloads ensure that the most efficient assignment\n  // implementation is used while maintaining the strong exception guarantee.\n  // The problematic case is where rhs has a value, but *this does not.\n  //\n  // This overload handles the case where we can just copy-construct `T`\n  // directly into place without throwing.\n  template <class U = T,\n            detail::enable_if_t<std::is_nothrow_copy_constructible<U>::value>\n                * = nullptr>\n  void assign(const expected_operations_base &rhs) noexcept {\n    if (!this->m_has_val && rhs.m_has_val) {\n      geterr().~unexpected<E>();\n      construct(rhs.get());\n    } else {\n      assign_common(rhs);\n    }\n  }\n\n  // This overload handles the case where we can attempt to create a copy of\n  // `T`, then no-throw move it into place if the copy was successful.\n  template <class U = T,\n            detail::enable_if_t<!std::is_nothrow_copy_constructible<U>::value &&\n                                std::is_nothrow_move_constructible<U>::value>\n                * = nullptr>\n  void assign(const expected_operations_base &rhs) noexcept {\n    if (!this->m_has_val && rhs.m_has_val) {\n      T tmp = rhs.get();\n      geterr().~unexpected<E>();\n      construct(std::move(tmp));\n    } else {\n      assign_common(rhs);\n    }\n  }\n\n  // This overload is the worst-case, where we have to move-construct the\n  // unexpected value into temporary storage, then try to copy the T into place.\n  // If the construction succeeds, then everything is fine, but if it throws,\n  // then we move the old unexpected value back into place before rethrowing the\n  // exception.\n  template <class U = T,\n            detail::enable_if_t<!std::is_nothrow_copy_constructible<U>::value &&\n                                !std::is_nothrow_move_constructible<U>::value>\n                * = nullptr>\n  void assign(const expected_operations_base &rhs) {\n    if (!this->m_has_val && rhs.m_has_val) {\n      auto tmp = std::move(geterr());\n      geterr().~unexpected<E>();\n\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n      try {\n        construct(rhs.get());\n      } catch (...) {\n        geterr() = std::move(tmp);\n        throw;\n      }\n#else\n      construct(rhs.get());\n#endif\n    } else {\n      assign_common(rhs);\n    }\n  }\n\n  // These overloads do the same as above, but for rvalues\n  template <class U = T,\n            detail::enable_if_t<std::is_nothrow_move_constructible<U>::value>\n                * = nullptr>\n  void assign(expected_operations_base &&rhs) noexcept {\n    if (!this->m_has_val && rhs.m_has_val) {\n      geterr().~unexpected<E>();\n      construct(std::move(rhs).get());\n    } else {\n      assign_common(std::move(rhs));\n    }\n  }\n\n  template <class U = T,\n            detail::enable_if_t<!std::is_nothrow_move_constructible<U>::value>\n                * = nullptr>\n  void assign(expected_operations_base &&rhs) {\n    if (!this->m_has_val && rhs.m_has_val) {\n      auto tmp = std::move(geterr());\n      geterr().~unexpected<E>();\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n      try {\n        construct(std::move(rhs).get());\n      } catch (...) {\n        geterr() = std::move(tmp);\n        throw;\n      }\n#else\n      construct(std::move(rhs).get());\n#endif\n    } else {\n      assign_common(std::move(rhs));\n    }\n  }\n\n#else\n\n  // If exceptions are disabled then we can just copy-construct\n  void assign(const expected_operations_base &rhs) noexcept {\n    if (!this->m_has_val && rhs.m_has_val) {\n      geterr().~unexpected<E>();\n      construct(rhs.get());\n    } else {\n      assign_common(rhs);\n    }\n  }\n\n  void assign(expected_operations_base &&rhs) noexcept {\n    if (!this->m_has_val && rhs.m_has_val) {\n      geterr().~unexpected<E>();\n      construct(std::move(rhs).get());\n    } else {\n      assign_common(std::move(rhs));\n    }\n  }\n\n#endif\n\n  // The common part of move/copy assigning\n  template <class Rhs> void assign_common(Rhs &&rhs) {\n    if (this->m_has_val) {\n      if (rhs.m_has_val) {\n        get() = std::forward<Rhs>(rhs).get();\n      } else {\n        destroy_val();\n        construct_error(std::forward<Rhs>(rhs).geterr());\n      }\n    } else {\n      if (!rhs.m_has_val) {\n        geterr() = std::forward<Rhs>(rhs).geterr();\n      }\n    }\n  }\n\n  bool has_value() const { return this->m_has_val; }\n\n  TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }\n  constexpr const T &get() const & { return this->m_val; }\n  TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_val); }\n#ifndef TL_EXPECTED_NO_CONSTRR\n  constexpr const T &&get() const && { return std::move(this->m_val); }\n#endif\n\n  TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {\n    return this->m_unexpect;\n  }\n  constexpr const unexpected<E> &geterr() const & { return this->m_unexpect; }\n  TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {\n    return std::move(this->m_unexpect);\n  }\n#ifndef TL_EXPECTED_NO_CONSTRR\n  constexpr const unexpected<E> &&geterr() const && {\n    return std::move(this->m_unexpect);\n  }\n#endif\n\n  TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }\n};\n\n// This base class provides some handy member functions which can be used in\n// further derived classes\ntemplate <class E>\nstruct expected_operations_base<void, E> : expected_storage_base<void, E> {\n  using expected_storage_base<void, E>::expected_storage_base;\n\n  template <class... Args> void construct() noexcept { this->m_has_val = true; }\n\n  // This function doesn't use its argument, but needs it so that code in\n  // levels above this can work independently of whether T is void\n  template <class Rhs> void construct_with(Rhs &&) noexcept {\n    this->m_has_val = true;\n  }\n\n  template <class... Args> void construct_error(Args &&...args) noexcept {\n    new (std::addressof(this->m_unexpect))\n        unexpected<E>(std::forward<Args>(args)...);\n    this->m_has_val = false;\n  }\n\n  template <class Rhs> void assign(Rhs &&rhs) noexcept {\n    if (!this->m_has_val) {\n      if (rhs.m_has_val) {\n        geterr().~unexpected<E>();\n        construct();\n      } else {\n        geterr() = std::forward<Rhs>(rhs).geterr();\n      }\n    } else {\n      if (!rhs.m_has_val) {\n        construct_error(std::forward<Rhs>(rhs).geterr());\n      }\n    }\n  }\n\n  bool has_value() const { return this->m_has_val; }\n\n  TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {\n    return this->m_unexpect;\n  }\n  constexpr const unexpected<E> &geterr() const & { return this->m_unexpect; }\n  TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {\n    return std::move(this->m_unexpect);\n  }\n#ifndef TL_EXPECTED_NO_CONSTRR\n  constexpr const unexpected<E> &&geterr() const && {\n    return std::move(this->m_unexpect);\n  }\n#endif\n\n  TL_EXPECTED_11_CONSTEXPR void destroy_val() {\n    // no-op\n  }\n};\n\n// This class manages conditionally having a trivial copy constructor\n// This specialization is for when T and E are trivially copy constructible\ntemplate <class T, class E,\n          bool = is_void_or<T, TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)>::\n              value &&TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(E)::value>\nstruct expected_copy_base : expected_operations_base<T, E> {\n  using expected_operations_base<T, E>::expected_operations_base;\n};\n\n// This specialization is for when T or E are not trivially copy constructible\ntemplate <class T, class E>\nstruct expected_copy_base<T, E, false> : expected_operations_base<T, E> {\n  using expected_operations_base<T, E>::expected_operations_base;\n\n  expected_copy_base() = default;\n  expected_copy_base(const expected_copy_base &rhs)\n      : expected_operations_base<T, E>(no_init) {\n    if (rhs.has_value()) {\n      this->construct_with(rhs);\n    } else {\n      this->construct_error(rhs.geterr());\n    }\n  }\n\n  expected_copy_base(expected_copy_base &&rhs) = default;\n  expected_copy_base &operator=(const expected_copy_base &rhs) = default;\n  expected_copy_base &operator=(expected_copy_base &&rhs) = default;\n};\n\n// This class manages conditionally having a trivial move constructor\n// Unfortunately there's no way to achieve this in GCC < 5 AFAIK, since it\n// doesn't implement an analogue to std::is_trivially_move_constructible. We\n// have to make do with a non-trivial move constructor even if T is trivially\n// move constructible\n#ifndef TL_EXPECTED_GCC49\ntemplate <class T, class E,\n          bool = is_void_or<T, std::is_trivially_move_constructible<T>>::value\n              &&std::is_trivially_move_constructible<E>::value>\nstruct expected_move_base : expected_copy_base<T, E> {\n  using expected_copy_base<T, E>::expected_copy_base;\n};\n#else\ntemplate <class T, class E, bool = false> struct expected_move_base;\n#endif\ntemplate <class T, class E>\nstruct expected_move_base<T, E, false> : expected_copy_base<T, E> {\n  using expected_copy_base<T, E>::expected_copy_base;\n\n  expected_move_base() = default;\n  expected_move_base(const expected_move_base &rhs) = default;\n\n  expected_move_base(expected_move_base &&rhs) noexcept(\n      std::is_nothrow_move_constructible<T>::value)\n      : expected_copy_base<T, E>(no_init) {\n    if (rhs.has_value()) {\n      this->construct_with(std::move(rhs));\n    } else {\n      this->construct_error(std::move(rhs.geterr()));\n    }\n  }\n  expected_move_base &operator=(const expected_move_base &rhs) = default;\n  expected_move_base &operator=(expected_move_base &&rhs) = default;\n};\n\n// This class manages conditionally having a trivial copy assignment operator\ntemplate <class T, class E,\n          bool = is_void_or<\n              T, conjunction<TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T),\n                             TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T),\n                             TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T)>>::value\n              &&TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(E)::value\n                  &&TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(E)::value\n                      &&TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(E)::value>\nstruct expected_copy_assign_base : expected_move_base<T, E> {\n  using expected_move_base<T, E>::expected_move_base;\n};\n\ntemplate <class T, class E>\nstruct expected_copy_assign_base<T, E, false> : expected_move_base<T, E> {\n  using expected_move_base<T, E>::expected_move_base;\n\n  expected_copy_assign_base() = default;\n  expected_copy_assign_base(const expected_copy_assign_base &rhs) = default;\n\n  expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;\n  expected_copy_assign_base &operator=(const expected_copy_assign_base &rhs) {\n    this->assign(rhs);\n    return *this;\n  }\n  expected_copy_assign_base &\n  operator=(expected_copy_assign_base &&rhs) = default;\n};\n\n// This class manages conditionally having a trivial move assignment operator\n// Unfortunately there's no way to achieve this in GCC < 5 AFAIK, since it\n// doesn't implement an analogue to std::is_trivially_move_assignable. We have\n// to make do with a non-trivial move assignment operator even if T is trivially\n// move assignable\n#ifndef TL_EXPECTED_GCC49\ntemplate <class T, class E,\n          bool =\n              is_void_or<T, conjunction<std::is_trivially_destructible<T>,\n                                        std::is_trivially_move_constructible<T>,\n                                        std::is_trivially_move_assignable<T>>>::\n                  value &&std::is_trivially_destructible<E>::value\n                      &&std::is_trivially_move_constructible<E>::value\n                          &&std::is_trivially_move_assignable<E>::value>\nstruct expected_move_assign_base : expected_copy_assign_base<T, E> {\n  using expected_copy_assign_base<T, E>::expected_copy_assign_base;\n};\n#else\ntemplate <class T, class E, bool = false> struct expected_move_assign_base;\n#endif\n\ntemplate <class T, class E>\nstruct expected_move_assign_base<T, E, false>\n    : expected_copy_assign_base<T, E> {\n  using expected_copy_assign_base<T, E>::expected_copy_assign_base;\n\n  expected_move_assign_base() = default;\n  expected_move_assign_base(const expected_move_assign_base &rhs) = default;\n\n  expected_move_assign_base(expected_move_assign_base &&rhs) = default;\n\n  expected_move_assign_base &\n  operator=(const expected_move_assign_base &rhs) = default;\n\n  expected_move_assign_base &\n  operator=(expected_move_assign_base &&rhs) noexcept(\n      std::is_nothrow_move_constructible<T>::value\n          &&std::is_nothrow_move_assignable<T>::value) {\n    this->assign(std::move(rhs));\n    return *this;\n  }\n};\n\n// expected_delete_ctor_base will conditionally delete copy and move\n// constructors depending on whether T is copy/move constructible\ntemplate <class T, class E,\n          bool EnableCopy = (is_copy_constructible_or_void<T>::value &&\n                             std::is_copy_constructible<E>::value),\n          bool EnableMove = (is_move_constructible_or_void<T>::value &&\n                             std::is_move_constructible<E>::value)>\nstruct expected_delete_ctor_base {\n  expected_delete_ctor_base() = default;\n  expected_delete_ctor_base(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = default;\n  expected_delete_ctor_base &\n  operator=(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base &\n  operator=(expected_delete_ctor_base &&) noexcept = default;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_ctor_base<T, E, true, false> {\n  expected_delete_ctor_base() = default;\n  expected_delete_ctor_base(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = delete;\n  expected_delete_ctor_base &\n  operator=(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base &\n  operator=(expected_delete_ctor_base &&) noexcept = default;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_ctor_base<T, E, false, true> {\n  expected_delete_ctor_base() = default;\n  expected_delete_ctor_base(const expected_delete_ctor_base &) = delete;\n  expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = default;\n  expected_delete_ctor_base &\n  operator=(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base &\n  operator=(expected_delete_ctor_base &&) noexcept = default;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_ctor_base<T, E, false, false> {\n  expected_delete_ctor_base() = default;\n  expected_delete_ctor_base(const expected_delete_ctor_base &) = delete;\n  expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = delete;\n  expected_delete_ctor_base &\n  operator=(const expected_delete_ctor_base &) = default;\n  expected_delete_ctor_base &\n  operator=(expected_delete_ctor_base &&) noexcept = default;\n};\n\n// expected_delete_assign_base will conditionally delete copy and move\n// constructors depending on whether T and E are copy/move constructible +\n// assignable\ntemplate <class T, class E,\n          bool EnableCopy = (is_copy_constructible_or_void<T>::value &&\n                             std::is_copy_constructible<E>::value &&\n                             is_copy_assignable_or_void<T>::value &&\n                             std::is_copy_assignable<E>::value),\n          bool EnableMove = (is_move_constructible_or_void<T>::value &&\n                             std::is_move_constructible<E>::value &&\n                             is_move_assignable_or_void<T>::value &&\n                             std::is_move_assignable<E>::value)>\nstruct expected_delete_assign_base {\n  expected_delete_assign_base() = default;\n  expected_delete_assign_base(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base(expected_delete_assign_base &&) noexcept =\n      default;\n  expected_delete_assign_base &\n  operator=(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base &\n  operator=(expected_delete_assign_base &&) noexcept = default;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_assign_base<T, E, true, false> {\n  expected_delete_assign_base() = default;\n  expected_delete_assign_base(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base(expected_delete_assign_base &&) noexcept =\n      default;\n  expected_delete_assign_base &\n  operator=(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base &\n  operator=(expected_delete_assign_base &&) noexcept = delete;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_assign_base<T, E, false, true> {\n  expected_delete_assign_base() = default;\n  expected_delete_assign_base(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base(expected_delete_assign_base &&) noexcept =\n      default;\n  expected_delete_assign_base &\n  operator=(const expected_delete_assign_base &) = delete;\n  expected_delete_assign_base &\n  operator=(expected_delete_assign_base &&) noexcept = default;\n};\n\ntemplate <class T, class E>\nstruct expected_delete_assign_base<T, E, false, false> {\n  expected_delete_assign_base() = default;\n  expected_delete_assign_base(const expected_delete_assign_base &) = default;\n  expected_delete_assign_base(expected_delete_assign_base &&) noexcept =\n      default;\n  expected_delete_assign_base &\n  operator=(const expected_delete_assign_base &) = delete;\n  expected_delete_assign_base &\n  operator=(expected_delete_assign_base &&) noexcept = delete;\n};\n\n// This is needed to be able to construct the expected_default_ctor_base which\n// follows, while still conditionally deleting the default constructor.\nstruct default_constructor_tag {\n  explicit constexpr default_constructor_tag() = default;\n};\n\n// expected_default_ctor_base will ensure that expected has a deleted default\n// consturctor if T is not default constructible.\n// This specialization is for when T is default constructible\ntemplate <class T, class E,\n          bool Enable =\n              std::is_default_constructible<T>::value || std::is_void<T>::value>\nstruct expected_default_ctor_base {\n  constexpr expected_default_ctor_base() noexcept = default;\n  constexpr expected_default_ctor_base(\n      expected_default_ctor_base const &) noexcept = default;\n  constexpr expected_default_ctor_base(expected_default_ctor_base &&) noexcept =\n      default;\n  expected_default_ctor_base &\n  operator=(expected_default_ctor_base const &) noexcept = default;\n  expected_default_ctor_base &\n  operator=(expected_default_ctor_base &&) noexcept = default;\n\n  constexpr explicit expected_default_ctor_base(default_constructor_tag) {}\n};\n\n// This specialization is for when T is not default constructible\ntemplate <class T, class E> struct expected_default_ctor_base<T, E, false> {\n  constexpr expected_default_ctor_base() noexcept = delete;\n  constexpr expected_default_ctor_base(\n      expected_default_ctor_base const &) noexcept = default;\n  constexpr expected_default_ctor_base(expected_default_ctor_base &&) noexcept =\n      default;\n  expected_default_ctor_base &\n  operator=(expected_default_ctor_base const &) noexcept = default;\n  expected_default_ctor_base &\n  operator=(expected_default_ctor_base &&) noexcept = default;\n\n  constexpr explicit expected_default_ctor_base(default_constructor_tag) {}\n};\n} // namespace detail\n\ntemplate <class E> class bad_expected_access : public std::exception {\npublic:\n  explicit bad_expected_access(E e) : m_val(std::move(e)) {}\n\n  virtual const char *what() const noexcept override {\n    return \"Bad expected access\";\n  }\n\n  const E &error() const & { return m_val; }\n  E &error() & { return m_val; }\n  const E &&error() const && { return std::move(m_val); }\n  E &&error() && { return std::move(m_val); }\n\nprivate:\n  E m_val;\n};\n\n/// An `expected<T, E>` object is an object that contains the storage for\n/// another object and manages the lifetime of this contained object `T`.\n/// Alternatively it could contain the storage for another unexpected object\n/// `E`. The contained object may not be initialized after the expected object\n/// has been initialized, and may not be destroyed before the expected object\n/// has been destroyed. The initialization state of the contained object is\n/// tracked by the expected object.\ntemplate <class T, class E>\nclass expected : private detail::expected_move_assign_base<T, E>,\n                 private detail::expected_delete_ctor_base<T, E>,\n                 private detail::expected_delete_assign_base<T, E>,\n                 private detail::expected_default_ctor_base<T, E> {\n  static_assert(!std::is_reference<T>::value, \"T must not be a reference\");\n  static_assert(!std::is_same<T, std::remove_cv<in_place_t>::type>::value,\n                \"T must not be in_place_t\");\n  static_assert(!std::is_same<T, std::remove_cv<unexpect_t>::type>::value,\n                \"T must not be unexpect_t\");\n  static_assert(\n      !std::is_same<T, typename std::remove_cv<unexpected<E>>::type>::value,\n      \"T must not be unexpected<E>\");\n  static_assert(!std::is_reference<E>::value, \"E must not be a reference\");\n\n  T *valptr() { return std::addressof(this->m_val); }\n  const T *valptr() const { return std::addressof(this->m_val); }\n  unexpected<E> *errptr() { return std::addressof(this->m_unexpect); }\n  const unexpected<E> *errptr() const {\n    return std::addressof(this->m_unexpect);\n  }\n\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR U &val() {\n    return this->m_val;\n  }\n  TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexpect; }\n\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  constexpr const U &val() const {\n    return this->m_val;\n  }\n  constexpr const unexpected<E> &err() const { return this->m_unexpect; }\n\n  using impl_base = detail::expected_move_assign_base<T, E>;\n  using ctor_base = detail::expected_default_ctor_base<T, E>;\n\npublic:\n  typedef T value_type;\n  typedef E error_type;\n  typedef unexpected<E> unexpected_type;\n\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {\n    return and_then_impl(*this, std::forward<F>(f));\n  }\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {\n    return and_then_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F> constexpr auto and_then(F &&f) const & {\n    return and_then_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F> constexpr auto and_then(F &&f) const && {\n    return and_then_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n\n#else\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR auto\n  and_then(F &&f) & -> decltype(and_then_impl(std::declval<expected &>(),\n                                              std::forward<F>(f))) {\n    return and_then_impl(*this, std::forward<F>(f));\n  }\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR auto\n  and_then(F &&f) && -> decltype(and_then_impl(std::declval<expected &&>(),\n                                               std::forward<F>(f))) {\n    return and_then_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F>\n  constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(\n      std::declval<expected const &>(), std::forward<F>(f))) {\n    return and_then_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F>\n  constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(\n      std::declval<expected const &&>(), std::forward<F>(f))) {\n    return and_then_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n#endif\n\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F> constexpr auto map(F &&f) const & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F> constexpr auto map(F &&f) const && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n#else\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(\n      std::declval<expected &>(), std::declval<F &&>()))\n  map(F &&f) & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<expected>(),\n                                                      std::declval<F &&>()))\n  map(F &&f) && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F>\n  constexpr decltype(expected_map_impl(std::declval<const expected &>(),\n                                       std::declval<F &&>()))\n  map(F &&f) const & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F>\n  constexpr decltype(expected_map_impl(std::declval<const expected &&>(),\n                                       std::declval<F &&>()))\n  map(F &&f) const && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n#endif\n\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F> constexpr auto transform(F &&f) const & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F> constexpr auto transform(F &&f) const && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n#else\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(\n      std::declval<expected &>(), std::declval<F &&>()))\n  transform(F &&f) & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<expected>(),\n                                                      std::declval<F &&>()))\n  transform(F &&f) && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F>\n  constexpr decltype(expected_map_impl(std::declval<const expected &>(),\n                                       std::declval<F &&>()))\n  transform(F &&f) const & {\n    return expected_map_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F>\n  constexpr decltype(expected_map_impl(std::declval<const expected &&>(),\n                                       std::declval<F &&>()))\n  transform(F &&f) const && {\n    return expected_map_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n#endif\n\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F> constexpr auto map_error(F &&f) const & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F> constexpr auto map_error(F &&f) const && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n#else\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expected &>(),\n                                                   std::declval<F &&>()))\n  map_error(F &&f) & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expected &&>(),\n                                                   std::declval<F &&>()))\n  map_error(F &&f) && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F>\n  constexpr decltype(map_error_impl(std::declval<const expected &>(),\n                                    std::declval<F &&>()))\n  map_error(F &&f) const & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F>\n  constexpr decltype(map_error_impl(std::declval<const expected &&>(),\n                                    std::declval<F &&>()))\n  map_error(F &&f) const && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n#endif\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F> TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F> constexpr auto transform_error(F &&f) const & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F> constexpr auto transform_error(F &&f) const && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n#else\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expected &>(),\n                                                   std::declval<F &&>()))\n  transform_error(F &&f) & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n  template <class F>\n  TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expected &&>(),\n                                                   std::declval<F &&>()))\n  transform_error(F &&f) && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n  template <class F>\n  constexpr decltype(map_error_impl(std::declval<const expected &>(),\n                                    std::declval<F &&>()))\n  transform_error(F &&f) const & {\n    return map_error_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F>\n  constexpr decltype(map_error_impl(std::declval<const expected &&>(),\n                                    std::declval<F &&>()))\n  transform_error(F &&f) const && {\n    return map_error_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n#endif\n  template <class F> expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {\n    return or_else_impl(*this, std::forward<F>(f));\n  }\n\n  template <class F> expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {\n    return or_else_impl(std::move(*this), std::forward<F>(f));\n  }\n\n  template <class F> expected constexpr or_else(F &&f) const & {\n    return or_else_impl(*this, std::forward<F>(f));\n  }\n\n#ifndef TL_EXPECTED_NO_CONSTRR\n  template <class F> expected constexpr or_else(F &&f) const && {\n    return or_else_impl(std::move(*this), std::forward<F>(f));\n  }\n#endif\n  constexpr expected() = default;\n  constexpr expected(const expected &rhs) = default;\n  constexpr expected(expected &&rhs) = default;\n  expected &operator=(const expected &rhs) = default;\n  expected &operator=(expected &&rhs) = default;\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =\n                nullptr>\n  constexpr expected(in_place_t, Args &&...args)\n      : impl_base(in_place, std::forward<Args>(args)...),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr expected(in_place_t, std::initializer_list<U> il, Args &&...args)\n      : impl_base(in_place, il, std::forward<Args>(args)...),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <class G = E,\n            detail::enable_if_t<std::is_constructible<E, const G &>::value> * =\n                nullptr,\n            detail::enable_if_t<!std::is_convertible<const G &, E>::value> * =\n                nullptr>\n  explicit constexpr expected(const unexpected<G> &e)\n      : impl_base(unexpect, e.value()),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <\n      class G = E,\n      detail::enable_if_t<std::is_constructible<E, const G &>::value> * =\n          nullptr,\n      detail::enable_if_t<std::is_convertible<const G &, E>::value> * = nullptr>\n  constexpr expected(unexpected<G> const &e)\n      : impl_base(unexpect, e.value()),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <\n      class G = E,\n      detail::enable_if_t<std::is_constructible<E, G &&>::value> * = nullptr,\n      detail::enable_if_t<!std::is_convertible<G &&, E>::value> * = nullptr>\n  explicit constexpr expected(unexpected<G> &&e) noexcept(\n      std::is_nothrow_constructible<E, G &&>::value)\n      : impl_base(unexpect, std::move(e.value())),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <\n      class G = E,\n      detail::enable_if_t<std::is_constructible<E, G &&>::value> * = nullptr,\n      detail::enable_if_t<std::is_convertible<G &&, E>::value> * = nullptr>\n  constexpr expected(unexpected<G> &&e) noexcept(\n      std::is_nothrow_constructible<E, G &&>::value)\n      : impl_base(unexpect, std::move(e.value())),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <class... Args,\n            detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =\n                nullptr>\n  constexpr explicit expected(unexpect_t, Args &&...args)\n      : impl_base(unexpect, std::forward<Args>(args)...),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_constructible<\n                E, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  constexpr explicit expected(unexpect_t, std::initializer_list<U> il,\n                              Args &&...args)\n      : impl_base(unexpect, il, std::forward<Args>(args)...),\n        ctor_base(detail::default_constructor_tag{}) {}\n\n  template <class U, class G,\n            detail::enable_if_t<!(std::is_convertible<U const &, T>::value &&\n                                  std::is_convertible<G const &, E>::value)> * =\n                nullptr,\n            detail::expected_enable_from_other<T, E, U, G, const U &, const G &>\n                * = nullptr>\n  explicit TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)\n      : ctor_base(detail::default_constructor_tag{}) {\n    if (rhs.has_value()) {\n      this->construct(*rhs);\n    } else {\n      this->construct_error(rhs.error());\n    }\n  }\n\n  template <class U, class G,\n            detail::enable_if_t<(std::is_convertible<U const &, T>::value &&\n                                 std::is_convertible<G const &, E>::value)> * =\n                nullptr,\n            detail::expected_enable_from_other<T, E, U, G, const U &, const G &>\n                * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)\n      : ctor_base(detail::default_constructor_tag{}) {\n    if (rhs.has_value()) {\n      this->construct(*rhs);\n    } else {\n      this->construct_error(rhs.error());\n    }\n  }\n\n  template <\n      class U, class G,\n      detail::enable_if_t<!(std::is_convertible<U &&, T>::value &&\n                            std::is_convertible<G &&, E>::value)> * = nullptr,\n      detail::expected_enable_from_other<T, E, U, G, U &&, G &&> * = nullptr>\n  explicit TL_EXPECTED_11_CONSTEXPR expected(expected<U, G> &&rhs)\n      : ctor_base(detail::default_constructor_tag{}) {\n    if (rhs.has_value()) {\n      this->construct(std::move(*rhs));\n    } else {\n      this->construct_error(std::move(rhs.error()));\n    }\n  }\n\n  template <\n      class U, class G,\n      detail::enable_if_t<(std::is_convertible<U &&, T>::value &&\n                           std::is_convertible<G &&, E>::value)> * = nullptr,\n      detail::expected_enable_from_other<T, E, U, G, U &&, G &&> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR expected(expected<U, G> &&rhs)\n      : ctor_base(detail::default_constructor_tag{}) {\n    if (rhs.has_value()) {\n      this->construct(std::move(*rhs));\n    } else {\n      this->construct_error(std::move(rhs.error()));\n    }\n  }\n\n  template <\n      class U = T,\n      detail::enable_if_t<!std::is_convertible<U &&, T>::value> * = nullptr,\n      detail::expected_enable_forward_value<T, E, U> * = nullptr>\n  explicit TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)\n      : expected(in_place, std::forward<U>(v)) {}\n\n  template <\n      class U = T,\n      detail::enable_if_t<std::is_convertible<U &&, T>::value> * = nullptr,\n      detail::expected_enable_forward_value<T, E, U> * = nullptr>\n  TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)\n      : expected(in_place, std::forward<U>(v)) {}\n\n  template <\n      class U = T, class G = T,\n      detail::enable_if_t<std::is_nothrow_constructible<T, U &&>::value> * =\n          nullptr,\n      detail::enable_if_t<!std::is_void<G>::value> * = nullptr,\n      detail::enable_if_t<\n          (!std::is_same<expected<T, E>, detail::decay_t<U>>::value &&\n           !detail::conjunction<std::is_scalar<T>,\n                                std::is_same<T, detail::decay_t<U>>>::value &&\n           std::is_constructible<T, U>::value &&\n           std::is_assignable<G &, U>::value &&\n           std::is_nothrow_move_constructible<E>::value)> * = nullptr>\n  expected &operator=(U &&v) {\n    if (has_value()) {\n      val() = std::forward<U>(v);\n    } else {\n      err().~unexpected<E>();\n      ::new (valptr()) T(std::forward<U>(v));\n      this->m_has_val = true;\n    }\n\n    return *this;\n  }\n\n  template <\n      class U = T, class G = T,\n      detail::enable_if_t<!std::is_nothrow_constructible<T, U &&>::value> * =\n          nullptr,\n      detail::enable_if_t<!std::is_void<U>::value> * = nullptr,\n      detail::enable_if_t<\n          (!std::is_same<expected<T, E>, detail::decay_t<U>>::value &&\n           !detail::conjunction<std::is_scalar<T>,\n                                std::is_same<T, detail::decay_t<U>>>::value &&\n           std::is_constructible<T, U>::value &&\n           std::is_assignable<G &, U>::value &&\n           std::is_nothrow_move_constructible<E>::value)> * = nullptr>\n  expected &operator=(U &&v) {\n    if (has_value()) {\n      val() = std::forward<U>(v);\n    } else {\n      auto tmp = std::move(err());\n      err().~unexpected<E>();\n\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n      try {\n        ::new (valptr()) T(std::forward<U>(v));\n        this->m_has_val = true;\n      } catch (...) {\n        err() = std::move(tmp);\n        throw;\n      }\n#else\n      ::new (valptr()) T(std::forward<U>(v));\n      this->m_has_val = true;\n#endif\n    }\n\n    return *this;\n  }\n\n  template <class G = E,\n            detail::enable_if_t<std::is_nothrow_copy_constructible<G>::value &&\n                                std::is_assignable<G &, G>::value> * = nullptr>\n  expected &operator=(const unexpected<G> &rhs) {\n    if (!has_value()) {\n      err() = rhs;\n    } else {\n      this->destroy_val();\n      ::new (errptr()) unexpected<E>(rhs);\n      this->m_has_val = false;\n    }\n\n    return *this;\n  }\n\n  template <class G = E,\n            detail::enable_if_t<std::is_nothrow_move_constructible<G>::value &&\n                                std::is_move_assignable<G>::value> * = nullptr>\n  expected &operator=(unexpected<G> &&rhs) noexcept {\n    if (!has_value()) {\n      err() = std::move(rhs);\n    } else {\n      this->destroy_val();\n      ::new (errptr()) unexpected<E>(std::move(rhs));\n      this->m_has_val = false;\n    }\n\n    return *this;\n  }\n\n  template <class... Args, detail::enable_if_t<std::is_nothrow_constructible<\n                               T, Args &&...>::value> * = nullptr>\n  void emplace(Args &&...args) {\n    if (has_value()) {\n      val().~T();\n    } else {\n      err().~unexpected<E>();\n      this->m_has_val = true;\n    }\n    ::new (valptr()) T(std::forward<Args>(args)...);\n  }\n\n  template <class... Args, detail::enable_if_t<!std::is_nothrow_constructible<\n                               T, Args &&...>::value> * = nullptr>\n  void emplace(Args &&...args) {\n    if (has_value()) {\n      val().~T();\n      ::new (valptr()) T(std::forward<Args>(args)...);\n    } else {\n      auto tmp = std::move(err());\n      err().~unexpected<E>();\n\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n      try {\n        ::new (valptr()) T(std::forward<Args>(args)...);\n        this->m_has_val = true;\n      } catch (...) {\n        err() = std::move(tmp);\n        throw;\n      }\n#else\n      ::new (valptr()) T(std::forward<Args>(args)...);\n      this->m_has_val = true;\n#endif\n    }\n  }\n\n  template <class U, class... Args,\n            detail::enable_if_t<std::is_nothrow_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  void emplace(std::initializer_list<U> il, Args &&...args) {\n    if (has_value()) {\n      T t(il, std::forward<Args>(args)...);\n      val() = std::move(t);\n    } else {\n      err().~unexpected<E>();\n      ::new (valptr()) T(il, std::forward<Args>(args)...);\n      this->m_has_val = true;\n    }\n  }\n\n  template <class U, class... Args,\n            detail::enable_if_t<!std::is_nothrow_constructible<\n                T, std::initializer_list<U> &, Args &&...>::value> * = nullptr>\n  void emplace(std::initializer_list<U> il, Args &&...args) {\n    if (has_value()) {\n      T t(il, std::forward<Args>(args)...);\n      val() = std::move(t);\n    } else {\n      auto tmp = std::move(err());\n      err().~unexpected<E>();\n\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n      try {\n        ::new (valptr()) T(il, std::forward<Args>(args)...);\n        this->m_has_val = true;\n      } catch (...) {\n        err() = std::move(tmp);\n        throw;\n      }\n#else\n      ::new (valptr()) T(il, std::forward<Args>(args)...);\n      this->m_has_val = true;\n#endif\n    }\n  }\n\nprivate:\n  using t_is_void = std::true_type;\n  using t_is_not_void = std::false_type;\n  using t_is_nothrow_move_constructible = std::true_type;\n  using move_constructing_t_can_throw = std::false_type;\n  using e_is_nothrow_move_constructible = std::true_type;\n  using move_constructing_e_can_throw = std::false_type;\n\n  void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept {\n    // swapping void is a no-op\n  }\n\n  void swap_where_both_have_value(expected &rhs, t_is_not_void) {\n    using std::swap;\n    swap(val(), rhs.val());\n  }\n\n  void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept(\n      std::is_nothrow_move_constructible<E>::value) {\n    ::new (errptr()) unexpected_type(std::move(rhs.err()));\n    rhs.err().~unexpected_type();\n    std::swap(this->m_has_val, rhs.m_has_val);\n  }\n\n  void swap_where_only_one_has_value(expected &rhs, t_is_not_void) {\n    swap_where_only_one_has_value_and_t_is_not_void(\n        rhs, typename std::is_nothrow_move_constructible<T>::type{},\n        typename std::is_nothrow_move_constructible<E>::type{});\n  }\n\n  void swap_where_only_one_has_value_and_t_is_not_void(\n      expected &rhs, t_is_nothrow_move_constructible,\n      e_is_nothrow_move_constructible) noexcept {\n    auto temp = std::move(val());\n    val().~T();\n    ::new (errptr()) unexpected_type(std::move(rhs.err()));\n    rhs.err().~unexpected_type();\n    ::new (rhs.valptr()) T(std::move(temp));\n    std::swap(this->m_has_val, rhs.m_has_val);\n  }\n\n  void swap_where_only_one_has_value_and_t_is_not_void(\n      expected &rhs, t_is_nothrow_move_constructible,\n      move_constructing_e_can_throw) {\n    auto temp = std::move(val());\n    val().~T();\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n    try {\n      ::new (errptr()) unexpected_type(std::move(rhs.err()));\n      rhs.err().~unexpected_type();\n      ::new (rhs.valptr()) T(std::move(temp));\n      std::swap(this->m_has_val, rhs.m_has_val);\n    } catch (...) {\n      val() = std::move(temp);\n      throw;\n    }\n#else\n    ::new (errptr()) unexpected_type(std::move(rhs.err()));\n    rhs.err().~unexpected_type();\n    ::new (rhs.valptr()) T(std::move(temp));\n    std::swap(this->m_has_val, rhs.m_has_val);\n#endif\n  }\n\n  void swap_where_only_one_has_value_and_t_is_not_void(\n      expected &rhs, move_constructing_t_can_throw,\n      e_is_nothrow_move_constructible) {\n    auto temp = std::move(rhs.err());\n    rhs.err().~unexpected_type();\n#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED\n    try {\n      ::new (rhs.valptr()) T(std::move(val()));\n      val().~T();\n      ::new (errptr()) unexpected_type(std::move(temp));\n      std::swap(this->m_has_val, rhs.m_has_val);\n    } catch (...) {\n      rhs.err() = std::move(temp);\n      throw;\n    }\n#else\n    ::new (rhs.valptr()) T(std::move(val()));\n    val().~T();\n    ::new (errptr()) unexpected_type(std::move(temp));\n    std::swap(this->m_has_val, rhs.m_has_val);\n#endif\n  }\n\npublic:\n  template <class OT = T, class OE = E>\n  detail::enable_if_t<detail::is_swappable<OT>::value &&\n                      detail::is_swappable<OE>::value &&\n                      (std::is_nothrow_move_constructible<OT>::value ||\n                       std::is_nothrow_move_constructible<OE>::value)>\n  swap(expected &rhs) noexcept(\n      std::is_nothrow_move_constructible<T>::value\n          &&detail::is_nothrow_swappable<T>::value\n              &&std::is_nothrow_move_constructible<E>::value\n                  &&detail::is_nothrow_swappable<E>::value) {\n    if (has_value() && rhs.has_value()) {\n      swap_where_both_have_value(rhs, typename std::is_void<T>::type{});\n    } else if (!has_value() && rhs.has_value()) {\n      rhs.swap(*this);\n    } else if (has_value()) {\n      swap_where_only_one_has_value(rhs, typename std::is_void<T>::type{});\n    } else {\n      using std::swap;\n      swap(err(), rhs.err());\n    }\n  }\n\n  constexpr const T *operator->() const {\n    TL_ASSERT(has_value());\n    return valptr();\n  }\n  TL_EXPECTED_11_CONSTEXPR T *operator->() {\n    TL_ASSERT(has_value());\n    return valptr();\n  }\n\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  constexpr const U &operator*() const & {\n    TL_ASSERT(has_value());\n    return val();\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR U &operator*() & {\n    TL_ASSERT(has_value());\n    return val();\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  constexpr const U &&operator*() const && {\n    TL_ASSERT(has_value());\n    return std::move(val());\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR U &&operator*() && {\n    TL_ASSERT(has_value());\n    return std::move(val());\n  }\n\n  constexpr bool has_value() const noexcept { return this->m_has_val; }\n  constexpr explicit operator bool() const noexcept { return this->m_has_val; }\n\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR const U &value() const & {\n    if (!has_value())\n      detail::throw_exception(bad_expected_access<E>(err().value()));\n    return val();\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR U &value() & {\n    if (!has_value())\n      detail::throw_exception(bad_expected_access<E>(err().value()));\n    return val();\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR const U &&value() const && {\n    if (!has_value())\n      detail::throw_exception(bad_expected_access<E>(std::move(err()).value()));\n    return std::move(val());\n  }\n  template <class U = T,\n            detail::enable_if_t<!std::is_void<U>::value> * = nullptr>\n  TL_EXPECTED_11_CONSTEXPR U &&value() && {\n    if (!has_value())\n      detail::throw_exception(bad_expected_access<E>(std::move(err()).value()));\n    return std::move(val());\n  }\n\n  constexpr const E &error() const & {\n    TL_ASSERT(!has_value());\n    return err().value();\n  }\n  TL_EXPECTED_11_CONSTEXPR E &error() & {\n    TL_ASSERT(!has_value());\n    return err().value();\n  }\n  constexpr const E &&error() const && {\n    TL_ASSERT(!has_value());\n    return std::move(err().value());\n  }\n  TL_EXPECTED_11_CONSTEXPR E &&error() && {\n    TL_ASSERT(!has_value());\n    return std::move(err().value());\n  }\n\n  template <class U> constexpr T value_or(U &&v) const & {\n    static_assert(std::is_copy_constructible<T>::value &&\n                      std::is_convertible<U &&, T>::value,\n                  \"T must be copy-constructible and convertible to from U&&\");\n    return bool(*this) ? **this : static_cast<T>(std::forward<U>(v));\n  }\n  template <class U> TL_EXPECTED_11_CONSTEXPR T value_or(U &&v) && {\n    static_assert(std::is_move_constructible<T>::value &&\n                      std::is_convertible<U &&, T>::value,\n                  \"T must be move-constructible and convertible to from U&&\");\n    return bool(*this) ? std::move(**this) : static_cast<T>(std::forward<U>(v));\n  }\n};\n\nnamespace detail {\ntemplate <class Exp> using exp_t = typename detail::decay_t<Exp>::value_type;\ntemplate <class Exp> using err_t = typename detail::decay_t<Exp>::error_type;\ntemplate <class Exp, class Ret> using ret_t = expected<Ret, err_t<Exp>>;\n\n#ifdef TL_EXPECTED_CXX14\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>()))>\nconstexpr auto and_then_impl(Exp &&exp, F &&f) {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n\n  return exp.has_value()\n             ? detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp))\n             : Ret(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>()))>\nconstexpr auto and_then_impl(Exp &&exp, F &&f) {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n\n  return exp.has_value() ? detail::invoke(std::forward<F>(f))\n                         : Ret(unexpect, std::forward<Exp>(exp).error());\n}\n#else\ntemplate <class> struct TC;\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>())),\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr>\nauto and_then_impl(Exp &&exp, F &&f) -> Ret {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n\n  return exp.has_value()\n             ? detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp))\n             : Ret(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>())),\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr>\nconstexpr auto and_then_impl(Exp &&exp, F &&f) -> Ret {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n\n  return exp.has_value() ? detail::invoke(std::forward<F>(f))\n                         : Ret(unexpect, std::forward<Exp>(exp).error());\n}\n#endif\n\n#ifdef TL_EXPECTED_CXX14\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto expected_map_impl(Exp &&exp, F &&f) {\n  using result = ret_t<Exp, detail::decay_t<Ret>>;\n  return exp.has_value() ? result(detail::invoke(std::forward<F>(f),\n                                                 *std::forward<Exp>(exp)))\n                         : result(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto expected_map_impl(Exp &&exp, F &&f) {\n  using result = expected<void, err_t<Exp>>;\n  if (exp.has_value()) {\n    detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp));\n    return result();\n  }\n\n  return result(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto expected_map_impl(Exp &&exp, F &&f) {\n  using result = ret_t<Exp, detail::decay_t<Ret>>;\n  return exp.has_value() ? result(detail::invoke(std::forward<F>(f)))\n                         : result(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto expected_map_impl(Exp &&exp, F &&f) {\n  using result = expected<void, err_t<Exp>>;\n  if (exp.has_value()) {\n    detail::invoke(std::forward<F>(f));\n    return result();\n  }\n\n  return result(unexpect, std::forward<Exp>(exp).error());\n}\n#else\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\n\nconstexpr auto expected_map_impl(Exp &&exp, F &&f)\n    -> ret_t<Exp, detail::decay_t<Ret>> {\n  using result = ret_t<Exp, detail::decay_t<Ret>>;\n\n  return exp.has_value() ? result(detail::invoke(std::forward<F>(f),\n                                                 *std::forward<Exp>(exp)))\n                         : result(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              *std::declval<Exp>())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\n\nauto expected_map_impl(Exp &&exp, F &&f) -> expected<void, err_t<Exp>> {\n  if (exp.has_value()) {\n    detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp));\n    return {};\n  }\n\n  return unexpected<err_t<Exp>>(std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\n\nconstexpr auto expected_map_impl(Exp &&exp, F &&f)\n    -> ret_t<Exp, detail::decay_t<Ret>> {\n  using result = ret_t<Exp, detail::decay_t<Ret>>;\n\n  return exp.has_value() ? result(detail::invoke(std::forward<F>(f)))\n                         : result(unexpect, std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\n\nauto expected_map_impl(Exp &&exp, F &&f) -> expected<void, err_t<Exp>> {\n  if (exp.has_value()) {\n    detail::invoke(std::forward<F>(f));\n    return {};\n  }\n\n  return unexpected<err_t<Exp>>(std::forward<Exp>(exp).error());\n}\n#endif\n\n#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) &&               \\\n    !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55)\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto map_error_impl(Exp &&exp, F &&f) {\n  using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;\n  return exp.has_value()\n             ? result(*std::forward<Exp>(exp))\n             : result(unexpect, detail::invoke(std::forward<F>(f),\n                                               std::forward<Exp>(exp).error()));\n}\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto map_error_impl(Exp &&exp, F &&f) {\n  using result = expected<exp_t<Exp>, monostate>;\n  if (exp.has_value()) {\n    return result(*std::forward<Exp>(exp));\n  }\n\n  detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());\n  return result(unexpect, monostate{});\n}\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto map_error_impl(Exp &&exp, F &&f) {\n  using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;\n  return exp.has_value()\n             ? result()\n             : result(unexpect, detail::invoke(std::forward<F>(f),\n                                               std::forward<Exp>(exp).error()));\n}\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto map_error_impl(Exp &&exp, F &&f) {\n  using result = expected<exp_t<Exp>, monostate>;\n  if (exp.has_value()) {\n    return result();\n  }\n\n  detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());\n  return result(unexpect, monostate{});\n}\n#else\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto map_error_impl(Exp &&exp, F &&f)\n    -> expected<exp_t<Exp>, detail::decay_t<Ret>> {\n  using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;\n\n  return exp.has_value()\n             ? result(*std::forward<Exp>(exp))\n             : result(unexpect, detail::invoke(std::forward<F>(f),\n                                               std::forward<Exp>(exp).error()));\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto map_error_impl(Exp &&exp, F &&f) -> expected<exp_t<Exp>, monostate> {\n  using result = expected<exp_t<Exp>, monostate>;\n  if (exp.has_value()) {\n    return result(*std::forward<Exp>(exp));\n  }\n\n  detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());\n  return result(unexpect, monostate{});\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto map_error_impl(Exp &&exp, F &&f)\n    -> expected<exp_t<Exp>, detail::decay_t<Ret>> {\n  using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;\n\n  return exp.has_value()\n             ? result()\n             : result(unexpect, detail::invoke(std::forward<F>(f),\n                                               std::forward<Exp>(exp).error()));\n}\n\ntemplate <class Exp, class F,\n          detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\nauto map_error_impl(Exp &&exp, F &&f) -> expected<exp_t<Exp>, monostate> {\n  using result = expected<exp_t<Exp>, monostate>;\n  if (exp.has_value()) {\n    return result();\n  }\n\n  detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());\n  return result(unexpect, monostate{});\n}\n#endif\n\n#ifdef TL_EXPECTED_CXX14\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nconstexpr auto or_else_impl(Exp &&exp, F &&f) {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n  return exp.has_value() ? std::forward<Exp>(exp)\n                         : detail::invoke(std::forward<F>(f),\n                                          std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\ndetail::decay_t<Exp> or_else_impl(Exp &&exp, F &&f) {\n  return exp.has_value() ? std::forward<Exp>(exp)\n                         : (detail::invoke(std::forward<F>(f),\n                                           std::forward<Exp>(exp).error()),\n                            std::forward<Exp>(exp));\n}\n#else\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>\nauto or_else_impl(Exp &&exp, F &&f) -> Ret {\n  static_assert(detail::is_expected<Ret>::value, \"F must return an expected\");\n  return exp.has_value() ? std::forward<Exp>(exp)\n                         : detail::invoke(std::forward<F>(f),\n                                          std::forward<Exp>(exp).error());\n}\n\ntemplate <class Exp, class F,\n          class Ret = decltype(detail::invoke(std::declval<F>(),\n                                              std::declval<Exp>().error())),\n          detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>\ndetail::decay_t<Exp> or_else_impl(Exp &&exp, F &&f) {\n  return exp.has_value() ? std::forward<Exp>(exp)\n                         : (detail::invoke(std::forward<F>(f),\n                                           std::forward<Exp>(exp).error()),\n                            std::forward<Exp>(exp));\n}\n#endif\n} // namespace detail\n\ntemplate <class T, class E, class U, class F>\nconstexpr bool operator==(const expected<T, E> &lhs,\n                          const expected<U, F> &rhs) {\n  return (lhs.has_value() != rhs.has_value())\n             ? false\n             : (!lhs.has_value() ? lhs.error() == rhs.error() : *lhs == *rhs);\n}\ntemplate <class T, class E, class U, class F>\nconstexpr bool operator!=(const expected<T, E> &lhs,\n                          const expected<U, F> &rhs) {\n  return (lhs.has_value() != rhs.has_value())\n             ? true\n             : (!lhs.has_value() ? lhs.error() != rhs.error() : *lhs != *rhs);\n}\ntemplate <class E, class F>\nconstexpr bool operator==(const expected<void, E> &lhs,\n                          const expected<void, F> &rhs) {\n  return (lhs.has_value() != rhs.has_value())\n             ? false\n             : (!lhs.has_value() ? lhs.error() == rhs.error() : true);\n}\ntemplate <class E, class F>\nconstexpr bool operator!=(const expected<void, E> &lhs,\n                          const expected<void, F> &rhs) {\n  return (lhs.has_value() != rhs.has_value())\n             ? true\n             : (!lhs.has_value() ? lhs.error() == rhs.error() : false);\n}\n\ntemplate <class T, class E, class U>\nconstexpr bool operator==(const expected<T, E> &x, const U &v) {\n  return x.has_value() ? *x == v : false;\n}\ntemplate <class T, class E, class U>\nconstexpr bool operator==(const U &v, const expected<T, E> &x) {\n  return x.has_value() ? *x == v : false;\n}\ntemplate <class T, class E, class U>\nconstexpr bool operator!=(const expected<T, E> &x, const U &v) {\n  return x.has_value() ? *x != v : true;\n}\ntemplate <class T, class E, class U>\nconstexpr bool operator!=(const U &v, const expected<T, E> &x) {\n  return x.has_value() ? *x != v : true;\n}\n\ntemplate <class T, class E>\nconstexpr bool operator==(const expected<T, E> &x, const unexpected<E> &e) {\n  return x.has_value() ? false : x.error() == e.value();\n}\ntemplate <class T, class E>\nconstexpr bool operator==(const unexpected<E> &e, const expected<T, E> &x) {\n  return x.has_value() ? false : x.error() == e.value();\n}\ntemplate <class T, class E>\nconstexpr bool operator!=(const expected<T, E> &x, const unexpected<E> &e) {\n  return x.has_value() ? true : x.error() != e.value();\n}\ntemplate <class T, class E>\nconstexpr bool operator!=(const unexpected<E> &e, const expected<T, E> &x) {\n  return x.has_value() ? true : x.error() != e.value();\n}\n\ntemplate <class T, class E,\n          detail::enable_if_t<(std::is_void<T>::value ||\n                               std::is_move_constructible<T>::value) &&\n                              detail::is_swappable<T>::value &&\n                              std::is_move_constructible<E>::value &&\n                              detail::is_swappable<E>::value> * = nullptr>\nvoid swap(expected<T, E> &lhs,\n          expected<T, E> &rhs) noexcept(noexcept(lhs.swap(rhs))) {\n  lhs.swap(rhs);\n}\n} // namespace tl\n\n#endif\n"
  },
  {
    "path": "include/utils/finiteelement.h",
    "content": "#pragma once\r\ntemplate<class T>\r\nclass FiniteElement { //Element that wraps around (min, max)\r\npublic:\r\n\tT _value;\r\n\tT _min;\r\n\tT _max;\r\n\r\n\tFiniteElement(T value, T min, T max)\r\n\t{\r\n\t\t_min = min;\r\n\t\t_max = max;\r\n\t\t_setValue(value);\r\n\t}\r\n\r\n\tFiniteElement(const FiniteElement<T>& other)\r\n\t{\r\n\t\tif (this != &other) {\r\n\t\t\t_min = other._min;\r\n\t\t\t_max = other._max;\r\n\t\t\t_setValue(other._value);\r\n\t\t}\r\n\t}\r\n\r\n\tT _sizeOfField() {\r\n\t\treturn (_max - _min);\r\n\t}\r\n\r\n\tT diffTo(FiniteElement<T> end)\r\n\t{\r\n\t\treturn diffTo(end._value);\r\n\t}\r\n\r\n\t//Used for interping rotators mostly\r\n\tT diffTo(T end)\r\n\t{\r\n\t\t//75 -> -25 is either -100 or +50 in (-100, 100), so we want +50\r\n\r\n\t\t//Field: -50-100, midpoint is 100 - (100 + 50) / 2\r\n\t\tFiniteElement<T> tempElem(end, _min, _max);\r\n\t\tT initialDiff = tempElem._value - _value;\r\n\t\tT size = _sizeOfField();\r\n\t\tif (abs(initialDiff) <= size / 2) //if difference is less than half, we already have the closest diff\r\n\t\t\treturn initialDiff;\r\n\t\t//return -(_max - initialDiff);\r\n\t\tT midPoint = _max - ((_max - _min) / 2);\r\n\t\tif (tempElem._value < midPoint)\r\n\t\t{\r\n\t\t\treturn tempElem._value + size - _value;\r\n\t\t}\r\n\t\telse if (tempElem._value >= midPoint)\r\n\t\t{\r\n\t\t\treturn tempElem._value - size - _value;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t//Freezes RL when value is inf (when it is divided by 0). Should replace the while loops with some maths though\r\n\tvoid _setValue(T value)\r\n\t{\r\n\t\tT size = _sizeOfField();\r\n\t\t_value = value;\r\n\t\twhile (_value < _min) //Theres probably a nicer implementation for this\r\n\t\t{\r\n\t\t\t_value += size;\r\n\t\t}\r\n\t\twhile (_value > _max)\r\n\t\t{\r\n\t\t\t_value -= size;\r\n\t\t}\r\n\t}\r\n\r\n\tFiniteElement<T>& operator=(T& other) // move assignment\r\n\t{\r\n\t\t_setValue(other);\r\n\t\treturn *this;\r\n\t}\r\n\r\n\tFiniteElement<T>& operator=(FiniteElement<T>& other) // move assignment\r\n\t{\r\n\t\t_min = other._min;\r\n\t\t_max = other._max;\r\n\t\t_setValue(other._value);\r\n\r\n\t\treturn *this;\r\n\t}\r\n\r\n\tFiniteElement<T>& operator=(const FiniteElement<T>& other) // move assignment\r\n\t{\r\n\t\t_min = other._min;\r\n\t\t_max = other._max;\r\n\t\t_setValue(other._value);\r\n\t\t\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T>& operator*=(T2 f)\r\n\t{\r\n\t\t_setValue(_value * (T)f); //Determine if this cast is OK when im more awake\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T>& operator+=(T2 f)\r\n\t{\r\n\t\t_setValue(_value + (T)f);\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T>& operator-=(T2 f)\r\n\t{\r\n\t\t_setValue(_value - (T)f);\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T>& operator/=(T2 f)\r\n\t{\r\n\t\t_setValue(_value / (T)f);\r\n\t\treturn *this;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T> operator* (T2 f) \r\n\t{ \r\n\t\tFiniteElement<T> result = *this;\r\n\t\tresult *= f;\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T> operator+ (T2 f)\r\n\t{\r\n\t\tFiniteElement<T> result = *this;\r\n\t\tresult += f;\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T> operator- (T2 f)\r\n\t{\r\n\t\tFiniteElement<T> result = *this;\r\n\t\tresult -= f;\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\tFiniteElement<T> operator/ (T2 f)\r\n\t{\r\n\t\tFiniteElement<T> result = *this;\r\n\t\tresult /= f;\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttemplate<typename T2>\r\n\texplicit operator T2() { return (T2)_value; }\r\n\ttemplate<typename T2>\r\n\texplicit operator T2() const { return (T2)_value; }\r\n};\r\n\r\n"
  },
  {
    "path": "include/utils/io.h",
    "content": "#pragma once\r\n#include <algorithm> \r\n#include <cctype>\r\n#include <fstream>\r\n#include <functional> \r\n#include <iomanip>\r\n#include <locale>\r\n#include <stdlib.h>\r\n#include <string>\r\n#include <vector>\r\n#include <Windows.h>\r\n\r\nstatic inline bool file_exists(const std::string& name) {\r\n\tstruct stat buffer;\r\n\treturn (stat(name.c_str(), &buffer) == 0);\r\n}\r\nstatic std::istream& safeGetline(std::istream& is, std::string& t)\r\n{\r\n\tt.clear();\r\n\r\n\t// The characters in the stream are read one-by-one using a std::streambuf.\r\n\t// That is faster than reading them one-by-one using the std::istream.\r\n\t// Code that uses streambuf this way must be guarded by a sentry object.\r\n\t// The sentry object performs various tasks,\r\n\t// such as thread synchronization and updating the stream state.\r\n\r\n\tstd::istream::sentry se(is, true);\r\n\tstd::streambuf* sb = is.rdbuf();\r\n\r\n\tfor (;;) {\r\n\t\tint c = sb->sbumpc();\r\n\t\tswitch (c) {\r\n\t\tcase '\\n':\r\n\t\t\treturn is;\r\n\t\tcase '\\r':\r\n\t\t\tif (sb->sgetc() == '\\n')\r\n\t\t\t\tsb->sbumpc();\r\n\t\t\treturn is;\r\n\t\tcase EOF:\r\n\t\t\t// Also handle the case when the last line has no line ending\r\n\t\t\tif (t.empty())\r\n\t\t\t\tis.setstate(std::ios::eofbit);\r\n\t\t\treturn is;\r\n\t\tdefault:\r\n\t\t\tt += (char)c;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "include/utils/observer.h",
    "content": "#pragma once\r\ntemplate<typename T>\r\nclass assignment_hook {\r\npublic:\r\n\ttypedef void (hook_t)(const T& old_value, const T& new_value);\r\n\r\n\tassignment_hook(T& value, hook_t hook) : ref_(value), hook_(hook) {}\r\n\r\n\tT& operator=(const T& rhs)\r\n\t{\r\n\t\thook_(ref_, rhs);\r\n\t\tref_ = rhs;\r\n\t}\r\nprivate:\r\n\t// I'd rather not want to think about copying this\r\n\tassignment_hook(const assignment_hook&);\r\n\tvoid operator=(const assignment_hook&);\r\n\r\n\tT& ref_;\r\n\thook_t hook_;\r\n};"
  },
  {
    "path": "include/utils/parser.h",
    "content": "#pragma once\r\n\r\n#include <algorithm> \r\n#include <cctype>\r\n#include <fstream>\r\n#include <functional> \r\n#include <iomanip>\r\n#include <iostream>\r\n#include <locale>\r\n#include <sstream>\r\n#include <stdlib.h>\r\n#include <string>\r\n#include <vector>\r\n#include <windows.h>\r\n#undef min\r\n#undef max\r\n\r\nstatic inline int random(int min, int max) {\r\n\treturn rand() % (max - min + 1) + min;\r\n}\r\n\r\nstatic inline float random(float min, float max) {\r\n\treturn min + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (max - min)));\r\n}\r\n\r\nstatic inline float random_with_exclude(float min, float max, float minExclude, float maxExclude) {\r\n\tfloat total_exclude = maxExclude - minExclude;\r\n\tfloat new_max = max - total_exclude;\r\n\tfloat result = random(min, new_max);\r\n\treturn result > minExclude ? result + total_exclude : result;\r\n}\r\n\r\nstatic inline float get_safe_float_range(std::string val)\r\n{\r\n\tstd::string lower = val.substr(1, val.find(\",\"));\r\n\tstd::string upper = val.substr(val.find(\",\") + 1, val.size() - 1);\r\n\tfloat lowFloat = stof(lower);\r\n\tfloat highFloat = stof(upper);\r\n\tif (lowFloat > highFloat) {\r\n\t\tfloat temp = highFloat;\r\n\t\thighFloat = lowFloat;\r\n\t\tlowFloat = temp;\r\n\t}\r\n\treturn random(lowFloat, highFloat);\r\n}\r\n\r\ntemplate <typename T>\r\nstd::string to_string_with_precision(const T a_value, const int n = 4)\r\n{\r\n\tif (a_value <= 0.01f && a_value >= -0.01f)\r\n\t\treturn \"0.0000\";\r\n\tstd::ostringstream out;\r\n\tout << std::fixed << std::setprecision(n) << a_value;\r\n\treturn out.str();\r\n}\r\n\r\nstatic inline bool string_ends_with(std::string const & value, std::string const & ending)\r\n{\r\n\tif (ending.size() > value.size()) return false;\r\n\treturn std::equal(ending.rbegin(), ending.rend(), value.rbegin());\r\n}\r\n\r\nstatic inline bool string_starts_with(std::string const & value, std::string const & begin) {\r\n\treturn value.compare(0, begin.length(), begin) == 0;\r\n}\r\n\r\nstatic inline bool is_parsable(std::string val) {\r\n\treturn string_starts_with(val, \"(\") && string_ends_with(val, \")\") && val.find(\",\") != std::string::npos;\r\n}\r\n\r\nstatic inline size_t split(const std::string &txt, std::vector<std::string> &strs, char ch)\r\n{\r\n\tsize_t pos = txt.find(ch);\r\n\tsize_t initialPos = 0;\r\n\tstrs.clear();\r\n\r\n\t// Decompose statement\r\n\twhile (pos != std::string::npos) {\r\n\t\tstrs.push_back(txt.substr(initialPos, pos - initialPos));\r\n\t\tinitialPos = pos + 1;\r\n\r\n\t\tpos = txt.find(ch, initialPos);\r\n\t}\r\n\r\n\t// Add the last one\r\n\tstrs.push_back(txt.substr(initialPos, std::min((size_t)pos, txt.size()) - initialPos));\r\n\treturn strs.size();\r\n}\r\n\r\n\r\nstatic inline float get_safe_float_range_exclude(std::string val)\r\n{\r\n\tval = val.substr(1, val.size() - 1);\r\n\tstd::vector<std::string> values;\r\n\tint range = random(0, (int)(floor(split(val, values, ',') / 2)) - 1);\r\n\tfloat lower = stof(values.at(range * 2));\r\n\tfloat upper = stof(values.at(range * 2 + 1));\r\n\treturn random(lower, upper);\r\n}\r\n\r\nstatic inline float get_safe_float(std::string val) {\r\n\ttry {\r\n\t\tif (is_parsable(val))\r\n\t\t{\r\n\t\t\treturn get_safe_float_range_exclude(val);\r\n\t\t\t/*int comma_amount = std::count(val.begin(), val.end(), ',');\r\n\t\t\tif (comma_amount == 3)\r\n\t\t\t{\r\n\t\t\treturn get_safe_float_range_exclude(val);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\treturn get_safe_float_range(val);\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\t\treturn (float)atof(val.c_str());\r\n\t}\r\n\tcatch (std::invalid_argument&) {\r\n\t\treturn 0;\r\n\t}\r\n\tcatch (std::out_of_range&) {\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nstatic inline int get_safe_int(std::string val) {\r\n\ttry {\r\n\t\tif (is_parsable(val))\r\n\t\t{\r\n\t\t\tstd::string lower = val.substr(1, val.find(\",\"));\r\n\t\t\tstd::string upper = val.substr(val.find(\",\") + 1, val.size() - 1);\r\n\t\t\tint lowInt = stoi(lower);\r\n\t\t\tint highInt = stoi(upper);\r\n\t\t\tif (lowInt > highInt) {\r\n\t\t\t\tint temp = highInt;\r\n\t\t\t\thighInt = lowInt;\r\n\t\t\t\tlowInt = temp;\r\n\t\t\t}\r\n\t\t\treturn random(lowInt, highInt);\r\n\t\t}\r\n\t\treturn stoi(val);\r\n\t}\r\n\tcatch (std::invalid_argument&) {\r\n\t\treturn 0;\r\n\t}\r\n\tcatch (std::out_of_range&) {\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nstatic inline bool get_safe_bool(std::string val) {\r\n\tfloat f = get_safe_float(val);\r\n\treturn f >= 0.5;\r\n}\r\n\r\nstatic inline LinearColor get_safe_color_rgba(std::string val)\r\n{\r\n    LinearColor output = {0,0,0,0};\r\n    try\r\n    {\r\n        if(is_parsable(val))\r\n        {\r\n            val = val.substr(1, val.size() - 1);\r\n            std::vector<std::string> values;\r\n            split(val, values, ',');\r\n            if(values.size() == 4)\r\n            {\r\n                output.R = stof(values.at(0));\r\n                output.G = stof(values.at(1));\r\n                output.B = stof(values.at(2));\r\n                output.A = stof(values.at(3));\r\n            }\r\n        }\r\n        return output;\r\n    }\r\n    catch (...)\r\n    {\r\n\t\treturn output;\r\n\t}\r\n}\r\n\r\n//Hexdecimal and LinearColor conversions\r\nstatic inline bool is_hex_valid(std::string val)\r\n{\r\n\t//If empty, invalid\r\n\tif(val.empty()) { return false; }\r\n\r\n\t//Remove the hashtag if there is one at the front\r\n    if(val.at(0) == '#') { val.erase(0,1); }\r\n\r\n\t//Check if there are enough characters\r\n\tif(val.size() < 6) { return false; }\r\n\r\n\t//Check if all characters are within charSet\r\n\tstatic const std::string chars = \"0123456789ABCDEF\";\r\n\tfor(const auto& it : val)\r\n\t{\r\n\t\tif(chars.find(toupper(it)) == std::string::npos)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nstatic int single_hex_char_to_int(char input)\r\n{\r\n    static const std::string Letters = \"ABCDEF\";\r\n\tstatic const std::string Numbers = \"0123456789\";\r\n\r\n    if(Letters.find(input) != std::string::npos)\r\n    {\r\n        return input - 'A' + 10;\r\n    }\r\n\tif(Numbers.find(input) != std::string::npos)\r\n    {\r\n        return input - '0';\r\n    }\r\n\r\n\treturn 0;\r\n}\r\n\r\nstatic int hex_chars_to_int(std::string input)\r\n{\r\n    //Convert 2 hex characters to their respective int (0-255)\r\n    if(input.size() < 2) { return 0; }\r\n\r\n    for(auto& c : input)\r\n\t    c = toupper(c);\r\n\t\r\n    int bigboi = single_hex_char_to_int(input.at(0)) * 16;\r\n    int lilboi = single_hex_char_to_int(input.at(1));\r\n    \r\n    return bigboi + lilboi;\r\n}\r\n\r\nstatic char single_hex_char_from_int(int input)\r\n{\r\n    if(input >= 0 && input <= 9)\r\n    {\r\n        return ('0' + input);\r\n    }\r\n\r\n    return ('A' + input - 10);\r\n}\r\n\r\nstatic std::string int_to_hex_chars(int input)\r\n{\r\n    //Convert int (0-255) to its respective 2 hex chars\r\n\r\n    int bignum = input / 16;\r\n    int lilnum = input - (16 * bignum);\r\n\r\n    char bigboi = single_hex_char_from_int(bignum);\r\n    char lilboi = single_hex_char_from_int(lilnum);\r\n\r\n    std::string output;\r\n    return output + bigboi + lilboi;\r\n}\r\n\r\nstatic inline LinearColor get_color_from_hex(std::string val)\r\n{\r\n    //Color output will be in 0-255 range\r\n    LinearColor output = {0,0,0,0};\r\n\r\n    if(!is_hex_valid(val)) { return output; }\r\n\r\n    //Remove beginning # if it exists\r\n    if(val.at(0) == '#') { val.erase(0,1); }\r\n\r\n    //Add alpha characters if they don't exist\r\n    if(val.size() < 8)\r\n    {\r\n        if(val.size() == 6) { val += \"FF\"; }\r\n        if(val.size() == 7) { val += \"F\";  }\r\n    }\r\n\r\n    int R = hex_chars_to_int(val.substr(0,2));\r\n    int G = hex_chars_to_int(val.substr(2,2));\r\n    int B = hex_chars_to_int(val.substr(4,2));\r\n    int A = hex_chars_to_int(val.substr(6,2));\r\n\r\n    return LinearColor{static_cast<float>(R), static_cast<float>(G), static_cast<float>(B), static_cast<float>(A)};\r\n}\r\n\r\nstatic inline std::string get_hex_from_color(LinearColor val)\r\n{\r\n    //Color input must be in 0-255 range\r\n    int R = static_cast<int>(val.R);\r\n    int G = static_cast<int>(val.G);\r\n    int B = static_cast<int>(val.B);\r\n    int A = static_cast<int>(val.A);\r\n\r\n    std::string output = \"#\";\r\n    output += int_to_hex_chars(R) + int_to_hex_chars(G) + int_to_hex_chars(B) + int_to_hex_chars(A);\r\n\r\n    return output;\r\n}\r\n\r\nstatic inline std::string to_string_color(const LinearColor val)\r\n{\r\n    return \"(\" + std::to_string(val.R) + \", \" + std::to_string(val.G) + \", \" + std::to_string(val.B) + \", \" + std::to_string(val.A) + \")\";\r\n}\r\n\r\n// trim from start\r\nstatic inline std::string &ltrim(std::string &s) {\r\n    /* error C2039 : 'ptr_fun' : is not a member of 'std'. */\r\n    //s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));\r\n    s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int c) {return !std::isspace(c); }));\r\n\r\n    return s;\r\n}\r\n\r\n// trim from end\r\nstatic inline std::string &rtrim(std::string &s) {\r\n    /* error C2039 : 'ptr_fun' : is not a member of 'std'. */\r\n    //s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());\r\n    s.erase(std::find_if(s.rbegin(), s.rend(), [](int c) {return !std::isspace(c); }).base(), s.end());\r\n\r\n    return s;\r\n}\r\n\r\n// trim from both ends\r\nstatic inline std::string &trim(std::string &s) {\r\n\treturn ltrim(rtrim(s));\r\n}\r\n\r\ninline static std::vector<std::vector<std::string>>* parseConsoleInput(std::string input)\r\n{\r\n\tstd::vector<std::vector<std::string>>* commands = new std::vector<std::vector<std::string>>();\r\n\tstd::vector<std::string> currentParams;\r\n\tstd::string currentString;\r\n\r\n\tchar currentQuote = '\\0';\r\n\tfor (std::string::size_type i = 0; i < input.length(); i++)\r\n\t{\r\n\t\tchar c = input[i];\r\n\t\t// Start/stop quoted block.\r\n\t\tif ((c == '\"' || c == '\\'') && (i == 0 || input[i - 1] != '\\\\'))\r\n\t\t{\r\n\t\t\tif (currentQuote == c)\r\n\t\t\t{\r\n\t\t\t\tcurrentQuote = '\\0';\r\n\t\t\t\tcurrentParams.push_back(currentString);\r\n\t\t\t\tcurrentString.clear();\r\n\t\t\t}\r\n\t\t\telse if (currentQuote == '\\0')\r\n\t\t\t\tcurrentQuote = c;\r\n\t\t\telse\r\n\t\t\t\tcurrentString += c;\r\n\t\t}\r\n\t\telse if (c == '\\\\' && i + 1 < input.length() && (input[i + 1] == '\"' || input[i + 1] == '\\''))\r\n\t\t\tcontinue;\r\n\t\t// Check if we are in a quoted block.\r\n\t\telse if (currentQuote != '\\0')\r\n\t\t\tcurrentString += c;\r\n\t\t// Split params.\r\n\t\telse if (c == ' ')\r\n\t\t{\r\n\t\t\tif (!currentString.empty())\r\n\t\t\t{\r\n\t\t\t\tcurrentParams.push_back(currentString);\r\n\t\t\t\tcurrentString.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Grouped params.\r\n\t\telse if (c == '(')\r\n\t\t{\r\n\t\t\tcurrentString += \"(\";\r\n\t\t\twhile (++i < input.length() && input[i] != ')')\r\n\t\t\t\tcurrentString += input[i];\r\n\t\t\tcurrentString += \")\";\r\n\t\t}\r\n\t\t// New command.\r\n\t\telse if (c == ';')\r\n\t\t{\r\n\t\t\tcurrentParams.push_back(currentString);\r\n\t\t\tcommands->push_back(currentParams);\r\n\t\t\tcurrentParams.clear();\r\n\t\t\tcurrentString.clear();\r\n\t\t}\r\n\t\t// Break on comments.\r\n\t\telse if (c == '/' && i + 1 < input.length() && input[i + 1] == '/')\r\n\t\t\tbreak;\r\n\t\telse\r\n\t\t\tcurrentString += c;\r\n\t}\r\n\tif (!currentString.empty())\r\n\t\tcurrentParams.push_back(currentString);\r\n\tif (!currentParams.empty())\r\n\t\tcommands->push_back(currentParams);\r\n\r\n\treturn commands;\r\n}\r\n\r\nstatic inline bool replace(std::string& str, const std::string& from, const std::string& to) {\r\n\tsize_t start_pos = str.find(from);\r\n\tif (start_pos == std::string::npos)\r\n\t\treturn false;\r\n\tstr.replace(start_pos, from.length(), to);\r\n\treturn true;\r\n}\r\n\r\n//inline static std::string to_string(std::string s) {\r\n//\treturn s;\r\n//}\r\n//\r\n//\r\n//inline static std::string to_string(const char* s) {\r\n//\treturn std::string(s);\r\n//}\r\n\r\n//inline static std::string to_string(char* s) {\r\n//\treturn std::string(s);\r\n//}\r\ninline static std::string bool_to_string(bool s) {\r\n\treturn s ? \"1\" : \"0\";\r\n}\r\n\r\n//inline static std::string to_string(int s) {\r\n//\treturn std::to_string(s);\r\n//}\r\n//inline static std::string to_string(float s) {\r\n//\treturn std::to_string(s);\r\n//}\r\n//\r\n//inline static std::string to_string(long s) {\r\n//\treturn std::to_string(s);\r\n//}\r\n//\r\n//inline static std::string to_string(double s) {\r\n//\treturn std::to_string(s);\r\n//}\r\n\r\n/*\r\nbase64.cpp and base64.h\r\n\r\nCopyright (C) 2004-2008 René Nyffenegger\r\n\r\nThis source code is provided 'as-is', without any express or implied\r\nwarranty. In no event will the author be held liable for any damages\r\narising from the use of this software.\r\n\r\nPermission is granted to anyone to use this software for any purpose,\r\nincluding commercial applications, and to alter it and redistribute it\r\nfreely, subject to the following restrictions:\r\n\r\n1. The origin of this source code must not be misrepresented; you must not\r\nclaim that you wrote the original source code. If you use this source code\r\nin a product, an acknowledgment in the product documentation would be\r\nappreciated but is not required.\r\n\r\n2. Altered source versions must be plainly marked as such, and must not be\r\nmisrepresented as being the original source code.\r\n\r\n3. This notice may not be removed or altered from any source distribution.\r\n\r\nRené Nyffenegger rene.nyffenegger@adp-gmbh.ch\r\n\r\n*/\r\n\r\nstatic const std::string base64_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n\r\n\r\nstatic inline bool is_base64(unsigned char c) {\r\n\treturn (isalnum(c) || (c == '+') || (c == '/'));\r\n}\r\n\r\ninline static std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {\r\n\tstd::string ret;\r\n\tint i = 0;\r\n\tint j = 0;\r\n\tunsigned char char_array_3[3];\r\n\tunsigned char char_array_4[4];\r\n\r\n\twhile (in_len--) {\r\n\t\tchar_array_3[i++] = *(bytes_to_encode++);\r\n\t\tif (i == 3) {\r\n\t\t\tchar_array_4[0] = (char_array_3[0] & 0xfc) >> 2;\r\n\t\t\tchar_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);\r\n\t\t\tchar_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);\r\n\t\t\tchar_array_4[3] = char_array_3[2] & 0x3f;\r\n\r\n\t\t\tfor (i = 0; (i <4); i++)\r\n\t\t\t\tret += base64_chars[char_array_4[i]];\r\n\t\t\ti = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (i)\r\n\t{\r\n\t\tfor (j = i; j < 3; j++)\r\n\t\t\tchar_array_3[j] = '\\0';\r\n\r\n\t\tchar_array_4[0] = (char_array_3[0] & 0xfc) >> 2;\r\n\t\tchar_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);\r\n\t\tchar_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);\r\n\t\tchar_array_4[3] = char_array_3[2] & 0x3f;\r\n\r\n\t\tfor (j = 0; (j < i + 1); j++)\r\n\t\t\tret += base64_chars[char_array_4[j]];\r\n\r\n\t\twhile ((i++ < 3))\r\n\t\t\tret += '=';\r\n\r\n\t}\r\n\r\n\treturn ret;\r\n\r\n}\r\n\r\ninline static std::vector<BYTE> base64_decode_bytearr(std::string const& encoded_string) {\r\n\tsize_t in_len = encoded_string.size();\r\n\tint i = 0;\r\n\tint j = 0;\r\n\tint in_ = 0;\r\n\tsize_t char_array_4[4], char_array_3[3];\r\n\tstd::vector<BYTE> ret;\r\n\r\n\twhile (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {\r\n\t\tchar_array_4[i++] = encoded_string[in_]; in_++;\r\n\t\tif (i == 4) {\r\n\t\t\tfor (i = 0; i <4; i++)\r\n\t\t\t\tchar_array_4[i] = base64_chars.find((char)char_array_4[i]);\r\n\r\n\t\t\tchar_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);\r\n\t\t\tchar_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);\r\n\t\t\tchar_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];\r\n\r\n\t\t\tfor (i = 0; (i < 3); i++)\r\n\t\t\t\tret.push_back((char)char_array_3[i]);\r\n\t\t\ti = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (i) {\r\n\t\tfor (j = i; j <4; j++)\r\n\t\t\tchar_array_4[j] = 0;\r\n\r\n\t\tfor (j = 0; j <4; j++)\r\n\t\t\tchar_array_4[j] = base64_chars.find((char)char_array_4[j]);\r\n\r\n\t\tchar_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);\r\n\t\tchar_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);\r\n\t\tchar_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];\r\n\r\n\t\tfor (j = 0; (j < i - 1); j++) ret.push_back((char)char_array_3[j]);\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\ninline static std::string base64_decode(std::string const& encoded_string) {\r\n\tsize_t in_len = encoded_string.size();\r\n\tint i = 0;\r\n\tint j = 0;\r\n\tint in_ = 0;\r\n\tsize_t char_array_4[4], char_array_3[3];\r\n\tstd::string ret;\r\n\r\n\twhile (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {\r\n\t\tchar_array_4[i++] = encoded_string[in_]; in_++;\r\n\t\tif (i == 4) {\r\n\t\t\tfor (i = 0; i <4; i++)\r\n\t\t\t\tchar_array_4[i] = base64_chars.find((char)char_array_4[i]);\r\n\r\n\t\t\tchar_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);\r\n\t\t\tchar_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);\r\n\t\t\tchar_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];\r\n\r\n\t\t\tfor (i = 0; (i < 3); i++)\r\n\t\t\t\tret += (char)char_array_3[i];\r\n\t\t\ti = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (i) {\r\n\t\tfor (j = i; j <4; j++)\r\n\t\t\tchar_array_4[j] = 0;\r\n\r\n\t\tfor (j = 0; j <4; j++)\r\n\t\t\tchar_array_4[j] = base64_chars.find((char)char_array_4[j]);\r\n\r\n\t\tchar_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);\r\n\t\tchar_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);\r\n\t\tchar_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];\r\n\r\n\t\tfor (j = 0; (j < i - 1); j++) ret += (char)char_array_3[j];\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/*\r\nBinary writer which optimizes for bit size. Programmer has to specify the number of LSB bits to store\r\n*/\r\ntemplate<typename A>\r\nclass BitBinaryWriter\r\n{\r\npublic:\r\n\tconst int type_size = sizeof(A) * 8;\r\n\tint current_bit = 0;\r\n\tA* buffer;\r\n\tBitBinaryWriter(int bufferSize)\r\n\t{\r\n\t\tbuffer = (A*)calloc(bufferSize, type_size);\r\n\t}\r\n\r\n\t~BitBinaryWriter()\r\n\t{\r\n\t\tdelete buffer;\r\n\t}\r\n\r\n\ttemplate<typename T>\r\n\tvoid WriteBits(T t, int useLSBcount = sizeof(T)*8)\r\n\t{\r\n\t\tT t2 = t;\r\n\t\tfor (int i = 0; i < useLSBcount; i++)\r\n\t\t{\r\n\t\t\tif (t2 & 1) {\r\n\t\t\t\tbuffer[current_bit / type_size] |= (1 << (current_bit % type_size));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbuffer[current_bit / type_size] &= ~(1 << (current_bit % type_size));\r\n\t\t\t}\r\n\t\t\tcurrent_bit++;\r\n\t\t\tt2 >>= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid WriteBool(bool b)\r\n\t{\r\n\t\tWriteBits(b ? 1 : 0, 1); //Use ternary to ensure last bit contains true false\r\n\t}\r\n\r\n\tuint8_t CalculateCRC(int startByte, int endByte)\r\n\t{\r\n\t\tuint8_t crc = 0b11111111;\r\n\t\tfor (int i = startByte; i < endByte; i++)\r\n\t\t{\r\n\t\t\tcrc = crc ^ buffer[i];\r\n\t\t}\r\n\t\treturn crc;\r\n\t}\r\n\r\n\tstd::string ToHex()\r\n\t{\r\n\t\treturn base64_encode(buffer, current_bit / type_size + 1);\r\n\t}\r\n};\r\n\r\ntemplate<typename A>\r\nclass BitBinaryReader\r\n{\r\npublic:\r\n\tconst int type_size = sizeof(A) * 8;\r\n\tint current_bit = 0;\r\n\tA* buffer;\r\n\r\n\tBitBinaryReader(std::string hexString)\r\n\t{\r\n\t\tstd::vector<BYTE> decodedVector = base64_decode_bytearr(hexString);\r\n\t\t//std::string decoded = base64_decode(hexString);\r\n\t\t//const char* data = decoded.c_str();\r\n\t\tbuffer = (A*)malloc(decodedVector.size());\r\n\t\tmemcpy(buffer, &decodedVector[0], decodedVector.size());\r\n\t}\r\n\r\n\tBitBinaryReader(A* inBuf)\r\n\t{\r\n\t\tbuffer = inBuf;\r\n\t}\r\n\r\n\t~BitBinaryReader()\r\n\t{\r\n\t\tdelete buffer;\r\n\t}\r\n\r\n\ttemplate<typename T>\r\n\tT ReadBits(int useLSBcount = sizeof(T) * 8)\r\n\t{\r\n\t\tT t = 0;\r\n\t\tfor (int i = 0; i < useLSBcount; i++)\r\n\t\t{\r\n\t\t\tt |= ((buffer[current_bit / type_size] >> (current_bit % type_size)) & 1) << i;\r\n\t\t\tcurrent_bit++;\r\n\t\t}\r\n\t\treturn t;\r\n\t}\r\n\tuint8_t CalculateCRC(int startByte, int endByte)\r\n\t{\r\n\t\tuint8_t crc = 0b11111111;\r\n\t\tfor (int i = startByte; i < endByte; i++)\r\n\t\t{\r\n\t\t\tcrc = crc ^ buffer[i];\r\n\t\t}\r\n\t\treturn crc;\r\n\t}\r\n\tbool VerifyCRC(uint8_t crc, int startByte, int endByte)\r\n\t{\r\n\t\treturn (crc ^ CalculateCRC(startByte, endByte)) == 0;\r\n\t}\r\n\r\n\tbool ReadBool()\r\n\t{\r\n\t\treturn ReadBits<bool>(1) & 1; //Use ternary to ensure last bit contains true false\r\n\t}\r\n};\r\n\r\n\r\n#include <stdarg.h>  // For va_start, etc.\r\n#include <memory>    // For std::unique_ptr\r\n//Source: https://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf\r\nstatic inline std::string string_format(const std::string fmt_str, ...) {\r\n\tint final_n, n = ((int)fmt_str.size()) * 2; /* Reserve two times as much as the length of the fmt_str */\r\n\tstd::unique_ptr<char[]> formatted;\r\n\tva_list ap;\r\n\twhile (1) {\r\n\t\tformatted.reset(new char[n]); /* Wrap the plain char array into the unique_ptr */\r\n\t\tstrcpy_s(&formatted[0], n, fmt_str.c_str());\r\n\t\tva_start(ap, fmt_str);\r\n\t\tfinal_n = vsnprintf(&formatted[0], n, fmt_str.c_str(), ap);\r\n\t\tva_end(ap);\r\n\t\tif (final_n < 0 || final_n >= n)\r\n\t\t\tn += abs(final_n - n + 1);\r\n\t\telse\r\n\t\t\tbreak;\r\n\t}\r\n\treturn std::string(formatted.get());\r\n}\r\n\r\nstatic inline std::string wstring_to_string(const std::wstring& InWString)\r\n{\r\n    if (InWString.empty()) return std::string();\r\n\r\n    int size_needed = WideCharToMultiByte(CP_UTF8, 0, &InWString[0], (int)InWString.size(), NULL, 0, NULL, NULL);\r\n    std::string strTo(size_needed, 0);\r\n    WideCharToMultiByte(CP_UTF8, 0, &InWString[0], (int)InWString.size(), &strTo[0], size_needed, NULL, NULL);\r\n\r\n    return strTo;\r\n}\r\n"
  }
]