]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - mvm_cmds.c
Merge branch 'master' into Mario/wrath-darkplaces_extra
[xonotic/darkplaces.git] / mvm_cmds.c
index d44d22c363ef7020b93c0bdb657a4b51ba7bf4ec..1d0c401b359cb1d0e32c7d0c9d31ca58643f281f 100644 (file)
 //============================================================================
 // Menu
 
-const char *vm_m_extensions =
-"BX_WAL_SUPPORT "
-"DP_CINEMATIC_DPV "
-"DP_COVERAGE "
-"DP_CRYPTO "
-"DP_CSQC_BINDMAPS "
-"DP_GFX_FONTS "
-"DP_GFX_FONTS_FREETYPE "
-"DP_UTF8 "
-"DP_FONT_VARIABLEWIDTH "
-"DP_MENU_EXTRESPONSEPACKET "
-"DP_QC_ASINACOSATANATAN2TAN "
-"DP_QC_AUTOCVARS "
-"DP_QC_CMD "
-"DP_QC_CRC16 "
-"DP_QC_CVAR_TYPE "
-"DP_QC_CVAR_DESCRIPTION "
-"DP_QC_DIGEST "
-"DP_QC_DIGEST_SHA256 "
-"DP_QC_FINDCHAIN_TOFIELD "
-"DP_QC_I18N "
-"DP_QC_LOG "
-"DP_QC_RENDER_SCENE "
-"DP_QC_SPRINTF "
-"DP_QC_STRFTIME "
-"DP_QC_STRINGBUFFERS "
-"DP_QC_STRINGBUFFERS_CVARLIST "
-"DP_QC_STRINGBUFFERS_EXT_WIP "
-"DP_QC_STRINGCOLORFUNCTIONS "
-"DP_QC_STRING_CASE_FUNCTIONS "
-"DP_QC_STRREPLACE "
-"DP_QC_TOKENIZEBYSEPARATOR "
-"DP_QC_TOKENIZE_CONSOLE "
-"DP_QC_UNLIMITEDTEMPSTRINGS "
-"DP_QC_URI_ESCAPE "
-"DP_QC_URI_GET "
-"DP_QC_URI_POST "
-"DP_QC_WHICHPACK "
-"FTE_STRINGS "
-;
+const char *vm_m_extensions[] = {
+"BX_WAL_SUPPORT",
+"DP_CINEMATIC_DPV",
+"DP_COVERAGE",
+"DP_CRYPTO",
+"DP_CSQC_BINDMAPS",
+"DP_GFX_FONTS",
+"DP_GFX_FONTS_FREETYPE",
+"DP_UTF8",
+"DP_FONT_VARIABLEWIDTH",
+"DP_MENU_EXTRESPONSEPACKET",
+"DP_QC_ASINACOSATANATAN2TAN",
+"DP_QC_AUTOCVARS",
+"DP_QC_CMD",
+"DP_QC_CRC16",
+"DP_QC_CVAR_TYPE",
+"DP_QC_CVAR_DESCRIPTION",
+"DP_QC_DIGEST",
+"DP_QC_DIGEST_SHA256",
+"DP_QC_FINDCHAIN_TOFIELD",
+"DP_QC_I18N",
+"DP_QC_LOG",
+"DP_QC_RENDER_SCENE",
+"DP_QC_SPRINTF",
+"DP_QC_STRFTIME",
+"DP_QC_STRINGBUFFERS",
+"DP_QC_STRINGBUFFERS_CVARLIST",
+"DP_QC_STRINGBUFFERS_EXT_WIP",
+"DP_QC_STRINGCOLORFUNCTIONS",
+"DP_QC_STRING_CASE_FUNCTIONS",
+"DP_QC_STRREPLACE",
+"DP_QC_TOKENIZEBYSEPARATOR",
+"DP_QC_TOKENIZE_CONSOLE",
+"DP_QC_UNLIMITEDTEMPSTRINGS",
+"DP_QC_URI_ESCAPE",
+"DP_QC_URI_GET",
+"DP_QC_URI_POST",
+"DP_QC_WHICHPACK",
+"FTE_STRINGS",
+"DP_QC_FS_SEARCH_PACKFILE",
+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");
+}
 
 /*
 =========
@@ -171,7 +179,7 @@ vector      getresolution(float number)
 static void VM_M_getresolution(prvm_prog_t *prog)
 {
        int nr, fs;
-       VM_SAFEPARMCOUNTRANGE(1, 2, VM_getresolution);
+       VM_SAFEPARMCOUNTRANGE(1, 2, VM_M_getresolution);
 
        nr = (int)PRVM_G_FLOAT(OFS_PARM0);
 
@@ -521,7 +529,7 @@ static void VM_M_getserverlistnumber(prvm_prog_t *prog)
        const serverlist_entry_t *cache;
        int hostnr;
 
-       VM_SAFEPARMCOUNT(2, VM_M_getserverliststring);
+       VM_SAFEPARMCOUNT(2, VM_M_getserverlistnumber);
 
        PRVM_G_INT(OFS_RETURN) = OFS_NULL;
 
@@ -597,7 +605,7 @@ refreshserverlist()
 */
 static void VM_M_refreshserverlist(prvm_prog_t *prog)
 {
-       qboolean do_reset = false;
+       qbool do_reset = false;
        VM_SAFEPARMCOUNTRANGE( 0, 1, VM_M_refreshserverlist );
        if (prog->argc >= 1 && PRVM_G_FLOAT(OFS_PARM0))
                do_reset = true;
@@ -809,7 +817,7 @@ static void VM_M_crypto_getkeyfp(prvm_prog_t *prog)
        s = PRVM_G_STRING( OFS_PARM0 );
        VM_CheckEmptyString( prog, s );
 
-       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, keyfp, sizeof(keyfp), NULL, 0, NULL))
+       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, keyfp, sizeof(keyfp), NULL, 0, NULL, NULL))
                PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, keyfp );
        else
                PRVM_G_INT( OFS_RETURN ) = OFS_NULL;
