X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=mvm_cmds.c;h=00759e0985882206aca3712fa60ffbf63bd53aa8;hp=79edacfb2fa365c1c414912d482281f22fb8fac9;hb=2075ae43356d724bae305ce8fd36ea570718b14a;hpb=8193aef0fa1ef23f4d98909475fdb473a22eda29 diff --git a/mvm_cmds.c b/mvm_cmds.c index 79edacfb..00759e09 100644 --- a/mvm_cmds.c +++ b/mvm_cmds.c @@ -13,8 +13,9 @@ const char *vm_m_extensions = "BX_WAL_SUPPORT " "DP_CINEMATIC_DPV " -"DP_CSQC_BINDMAPS " +"DP_COVERAGE " "DP_CRYPTO " +"DP_CSQC_BINDMAPS " "DP_GFX_FONTS " "DP_GFX_FONTS_FREETYPE " "DP_UTF8 " @@ -36,6 +37,7 @@ const char *vm_m_extensions = "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 " @@ -175,12 +177,28 @@ static void VM_M_getresolution(prvm_prog_t *prog) fs = ((prog->argc <= 1) || ((int)PRVM_G_FLOAT(OFS_PARM1))); - if(nr < 0 || nr >= (fs ? video_resolutions_count : video_resolutions_hardcoded_count)) + if(nr < -1 || nr >= (fs ? video_resolutions_count : video_resolutions_hardcoded_count)) { PRVM_G_VECTOR(OFS_RETURN)[0] = 0; PRVM_G_VECTOR(OFS_RETURN)[1] = 0; PRVM_G_VECTOR(OFS_RETURN)[2] = 0; } + else if(nr == -1) + { + vid_mode_t *m = VID_GetDesktopMode(); + if (m) + { + PRVM_G_VECTOR(OFS_RETURN)[0] = m->width; + PRVM_G_VECTOR(OFS_RETURN)[1] = m->height; + PRVM_G_VECTOR(OFS_RETURN)[2] = m->pixelheight_num / (prvm_vec_t) m->pixelheight_denom; + } + else + { + PRVM_G_VECTOR(OFS_RETURN)[0] = 0; + PRVM_G_VECTOR(OFS_RETURN)[1] = 0; + PRVM_G_VECTOR(OFS_RETURN)[2] = 0; + } + } else { video_resolution_t *r = &((fs ? video_resolutions : video_resolutions_hardcoded)[nr]); @@ -300,9 +318,9 @@ static void VM_M_setserverlistmaskstring(prvm_prog_t *prog) str = PRVM_G_STRING( OFS_PARM2 ); masknr = (int)PRVM_G_FLOAT( OFS_PARM0 ); - if( masknr >= 0 && masknr <= SERVERLIST_ANDMASKCOUNT ) + if( masknr >= 0 && masknr < SERVERLIST_ANDMASKCOUNT ) mask = &serverlist_andmasks[masknr]; - else if( masknr >= 512 && masknr - 512 <= SERVERLIST_ORMASKCOUNT ) + else if( masknr >= 512 && masknr - 512 < SERVERLIST_ORMASKCOUNT ) mask = &serverlist_ormasks[masknr - 512 ]; else { @@ -362,9 +380,9 @@ static void VM_M_setserverlistmasknumber(prvm_prog_t *prog) VM_SAFEPARMCOUNT( 4, VM_M_setserverlistmasknumber ); masknr = (int)PRVM_G_FLOAT( OFS_PARM0 ); - if( masknr >= 0 && masknr <= SERVERLIST_ANDMASKCOUNT ) + if( masknr >= 0 && masknr < SERVERLIST_ANDMASKCOUNT ) mask = &serverlist_andmasks[masknr]; - else if( masknr >= 512 && masknr - 512 <= SERVERLIST_ORMASKCOUNT ) + else if( masknr >= 512 && masknr - 512 < SERVERLIST_ORMASKCOUNT ) mask = &serverlist_ormasks[masknr - 512 ]; else { @@ -397,6 +415,9 @@ static void VM_M_setserverlistmasknumber(prvm_prog_t *prog) case SLIF_FREESLOTS: mask->info.freeslots = number; break; + case SLIF_CATEGORY: + mask->info.category = number; + break; case SLIF_ISFAVORITE: mask->info.isfavorite = number != 0; break; @@ -432,7 +453,7 @@ string getserverliststring(float field, float hostnr) */ static void VM_M_getserverliststring(prvm_prog_t *prog) { - serverlist_entry_t *cache; + const serverlist_entry_t *cache; int hostnr; VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); @@ -441,12 +462,19 @@ static void VM_M_getserverliststring(prvm_prog_t *prog) hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); - if(hostnr < 0 || hostnr >= serverlist_viewcount) + if(hostnr == -1 && serverlist_callbackentry) { - Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); - return; + cache = serverlist_callbackentry; + } + else + { + if(hostnr < 0 || hostnr >= serverlist_viewcount) + { + Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); + return; + } + cache = ServerList_GetViewEntry(hostnr); } - cache = ServerList_GetViewEntry(hostnr); switch( (int) PRVM_G_FLOAT(OFS_PARM0) ) { case SLIF_CNAME: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.cname ); @@ -490,7 +518,7 @@ float getserverlistnumber(float field, float hostnr) */ static void VM_M_getserverlistnumber(prvm_prog_t *prog) { - serverlist_entry_t *cache; + const serverlist_entry_t *cache; int hostnr; VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); @@ -499,12 +527,19 @@ static void VM_M_getserverlistnumber(prvm_prog_t *prog) hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); - if(hostnr < 0 || hostnr >= serverlist_viewcount) + if(hostnr == -1 && serverlist_callbackentry) { - Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); - return; + cache = serverlist_callbackentry; + } + else + { + if(hostnr < 0 || hostnr >= serverlist_viewcount) + { + Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); + return; + } + cache = ServerList_GetViewEntry(hostnr); } - cache = ServerList_GetViewEntry(hostnr); switch( (int) PRVM_G_FLOAT(OFS_PARM0) ) { case SLIF_MAXPLAYERS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.maxplayers; @@ -527,6 +562,9 @@ static void VM_M_getserverlistnumber(prvm_prog_t *prog) case SLIF_PROTOCOL: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.protocol; break; + case SLIF_CATEGORY: + PRVM_G_FLOAT( OFS_RETURN ) = cache->info.category; + break; case SLIF_ISFAVORITE: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.isfavorite; break; @@ -559,8 +597,11 @@ refreshserverlist() */ static void VM_M_refreshserverlist(prvm_prog_t *prog) { - VM_SAFEPARMCOUNT( 0, VM_M_refreshserverlist ); - ServerList_QueryList(false, true, false, false); + qboolean do_reset = false; + VM_SAFEPARMCOUNTRANGE( 0, 1, VM_M_refreshserverlist ); + if (prog->argc >= 1 && PRVM_G_FLOAT(OFS_PARM0)) + do_reset = true; + ServerList_QueryList(do_reset, true, false, false); } /* @@ -606,6 +647,8 @@ static void VM_M_getserverlistindexforkey(prvm_prog_t *prog) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_FREESLOTS; else if( !strcmp( key, "protocol" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_PROTOCOL; + else if( !strcmp( key, "category" ) ) + PRVM_G_FLOAT( OFS_RETURN ) = SLIF_CATEGORY; else if( !strcmp( key, "isfavorite" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_ISFAVORITE; else @@ -739,7 +782,7 @@ static void VM_M_copyentity (prvm_prog_t *prog) VM_SAFEPARMCOUNT(2,VM_M_copyentity); in = PRVM_G_EDICT(OFS_PARM0); out = PRVM_G_EDICT(OFS_PARM1); - memcpy(out->fields.vp, in->fields.vp, prog->entityfields * 4); + memcpy(out->fields.fp, in->fields.fp, prog->entityfields * sizeof(prvm_vec_t)); } //#66 vector() getmousepos (EXT_CSQC) @@ -766,7 +809,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; @@ -782,11 +825,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; + qboolean 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; @@ -799,7 +858,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; @@ -1395,11 +1454,11 @@ VM_gecko_resize, // #492 void gecko_resize( string name, float w, float h ) VM_gecko_get_texture_extent, // #493 vector gecko_get_texture_extent( string name ) VM_crc16, // #494 float(float caseinsensitive, string s, ...) crc16 = #494 (DP_QC_CRC16) VM_cvar_type, // #495 float(string name) cvar_type = #495; (DP_QC_CVAR_TYPE) -NULL, // #496 -NULL, // #497 -NULL, // #498 -NULL, // #499 -NULL, // #500 +VM_numentityfields, // #496 float() numentityfields = #496; (QP_QC_ENTITYDATA) +VM_entityfieldname, // #497 string(float fieldnum) entityfieldname = #497; (DP_QC_ENTITYDATA) +VM_entityfieldtype, // #498 float(float fieldnum) entityfieldtype = #498; (DP_QC_ENTITYDATA) +VM_getentityfieldstring, // #499 string(float fieldnum, entity ent) getentityfieldstring = #499; (DP_QC_ENTITYDATA) +VM_putentityfieldstring, // #500 float(float fieldnum, entity ent, string s) putentityfieldstring = #500; (DP_QC_ENTITYDATA) NULL, // #501 NULL, // #502 VM_whichpack, // #503 string(string) whichpack = #503; @@ -1434,10 +1493,10 @@ NULL, // #531 VM_log, // #532 VM_getsoundtime, // #533 float(entity e, float channel) getsoundtime = #533; (DP_SND_GETSOUNDTIME) VM_soundlength, // #534 float(string sample) soundlength = #534; (DP_SND_GETSOUNDTIME) -NULL, // #535 -NULL, // #536 -NULL, // #537 -NULL, // #538 +VM_buf_loadfile, // #535 float(string filename, float bufhandle) buf_loadfile (DP_QC_STRINGBUFFERS_EXT_WIP) +VM_buf_writefile, // #536 float(float filehandle, float bufhandle, float startpos, float numstrings) buf_writefile (DP_QC_STRINGBUFFERS_EXT_WIP) +VM_bufstr_find, // #537 float(float bufhandle, string match, float matchrule, float startpos) bufstr_find (DP_QC_STRINGBUFFERS_EXT_WIP) +VM_matchpattern, // #538 float(string s, string pattern, float matchrule) matchpattern (DP_QC_STRINGBUFFERS_EXT_WIP) NULL, // #539 NULL, // #540 NULL, // #541 @@ -1541,6 +1600,8 @@ NULL, // #638 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 }; @@ -1551,7 +1612,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 ); @@ -1563,7 +1625,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) @@ -1572,5 +1635,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; }