]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/w_porto.qc
Add weaponstartoverride property to weapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / w_porto.qc
index 6706266d1579453b9745fdb8533e982d756e3fb7..ee246a89b65ce7bc4e28565903ef6f045e07e15d 100644 (file)
@@ -11,21 +11,22 @@ REGISTER_WEAPON(
 /* fullname */ _("Port-O-Launch")
 );
 
-#define PORTO_SETTINGS(weapon) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, animtime) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, lifetime) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, refire) \
-       WEP_ADD_CVAR(weapon, MO_BOTH, speed) \
-       WEP_ADD_CVAR(weapon, MO_NONE, secondary) \
-       WEP_ADD_PROP(weapon, reloading_ammo, reload_ammo) \
-       WEP_ADD_PROP(weapon, reloading_time, reload_time) \
-       WEP_ADD_PROP(weapon, switchdelay_raise, switchdelay_raise) \
-       WEP_ADD_PROP(weapon, switchdelay_drop, switchdelay_drop)
+#define PORTO_SETTINGS(w_cvar,w_prop) \
+       w_cvar(WEP_PORTO, porto, MO_BOTH, animtime) \
+       w_cvar(WEP_PORTO, porto, MO_BOTH, lifetime) \
+       w_cvar(WEP_PORTO, porto, MO_BOTH, refire) \
+       w_cvar(WEP_PORTO, porto, MO_BOTH, speed) \
+       w_cvar(WEP_PORTO, porto, MO_NONE, secondary) \
+       w_prop(WEP_PORTO, porto, float,  reloading_ammo, reload_ammo) \
+       w_prop(WEP_PORTO, porto, float,  reloading_time, reload_time) \
+       w_prop(WEP_PORTO, porto, float,  switchdelay_raise, switchdelay_raise) \
+       w_prop(WEP_PORTO, porto, float,  switchdelay_drop, switchdelay_drop) \
+       w_prop(WEP_PORTO, porto, string, weaponreplace, weaponreplace) \
+       w_prop(WEP_PORTO, porto, float,  weaponstart, weaponstart) \
+       w_prop(WEP_PORTO, porto, float,  weaponstartoverride, weaponstartoverride)
 
 #ifdef SVQC
-PORTO_SETTINGS(porto)
-void spawnfunc_weapon_porto (void) { weapon_defaultspawnfunc(WEP_PORTO); }
-
+PORTO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
 .entity porto_current;
 .vector porto_v_angle; // holds "held" view angles
 .float porto_v_angle_held;
@@ -33,6 +34,7 @@ void spawnfunc_weapon_porto (void) { weapon_defaultspawnfunc(WEP_PORTO); }
 #endif
 #else
 #ifdef SVQC
+void spawnfunc_weapon_porto (void) { weapon_defaultspawnfunc(WEP_PORTO); }
 
 void W_Porto_Success (void)
 {
@@ -63,7 +65,7 @@ void W_Porto_Fail (float failhard)
 
        self.realowner.porto_current = world;
 
-       if(self.cnt < 0 && !failhard && self.realowner.playerid == self.playerid && self.realowner.deadflag == DEAD_NO && !WEPSET_CONTAINS_EW(self.realowner, WEP_PORTO))
+       if(self.cnt < 0 && !failhard && self.realowner.playerid == self.playerid && self.realowner.deadflag == DEAD_NO && !(self.realowner.weapons & WEPSET_PORTO))
        {
                setsize (self, '-16 -16 0', '16 16 32');
                setorigin(self, self.origin + trace_plane_normal);
@@ -127,19 +129,19 @@ void W_Porto_Touch (void)
 
        if(self.realowner.playerid != self.playerid)
        {
-               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                remove(self);
        }
        else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
        {
-               spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTN_NORM);
+               spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTEN_NORM);
                // just reflect
                self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
                self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
        }
        else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
        {
-               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                W_Porto_Fail(0);
                if(self.cnt < 0)
                        Portal_ClearAll_PortalsOnly(self.realowner);
@@ -149,14 +151,14 @@ void W_Porto_Touch (void)
                // in-portal only
                if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        centerprint(self.realowner, "^1In^7-portal created.");
                        W_Porto_Success();
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        W_Porto_Fail(0);
                }
@@ -166,14 +168,14 @@ void W_Porto_Touch (void)
                // out-portal only
                if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        centerprint(self.realowner, "^4Out^7-portal created.");
                        W_Porto_Success();
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        W_Porto_Fail(0);
                }
@@ -183,7 +185,7 @@ void W_Porto_Touch (void)
                self.effects += EF_BLUE - EF_RED;
                if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        centerprint(self.realowner, "^1In^7-portal created.");
                        self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm);
@@ -192,7 +194,7 @@ void W_Porto_Touch (void)
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        Portal_ClearAll_PortalsOnly(self.realowner);
                        W_Porto_Fail(0);
@@ -204,21 +206,21 @@ void W_Porto_Touch (void)
                {
                        if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                        {
-                               sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
                                trace_plane_normal = norm;
                                centerprint(self.realowner, "^4Out^7-portal created.");
                                W_Porto_Success();
                        }
                        else
                        {
-                               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                                Portal_ClearAll_PortalsOnly(self.realowner);
                                W_Porto_Fail(0);
                        }
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
                        Portal_ClearAll_PortalsOnly(self.realowner);
                        W_Porto_Fail(0);
                }
@@ -299,7 +301,7 @@ float w_porto(float req)
                }
                case WR_CONFIG:
                {
-                       WEP_CONFIG_SETTINGS(PORTO_SETTINGS(porto))
+                       PORTO_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS)
                        return TRUE;
                }
                case WR_THINK:
@@ -372,16 +374,11 @@ float w_porto(float req)
                        precache_sound ("porto/explode.wav");
                        precache_sound ("porto/fire.wav");
                        precache_sound ("porto/unsupported.wav");
-                       #define WEP_ADD_CVAR(weapon,mode,name) /*nothing*/
-                       #define WEP_ADD_PROP(weapon,prop,name) WEP_SET_PROP(WEP_PORTO,weapon,prop,name)
-                       PORTO_SETTINGS(porto)
-                       #undef WEP_ADD_CVAR
-                       #undef WEP_ADD_PROP
+                       PORTO_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
                        return TRUE;
                }
                case WR_SETUP:
                {
-                       weapon_setup(WEP_PORTO);
                        self.current_ammo = ammo_none;
                        return TRUE;
                }