@@ -825,11 +833,27 @@ static void VM_M_crypto_getidfp(prvm_prog_t *prog)
        s = PRVM_G_STRING( OFS_PARM0 );
        VM_CheckEmptyString( prog, s );
 
-       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, idfp, sizeof(idfp), NULL))
+       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, idfp, sizeof(idfp), NULL, NULL))
                PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, idfp );
        else
                PRVM_G_INT( OFS_RETURN ) = OFS_NULL;
 }
+static void VM_M_crypto_getidstatus(prvm_prog_t *prog)
+{
+       lhnetaddress_t addr;
+       const char *s;
+       qbool issigned;
+
+       VM_SAFEPARMCOUNT(1,VM_M_crypto_getidstatus);
+
+       s = PRVM_G_STRING( OFS_PARM0 );
+       VM_CheckEmptyString( prog, s );
+
+       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, NULL, &issigned))
+               PRVM_G_FLOAT( OFS_RETURN ) = issigned ? 2 : 1;
+       else
+               PRVM_G_FLOAT( OFS_RETURN ) = 0;
+}
 static void VM_M_crypto_getencryptlevel(prvm_prog_t *prog)
 {
        lhnetaddress_t addr;
@@ -842,7 +866,7 @@ static void VM_M_crypto_getencryptlevel(prvm_prog_t *prog)
        s = PRVM_G_STRING( OFS_PARM0 );
        VM_CheckEmptyString( prog, s );
 
-       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, &aeslevel))
+       if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, &aeslevel, NULL))
                PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, aeslevel ? va(vabuf, sizeof(vabuf), "%d AES128", aeslevel) : "0");
        else
                PRVM_G_INT( OFS_RETURN ) = OFS_NULL;
