X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=mvm_cmds.c;h=69801a04a7078fa7d4916f0da00277f1fb69983e;hp=a2b756671e7d4d9cf5fe0b9b0750e7bf0df95303;hb=90ab66ba6bfed05c0ce331d321ff63eba7912637;hpb=3ee3928f37562370c855863fdc660064ceabf602 diff --git a/mvm_cmds.c b/mvm_cmds.c index a2b75667..69801a04 100644 --- a/mvm_cmds.c +++ b/mvm_cmds.c @@ -53,6 +53,12 @@ const char *vm_m_extensions[] = { NULL }; +qbool MP_ConsoleCommand(const char *text) +{ + prvm_prog_t *prog = MVM_prog; + return PRVM_ConsoleCommand(prog, text, &prog->funcoffsets.GameCommand, false, -1, 0, prog->loaded, "QC function GameCommand is missing"); +} + /* ========= VM_M_setmousetarget @@ -932,6 +938,130 @@ static void VM_M_crypto_getmyidstatus(prvm_prog_t *prog) } } +// CL_Video interface functions + +/* +======================== +VM_cin_open + +float cin_open(string file, string name) +======================== +*/ +void VM_cin_open(prvm_prog_t *prog) +{ + const char *file; + const char *name; + + VM_SAFEPARMCOUNT( 2, VM_cin_open ); + + file = PRVM_G_STRING( OFS_PARM0 ); + name = PRVM_G_STRING( OFS_PARM1 ); + + VM_CheckEmptyString(prog, file ); + VM_CheckEmptyString(prog, name ); + + if( CL_OpenVideo( file, name, MENUOWNER, "" ) ) + PRVM_G_FLOAT( OFS_RETURN ) = 1; + else + PRVM_G_FLOAT( OFS_RETURN ) = 0; +} + +/* +======================== +VM_cin_close + +void cin_close(string name) +======================== +*/ +void VM_cin_close(prvm_prog_t *prog) +{ + const char *name; + + VM_SAFEPARMCOUNT( 1, VM_cin_close ); + + name = PRVM_G_STRING( OFS_PARM0 ); + VM_CheckEmptyString(prog, name ); + + CL_CloseVideo( CL_GetVideoByName( name ) ); +} + +/* +======================== +VM_cin_setstate +void cin_setstate(string name, float type) +======================== +*/ +void VM_cin_setstate(prvm_prog_t *prog) +{ + const char *name; + clvideostate_t state; + clvideo_t *video; + + VM_SAFEPARMCOUNT( 2, VM_cin_setstate ); + + name = PRVM_G_STRING( OFS_PARM0 ); + VM_CheckEmptyString(prog, name ); + + state = (clvideostate_t)((int)PRVM_G_FLOAT( OFS_PARM1 )); + + video = CL_GetVideoByName( name ); + if( video && state > CLVIDEO_UNUSED && state < CLVIDEO_STATECOUNT ) + CL_SetVideoState( video, state ); +} + +/* +======================== +VM_cin_getstate + +float cin_getstate(string name) +======================== +*/ +void VM_cin_getstate(prvm_prog_t *prog) +{ + const char *name; + clvideo_t *video; + + VM_SAFEPARMCOUNT( 1, VM_cin_getstate ); + + name = PRVM_G_STRING( OFS_PARM0 ); + VM_CheckEmptyString(prog, name ); + + video = CL_GetVideoByName( name ); + if( video ) + PRVM_G_FLOAT( OFS_RETURN ) = (int)video->state; + else + PRVM_G_FLOAT( OFS_RETURN ) = 0; +} + +/* +======================== +VM_cin_restart + +void cin_restart(string name) +======================== +*/ +void VM_cin_restart(prvm_prog_t *prog) +{ + const char *name; + clvideo_t *video; + + VM_SAFEPARMCOUNT( 1, VM_cin_restart ); + + name = PRVM_G_STRING( OFS_PARM0 ); + VM_CheckEmptyString(prog, name ); + + video = CL_GetVideoByName( name ); + if( video ) + CL_RestartVideo( video ); +} + +static void VM_M_registercommand(prvm_prog_t *prog) +{ + VM_SAFEPARMCOUNT(1, VM_M_registercommand); + if(!Cmd_Exists(cmd_local, PRVM_G_STRING(OFS_PARM0))) + Cmd_AddCommand(CF_CLIENT, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC"); +} + prvm_builtin_t vm_m_builtins[] = { NULL, // #0 NULL function (not callable) VM_checkextension, // #1 @@ -946,7 +1076,7 @@ VM_vlen, // #9 VM_vectoyaw, // #10 VM_vectoangles, // #11 VM_random, // #12 -VM_localcmd_client, // #13 +VM_localcmd_local, // #13 VM_cvar, // #14 VM_cvar_set, // #15 VM_dprint, // #16 @@ -1312,7 +1442,7 @@ NULL, // #348 VM_CL_isdemo, // #349 NULL, // #350 NULL, // #351 -NULL, // #352 +VM_M_registercommand, // #352 void(string cmdname) VM_wasfreed, // #353 float(entity ent) wasfreed NULL, // #354 VM_CL_videoplaying, // #355