]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/miscfunctions.qc
Include gmqcc binaries for Windows and Linux
[voretournament/voretournament.git] / data / qcsrc / server / miscfunctions.qc
index d5be06ccc7cd88045263fe89b410eef5f7733845..d30b368ccb4e21fa1d1254c869f1cd88b76ce26b 100644 (file)
@@ -181,22 +181,27 @@ void GameLogClose()
     }\r
 }\r
 \r
-vector PL_VIEW_OFS;\r
-vector PL_MIN;\r
-vector PL_MAX;\r
-vector PL_CROUCH_VIEW_OFS;\r
-vector PL_CROUCH_MIN;\r
-vector PL_CROUCH_MAX;\r
+// you need an init method to set them somewhere\r
+// default values simply become constant\r
+const vector PL_VIEW_OFS;\r
+const vector PL_MIN;\r
+const vector PL_MAX;\r
+const vector PL_CROUCH_VIEW_OFS;\r
+const vector PL_CROUCH_MIN;\r
+const vector PL_CROUCH_MAX;\r
 \r
 float spawnpoint_nag;\r
 void relocate_spawnpoint()\r
 {\r
+       // this code wouldn't work anyways, they're constants by having default assignment in a header.\r
+#if 0\r
     PL_VIEW_OFS                             = stov(cvar_string("sv_player_viewoffset"));\r
     PL_MIN                                  = stov(cvar_string("sv_player_mins"));\r
     PL_MAX                                  = stov(cvar_string("sv_player_maxs"));\r
     PL_CROUCH_VIEW_OFS                      = stov(cvar_string("sv_player_crouch_viewoffset"));\r
     PL_CROUCH_MIN                           = stov(cvar_string("sv_player_crouch_mins"));\r
     PL_CROUCH_MAX                           = stov(cvar_string("sv_player_crouch_maxs"));\r
+#endif\r
 \r
     // nudge off the floor\r
     setorigin(self, self.origin + '0 0 1');\r
@@ -617,8 +622,9 @@ void GetCvars(float f)
        GetCvars_handleFloat(s, f, cvar_cl_accuracy_data_receive, "cl_accuracy_data_receive");\r
        GetCvars_handleFloat(s, f, cvar_chase_active, "chase_active");\r
        GetCvars_handleFloat(s, f, cvar_cl_vore_stomachmodel, "cl_vore_stomachmodel");\r
-       GetCvars_handleFloat(s, f, cvar_cl_vore_swallowmodel, "cl_vore_swallowmodel");\r
+       GetCvars_handleFloat(s, f, cvar_cl_vore_gulletmodel, "cl_vore_gulletmodel");\r
        GetCvars_handleFloat(s, f, cvar_cl_vore_autodigest, "cl_vore_autodigest");\r
+       GetCvars_handleFloat(s, f, cvar_cl_dodging_timeout, "cl_dodging_timeout");\r
 \r
        self.cvar_cl_accuracy_data_share = boolean(self.cvar_cl_accuracy_data_share);\r
        self.cvar_cl_accuracy_data_receive = boolean(self.cvar_cl_accuracy_data_receive);\r
@@ -1132,6 +1138,7 @@ float precache_sound_index (string s) = #19;
 #define SND_ATTENUATION 2\r
 #define SND_LARGEENTITY 8\r
 #define SND_LARGESOUND  16\r
+#define SND_SPEEDUSHORT4000 32\r
 \r
 float sound_allowed(float dest, entity e)\r
 {\r
@@ -1163,7 +1170,7 @@ void sound(entity e, float chan, string samp, float vol, float atten)
         return;\r
     sound_builtin(e, chan, samp, vol, atten);\r
 }\r
-void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten)\r
+void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten, float spd)\r
 {\r
     float entno, idx;\r
 \r
@@ -1183,6 +1190,8 @@ void soundtoat(float dest, entity e, vector o, float chan, string samp, float vo
         sflags |= SND_VOLUME;\r
     if (atten != 64)\r
         sflags |= SND_ATTENUATION;\r
+    if (spd)\r
+        sflags |= SND_SPEEDUSHORT4000;\r
     if (entno >= 8192)\r
         sflags |= SND_LARGEENTITY;\r
     if (idx >= 256)\r
@@ -1194,6 +1203,8 @@ void soundtoat(float dest, entity e, vector o, float chan, string samp, float vo
         WriteByte(dest, vol);\r
     if (sflags & SND_ATTENUATION)\r
         WriteByte(dest, atten);\r
+       if(sflags & SND_SPEEDUSHORT4000)\r
+               WriteShort(dest, spd * 4000);\r
     if (sflags & SND_LARGEENTITY)\r
     {\r
         WriteShort(dest, entno);\r
@@ -1212,7 +1223,7 @@ void soundtoat(float dest, entity e, vector o, float chan, string samp, float vo
     WriteCoord(dest, o_y);\r
     WriteCoord(dest, o_z);\r
 }\r
-void soundto(float dest, entity e, float chan, string samp, float vol, float atten)\r
+void soundto(float dest, entity e, float chan, string samp, float vol, float atten, float spd)\r
 {\r
     vector o;\r
 \r
@@ -1220,11 +1231,11 @@ void soundto(float dest, entity e, float chan, string samp, float vol, float att
         return;\r
 \r
     o = e.origin + 0.5 * (e.mins + e.maxs);\r
-    soundtoat(dest, e, o, chan, samp, vol, atten);\r
+    soundtoat(dest, e, o, chan, samp, vol, atten, spd);\r
 }\r
-void soundat(entity e, vector o, float chan, string samp, float vol, float atten)\r
+void soundat(entity e, vector o, float chan, string samp, float vol, float atten, float spd)\r
 {\r
-    soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);\r
+    soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten, spd);\r
 }\r
 void stopsoundto(float dest, entity e, float chan)\r
 {\r
@@ -1275,7 +1286,7 @@ void play2(entity e, string filename)
     if (clienttype(e) == CLIENTTYPE_REAL)\r
     {\r
         msg_entity = e;\r
-        soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE);\r
+        soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE, 0);\r
     }\r
 }\r
 \r
@@ -1318,7 +1329,26 @@ void play2all(string samp)
 }\r
 \r
 void PrecachePlayerSounds(string f);\r
