]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/portals.qc
Merge branch 'master' into terencehill/string_prefixes_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / portals.qc
index f0b9c5b21861a8095913ca6fc3066a53590c4411..53c77ecceefc089e6215e93fd2d9bc771205bc3a 100644 (file)
@@ -1,7 +1,27 @@
+#if defined(CSQC)
+#elif defined(MENUQC)
+#elif defined(SVQC)
+       #include "../dpdefs/progsdefs.qh"
+    #include "../dpdefs/dpextensions.qh"
+    #include "../warpzonelib/anglestransform.qh"
+    #include "../warpzonelib/util_server.qh"
+    #include "../common/constants.qh"
+    #include "../common/util.qh"
+    #include "../common/weapons/weapons.qh"
+    #include "autocvars.qh"
+    #include "defs.qh"
+    #include "../common/notifications.qh"
+    #include "../common/deathtypes.qh"
+    #include "mutators/mutators_include.qh"
+    #include "../csqcmodellib/sv_model.qh"
+    #include "portals.qh"
+    #include "g_hook.qh"
+#endif
+
 #define PORTALS_ARE_NOT_SOLID
 
-#define SAFENUDGE '1 1 1'
-#define SAFERNUDGE '8 8 8'
+const vector SAFENUDGE = '1 1 1';
+const vector SAFERNUDGE = '8 8 8';
 
 .vector portal_transform;
 .vector portal_safe_origin;
@@ -13,9 +33,9 @@ float PlayerEdgeDistance(entity p, vector v)
 {
        vector vbest;
 
-       if(v_x < 0) vbest_x = p.mins_x; else vbest_x = p.maxs_x;
-       if(v_y < 0) vbest_y = p.mins_y; else vbest_y = p.maxs_y;
-       if(v_z < 0) vbest_z = p.mins_z; else vbest_z = p.maxs_z;
+       if(v.x < 0) vbest.x = p.mins.x; else vbest.x = p.maxs.x;
+       if(v.y < 0) vbest.y = p.mins.y; else vbest.y = p.maxs.y;
+       if(v.z < 0) vbest.z = p.mins.z; else vbest.z = p.maxs.z;
 
        return vbest * v;
 }
@@ -36,7 +56,7 @@ vector Portal_ApplyTransformToPlayerAngle(vector transform, vector vangle)
 
        // PLAYERS use different math
 #ifndef POSITIVE_PITCH_IS_DOWN
-       ang_x = -ang_x;
+       ang.x = -ang.x;
 #endif
 
        //print("reference: ", vtos(AnglesTransform_ApplyToVAngles(transform, ang)), "\n");
@@ -44,7 +64,7 @@ vector Portal_ApplyTransformToPlayerAngle(vector transform, vector vangle)
        fixedmakevectors(ang);
        old_forward = v_forward;
        old_up = v_up;
-       fixedmakevectors(ang_y * '0 1 0');
+       fixedmakevectors(ang.y * '0 1 0');
        old_yawforward = v_forward;
 
        // their aiming directions are portalled...
@@ -59,14 +79,14 @@ vector Portal_ApplyTransformToPlayerAngle(vector transform, vector vangle)
        //
        // new_up could now point forward OR backward... which direction to choose?
 
-       if(new_forward_z > 0.7 || new_forward_z < -0.7) // far up; in this case, the "up" vector points backwards
+       if(new_forward.z > 0.7 || new_forward.z < -0.7) // far up; in this case, the "up" vector points backwards
        {
                // new_yawforward and new_yawup define the new aiming half-circle
                // we "just" need to find out whether new_up or -new_up is in that half circle
                ang = fixedvectoangles(new_forward); // this still gets us a nice pitch value...
                if(new_up * new_yawforward < 0)
                        new_up = -1 * new_up;
-               ang_y = vectoyaw(new_up); // this vector is the yaw we want
+               ang.y = vectoyaw(new_up); // this vector is the yaw we want
                //print("UP/DOWN path: ", vtos(ang), "\n");
        }
        else
@@ -77,9 +97,9 @@ vector Portal_ApplyTransformToPlayerAngle(vector transform, vector vangle)
        }
 
 #ifndef POSITIVE_PITCH_IS_DOWN
-       ang_x = -ang_x;
+       ang.x = -ang.x;
 #endif
-       ang_z = vangle_z;
+       ang.z = vangle.z;
        return ang;
 }
 
@@ -89,7 +109,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
        vector from, to, safe, step, transform, ang, newvel;
        float planeshift, s, t;
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer called without other portal being set. Stop.");
                return 0;
@@ -146,7 +166,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
        //print(vtos(to), "\n");
 
        // ang_x stuff works around weird quake angles
