Skip to content

Commit

Permalink
MVD: Support //ucmd command in .mvd, support "show keys" in demo play…
Browse files Browse the repository at this point in the history
…back
  • Loading branch information
meag committed Dec 21, 2016
1 parent 037cd50 commit af545bf
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 45 deletions.
90 changes: 45 additions & 45 deletions cl_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1052,49 +1052,49 @@ qbool CL_CheckServerCommand (void) {
}

usermainbuttons_t CL_GetLastCmd (void) {
int i;
usercmd_t cmd;
usermainbuttons_t ret;
static int last_impulse;
static double impulse_time;

// if (!show_input.value)
// return;

i = (cls.netchan.outgoing_sequence-1) & UPDATE_MASK;
cmd = cl.frames[i].cmd;

if (cmd.impulse) {
last_impulse = cmd.impulse;
impulse_time = cls.realtime;
}
if (!(last_impulse && cls.realtime >= impulse_time &&
cls.realtime <= impulse_time + 0.2))
last_impulse = 0;

ret.attack = cmd.buttons & BUTTON_ATTACK;
ret.jump = cmd.buttons & BUTTON_JUMP;
ret.up = cmd.upmove > 0;
ret.down = cmd.upmove < 0;
ret.forward = cmd.forwardmove > 0;
ret.back = cmd.forwardmove < 0;
ret.left = cmd.sidemove < 0;
ret.right = cmd.sidemove > 0;

return ret;

/*
snprintf(str, sizeof(str), "%s %s%s%s %s %s %s",
cmd.upmove > 0 ? "up" : cmd.upmove < 0 ? "dn" : " ",
cmd.sidemove < 0 ? "<-" : " ",
cmd.forwardmove > 0 ? "^" : cmd.forwardmove < 0 ? "v" : " ",
cmd.sidemove > 0 ? "->" : " ",
cmd.buttons & BUTTON_JUMP ? "jump" : " ",
cmd.buttons & BUTTON_ATTACK ? "attk" : " ",
imp ? va("%-3i", imp) : " ");
x = ELEMENT_X_COORD(show_fps); // FIXME --> show_input
y = ELEMENT_Y_COORD(show_fps);
Draw_String (x, y, str);
*/
usercmd_t cmd;
usermainbuttons_t ret;
static int last_impulse;
static double impulse_time;

extern void MVD_FlushUserCommands (void);

if (cls.mvdplayback && cl.mvd_time_offset) {
int i = 0;

memset (&ret, 0, sizeof (ret));

// Check for latest
MVD_FlushUserCommands ();

ret.attack = (cl.mvd_user_cmd[0] & 1);
ret.jump = (cl.mvd_user_cmd[0] & 2);
ret.forward = (cl.mvd_user_cmd[0] & 4);
ret.back = (cl.mvd_user_cmd[0] & 8);
ret.right = (cl.mvd_user_cmd[0] & 16);
ret.left = (cl.mvd_user_cmd[0] & 32);
ret.up = (cl.mvd_user_cmd[0] & 64);
ret.down = (cl.mvd_user_cmd[0] & 128);
return ret;
}

cmd = cl.frames[(cls.netchan.outgoing_sequence - 1) & UPDATE_MASK].cmd;

ret.attack = cmd.buttons & BUTTON_ATTACK;
ret.jump = cmd.buttons & BUTTON_JUMP;
ret.up = cmd.upmove > 0;
ret.down = cmd.upmove < 0;
ret.forward = cmd.forwardmove > 0;
ret.back = cmd.forwardmove < 0;
ret.left = cmd.sidemove < 0;
ret.right = cmd.sidemove > 0;

if (cmd.impulse) {
last_impulse = cmd.impulse;
impulse_time = cls.realtime;
}
if (!(last_impulse && cls.realtime >= impulse_time &&
cls.realtime <= impulse_time + 0.2))
last_impulse = 0;
return ret;
}
6 changes: 6 additions & 0 deletions cl_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -3044,6 +3044,12 @@ void CL_ParseStufftext (void)
strlcat(data, "\n", sizeof(data));
Cbuf_AddTextEx(&cbuf_svc, data);
}
else if (!strncmp(s, "//ucmd ", sizeof("//ucmd ") - 1))
{
extern void MVD_ParseUserCommand (const char* s);

MVD_ParseUserCommand (s + sizeof("//ucmd ") - 1);
}
else
{
Cbuf_AddTextEx(&cbuf_svc, s);
Expand Down
4 changes: 4 additions & 0 deletions client.h
Original file line number Diff line number Diff line change
Expand Up @@ -594,6 +594,10 @@ typedef struct {
int last_armor_pickup;
int last_weapon_pickup;
int last_ammo_pickup;

float mvd_time_offset;
int mvd_user_cmd[8];
float mvd_user_cmd_time[8];
} clientState_t;

extern clientState_t cl;
Expand Down
44 changes: 44 additions & 0 deletions mvd_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -1466,3 +1466,47 @@ void MVD_Screen (void){
MVD_Info ();
MVD_Status ();
}

void MVD_FlushUserCommands (void)
{
int i;
float targettime = cls.demotime + cl.mvd_time_offset;

for (i = 1; i < sizeof (cl.mvd_user_cmd) / sizeof (cl.mvd_user_cmd[0]); ++i) {
if (cl.mvd_user_cmd_time[i] && cl.mvd_user_cmd_time[i] <= targettime) {
cl.mvd_user_cmd_time[0] = cl.mvd_user_cmd_time[i];
cl.mvd_user_cmd[0] = cl.mvd_user_cmd[i];
cl.mvd_user_cmd_time[i] = 0;
cl.mvd_user_cmd[i] = 0;
}
}
}

void MVD_ParseUserCommand (const char* s)
{
float time;
int command;
int i;

Cmd_TokenizeString( (char*)s );

if (Cmd_Argc () != 2) {
return;
}

time = atof( Cmd_Argv( 0 ) );
command = atoi( Cmd_Argv( 1 ) );

if (! cl.mvd_time_offset) {
cl.mvd_time_offset = time - cls.demotime;
}

MVD_FlushUserCommands ();
for (i = 0; i < sizeof (cl.mvd_user_cmd) / sizeof (cl.mvd_user_cmd[0]); ++i) {
if (cl.mvd_user_cmd_time[i] == 0) {
cl.mvd_user_cmd_time[i] = time;
cl.mvd_user_cmd[i] = command;
break;
}
}
}

0 comments on commit af545bf

Please sign in to comment.