@@ -852,7 +876,7 @@ static void VM_M_crypto_getmykeyfp(prvm_prog_t *prog)
        int i;
        char keyfp[FP64_SIZE + 1];
 
-       VM_SAFEPARMCOUNT(1,VM_M_crypto_getmykey);
+       VM_SAFEPARMCOUNT(1, VM_M_crypto_getmykeyfp);
 
        i = PRVM_G_FLOAT( OFS_PARM0 );
        switch(Crypto_RetrieveLocalKey(i, keyfp, sizeof(keyfp), NULL, 0, NULL))
@@ -874,7 +898,7 @@ static void VM_M_crypto_getmyidfp(prvm_prog_t *prog)
        int i;
        char idfp[FP64_SIZE + 1];
 
-       VM_SAFEPARMCOUNT(1,VM_M_crypto_getmykey);
+       VM_SAFEPARMCOUNT(1, VM_M_crypto_getmyidfp);
 
        i = PRVM_G_FLOAT( OFS_PARM0 );
        switch(Crypto_RetrieveLocalKey(i, NULL, 0, idfp, sizeof(idfp), NULL))
@@ -894,9 +918,9 @@ static void VM_M_crypto_getmyidfp(prvm_prog_t *prog)
 static void VM_M_crypto_getmyidstatus(prvm_prog_t *prog)
 {
        int i;
-       qboolean issigned;
+       qbool issigned;
 
-       VM_SAFEPARMCOUNT(1,VM_M_crypto_getmykey);
+       VM_SAFEPARMCOUNT(1, VM_M_crypto_getmyidstatus);
 
        i = PRVM_G_FLOAT( OFS_PARM0 );
        switch(Crypto_RetrieveLocalKey(i, NULL, 0, NULL, 0, &issigned))
@@ -914,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
@@ -928,7 +1076,7 @@ VM_vlen,                                                           //   #9
 VM_vectoyaw,                                           //  #10
 VM_vectoangles,                                        //  #11
 VM_random,                                                     //  #12
-VM_localcmd,                                           //  #13
+VM_localcmd_local,                                             //  #13
 VM_cvar,                                                               //  #14
 VM_cvar_set,                                           //  #15
 VM_dprint,                                                     //  #16
@@ -978,7 +1126,7 @@ VM_argv,                                                           //  #59
 VM_isserver,                                           //  #60
 VM_clientcount,                                        //  #61
 VM_clientstate,                                        //  #62
-VM_clcommand,                                          //  #63
+NULL,                                          //  #63 FIXME
 VM_changelevel,                                        //  #64
 VM_localsound,                                         //  #65
 VM_M_getmousepos,                                      //  #66
@@ -1294,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
@@ -1585,6 +1733,114 @@ VM_digest_hex,                                          // #639
 NULL,                                                  // #640
 VM_M_crypto_getmyidstatus,                             // #641 float(float i) crypto_getmyidstatus
 VM_coverage,                                           // #642
+VM_M_crypto_getidstatus,                               // #643 float(string addr) crypto_getidstatus
+NULL,                                          // #644
+NULL,                                          // #645
+NULL,                                          // #646
+NULL,                                          // #647
+NULL,                                          // #648
+NULL,                                          // #649
+// WRATH range (#650-#???)
+VM_fcopy,                                      // #650 float(string fnfrom, string fnto) fcopy (EXT_WRATH)
+VM_frename,                                    // #651 float (string fnold, string fnnew) frename (EXT_WRATH)
+VM_fremove,                                    // #652 float (string fname) fremove (EXT_WRATH)
+VM_fexists,                                    // #653 float (string fname) fexists (EXT_WRATH)
+VM_rmtree,                                     // #654 float (string path) rmtree (EXT_WRATH)
+NULL,                                          // #655
+NULL,                                          // #656
+NULL,                                          // #657
+NULL,                                          // #658
+NULL,                                          // #659
+NULL,                                          // #660
+NULL,                                          // #661
+NULL,                                          // #662
+NULL,                                          // #663
+NULL,                                          // #664
+NULL,                                          // #665
+NULL,                                          // #666
+NULL,                                          // #667
+NULL,                                          // #668
+NULL,                                          // #669
+NULL,                                          // #670
+NULL,                                          // #671
+NULL,                                          // #672
+NULL,                                          // #673
+NULL,                                          // #674
+NULL,                                          // #675
+NULL,                                          // #676
+NULL,                                          // #677
+NULL,                                          // #678
+NULL,                                          // #679
+NULL,                                          // #680
+NULL,                                          // #681
+NULL,                                          // #682
+NULL,                                          // #683
+NULL,                                          // #684
+NULL,                                          // #685
+NULL,                                          // #686
+NULL,                                          // #687
+NULL,                                          // #688
+NULL,                                          // #689
+NULL,                                          // #690
+NULL,                                          // #691
+NULL,                                          // #692
+NULL,                                          // #693
+NULL,                                          // #694
+NULL,                                          // #695
+NULL,                                          // #696
+NULL,                                          // #697
+NULL,                                          // #698
+NULL,                                          // #699
+NULL,                                          // #700
+NULL,                                          // #701
+NULL,                                          // #702
+NULL,                                          // #703
+NULL,                                          // #704
+NULL,                                          // #705
+NULL,                                          // #706
+NULL,                                          // #707
+NULL,                                          // #708
+NULL,                                          // #709
+NULL,                                          // #710
+NULL,                                          // #711
+NULL,                                          // #712
+NULL,                                          // #713
+NULL,                                          // #714
+NULL,                                          // #715
+NULL,                                          // #716
+NULL,                                          // #717
+NULL,                                          // #718
+NULL,                                          // #719
+NULL,                                          // #720
+NULL,                                          // #721
+NULL,                                          // #722
+NULL,                                          // #723
+NULL,                                          // #724
+NULL,                                          // #725
+NULL,                                          // #726
+NULL,                                          // #727
+NULL,                                          // #728
+NULL,                                          // #729
+NULL,                                          // #730
+NULL,                                          // #731
+NULL,                                          // #732
+NULL,                                          // #733
+NULL,                                          // #734
+NULL,                                          // #735
+NULL,                                          // #736
+NULL,                                          // #737
+NULL,                                          // #738
+NULL,                                          // #739
+NULL,                                          // #740
+NULL,                                          // #741
+NULL,                                          // #742
+NULL,                                          // #743
+NULL,                                          // #744
+NULL,                                          // #745
+NULL,                                          // #746
+NULL,                                          // #747
+NULL,                                          // #748
+NULL,                                          // #749
 NULL
 };
 
@@ -1595,7 +1851,8 @@ void MVM_init_cmd(prvm_prog_t *prog)
        r_refdef_scene_t *scene;
 
        VM_Cmd_Init(prog);
-       VM_Polygons_Reset(prog);
+       prog->polygonbegin_model = NULL;
+       prog->polygonbegin_guess2d = 0;
 
        scene = R_GetScenePointer( RST_MENU );
 
@@ -1607,7 +1864,8 @@ void MVM_init_cmd(prvm_prog_t *prog)
        scene->maxentities = MAX_EDICTS + 256 + 512;
        scene->entities = (entity_render_t **)Mem_Alloc(prog->progs_mempool, sizeof(entity_render_t *) * scene->maxentities);
 
-       scene->ambient = 32.0f;
+       // LadyHavoc: what is this for?
+       scene->ambientintensity = 32.0f;
 }
 
 void MVM_reset_cmd(prvm_prog_t *prog)
@@ -1616,5 +1874,6 @@ void MVM_reset_cmd(prvm_prog_t *prog)
 
        //VM_Cmd_Init();
        VM_Cmd_Reset(prog);
-       VM_Polygons_Reset(prog);
+       prog->polygonbegin_model = NULL;
+       prog->polygonbegin_guess2d = 0;
 }