-void precache_all_models(string pattern)\r
+void precache_playermodel(string m)\r
+{\r
+       float globhandle, i, n;\r
+       string f;\r
+\r
+       precache_model(m);\r
+\r
+       globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE);\r
+       if (globhandle < 0)\r
+               return;\r
+       n = search_getsize(globhandle);\r
+       for (i = 0; i < n; ++i)\r
+       {\r
+               //print(search_getfilename(globhandle, i), "\n");\r
+               f = search_getfilename(globhandle, i);\r
+               PrecachePlayerSounds(f);\r
+       }\r
+       search_end(globhandle);\r
+}\r
+void precache_all_playermodels(string pattern)\r
 {\r
     float globhandle, i, n;\r
     string f;\r
@@ -1331,14 +1361,15 @@ void precache_all_models(string pattern)
     {\r
                //print(search_getfilename(globhandle, i), "\n");\r
                f = search_getfilename(globhandle, i);\r
-               precache_model(f);\r
-               PrecachePlayerSounds(strcat(f, ".sounds"));\r
+               precache_playermodel(f);\r
     }\r
     search_end(globhandle);\r
 }\r
 \r
 void precache()\r
 {\r
+       float i;\r
+\r
     // gamemode related things\r
     precache_model ("models/misc/chatbubble.spr");\r
 \r
@@ -1354,11 +1385,11 @@ void precache()
     if (cvar("sv_precacheplayermodels"))\r
     {\r
         PrecachePlayerSounds("sound/player/default.sounds");\r
-        precache_all_models("models/player/*.zym");\r
-        precache_all_models("models/player/*.dpm");\r
-        precache_all_models("models/player/*.md3");\r
-        precache_all_models("models/player/*.psk");\r
-               precache_all_models("models/player/*.iqm");\r
+        precache_all_playermodels("models/player/*.zym");\r
+        precache_all_playermodels("models/player/*.dpm");\r
+        precache_all_playermodels("models/player/*.md3");\r
+        precache_all_playermodels("models/player/*.psk");\r
+               precache_all_playermodels("models/player/*.iqm");\r
     }\r
 \r
     if (cvar("sv_defaultcharacter"))\r
@@ -1400,6 +1431,8 @@ void precache()
     {\r
         PrecacheGlobalSound((globalsound_step = "misc/footstep0 6"));\r
         PrecacheGlobalSound((globalsound_metalstep = "misc/metalfootstep0 6"));\r
+               if(cvar("g_healthsize"))\r
+                       precache_sound("misc/macro_footstep.wav");\r
     }\r
 \r
     // gore and miscellaneous sounds\r
@@ -1420,6 +1453,8 @@ void precache()
        precache_sound ("misc/beep.wav");\r
     PrecacheGlobalSound((globalsound_fall = "misc/hitground 4"));\r
     PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4"));\r
+       if(cvar("g_healthsize"))\r
+               precache_sound("misc/macro_hitground.wav");\r
     precache_sound ("misc/null.wav");\r
     precache_sound ("misc/spawn.wav");\r
     precache_sound ("misc/talk.wav");\r
@@ -1450,9 +1485,19 @@ void precache()
     // common weapon precaches\r
     precache_sound ("weapons/weapon_switch.wav");\r
     precache_sound ("weapons/weaponpickup.wav");\r
-       precache_model ("models/weapons/w_displaydigit.md3");\r
 \r
-       float i;\r
+       // precache display digits\r
+       for(i = WEP_FIRST; i <= WEP_LAST; ++i)\r
+       {\r
+               entity e;\r
+               float w;\r
+               e = get_weaponinfo(i);\r
+               for(w = 1; fexists(strcat("models/weapons/v_", e.netname, "_digit1-", ftos(w) , ".md3")); w++)\r
+                       precache_model (strcat("models/weapons/v_", e.netname, "_digit1-", ftos(w) , ".md3"));\r
+               for(w = 1; fexists(strcat("models/weapons/v_", e.netname, "_digit2-", ftos(w) , ".md3")); w++)\r
+                       precache_model (strcat("models/weapons/v_", e.netname, "_digit2-", ftos(w) , ".md3"));\r
+       }\r
+\r
        for(i = 0; i < 8; i += 1)\r
                precache_sound (strcat("weapons/hit", ftos(i), ".wav"));\r
 \r
@@ -2287,7 +2332,7 @@ void SoundEntity_StartSound(entity pl, float chan, string samp, float vol, float
     p = pow(2, chan);\r
     if (pl.soundentity.cnt & p)\r
         return;\r
-    soundtoat(MSG_ALL, pl.soundentity, gettaginfo(pl.soundentity, 0), chan, samp, vol, attn);\r
+    soundtoat(MSG_ALL, pl.soundentity, gettaginfo(pl.soundentity, 0), chan, samp, vol, attn, 0);\r
     pl.soundentity.cnt |= p;\r
 }\r
 \r
@@ -2468,8 +2513,8 @@ float portrait_SendEntity(entity to, float sf)
 \r
        WriteByte(MSG_ENTITY, ENT_CLIENT_PORTRAIT);\r
 \r
-       WriteString(MSG_ENTITY, self.owner.model);\r
-       WriteByte(MSG_ENTITY, self.owner.skin);\r
+       WriteString(MSG_ENTITY, self.owner.playermodel);\r
+       WriteByte(MSG_ENTITY, stof(self.owner.playerskin));\r
        WriteString(MSG_ENTITY, self.owner.netname);\r
 \r
        return TRUE;\r
@@ -2483,7 +2528,7 @@ void portrait(entity pl, entity targ)
        e.owner = pl;\r
        e.enemy = targ;\r
 \r
-       Net_LinkEntity(e, FALSE, 0.1, portrait_SendEntity);\r
+       Net_LinkEntity(e, FALSE, 0, portrait_SendEntity);\r
 }\r
 \r
 void shockwave_spawn(string m, vector org, float sz, float t1, float t2)\r
