@@ -54,10 +54,8 @@ SetTimelineStateDesc
Which round is happening in a multiplayer game
The current score for a sports game
-
- ClearTimelineStateDescription
-
-void ClearTimelineStateDescription( float flTimeDelta );
+ClearTimelineTooltip
+void ClearTimelineTooltip( float flTimeDelta );
Clears the previous set game state in the timeline.
-AddTimelineEvent
+
+ AddInstantaneousTimelineEvent
+
- void AddTimelineEvent( const char *pchIcon, const char *pchTitle, const char *pchDescription,
- uint32 unPriority, float flStartOffsetSeconds, float flDurationSeconds,
- ETimelineEventClipPriority ePossibleClip ) ;
+ TimelineEventHandle_t AddInstantaneousTimelineEvent( const char *pchIcon, const char *pchTitle,
+ const char *pchDescription, uint32 unPriority, float flStartOffsetSeconds,
+ ETimelineEventClipPriority ePossibleClip );
@@ -88,6 +88,26 @@ AddTimelineEvent
Type |
Description |
+
+ pchTitle |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchDescription |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
pchIcon |
const char * |
@@ -101,6 +121,102 @@ AddTimelineEvent
>.
+
+ unPriority |
+ uint32 |
+
+ Provide the priority to use when the UI is deciding which icons to display in crowded
+ parts of the timeline. Events with larger priority values will be displayed more
+ prominently than events with smaller priority values. This value must be between 0 and
+ k_unMaxTimelinePriority .
+ |
+
+
+ flStartOffsetSeconds |
+ float |
+
+ The time offset in seconds to apply to the start of the event. Negative times indicate
+ an
+ event that happened in the past.
+
+ One use of this parameter is to handle events whose significance is not clear until
+ after the fact. For instance if the player starts a damage over time effect on another
+ player, which kills them 3.5 seconds later, the game could pass -3.5 as the start offset
+ and cause the event to appear in the timeline where the effect started.
+ |
+
+
+ ePossibleClip |
+
+ ETimelineEventClipPriority
+ |
+
+ Allows the game to describe events that should be suggested to the user as possible
+ video clips.
+ |
+
+
+
+Use this to mark an event (A) on the Timeline.
+This event will be instantaneous. (See
+ISteamTimeline::AddRangeTimelineEvent
+to add events that happened over time.)
+
+Examples could include:
+
+ - picking up a new weapon or ammo
+ - scoring a goal
+
+
+The game can nominate an event as being suitable for a clip by passing
+k_ETimelineEventClipPriority_Standard
or
+k_ETimelineEventClipPriority_Featured
to
+ePossibleClip
. Players can make clips of
+their own at any point, but this lets the game suggest some options to Steam to make that process
+easier for players.
+
+This function returns a
+TimelineEventHandle_t
+that can be used with
+ISteamTimeline::RemoveTimelineEvent
+or the overlay functions
+ISteamTimeline::DoesEventRecordingExist
+and
+ISteamTimeline::OpenOverlayToTimelineEvent.
+AddRangeTimelineEvent
+
+ TimelineEventHandle_t AddRangeTimelineEvent( const char *pchIcon, const char *pchTitle, const
+ char *pchDescription, uint32 unPriority, float flStartOffsetSeconds, float flDurationSeconds,
+ ETimelineEventClipPriority ePossibleClip );
+
+
+
+ Name |
+ Type |
+ Description |
+
pchTitle |
const char * |
@@ -121,6 +237,19 @@ AddTimelineEvent
>.
+
+ pchIcon |
+ const char * |
+
+ The name of the icon to show at the timeline at this point. This can be one of the icons
+ uploaded through the Steamworks partner Site for your title, or one of the provided
+ icons that start with steam_ .
+ The Steam Timelines overview includes a
+ list of available icons.
+ |
+
unPriority |
uint32 |
@@ -166,17 +295,14 @@ AddTimelineEvent
-Use this to mark an event (A) on the Timeline.
-The event can be instantaneous or take some amount of time to complete, depending on the value
-passed in flDurationSeconds.
+Use this to mark an event (A) on the Timeline
+that takes some amount of time to complete.
Examples could include:
- a boss battle
- - a cut scene
- - a large team fight
- - picking up a new weapon or ammo
- - scoring a goal
+ - an impressive combo
+ - a large team fight
The game can nominate an event as being suitable for a clip by passing
@@ -184,7 +310,517 @@ AddTimelineEvent
k_ETimelineEventClipPriority_Featured
to
ePossibleClip
. Players can make clips of
their own at any point, but this lets the game suggest some options to Steam to make that process
+easier for players.
+
+This function returns a
+TimelineEventHandle_t
that can be used with
+RemoveTimelineEvent
or the overlay functions
+ISteamTimeline::DoesEventRecordingExist
+and
+ISteamTimeline::OpenOverlayToTimelineEvent.
+StartRangeTimelineEvent
+
+ TimelineEventHandle_t StartRangeTimelineEvent( const char *pchIcon, const char *pchTitle, const
+ char *pchDescription, uint32 unPriority, float flStartOffsetSeconds, ETimelineEventClipPriority
+ ePossibleClip );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchTitle |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchDescription |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchIcon |
+ const char * |
+
+ The name of the icon to show at the timeline at this point. This can be one of the icons
+ uploaded through the Steamworks partner Site for your title, or one of the provided
+ icons that start with steam_ .
+ The Steam Timelines overview includes a
+ list of available icons.
+ |
+
+
+ unPriority |
+ uint32 |
+
+ Provide the priority to use when the UI is deciding which icons to display in crowded
+ parts of the timeline. Events with larger priority values will be displayed more
+ prominently than events with smaller priority values. This value must be between 0 and
+ k_unMaxTimelinePriority .
+ |
+
+
+ flStartOffsetSeconds |
+ float |
+
+ The time offset in seconds to apply to the start of the event. Negative times indicate
+ an
+ event that happened in the past.
+
+ One use of this parameter is to handle events whose significance is not clear until
+ after the fact. For instance if the player starts a damage over time effect on another
+ player, which kills them 3.5 seconds later, the game could pass -3.5 as the start offset
+ and cause the event to appear in the timeline where the effect started.
+ |
+
+
+ ePossibleClip |
+
+ ETimelineEventClipPriority
+ |
+
+ Allows the game to describe events that should be suggested to the user as possible
+ video clips.
+ |
+
+
+
+Use this to mark the start of an event (A) on
+the Timeline that takes some amount of time to complete. The duration of the event is determined by
+a matching call to EndRangeTimelineEvent
. If
+the game wants to cancel an event in progress, they can do that with a call to
+RemoveTimelineEvent
.
+
+The event in progress can be updated any number of times with
+ISteamTimeline::UpdateRangeTimelineEvent.
+
+The game can nominate an event as being suitable for a clip by passing
+k_ETimelineEventClipPriority_Standard
or
+k_ETimelineEventClipPriority_Featured
to
+ePossibleClip
. Players can make clips of
+their own at any point, but this lets the game suggest some options to Steam to make that process
easier for players.
+UpdateRangeTimelineEvent
+
+ void UpdateRangeTimelineEvent( TimelineEventHandle_t ulEvent, const char *pchTitle, const char
+ *pchDescription, const char *pchIcon, uint32 unPriority, ETimelineEventClipPriority
+ ePossibleClip );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ ulEvent |
+ TimelineEventHandle_t |
+ Handle of the event to update. |
+
+
+ pchTitle |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchDescription |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchIcon |
+ const char * |
+
+ The name of the icon to show at the timeline at this point. This can be one of the icons
+ uploaded through the Steamworks partner Site for your title, or one of the provided
+ icons that start with steam_ .
+ The Steam Timelines overview includes a
+ list of available icons.
+ |
+
+
+ unPriority |
+ uint32 |
+
+ Provide the priority to use when the UI is deciding which icons to display in crowded
+ parts of the timeline. Events with larger priority values will be displayed more
+ prominently than events with smaller priority values. This value must be between 0 and
+ k_unMaxTimelinePriority .
+ |
+
+
+ flStartOffsetSeconds |
+ float |
+
+ The time offset in seconds to apply to the start of the event. Negative times indicate
+ an
+ event that happened in the past.
+
+ One use of this parameter is to handle events whose significance is not clear until
+ after the fact. For instance if the player starts a damage over time effect on another
+ player, which kills them 3.5 seconds later, the game could pass -3.5 as the start offset
+ and cause the event to appear in the timeline where the effect started.
+ |
+
+
+ ePossibleClip |
+
+ ETimelineEventClipPriority
+ |
+
+ Allows the game to describe events that should be suggested to the user as possible
+ video clips.
+ |
+
+
+
+Use this to update the details of an event that was started with
+ISteamTimeline::StartRangeTimelineEvent.
+EndRangeTimelineEvent
+
+ void EndRangeTimelineEvent( TimelineEventHandle_t ulEvent, const char *pchTitle, const char
+ *pchDescription, const char *pchIcon, uint32 unPriority, ETimelineEventClipPriority
+ ePossibleClip );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ ulEvent |
+ TimelineEventHandle_t |
+ Handle of the event to end. |
+
+
+ flEndOffsetSeconds |
+ float |
+
+ The time offset in seconds to apply to the end of the event. Negative times indicate an
+
+ event that happened in the past.
+ |
+
+
+
+Use this to identify the end of an event that was started with
+ISteamTimeline::StartRangeTimelineEvent.
+DoesEventRecordingExist
+
+ SteamAPICall_t DoesEventRecordingExist( TimelineEventHandle_t ulEvent );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ ulEvent |
+ TimelineEventHandle_t |
+ Handle of the event to check for recordings. |
+
+
+
+Use this to determine if video recordings exist for the specified event. Steam will sent a
+SteamTimelineEventRecordingExists_t
+callback with the result. This can be useful when the game needs to decide whether or not to show a
+control that will call
+ISteamTimeline::OpenOverlayToTimelineEvent.
+
+Returns:
+SteamAPICall_t
+to be used with a
+SteamTimelineEventRecordingExists_t
+call result.
+StartGamePhase
+void StartGamePhase();
+
+Use this to start a game phase. Game phases allow the user to navigate their background recordings
+and clips. Exactly what a game phase means will vary game to game, but the game phase should be a
+section of gameplay that is usually between 10 minutes and a few hours in length, and should be the
+main way a user would think to divide up the game. These are presented to the user in a UI that
+shows the date the game was played, with one row per game slice. Game phases should be used to mark
+sections of gameplay that the user might be interested in watching.
+
+Examples could include:
+
+ - A single match in a multiplayer PvP game
+ - A chapter of a story-based singleplayer game
+ - A single run in a roguelike
+
+
+Game phases are started with StartGamePhase, and while a phase is still happening, they can have
+tags and attributes added to them with
+ISteamTimeline::AddGamePhaseTag
+or
+ISteamTimeline::SetGamePhaseAttribute. Only one game phase can be active at a time.
+EndGamePhase
+void EndGamePhase();
+
+Use this to end a game phase that was started with
+ISteamTimeline::StartGamePhase.
+SetGamePhaseID
+void SetGamePhaseID( const char *pchPhaseID) ;
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchPhaseID |
+ const char * |
+
+ A game-provided persistent ID for a game phase. This could be a the match ID in a
+ multiplayer game, a chapter name in a single player game, the ID of a character, etc.
+ |
+
+
+
+The phase ID is used to let the game identify which phase it is referring to in calls to
+ISteamTimeline::DoesGamePhaseRecordingExist
+or
+ISteamTimeline::OpenOverlayToGamePhase. It may also be used to associated multiple phases with each other.
+DoesGamePhaseRecordingExist
+SteamAPICall_t DoesGamePhaseRecordingExist( const char *pchPhaseID );
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchPhaseID |
+ const char * |
+ A game-provided persistent ID for a game phase. |
+
+
+
+Use this to determine if video recordings exist for the specified game phase. Steam will sent a
+SteamTimelineGamePhaseRecordingExists_t
+callback with the result. This can be useful when the game needs to decide whether or not to show a
+control that will call
+ISteamTimeline::OpenOverlayToGamePhase.
+
+Returns:
+SteamAPICall_t
+to be used with a
+SteamTimelineGamePhaseRecordingExists_t
+call result.
+AddGamePhaseTag
+
+ void AddGamePhaseTag( const char *pchTagName, const char *pchTagIcon, const char *pchTagGroup,
+ uint32 unPriority );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchTagName |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchIcon |
+ const char * |
+
+ The name of the icon to show when the tag is shown in the UI. This can be one of the
+ icons uploaded through the Steamworks partner Site for your title, or one of the
+ provided icons that start with
+ steam_ . The Steam Timelines
+ overview includes a
+ list of available icons.
+ |
+
+
+ pchTagGroup |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() . Tags within the same group will be shown together in the UI.
+ |
+
+
+ unPriority |
+ uint32 |
+
+ Provide the priority to use when the UI is deciding which icons to display. Tags with
+ larger priority values will be displayed more prominently than tags with smaller
+ priority values. This value must be between 0 and
+ k_unMaxTimelinePriority .
+ |
+
+
+
+Use this to add a game phase tag. Phase tags represent data with a well defined set of options,
+which could be data such as match resolution, hero played, game mode, etc. Tags can have an icon in
+addition to a text name. Multiple tags within the same group may be added per phase and all will be
+remembered. For example, AddGamePhaseTag
may
+be called multiple times for a "Bosses Defeated" group, with different names and icons for each boss
+defeated during the phase, all of which will be shown to the user.
+SetGamePhaseAttribute
+
+ void SetGamePhaseAttribute( const char *pchAttributeGroup, const char *pchAttributeValue, uint32
+ unPriority );
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchAttributeGroup |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ pchAttributeValue |
+ const char * |
+
+ Title-provided localized string in the language returned by
+ SteamUtils()->GetSteamUILanguage() .
+ |
+
+
+ unPriority |
+ uint32 |
+
+ Provide the priority to use when the UI is deciding which attributes to display.
+ Attributes with larger priority values will be displayed more prominently than
+ attributes with smaller priority values. This value must be between 0 and
+ k_unMaxTimelinePriority .
+ |
+
+
+
+Use this to add a game phase attribute. Phase attributes represent generic text fields that can be
+updated throughout the duration of the phase. They are meant
+to be used for phase metadata that is not part of a well defined set of options. For example, a KDA
+attribute that starts
+with the value "0/0/0" and updates as the phase progresses, or something like a played-entered
+character name. Attributes
+can be set as many times as the game likes with SetGamePhaseAttribute, and only the last value will
+be shown to the user.
SetTimelineGameMode
void SetTimelineGameMode( ETimelineGameMode eMode );
@@ -210,23 +846,128 @@ SetTimelineGameMode<
>ETimelineGameMode
for how to use each value.
+OpenOverlayToGamePhase
+
void OpenOverlayToGamePhase( const char *pchPhaseID );
+
+
+ Name |
+ Type |
+ Description |
+
+
+ pchPhaseID |
+ const char *pchPhaseID |
+ The game phase to show in the overlay. |
+
+
+
+Opens the Steam overlay to the section of the timeline represented by the game phase.
+OpenOverlayToTimelineEvent
+void OpenOverlayToTimelineEvent( const TimelineEventHandle_t );
+
+
+ Name |
+ Type |
+ Description |
+
+
+ ulEvent |
+ TimelineEventHandle_t |
+ Handle of the event to show in the overlay. |
+
+
+
+Opens the Steam overlay to the section of the timeline represented by the timeline event. This event
+must be in the current game session, since
+TimelineEventHandle_t
+values are not valid for future runs of the game.
+Callbacks
+These are callbacks that can be fired by calling
+SteamAPI_RunCallbacks. These will be fired directly in response to the member functions of
+ISteamTimeline
.
+
+ SteamTimelineGamePhaseRecordingExists_t
+
+Called when asking if recordings exist for a game phase ID.
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ m_rgchPhaseID |
+ char[] |
+ The phase ID that this result corresponds with |
+
+
+ m_ulRecordingMS |
+ uint64 |
+ The total length of the recordings in this phase in milliseconds |
+
+
+ m_ulLongestClipMS |
+ uint64 |
+ The total length of the longest clip in this phase in milliseconds |
+
+
+ m_unClipCount |
+ uint32 |
+ The number of clips that include video from this phase |
+
+
+ m_unScreenshotCount |
+ uint32 |
+ The number of screenshots the user has from this phase |
+
+
+
+ SteamTimelineEventRecordingExists_t
+
+Called when asking if recordings exist for an event handle.
+
+
+
+ Name |
+ Type |
+ Description |
+
+
+ m_ulEventID |
+ TimelineEventHandle_t |
+ The handle of the event that was asked about |
+
+
+ m_bRecordingExists |
+ bool |
+ This is true if recording exists for the requested event handle |
+
+
+
+Associated Functions:
+ISteamTimeline::DoesEventRecordingExist
Enums
These are enums which are defined for use with ISteamTimeline.
ETimelineGameMode
Controls the color of the timeline bar segments. The value names listed here map to a multiplayer
-game, where
-the user starts a game (in menus), then joins a multiplayer session that first has a character
-selection lobby
-then finally the multiplayer session starts. However, you can also map these values to any type of
-game. In a single
-player game where you visit towns & dungeons, you could set
-k_ETimelineGameMode_Menus
when the player is
-in a town
-buying items,
+game, where the user starts a game (in menus), then joins a multiplayer session that first has a
+character selection lobby then finally the multiplayer session starts. However, you can also map
+these values to any type of game. In a single player game where you visit towns & dungeons, you
+could set k_ETimelineGameMode_Menus
when the
+player is in a town buying items,
k_ETimelineGameMode_Staging
for when a
dungeon is loading and
-k_ETimelineGameMode_Playing
for when
-inside the dungeon fighting monsters.
+k_ETimelineGameMode_Playing
for when inside
+the dungeon fighting monsters.
@@ -255,6 +996,11 @@ ETimelineGameMode
The player is waiting for a loading screen. |
+
+End a timeline event that was started with
+StartRangeTimelineEvent
ETimelineEventClipPriority
Used in AddTimelineEvent, where Featured events will be offered before Standard events.
@@ -288,6 +1034,11 @@ ETimelineEven
+TimelineEventHandle_t
+
+Used to identify a single timeline event, which may still be in progress or may be completed. These
+handles are only valid for the current run of the game, and may not be used after the game is
+restarted.
Diagrams
Q. My game is using D3D12 on Win7, and the Steam overlay is not working. Why
>Microsoft document
on how to add Steam overlay support.
+Q. My game runs in a browser. Can the Overlay work in that?
+A. The Steam Overlay requires a game consistently render frames, not pausing
+rendering or rendering only part of the screen based on dirty rects. Unfortunately, web browsers do
+not support this model. A workaround for web based games is to host an embedded Chromium inside a
+native application, with a D3D window and input forwarding to the embedded Chromium. That can be
+setup to render in offscreen mode, which then renders the resulting chromium texture each frame in
+the native app. Partners often use CEF to do this, though this is not an easy task.
diff --git a/docs/links.json b/docs/links.json
index 86f4839..dc45712 100644
--- a/docs/links.json
+++ b/docs/links.json
@@ -56,6 +56,7 @@
"api/isteamvideo",
"api/joinparty_t",
"api/reservationnotificationcallback_t",
+ "api/startrangetimelineevent",
"api/steam_api",
"api/steam_gameserver",
"api/steamdatagramrelay",
@@ -64,6 +65,9 @@
"api/steamnetworkingtypes",
"api/steamnetworkingtyupes",
"api/steamnetwrokingtypes",
+ "api/steamtimelineeventrecordingexists_t",
+ "api/steamtimelinegamephaserecordingexists_t",
+ "api/timelineeventhandle_t",
"api/uint32",
"api/uint8",
"capi/index.html",
diff --git a/docs/store/application/branches.html b/docs/store/application/branches.html
index 8a04637..d970f29 100644
--- a/docs/store/application/branches.html
+++ b/docs/store/application/branches.html
@@ -31,7 +31,16 @@ Branches (Betas)
/>
As soon as a tester or customer has selected the branch, the Steam client will start downloading the
-branch, replacing their currently installed branch.
+branch, replacing their currently installed branch.
+
+One a player is opted in to any branch other than "default/none," Steam will show some UI next to
+the play button indicating the selected branch.
+
+
Default Branch
The default branch is the version of your game delivered to your customers on Steam. Prior to
release, this is the version that your testers will download by default. Once your game is live,
@@ -75,4 +84,51 @@ Adding a new Branch
+Switching Branches from within your game
+Steam has a set of APIs that lets a game tell Steam to switch the user to a particular beta branch.
+This can be found in the ISteamApp documentation here:
+https://partner.steamgames.com/doc/api/ISteamApps
+
+ -
+ GetCurrentBetaName
+
+ -
+ GetNumBetas
+
+ -
+ GetBetaInfo
+
+ -
+ SetActiveBeta
+
+
+For some example use cases where you may want to use these APIs, please see our blog post:
+New: Steam APIs For Switching Game Versions & Beta Branches
diff --git a/docs/webapi/isteamapps.html b/docs/webapi/isteamapps.html
index 610e6f2..e1bbe8f 100644
--- a/docs/webapi/isteamapps.html
+++ b/docs/webapi/isteamapps.html
@@ -279,7 +279,7 @@ SetAppBuildLive