11#include "../AddonBase.h"
12#include "../c-api/addon-instance/game.h"
55 for (
unsigned int i = 0; i < layout.digital_button_count; ++i)
57 for (
unsigned int i = 0; i < layout.analog_button_count; ++i)
59 for (
unsigned int i = 0; i < layout.analog_stick_count; ++i)
61 for (
unsigned int i = 0; i < layout.accelerometer_count; ++i)
63 for (
unsigned int i = 0; i < layout.key_count; ++i)
64 keys.emplace_back(layout.keys[i]);
65 for (
unsigned int i = 0; i < layout.rel_pointer_count; ++i)
67 for (
unsigned int i = 0; i < layout.abs_pointer_count; ++i)
69 for (
unsigned int i = 0; i < layout.motor_count; ++i)
70 motors.emplace_back(layout.motors[i]);
95 std::vector<std::string>
keys;
163 if (CPrivateBase::m_interface->globalSingleInstance !=
nullptr)
165 throw std::logic_error(
166 "kodi::addon::CInstanceGame: Cannot create more than one game instance!");
168 SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance);
169 CPrivateBase::m_interface->globalSingleInstance =
this;
202 for (
unsigned int i = 0; i < m_instanceData->props->proxy_dll_count; ++i)
204 if (m_instanceData->props->proxy_dll_paths[i] !=
nullptr)
205 paths.emplace_back(m_instanceData->props->proxy_dll_paths[i]);
207 return !paths.empty();
226 for (
unsigned int i = 0; i < m_instanceData->props->resource_directory_count; ++i)
228 if (m_instanceData->props->resource_directories[i] !=
nullptr)
229 dirs.emplace_back(m_instanceData->props->resource_directories[i]);
231 return !dirs.empty();
258 bool SupportsVFS()
const {
return m_instanceData->props->supports_vfs; }
273 for (
unsigned int i = 0; i < m_instanceData->props->extension_count; ++i)
275 if (m_instanceData->props->extensions[i] !=
nullptr)
276 extensions.emplace_back(m_instanceData->props->extensions[i]);
278 return !extensions.empty();
293 if (!IsInstanceAPIVersionAtLeast(8, 2, 1) || m_instanceData->props->libretro_core ==
nullptr)
295 return m_instanceData->props->libretro_core;
424 void CloseGame(
void) { m_instanceData->toKodi->CloseGame(m_instanceData->toKodi->kodiInstance); }
439 if (IsInstanceAPIVersionAtLeast(8, 3, 0))
440 m_instanceData->toKodi->ReportMissingFile(m_instanceData->toKodi->kodiInstance, path.c_str());
468 return m_instanceData->toKodi->GetPlaybackSpeed(m_instanceData->toKodi->kodiInstance);
485 m_instanceData->toKodi->SetGameTiming(m_instanceData->toKodi->kodiInstance, &timingInfo);
505 if (IsInstanceAPIVersionAtLeast(8, 4, 0))
506 m_instanceData->toKodi->SetFastForwarding(m_instanceData->toKodi->kodiInstance, fastForward,
546 if (!CPrivateBase::m_interface->globalSingleInstance)
556 *
static_cast<CInstanceGame*
>(CPrivateBase::m_interface->globalSingleInstance)
557 ->m_instanceData->toKodi;
558 m_handle = cb.OpenStream(cb.kodiInstance, &properties);
561 const KODI_GAME_STREAM_HANDLE handle = m_handle;
562 const bool started = cb.
StartStream(cb.kodiInstance, handle);
563 if (m_handle != handle)
568 return m_handle !=
nullptr;
580 if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance)
584 *
static_cast<CInstanceGame*
>(CPrivateBase::m_interface->globalSingleInstance)
585 ->m_instanceData->toKodi;
586 const KODI_GAME_STREAM_HANDLE handle = m_handle;
587 cb.CloseStream(cb.kodiInstance, handle);
588 if (m_handle == handle)
609 if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance)
613 *
static_cast<CInstanceGame*
>(CPrivateBase::m_interface->globalSingleInstance)
614 ->m_instanceData->toKodi;
615 return cb.GetStreamBuffer(cb.kodiInstance, m_handle, width, height, &buffer);
633 if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance)
637 *
static_cast<CInstanceGame*
>(CPrivateBase::m_interface->globalSingleInstance)
638 ->m_instanceData->toKodi;
639 cb.AddStreamData(cb.kodiInstance, m_handle, &packet);
653 if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance)
657 *
static_cast<CInstanceGame*
>(CPrivateBase::m_interface->globalSingleInstance)
658 ->m_instanceData->toKodi;
659 cb.ReleaseStreamBuffer(cb.kodiInstance, m_handle, &buffer);
671 bool IsOpen()
const {
return m_handle !=
nullptr; }
675 KODI_GAME_STREAM_HANDLE m_handle =
nullptr;
710 return m_instanceData->toKodi->EnableHardwareRendering(m_instanceData->toKodi->kodiInstance,
747 return m_instanceData->toKodi->HwGetProcAddress(m_instanceData->toKodi->kodiInstance, sym);
817 virtual bool HasFeature(
const std::string& controller_id,
const std::string& feature_name)
854 const std::vector<kodi::addon::GameControllerLayout>& controllers)
867 virtual bool EnableKeyboard(
bool enable,
const std::string& controller_id) {
return false; }
878 virtual bool EnableMouse(
bool enable,
const std::string& controller_id) {
return false; }
926 const std::string& port_address,
927 const std::string& controller_id)
957 return m_instanceData->toKodi->InputEvent(m_instanceData->toKodi->kodiInstance, &event);
1129 const std::string& token)
1171 const std::string& memAddrExpression)
1189 const std::function<
void(
const std::string& achievementUrl,
unsigned int cheevoId)>& callback)
1206 m_instanceData->toKodi->RCOnGameLoaded(m_instanceData->toKodi->kodiInstance, &data);
1221 m_instanceData->toKodi->RCOnAchievementTriggered(m_instanceData->toKodi->kodiInstance, &data);
1237 m_instanceData->toKodi->RCOnGameCompleted(m_instanceData->toKodi->kodiInstance, title.c_str(),
1253 m_instanceData->toKodi->RCOnRichPresenceUpdated(m_instanceData->toKodi->kodiInstance,
1254 evaluation.c_str());
1269 m_instanceData->toKodi->RCOnLoginResult(m_instanceData->toKodi->kodiInstance, &data);
1287 m_instanceData->toKodi->RCOnAchievementProgress(m_instanceData->toKodi->kodiInstance,
1288 progress.empty() ?
nullptr : progress.data(),
1289 static_cast<unsigned int>(progress.size()));
1305 m_instanceData->toKodi->RCOnServerError(m_instanceData->toKodi->kodiInstance, message.c_str(),
1324 m_instanceData->toKodi->RCOnConnectionChanged(m_instanceData->toKodi->kodiInstance, connected);
1340 m_instanceData->toKodi->RCOnChallengeIndicator(m_instanceData->toKodi->kodiInstance, &data,
1356 m_instanceData->toKodi->RCOnAchievementProgressUpdate(m_instanceData->toKodi->kodiInstance,
1372 m_instanceData->toKodi->RCOnLeaderboardStarted(m_instanceData->toKodi->kodiInstance, &data);
1387 m_instanceData->toKodi->RCOnLeaderboardFailed(m_instanceData->toKodi->kodiInstance, &data);
1405 m_instanceData->toKodi->RCOnLeaderboardSubmitted(m_instanceData->toKodi->kodiInstance, &data);
1420 m_instanceData->toKodi->RCOnLeaderboardTrackerUpdate(m_instanceData->toKodi->kodiInstance,
1436 m_instanceData->toKodi->RCOnLeaderboardScoreboard(m_instanceData->toKodi->kodiInstance, &data);
1450 void RCOnReset() { m_instanceData->toKodi->RCOnReset(m_instanceData->toKodi->kodiInstance); }
1464 m_instanceData->toKodi->RCOnSubsetCompleted(m_instanceData->toKodi->kodiInstance,
1488 m_instanceData->toKodi->RCOnAchievementProgressShow(m_instanceData->toKodi->kodiInstance,
1491 m_instanceData->toKodi->RCOnAchievementProgressHide(m_instanceData->toKodi->kodiInstance,
1512 m_instanceData->toKodi->RCOnLeaderboardTrackerShow(m_instanceData->toKodi->kodiInstance,
1515 m_instanceData->toKodi->RCOnLeaderboardTrackerHide(m_instanceData->toKodi->kodiInstance,
1674 instance->hdl =
this;
1676 instance->game->toAddon->LoadGame = ADDON_LoadGame;
1677 instance->game->toAddon->LoadGameSpecial = ADDON_LoadGameSpecial;
1678 instance->game->toAddon->LoadStandalone = ADDON_LoadStandalone;
1679 instance->game->toAddon->UnloadGame = ADDON_UnloadGame;
1680 instance->game->toAddon->GetGameTiming = ADDON_GetGameTiming;
1681 instance->game->toAddon->GetRegion = ADDON_GetRegion;
1682 instance->game->toAddon->RequiresGameLoop = ADDON_RequiresGameLoop;
1683 instance->game->toAddon->RunFrame = ADDON_RunFrame;
1684 instance->game->toAddon->Reset = ADDON_Reset;
1686 instance->game->toAddon->HwContextReset = ADDON_HwContextReset;
1687 instance->game->toAddon->HwContextDestroy = ADDON_HwContextDestroy;
1689 instance->game->toAddon->AudioAvailable = ADDON_AudioAvailable;
1691 instance->game->toAddon->HasFeature = ADDON_HasFeature;
1692 instance->game->toAddon->GetTopology = ADDON_GetTopology;
1693 instance->game->toAddon->FreeTopology = ADDON_FreeTopology;
1694 instance->game->toAddon->SetControllerLayouts = ADDON_SetControllerLayouts;
1695 instance->game->toAddon->EnableKeyboard = ADDON_EnableKeyboard;
1696 instance->game->toAddon->EnableMouse = ADDON_EnableMouse;
1697 instance->game->toAddon->ConnectController = ADDON_ConnectController;
1698 instance->game->toAddon->InputEvent = ADDON_InputEvent;
1700 instance->game->toAddon->SerializeSize = ADDON_SerializeSize;
1701 instance->game->toAddon->Serialize = ADDON_Serialize;
1702 instance->game->toAddon->Deserialize = ADDON_Deserialize;
1703 instance->game->toAddon->AchievementStateSize = ADDON_AchievementStateSize;
1704 instance->game->toAddon->SerializeAchievements = ADDON_SerializeAchievements;
1705 instance->game->toAddon->DeserializeAchievements = ADDON_DeserializeAchievements;
1707 instance->game->toAddon->CheatReset = ADDON_CheatReset;
1708 instance->game->toAddon->GetMemory = ADDON_GetMemory;
1709 instance->game->toAddon->SetCheat = ADDON_SetCheat;
1711 instance->game->toAddon->SetRetroAchievementsCredentials =
1712 ADDON_SetRetroAchievementsCredentials;
1713 instance->game->toAddon->RCSetHardcoreEnabled = ADDON_RCSetHardcoreEnabled;
1714 instance->game->toAddon->RCSetEncoreModeEnabled = ADDON_RCSetEncoreModeEnabled;
1715 instance->game->toAddon->ActivateAchievement = ADDON_ActivateAchievement;
1716 instance->game->toAddon->GetCheevoUrlId = ADDON_GetCheevoUrlId;
1718 instance->game->toAddon->GetEjectState = ADDON_GetEjectState;
1719 instance->game->toAddon->SetEjectState = ADDON_SetEjectState;
1720 instance->game->toAddon->GetImageIndex = ADDON_GetImageIndex;
1721 instance->game->toAddon->SetImageIndex = ADDON_SetImageIndex;
1722 instance->game->toAddon->GetImageCount = ADDON_GetImageCount;
1723 instance->game->toAddon->AddImageIndex = ADDON_AddImageIndex;
1724 instance->game->toAddon->ReplaceImageIndex = ADDON_ReplaceImageIndex;
1725 instance->game->toAddon->RemoveImageIndex = ADDON_RemoveImageIndex;
1726 instance->game->toAddon->SetInitialImage = ADDON_SetInitialImage;
1727 instance->game->toAddon->GetImagePath = ADDON_GetImagePath;
1728 instance->game->toAddon->GetImageLabel = ADDON_GetImageLabel;
1730 instance->game->toAddon->FreeString = ADDON_FreeString;
1732 m_instanceData = instance->game;
1733 m_instanceData->toAddon->addonInstance =
this;
1740 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->LoadGame(url);
1748 std::vector<std::string> urlList;
1749 for (
size_t i = 0; i < urlCount; ++i)
1751 if (urls[i] !=
nullptr)
1752 urlList.emplace_back(urls[i]);
1755 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1756 ->LoadGameSpecial(type, urlList);
1761 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->LoadStandalone();
1766 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->UnloadGame();
1772 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1773 ->GetGameTiming(*timing_info);
1778 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->
GetRegion();
1783 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->RequiresGameLoop();
1788 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->RunFrame();
1793 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->Reset();
1800 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->HwContextReset();
1805 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->HwContextDestroy();
1812 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->AudioAvailable();
1818 const char* controller_id,
1819 const char* feature_name)
1821 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1822 ->HasFeature(controller_id, feature_name);
1827 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetTopology();
1833 static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->FreeTopology(topology);
1838 unsigned int controller_count)
1840 if (controllers ==
nullptr)
1843 std::vector<GameControllerLayout> controllerList;
1844 controllerList.reserve(controller_count);
1845 for (
unsigned int i = 0; i < controller_count; ++i)
1846 controllerList.emplace_back(controllers[i]);
1848 static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1849 ->SetControllerLayouts(controllerList);
1854 const char* controller_id)
1856 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1857 ->EnableKeyboard(enable, controller_id);
1862 const char* controller_id)
1864 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1865 ->EnableMouse(enable, controller_id);
1870 const char* port_address,
1871 const char* controller_id)
1873 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1874 ->ConnectController(connect, port_address, controller_id);
1880 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->InputEvent(*event);
1887 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->SerializeSize();
1894 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->Serialize(data, size);
1898 const uint8_t* data,
1901 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->Deserialize(data, size);
1906 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->AchievementStateSize();
1913 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1914 ->SerializeAchievements(data, size);
1918 const uint8_t* data,
1921 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1922 ->DeserializeAchievements(data, size);
1929 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->CheatReset();
1937 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1938 ->GetMemory(type, *data, *size);
1946 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1947 ->SetCheat(index, enabled, code);
1951 const char* username,
1954 if (username ==
nullptr || token ==
nullptr)
1957 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1958 ->SetRetroAchievementsCredentials(username, token);
1964 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1965 ->RCSetHardcoreEnabled(enabled);
1971 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1972 ->RCSetEncoreModeEnabled(enabled);
1976 unsigned int cheevoId,
1977 const char* memAddrExpression)
1979 if (memAddrExpression ==
nullptr)
1982 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
1983 ->ActivateAchievement(cheevoId, memAddrExpression);
1987 void(__cdecl* callback)(
const void* context,
1988 const char* achievementUrl,
1989 unsigned int cheevoId),
1990 const void* context)
1992 if (callback ==
nullptr)
1995 const auto cppCallback =
1996 [callback, context](
const std::string& achievementUrl,
unsigned int cheevoId)
1997 { callback(context, achievementUrl.c_str(), cheevoId); };
1999 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
2000 ->GetCheevoUrlId(cppCallback);
2005 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetEjectState();
2010 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->SetEjectState(ejected);
2015 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetImageIndex();
2019 unsigned int imageIndex)
2021 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->SetImageIndex(imageIndex);
2026 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetImageCount();
2031 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->AddImageIndex();
2035 unsigned int imageIndex,
2036 const char* filePath)
2038 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
2039 ->ReplaceImageIndex(imageIndex, filePath ? filePath :
"");
2043 unsigned int imageIndex)
2045 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
2046 ->RemoveImageIndex(imageIndex);
2050 unsigned int imageIndex,
2051 const char* filePath)
2053 return static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)
2054 ->SetInitialImage(imageIndex, filePath ? filePath :
"");
2058 unsigned int imageIndex)
2060 std::string cppPath =
2061 static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetImagePath(imageIndex);
2062 if (cppPath.empty())
2065 char* path =
new char[cppPath.size() + 1];
2066 std::copy(cppPath.begin(), cppPath.end(), path);
2067 path[cppPath.size()] =
'\0';
2072 unsigned int imageIndex)
2074 std::string cppLabel =
2075 static_cast<CInstanceGame*
>(instance->toAddon->addonInstance)->GetImageLabel(imageIndex);
2076 if (cppLabel.empty())
2079 char* label =
new char[cppLabel.size() + 1];
2080 std::copy(cppLabel.begin(), cppLabel.end(), label);
2081 label[cppLabel.size()] =
'\0';
Definition AddonBase.h:567
Definition AddonBase.h:503
@ ADDON_LOG_INFO
1 : To include information messages in the log file.
Definition addon_base.h:188
virtual GAME_ERROR AudioAvailable()
Tell the client the frontend is ready for audio.
Definition Game.h:782
CInstanceGame()
Game class constructor.
Definition Game.h:161
std::string GameClientDllPath() const
Callback to Kodi Function The path of the game client being loaded.
Definition Game.h:187
bool ProxyDllPaths(std::vector< std::string > &paths)
Callback to Kodi Function Paths to proxy DLLs used to load the game client.
Definition Game.h:200
bool ResourceDirectories(std::vector< std::string > &dirs)
Callback to Kodi Function The "system" directories of the frontend.
Definition Game.h:224
std::string ProfileDirectory() const
Callback to Kodi Function The writable directory of the frontend.
Definition Game.h:247
bool SupportsVFS() const
Callback to Kodi Function The value of the <supports_vfs> property from addon.xml.
Definition Game.h:258
~CInstanceGame() override=default
Destructor.
std::string LibretroCore() const
Callback to Kodi Function The <libretro_core> property from addon.xml, such as "fceumm_libretro".
Definition Game.h:291
bool Extensions(std::vector< std::string > &extensions)
Callback to Kodi Function The extensions in the <extensions> property from addon.xml.
Definition Game.h:271
void RCOnLeaderboardScoreboard(const game_rc_leaderboard_scoreboard &data)
Callback to Kodi Function Tell Kodi where a submitted attempt placed
Definition Game.h:1434
void RCOnSubsetCompleted(const std::string &title)
Callback to Kodi Function Notify Kodi that every achievement of a subset has been earned
Definition Game.h:1462
void RCOnLeaderboardSubmitted(const game_rc_leaderboard &data)
Callback to Kodi Function Notify Kodi that a leaderboard value has been sent to the server
Definition Game.h:1403
virtual GAME_ERROR ActivateAchievement(unsigned int cheevoId, const std::string &memAddrExpression)
Activate an achievement.
Definition Game.h:1170
void RCOnRichPresenceUpdated(const std::string &evaluation)
Callback to Kodi Function Publish the current rich presence evaluation to Kodi
Definition Game.h:1251
void RCOnLeaderboardTracker(const game_rc_leaderboard_tracker &data, bool show)
Callback to Kodi Function Show, update or hide the live value of an attempt in progress
Definition Game.h:1509
void RCOnChallengeIndicator(const game_rc_achievement_challenge &data, bool show)
Callback to Kodi Function Show or hide the indicator for an achievement the player is attempting
Definition Game.h:1338
virtual GAME_ERROR RCSetEncoreModeEnabled(bool enabled)
Set whether already-earned achievements can be earned again.
Definition Game.h:1159
void RCOnLeaderboardFailed(const game_rc_leaderboard &data)
Callback to Kodi Function Notify Kodi that an attempt at a leaderboard has been abandoned
Definition Game.h:1385
void RCOnServerError(const std::string &message, const std::string &api)
Callback to Kodi Function Report an error returned by the RetroAchievements server
Definition Game.h:1303
void RCOnAchievementProgress(const std::vector< game_rc_achievement_progress > &progress)
Callback to Kodi Function Publish progress towards the game's measured achievements
Definition Game.h:1285
void RCOnReset()
Callback to Kodi Function Ask the frontend to reset the game
Definition Game.h:1450
void RCOnGameLoaded(const game_rc_game_loaded &data)
Callback to Kodi Function Notify Kodi that a game has been identified by the achievement runtime
Definition Game.h:1204
void RCOnLoginResult(const game_rc_login_result &data)
Callback to Kodi Function Notify Kodi of the outcome of a login attempt
Definition Game.h:1267
void RCOnAchievementProgressIndicator(const game_rc_achievement_progress_indicator &data, bool show)
Callback to Kodi Function Show, update or hide how far along a measured achievement is
Definition Game.h:1484
virtual GAME_ERROR SetRetroAchievementsCredentials(const std::string &username, const std::string &token)
Set the credentials of the RetroAchievements user.
Definition Game.h:1128
void RCOnLeaderboardTrackerUpdate(const game_rc_leaderboard_tracker &data)
Callback to Kodi Function Give Kodi a new value for an attempt already on screen
Definition Game.h:1418
void RCOnAchievementProgressUpdate(const game_rc_achievement_progress_indicator &data)
Callback to Kodi Function Give Kodi a new value for a measured achievement already on screen
Definition Game.h:1354
void RCOnConnectionChanged(bool connected)
Callback to Kodi Function Report a change in connectivity to the RetroAchievements server
Definition Game.h:1322
void RCOnLeaderboardStarted(const game_rc_leaderboard &data)
Callback to Kodi Function Notify Kodi that an attempt at a leaderboard has begun
Definition Game.h:1370
virtual GAME_ERROR RCSetHardcoreEnabled(bool enabled)
Set whether achievements are earned in hardcore mode.
Definition Game.h:1147
void RCOnGameCompleted(const std::string &title, bool hardcore)
Callback to Kodi Function Notify Kodi that every achievement of the game has been earned
Definition Game.h:1235
virtual GAME_ERROR GetCheevoUrlId(const std::function< void(const std::string &achievementUrl, unsigned int cheevoId)> &callback)
Get triggered achievement URL and ID pairs.
Definition Game.h:1188
void RCOnAchievementTriggered(const game_rc_achievement_triggered &data)
Callback to Kodi Function Notify Kodi that the player has earned an achievement
Definition Game.h:1219
virtual GAME_ERROR CheatReset()
Reset the cheat system.
Definition Game.h:1089
virtual GAME_ERROR GetMemory(GAME_MEMORY type, uint8_t *&data, size_t &size)
Get a region of memory.
Definition Game.h:1101
virtual GAME_ERROR SetCheat(unsigned int index, bool enabled, const std::string &code)
Set a cheat code.
Definition Game.h:1116
Game system timing.
Definition game.h:1181
GAME_REGION
Game region definition
Definition game.h:626
SPECIAL_GAME_TYPE
Special game types passed into game_load_game_special().
Definition game.h:644
GAME_MEMORY
Game Memory
Definition game.h:663
@ GAME_REGION_UNKNOWN
Game region unknown.
Definition game.h:628
void(* game_proc_address_t)(void)
Hardware framebuffer process function address
Definition game.h:466
Hardware rendering properties
Definition game.h:341
**Payload of AddonToKodiFuncTable_Game::RCOnChallengeIndicator**
Definition game.h:1447
Payload of the achievement progress indicator callbacks
Definition game.h:1469
**Payload of AddonToKodiFuncTable_Game::RCOnAchievementTriggered**
Definition game.h:1292
**Payload of AddonToKodiFuncTable_Game::RCOnGameLoaded**
Definition game.h:1270
Payload of the leaderboard attempt callbacks
Definition game.h:1377
**Payload of AddonToKodiFuncTable_Game::RCOnLeaderboardScoreboard**
Definition game.h:1402
Payload of the leaderboard tracker callbacks
Definition game.h:1428
**Payload of AddonToKodiFuncTable_Game::RCOnLoginResult**
Definition game.h:1317
GAME_STREAM_TYPE type
The stream type.
Definition game.h:545
@ GAME_STREAM_HW_FRAMEBUFFER
Hardware framebuffer.
Definition game.h:529
Stream buffers for hardware rendering and zero-copy support
Definition game.h:568
Stream packet and ephemeral metadata
Definition game.h:591
Immutable stream metadata
Definition game.h:543
GAME_ERROR
Game add-on error codes
Definition game.h:29
@ GAME_ERROR_INVALID_PARAMETERS
The parameters of the called method are invalid for this operation.
Definition game.h:43
@ GAME_ERROR_NOT_IMPLEMENTED
The method called by the frontend is not implemented.
Definition game.h:37
virtual GAME_ERROR SetImageIndex(unsigned int imageIndex)
Inserts the disk image at the given index.
Definition Game.h:1583
virtual unsigned int GetImageCount()
Gets the number of available disk images.
Definition Game.h:1591
virtual std::string GetImageLabel(unsigned int imageIndex)
Gets a user-friendly label for a disk image.
Definition Game.h:1666
virtual GAME_ERROR ReplaceImageIndex(unsigned int imageIndex, const std::string &filePath)
Replaces the disk image at the given index.
Definition Game.h:1613
virtual GAME_ERROR RemoveImageIndex(unsigned int imageIndex)
Removes the disk image at the given index.
Definition Game.h:1628
virtual std::string GetImagePath(unsigned int imageIndex)
Gets the full path of a disk image.
Definition Game.h:1656
virtual unsigned int GetImageIndex()
Gets the index of the currently inserted disk image.
Definition Game.h:1571
virtual GAME_ERROR SetInitialImage(unsigned int imageIndex, const std::string &filePath)
Sets which image should be initially inserted on load.
Definition Game.h:1643
virtual GAME_ERROR SetEjectState(bool ejected)
Opens or closes the virtual disk tray.
Definition Game.h:1562
virtual GAME_ERROR AddImageIndex()
Adds a new disk image slot.
Definition Game.h:1600
virtual bool GetEjectState()
Returns whether the virtual disk tray is currently ejected.
Definition Game.h:1549
virtual GAME_ERROR HwContextDestroy()
Called before the context is destroyed.
Definition Game.h:734
virtual GAME_ERROR HwContextReset()
Invalidates the current HW context and reinitializes GPU resources.
Definition Game.h:724
bool EnableHardwareRendering(const game_hw_rendering_properties &properties)
Callback to Kodi Function Enable hardware rendering functionality
Definition Game.h:708
game_proc_address_t HwGetProcAddress(const char *sym)
Callback to Kodi Function Get a symbol from the hardware context
Definition Game.h:745
bool IsOpen() const
Check if the stream opened correctly, e.g. after calling the constructor.
Definition Game.h:671
void ReleaseBuffer(game_stream_buffer &buffer)
Free an allocated buffer.
Definition Game.h:651
void Close()
Free the specified stream.
Definition Game.h:578
bool GetBuffer(unsigned int width, unsigned int height, game_stream_buffer &buffer)
Get a buffer for zero-copy stream data.
Definition Game.h:607
void AddData(const game_stream_packet &packet)
Add a data packet to a stream.
Definition Game.h:631
bool Open(const game_stream_properties &properties)
Create a stream for gameplay data.
Definition Game.h:544
virtual GAME_ERROR LoadGameSpecial(SPECIAL_GAME_TYPE type, const std::vector< std::string > &urls)
Load a game that requires multiple files.
Definition Game.h:341
virtual GAME_ERROR UnloadGame()
Unload the current game.
Definition Game.h:367
void SetGameTiming(const game_system_timing &timingInfo)
Callback to Kodi Function Update the video and audio timing of the running game
Definition Game.h:483
virtual GAME_ERROR GetGameTiming(game_system_timing &timing_info)
Get timing information about the loaded game.
Definition Game.h:377
virtual GAME_ERROR RunFrame()
Run a single frame for add-ons that use a game loop.
Definition Game.h:407
virtual bool RequiresGameLoop()
Return true if the client requires the frontend to provide a game loop.
Definition Game.h:399
void SetFastForwarding(bool fastForward, double ratio)
Callback to Kodi Function Ask Kodi to fast-forward the game, or to stop a fast-forward it asked for
Definition Game.h:503
virtual GAME_ERROR Reset()
Reset the current game.
Definition Game.h:415
virtual GAME_ERROR LoadStandalone()
Begin playing without a game file.
Definition Game.h:357
double GetPlaybackSpeed()
Callback to Kodi Function Get the speed the game is being played back at
Definition Game.h:466
void CloseGame(void)
Callback to Kodi Function Requests the frontend to stop the current game
Definition Game.h:424
void ReportMissingFile(const std::string &path)
Callback to Kodi Function Name a file the game client looked for and couldn't find,...
Definition Game.h:437
virtual GAME_ERROR LoadGame(const std::string &url)
Load a game.
Definition Game.h:330
virtual GAME_REGION GetRegion()
Get region of the loaded game.
Definition Game.h:388
virtual size_t AchievementStateSize()
How many bytes the achievement runtime's state needs right now.
Definition Game.h:1023
virtual GAME_ERROR SerializeAchievements(uint8_t *data, size_t size)
Write the achievement runtime's state.
Definition Game.h:1035
virtual GAME_ERROR DeserializeAchievements(const uint8_t *data, size_t size)
Restore achievement state written by SerializeAchievements()
Definition Game.h:1057
virtual GAME_ERROR Deserialize(const uint8_t *data, size_t size)
Deserialize the game from the given state.
Definition Game.h:1008
virtual GAME_ERROR Serialize(uint8_t *data, size_t size)
Serialize the state of the game.
Definition Game.h:997
virtual size_t SerializeSize()
Get the number of bytes required to serialize the game.
Definition Game.h:986
void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char *format,...)
Add a message to Kodi's log.
Definition AddonBase.h:1957
std::string ATTR_DLL_LOCAL GetRegion(const std::string &id)
Returns your regions setting as a string for the specified id.
Definition General.h:331
Game instance.
Definition game.h:1738
Game callbacks.
Definition game.h:1577
bool(* StartStream)(KODI_HANDLE, KODI_GAME_STREAM_HANDLE)
Reset a prepared hardware stream after installing its returned handle.
Definition game.h:1641
Definition addon_base.h:269
Internal used structure to have stored C API data above and available for everything below.
Definition AddonBase.h:74