@@ -2599,3 +2644,59 @@ void defer(float fdelay, void() func)
     e.think     = defer_think;\r
     e.nextthink = time + fdelay;\r
 }\r
+\r
+// returns 1 if player is at minimum size and 0 if player is at normal size\r
+float playersize_micro(entity e)\r
+{\r
+       if(!cvar("g_healthsize"))\r
+               return 0;\r
+       return bound(0, (e.health / cvar("g_healthsize_center") - 1) / (cvar("g_healthsize_min") / cvar("g_healthsize_center") - 1), 1);\r
+}\r
+// returns 0 if player is at normal size and 1 if player is at maximum size\r
+float playersize_macro(entity e)\r
+{\r
+       if(!cvar("g_healthsize"))\r
+               return 0;\r
+       return 1 - bound(0, (e.health / cvar("g_healthsize_max") - 1) / (cvar("g_healthsize_center") / cvar("g_healthsize_max") - 1), 1);\r
+}\r
+\r
+// returns 1 if the player is close to a wall\r
+float check_close_to_wall(float threshold) {\r
+       //TODO: This check should be moved somehow for this to be a common utility\r
+       if (!cvar("sv_dodging_wall_dodging"))\r
+               return 0;\r
+\r
+       vector trace_start;\r
+       vector trace_end;\r
+\r
+       trace_start = self.origin;\r
+\r
+       trace_end = self.origin + (1000*v_right);\r
+       tracebox(trace_start, self.mins, self.maxs, trace_end, TRUE, self);\r
+       if (trace_fraction < 1 && vlen (self.origin - trace_endpos) < threshold)\r
+               return 1;\r
+\r
+       trace_end = self.origin - (1000*v_right);\r
+       tracebox(trace_start, self.mins, self.maxs, trace_end, TRUE, self);\r
+       if (trace_fraction < 1 && vlen (self.origin - trace_endpos) < threshold)\r
+               return 1;\r
+\r
+       trace_end = self.origin + (1000*v_forward);\r
+       tracebox(trace_start, self.mins, self.maxs, trace_end, TRUE, self);\r
+       if (trace_fraction < 1 && vlen (self.origin - trace_endpos) < threshold)\r
+               return 1;\r
+\r
+       trace_end = self.origin - (1000*v_forward);\r
+       tracebox(trace_start, self.mins, self.maxs, trace_end, TRUE, self);\r
+       if (trace_fraction < 1 && vlen (self.origin - trace_endpos) < threshold)\r
+               return 1;\r
+\r
+       return 0;\r
+}\r
+\r
+float check_close_to_ground(float threshold) {\r
+       if (self.flags & FL_ONGROUND)\r
+               return 1;\r
+\r
+       return 0;\r
+}\r