]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/miscfunctions.qc
Merge branch 'master' into mirceakitsune/physical_entities
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / miscfunctions.qc
index d754352bf85cd23aee1192d629342fa7b90e1eda..95f2cb533b49c758d2fe378ee79ddd5745ee862d 100644 (file)
@@ -526,7 +526,7 @@ string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(string wo)
 }
 void GetCvars(float f)
 {
-       string s;
+       string s = string_null;
 
        if (f > 0)
                s = strcat1(argv(f));
@@ -785,15 +785,19 @@ float want_weapon(string cvarprefix, entity weaponinfo, float allguns)
                return 0;
 
        if (g_lms || g_ca || allguns)
-               d = (weaponinfo.spawnflags & WEP_FLAG_NORMAL);
-       else if(t < -1)
-               d = 0;
+       {
+               if(weaponinfo.spawnflags & WEP_FLAG_NORMAL)
+                       d = TRUE;
+               else
+                       d = FALSE;
+       }
        else if (g_cts)
                d = (i == WEP_SHOTGUN);
        else if (g_nexball)
                d = 0; // weapon is set a few lines later
        else
                d = (i == WEP_LASER || i == WEP_SHOTGUN);
+               
        if(g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
                d |= (i == WEP_HOOK);
        if(weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED) // never default mutator blocked guns
@@ -801,6 +805,8 @@ float want_weapon(string cvarprefix, entity weaponinfo, float allguns)
 
        var float t = cvar(strcat(cvarprefix, weaponinfo.netname));
        
+       //print(strcat("want_weapon: ", weaponinfo.netname, " - d: ", ftos(d), ", t: ", ftos(t), ". \n"));
+       
        // bit order in t:
        // 1: want or not
        // 2: is default?
@@ -854,8 +860,11 @@ void readplayerstartcvars()
                g_weaponarena = 1;
                g_weaponarena_list = "All Weapons";
                for (j = WEP_FIRST; j <= WEP_LAST; ++j)
+               {
+                       e = get_weaponinfo(j);
                        if not(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
                                WEPSET_OR_AW(g_weaponarena_weapons, j);
+               }
        }
        else if (s == "most")
        {
@@ -934,7 +943,7 @@ void readplayerstartcvars()
                for (i = WEP_FIRST; i <= WEP_LAST; ++i)
                {
                        e = get_weaponinfo(i);
-                       w = want_weapon("g_start_weapon_", e, FALSE);
+                       float w = want_weapon("g_start_weapon_", e, FALSE);
                        if(w & 1)
                                WEPSET_OR_AW(start_weapons, i);
                        if(w & 2)
@@ -1012,10 +1021,12 @@ void readplayerstartcvars()
                        warmup_start_health = cvar("g_warmup_start_health");
                        warmup_start_armorvalue = cvar("g_warmup_start_armor");
                        WEPSET_CLEAR_A(warmup_start_weapons);
+                       WEPSET_CLEAR_A(warmup_start_weapons_default);
+                       WEPSET_CLEAR_A(warmup_start_weapons_defaultmask);
                        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
                        {
                                e = get_weaponinfo(i);
-                               w = want_weapon("g_start_weapon_", e, cvar("g_warmup_allguns"));
+                               float w = want_weapon("g_start_weapon_", e, cvar("g_warmup_allguns"));
                                if(w & 1)
                                        WEPSET_OR_AW(warmup_start_weapons, i);
                                if(w & 2)
@@ -1042,8 +1053,8 @@ void readplayerstartcvars()
        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
        {
                e = get_weaponinfo(i);
-               if(WEPSET_CONTAINS_AW(start_weapons, j) || WEPSET_CONTAINS_AW(warmup_start_weapons, j))
-                       weapon_action(e.weapon, WR_PRECACHE);
+               if(WEPSET_CONTAINS_AW(start_weapons, i) || WEPSET_CONTAINS_AW(warmup_start_weapons, i))
+                       weapon_action(i, WR_PRECACHE);
        }
 
        start_ammo_shells = max(0, start_ammo_shells);
@@ -1098,6 +1109,8 @@ void readlevelcvars(void)
                MUTATOR_ADD(mutator_dodging);
        if(cvar("g_spawn_near_teammate"))
                MUTATOR_ADD(mutator_spawn_near_teammate);
+       if(cvar("g_physical_items"))
+               MUTATOR_ADD(mutator_physical_items);
        if(!g_minstagib)
        {
                if(cvar("g_invincible_projectiles"))
@@ -1688,7 +1701,7 @@ void make_safe_for_remove(entity e)
 {
     if (e.initialize_entity)
     {
-        entity ent, prev;
+        entity ent, prev = world;
         for (ent = initialize_entity_first; ent; )
         {
             if ((ent == e) || ((ent.classname == "initialize_entity") && (ent.enemy == e)))
@@ -1760,6 +1773,7 @@ void InitializeEntity(entity e, void(void) func, float order)
     e.initialize_entity_order = order;
 
     cur = initialize_entity_first;
+    prev = world;
     for (;;)
     {
         if (!cur || cur.initialize_entity_order > order)
@@ -2018,6 +2032,9 @@ float WarpZone_Projectile_Touch_ImpactFilter_Callback()
 }
 #define PROJECTILE_TOUCH if(WarpZone_Projectile_Touch()) return
 
+#define ITEM_TOUCH_NEEDKILL() (((trace_dpstartcontents | trace_dphitcontents) & DPCONTENTS_NODROP) || (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY))
+#define ITEM_DAMAGE_NEEDKILL(dt) (((dt) == DEATH_HURTTRIGGER) || ((dt) == DEATH_SLIME) || ((dt) == DEATH_LAVA) || ((dt) == DEATH_SWAMP))
+
 void URI_Get_Callback(float id, float status, string data)
 {
        if(url_URI_Get_Callback(id, status, data))
@@ -2107,7 +2124,7 @@ void race_writeTime(string map, float t, string myuid)
        float newpos;
        newpos = race_readPos(map, t);
 
-       float i, prevpos;
+       float i, prevpos = 0;
        for(i = 1; i <= RANKINGS_CNT; ++i)
        {
                if(race_readUID(map, i) == myuid)
@@ -2169,6 +2186,8 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f
     org = world.mins;
     delta = world.maxs - world.mins;
 
+    start = end = org;
+
     for (i = 0; i < attempts; ++i)
     {
         start_x = org_x + random() * delta_x;
@@ -2425,12 +2444,8 @@ vector shotorg_adjust(vector vecs, float y_is_right, float visual)
 void attach_sameorigin(entity e, entity to, string tag)
 {
     vector org, t_forward, t_left, t_up, e_forward, e_up;
-    vector org0, ang0;
     float tagscale;
 
-    ang0 = e.angles;
-    org0 = e.origin;
-
     org = e.origin - gettaginfo(to, gettagindex(to, tag));
     tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag
     t_forward = v_forward * tagscale;