CS:GO demo replay: How to skip to the next round?
Solution 1:
To move forward or back, you can use eg
demo_gototick -640 relative
. What does the four-argument version do?
I found no documentation regarding the four-argument version of demo_goto
(the 2523,666,370,700r
example they give.) It simply doesn't appear to be used, and if it is, it's probably far more finicky to use than what I'm going to suggest.
How do you figure out what they all mean?
Practice and play around with it! Specifying [relative]
will move the demo your specified number of ticks relative to the player's current position, so -640
will move you back 640 ticks from wherever you currently are. Specifying [pause]
will pause the demo once it reaches the tick you gave.
And specifically, how would you bind a key to the action "jump forward to the next round"?
Well, unfortunately, you can't. Not by using the demo commands alone, anyway.
If your goal is just to watch a specific round over and over, then I suggest just clicking the "Watch" tab on your main menu and click the round you wanted to watch on the game you have recorded. Otherwise, you can hop around more easily with the Demo UI.
Accessible by pressing Shift + F2 by default, or by passing the console command demoui
, this command opens a player that allows you to use a more intuitive control scheme than trying to manually use demo_gototick
.
Here's a screenshot of what it looks like:
This dialog lets you jump forward and backward rounds, spectated player deaths, and adjust the timescale freely.
I strongly recommend you do not try to manually slide the time bar as it's very inconsistent and sort of buggy. Instead, jump around with timescale adjustments and the round/death forward and backward buttons.
You can rebind the demo UI to somewhere more friendly to press by simply sending a bind
command in your console. As an example, bind "F8" "demoui"
will bind it to your F8 key.
Per your update:
When I'm reviewing, I want to jump to the rounds of interest; and once the demoui has the "Next Round" button selected, Shift-F2, Space, Shift-F2 will jump to next round - as long as I never select anything else. Having a key that actually does this exact action would be far more reliable.
Well... You can bind multiple actions to a key. The syntax for that is...
bind "Key" "action1;action2;action3;"
And so forth.
The problem here is that pressing "space" in this context isn't possible through binding. If it were, you could do bind "Key" "demoui 1;(space);demoui 0;"
, and it would work flawlessly.
To answer your question more directly:
There is currently no way to map skipping a round (forward or backwards) to a single key.
A workaround might be using a third-party macro recorder that sets off those series of commands whenever you press a preset key. Perhaps look into that?
Solution 2:
For anyone else who wants to do this, here's what it takes:
-
Bind a key to exec a file containing this sequence of commands:
con_logfile demoticks.log demo_listimportantticks con_logfile ""
-
Run a game state integration (GSI) server that is aware of
round
, and possiblyallplayers_id
,map
, andplayer_id
. -
Whenever the GSI server is notified that the current round number has changed, have it parse the demoticks.log file, looking for lines saying
Tick: 6750 Event: round_start
. Be aware that the file will be appended to, not overwritten. -
The GSI server writes out a file with a
demo_goto
command with the next round's tick number. Oh, and just to confuse you, CS:GO considers the round-over period to be part of the next round, not the previous one. (But that's consistent with the behaviour of the next/prev round buttons in demoui.) -
Bind a key to exec that file. That key is now a "next round" key.
If this seems way WAY too complicated, you're absolutely correct. Petition Valve to support demo_goto +1round relative
or something.