-       if(player.classname == "player")
+       if(IS_PLAYER(player))
                ang = Portal_ApplyTransformToPlayerAngle(transform, player.v_angle);
        else
                ang = AnglesTransform_ApplyToAngles(transform, player.angles);
@@ -160,7 +180,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
        player = self;
        self = oldself;
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer ended up without other portal being set BEFORE TeleportPlayer. Stop.");
                return 0;
@@ -175,7 +195,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
                        Send_Notification(NOTIF_ONE, player, MSG_ANNCE, ANNCE_ACHIEVEMENT_AMAZING);
        }
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer ended up without other portal being set AFTER TeleportPlayer. Stop.");
                return 0;
@@ -216,9 +236,9 @@ float Portal_WillHitPlane(vector eorg, vector emins, vector emaxs, vector evel,
        vector v;
 
        dist = (eorg - porg) * pnorm;
-       dist += min(emins_x * pnorm_x, emaxs_x * pnorm_x);
-       dist += min(emins_y * pnorm_y, emaxs_y * pnorm_y);
-       dist += min(emins_z * pnorm_z, emaxs_z * pnorm_z);
+       dist += min(emins.x * pnorm.x, emaxs.x * pnorm.x);
+       dist += min(emins.y * pnorm.y, emaxs.y * pnorm.y);
+       dist += min(emins.z * pnorm.z, emaxs.z * pnorm.z);
        if(dist < -1) // other side?
                return 0;
 #ifdef PORTALS_ARE_NOT_SOLID
@@ -244,7 +264,7 @@ void Portal_Touch()
        if(self.solid != SOLID_TRIGGER)
                return; // possibly engine bug
 
-       if(other.classname == "player")
+       if(IS_PLAYER(other))
                return; // handled by think
 #endif
 
@@ -277,16 +297,16 @@ void Portal_Touch()
                        return;
                }
        if(other != self.aiment)
-               if(other.classname == "player")
+               if(IS_PLAYER(other))
                        if(IS_INDEPENDENT_PLAYER(other) || IS_INDEPENDENT_PLAYER(self.aiment))
                                return; // cannot go through someone else's portal
        if(other.aiment != self.aiment)
-               if(other.aiment.classname == "player")
+               if(IS_PLAYER(other.aiment))
                        if(IS_INDEPENDENT_PLAYER(other.aiment) || IS_INDEPENDENT_PLAYER(self.aiment))
                                return; // cannot go through someone else's portal
        fixedmakevectors(self.mangle);
        g = frametime * '0 0 -1' * autocvar_sv_gravity;
-       if(!Portal_WillHitPlane(other.origin, other.mins, other.maxs, other.velocity + g, self.origin, v_forward, self.maxs_x))
+       if(!Portal_WillHitPlane(other.origin, other.mins, other.maxs, other.velocity + g, self.origin, v_forward, self.maxs.x))
                return;
 
        /*
@@ -398,14 +418,14 @@ void Portal_Remove(entity portal, float killed)
        if(killed)
        {
                fixedmakevectors(portal.mangle);
-               sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTN_NORM);
+               sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTEN_NORM);
                pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4);
                remove(portal);
        }
        else
        {
                Portal_MakeBrokenPortal(portal);
-               sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTN_NORM);
+               sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTEN_NORM);
                SUB_SetFade(portal, time, 0.5);
        }
 }
@@ -424,7 +444,7 @@ void Portal_Damage(entity inflictor, entity attacker, float damage, float deatht
 
 void Portal_Think_TryTeleportPlayer(entity e, vector g)
 {
-       if(!Portal_WillHitPlane(e.origin, e.mins, e.maxs, e.velocity + g, self.origin, v_forward, self.maxs_x))
+       if(!Portal_WillHitPlane(e.origin, e.mins, e.maxs, e.velocity + g, self.origin, v_forward, self.maxs.x))
                return;
 
        // if e would hit the portal in a frame...
@@ -479,7 +499,7 @@ void Portal_Think()
 
 float Portal_Customize()
 {
-       if(other.classname == "spectator")
+       if(IS_SPEC(other))
                other = other.enemy;
        if(other == self.aiment)
        {
@@ -493,7 +513,7 @@ float Portal_Customize()
        {
                self.modelindex = self.savemodelindex;
        }
-       return TRUE;
+       return true;
 }
 
 // cleanup:
@@ -612,7 +632,7 @@ entity Portal_Spawn(entity own, vector org, vector ang)
        setorigin(portal, org);
        portal.mangle = ang;
        portal.angles = ang;
-       portal.angles_x = -portal.angles_x; // is a bmodel
+       portal.angles_x = -portal.angles.x; // is a bmodel
        portal.think = Portal_Think;
        portal.nextthink = 0;
        portal.portal_activatetime = time + 0.1;