X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=dpdefs%2Fdpextensions.qc;h=0a5504392736ebd13e4ee1456a5bb39e80a71950;hb=512c1f56be4522d2dfee99200fc27d48473c0015;hp=d8f6ebd7126917df45cc9a31450055e3175cfc5a;hpb=6a747d4e88464cf86f98889e166b3a2f87679487;p=xonotic%2Fdarkplaces.git diff --git a/dpdefs/dpextensions.qc b/dpdefs/dpextensions.qc index d8f6ebd7..0a550439 100644 --- a/dpdefs/dpextensions.qc +++ b/dpdefs/dpextensions.qc @@ -113,6 +113,14 @@ float EF_DOUBLESIDED = 32768; //description: //render entity as double sided (backfaces are visible, I.E. you see the 'interior' of the model, rather than just the front), can be occasionally useful on transparent stuff. +//DP_EF_DYNAMICMODELLIGHT +//idea: C.Brutail, divVerent, maikmerten +//darkplaces implementation: divVerent +//effects bit: +float EF_DYNAMICMODELLIGHT = 131072; +//description: +//force dynamic model light on the entity, even if it's a BSP model (or anything else with lightmaps or light colors) + //DP_EF_FLAME //idea: LordHavoc //darkplaces implementation: LordHavoc @@ -585,9 +593,11 @@ float(float a) tan = #475; // returns tangent value (which is simply sin(a)/cos( // string autocvar__cl_name; //NOTE: copying a string-typed autocvar to another variable/field, and then //changing the cvar or returning from progs is UNDEFINED. Writing to autocvar -//globals is UNDEFINED. Accessing autocvar globals after cvar_set()ing that -//cvar in the same frame is IMPLEMENTATION DEFINED (an implementation may -//either yield the previous, or the current, value). Whether autocvar globals, +//globals is UNDEFINED. Accessing autocvar globals after changing that cvar in +//the same frame by any means other than cvar_set() from the same QC VM is +//IMPLEMENTATION DEFINED (an implementation may either yield the previous, or +//the current, value). Changing them via cvar_set() in the same QC VM +//immediately must reflect on the autocvar globals. Whether autocvar globals, //after restoring a savegame, have the cvar's current value, or the original //value at time of saving, is UNDEFINED. Restoring a savegame however must not //restore the cvar values themselves. @@ -664,6 +674,24 @@ float CVAR_TYPEFLAG_ENGINE = 8; float CVAR_TYPEFLAG_HASDESCRIPTION = 16; float CVAR_TYPEFLAG_READONLY = 32; +//DP_QC_DIGEST +//idea: motorsep, Spike +//DarkPlaces implementation: divVerent +//builtin definitions: +string(string digest, string data, ...) digest_hex = #639; +//description: +//returns a given hex digest of given data +//the returned digest is always encoded in hexadecimal +//only the "MD4" digest is always supported! +//if the given digest is not supported, string_null is returned +//the digest string is matched case sensitively, use "MD4", not "md4"! + +//DP_QC_DIGEST_SHA256 +//idea: motorsep, Spike +//DarkPlaces implementation: divVerent +//description: +//"SHA256" is also an allowed digest type + //DP_QC_EDICT_NUM //idea: 515 //DarkPlaces implementation: LordHavoc @@ -910,8 +938,9 @@ float GETTIME_CDTRACK = 4; //The language is set by the "prvm_language" cvar: if prvm_language is set to //"de", it will read progs.dat.de.po for translating strings in progs.dat. // -//If prvm_language is set to to the special name "dump", progs.dat.pot which is -//a translation template to be edited by filling out the msgstr entries. +//If prvm_language is set to the special name "dump", progs.dat.pot will be +//written, which is a translation template to be edited by filling out the +//msgstr entries. //DP_QC_LOG //darkplaces implementation: divVerent @@ -924,14 +953,14 @@ float log(float f) = #532; //idea: LordHavoc //darkplaces implementation: LordHavoc //builtin definitions: -float(float a, float b) min = #94; +float(float a, float b, ...) min = #94; float(float a, float b, float c) min3 = #94; float(float a, float b, float c, float d) min4 = #94; float(float a, float b, float c, float d, float e) min5 = #94; float(float a, float b, float c, float d, float e, float f) min6 = #94; float(float a, float b, float c, float d, float e, float f, float g) min7 = #94; float(float a, float b, float c, float d, float e, float f, float g, float h) min8 = #94; -float(float a, float b) max = #95; +float(float a, float b, ...) max = #95; float(float a, float b, float c) max3 = #95; float(float a, float b, float c, float d) max4 = #95; float(float a, float b, float c, float d, float e) max5 = #95; @@ -1008,7 +1037,9 @@ string(string format, ...) sprintf = #627; // For conversions s and c, the flag # makes precision and width interpreted // as byte count, by default it is interpreted as character count in UTF-8 // enabled engines. No other conversions can create wide characters, and # -// has another meaning in these. +// has another meaning in these. When in character count mode, color codes +// are ignored. To get UTF-8 semantics WITHOUT color code parsing, use +// the + flag. //DP_QC_STRFTIME //idea: LordHavoc @@ -1240,6 +1271,7 @@ float(string name, string value) registercvar = #93; //DP_SND_FAKETRACKS //idea: requested + //darkplaces implementation: Elric //description: //the engine plays sound/cdtracks/track001.wav instead of cd track 1 and so on if found, this allows games and mods to have music tracks without using ambientsound. @@ -1643,22 +1675,44 @@ void(float effectnum, vector org, vector vel, float howmany) pointparticles = #3 //globals: //new movetypes: const float MOVETYPE_PHYSICS = 32; // need to be set before any physics_* builtins applied -//new solid types: +//new solid types (deprecated): const float SOLID_PHYSICS_BOX = 32; const float SOLID_PHYSICS_SPHERE = 33; const float SOLID_PHYSICS_CAPSULE = 34; const float SOLID_PHYSICS_TRIMESH = 35; const float SOLID_PHYSICS_CYLINDER = 36; -//SOLID_BSP; +//geometry types: +const float GEOMTYPE_NONE = -1; // entity will be entirely skipped by ODE +const float GEOMTYPE_SOLID = 0; // geometry type will be set based on .solid field +const float GEOMTYPE_BOX = 1; // entity bound box +const float GEOMTYPE_SPHERE = 2; // sphere with radius picked from x axis of entity bound box +const float GEOMTYPE_CAPSULE = 3; // with leading axis automatically determined from longest one, radius is picked as minimal of the rest 2 axes +const float GEOMTYPE_TRIMESH = 4; // triangle mesh +const float GEOMTYPE_CYLINDER = 5; // like capsule but not capped + // note that ODE's builtin cylinder support is experimental, somewhat bugged and unfinished (no cylinder-cylinder collision) + // to use properly working cylinder should build ODE with LIBCCD extension +const float GEOMTYPE_CAPSULE_X = 6; // capsule with fixed leading axis +const float GEOMTYPE_CAPSULE_Y = 7; +const float GEOMTYPE_CAPSULE_Z = 8; +const float GEOMTYPE_CYLINDER_X = 9; // cylinder with fixed leading axis +const float GEOMTYPE_CYLINDER_Y = 10; +const float GEOMTYPE_CYLINDER_Z = 11; //joint types: +const float JOINTTYPE_NONE = 0; const float JOINTTYPE_POINT = 1; const float JOINTTYPE_HINGE = 2; const float JOINTTYPE_SLIDER = 3; const float JOINTTYPE_UNIVERSAL = 4; const float JOINTTYPE_HINGE2 = 5; const float JOINTTYPE_FIXED = -1; +//force types: +const float FORCETYPE_NONE = 0; +const float FORCETYPE_FORCE = 1; // applied at center of mass +const float FORCETYPE_FORCEATPOS = 2; +const float FORCETYPE_TORQUE = 3; // common joint properties: -// .entity aiment, enemy; // connected objects +// .entity aiment; // connected objects +// .entity enemy; // connected objects, forces // .vector movedir; // for a spring: // movedir_x = spring constant (force multiplier, must be > 0) @@ -1669,17 +1723,26 @@ const float JOINTTYPE_FIXED = -1; // movedir_y = -1 * max motor force to use // movedir_z = stop position (+/-), set to 0 for no stop // note that ODE does not support both in one anyway +// for a force: +// force vector to apply //field definitions: -.float mass; // ODE mass, standart value is 1 -.vector massofs; // offsets a mass center out of object center, if not set a center of model bounds is used -.float friction; -.float bouncefactor; -.float bouncestop; -.float jointtype; +.float geomtype; // see GEOMTYPE_*, a more correct way to set collision shape, allows to set SOLID_CORPSE and trimesh collisions +.float maxcontacts; // maximum number of contacts to make for this object, lesser = faster (but setting it too low will could make object pass though walls), default is 16, maximum is 32 +.float mass; // ODE mass, standart value is 1 +.vector massofs; // offsets a mass center out of object center, if not set a center of model bounds is used +.float friction; // a friction of object, get multiplied by second objects's friction on contact +.float bouncefactor; +.float bouncestop; +.float jointtype; // type of joint +.float forcetype; // type of force +.float erp; // error restitution parameter, makes ODE solver attempt to fix errors in contacts, + // bringing together 2 joints or fixing object being stuch in other object, + // a value of 0.1 will fix slightly, a value of 1.0 attempts to fix whole error in one frame + // use with care as high values makes system unstable and likely to explode //builtin definitions: void(entity e, float physics_enabled) physics_enable = #540; // enable or disable physics on object -void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force -void(entity e, vector torque) physics_addtorque = #542; // add relative torque +void(entity e, vector force, vector force_pos) physics_addforce = #541; // deprecated, apply a force from certain origin, length of force vector is power of force +void(entity e, vector torque) physics_addtorque = #542; // deprecated, add relative torque //description: provides Open Dynamics Engine support, requires extenal dll to be present or engine compiled with statical link option //be sure to checkextension for it to know if library is loaded and ready, also to enable physics set "physics_ode" cvar to 1 //note: this extension is highly experimental and may be unstable @@ -2424,6 +2487,28 @@ void(float bufhandle, float string_index) bufstr_free = #469; //cvars that start with pattern but not with antipattern will be stored into the buffer void(float bufhandle, string pattern, string antipattern) buf_cvarlist = #517; +//DP_QC_STRINGBUFFERS_EXT_WIP +//idea: VorteX +//darkplaces implementation: VorteX +//constant definitions: +const float MATCH_AUTO = 0; +const float MATCH_WHOLE = 1; +const float MATCH_LEFT = 2; +const float MATCH_RIGHT = 3; +const float MATCH_MIDDLE = 4; +const float MATCH_PATTERN = 5; +//builtin definitions: +float(string filename, float bufhandle) buf_loadfile = #535; // append each line of file as new buffer string, return 1 if succesful +float(float filehandle, float bufhandle, float startpos, float numstrings) buf_writefile = #536; // writes buffer strings as lines, returns 1 if succesful +float(float bufhandle, string match, float matchrule, float startpos, float step) bufstr_find = #537; // returns string index +float(string s, string pattern, float matchrule) matchpattern = #538; // returns 0/1 +float(string s, string pattern, float matchrule, float pos) matchpatternofs = #538; +//description: +//provides a set of functions to manipulate with string buffers +//pattern wildcards: * - any character (or no characters), ? - any 1 character +//Warning: This extension is work-in-progress, it may be changed/revamped/removed at any time, dont use it if you dont want any trouble +//wip note: UTF8 is not supported yet + //DP_QC_STRREPLACE //idea: Sajt //darkplaces implementation: Sajt