]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/porto.qc
StartFrame: minor cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / porto.qc
index 6b6e6252a2b89bb261d7615a98e22fe87448546a..790ab53caff9d5fddabf450efb60d017d2bc9d43 100644 (file)
@@ -9,7 +9,6 @@ CLASS(PortoLaunch, Weapon)
 #ifndef MENUQC
 /* model     */ ATTRIB(PortoLaunch, m_model, Model, MDL_PORTO_ITEM);
 #endif
-/* simplemdl */ ATTRIB(PortoLaunch, w_simplemdl, string, "foobar");
 /* crosshair */ ATTRIB(PortoLaunch, w_crosshair, string, "gfx/crosshairporto");
 /* crosshair */ ATTRIB(PortoLaunch, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(PortoLaunch, model2, string, "weaponporto");
@@ -38,13 +37,21 @@ PORTO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
 .vector porto_v_angle; // holds "held" view angles
 .float porto_v_angle_held;
 .vector right_vector;
+.float porto_forbidden;
 #endif
 #endif
 #ifdef IMPLEMENTATION
 #ifdef SVQC
 #include "../../triggers/trigger/jumppads.qh"
 
-void spawnfunc_weapon_porto(void) { weapon_defaultspawnfunc(WEP_PORTO.m_id); }
+spawnfunc(weapon_porto) { weapon_defaultspawnfunc(WEP_PORTO.m_id); }
+
+REGISTER_MUTATOR(porto_ticker, true);
+MUTATOR_HOOKFUNCTION(porto_ticker, SV_StartFrame) {
+       entity e;
+       FOR_EACH_PLAYER(e)
+               e.porto_forbidden = max(0, e.porto_forbidden - 1);
+}
 
 void W_Porto_Success(void)
 {SELFPARAM();
@@ -75,7 +82,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 && !(self.realowner.weapons & WEPSET_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);
@@ -286,7 +293,7 @@ void W_Porto_Attack(float type)
        MUTATOR_CALLHOOK(EditProjectile, self, gren);
 }
 
-               METHOD(PortoLaunch, wr_aim, bool(entity thiswep))
+               METHOD(PortoLaunch, wr_aim, void(entity thiswep))
                {
                        SELFPARAM();
                        self.BUTTON_ATCK = false;
@@ -294,72 +301,66 @@ void W_Porto_Attack(float type)
                        if(!WEP_CVAR(porto, secondary))
                                if(bot_aim(WEP_CVAR_PRI(porto, speed), 0, WEP_CVAR_PRI(porto, lifetime), false))
                                        self.BUTTON_ATCK = true;
-
-                       return true;
                }
-               METHOD(PortoLaunch, wr_config, bool(entity this))
+               METHOD(PortoLaunch, wr_config, void(entity this))
                {
                        PORTO_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
-                       return true;
                }
-               METHOD(PortoLaunch, wr_think, bool(entity thiswep))
+               METHOD(PortoLaunch, wr_think, void(entity thiswep, entity actor, bool fire1, bool fire2))
                {
-                       SELFPARAM();
                        if(WEP_CVAR(porto, secondary))
                        {
-                               if(self.BUTTON_ATCK)
-                               if(!self.porto_current)
-                               if(!self.porto_forbidden)
-                               if(weapon_prepareattack(0, WEP_CVAR_PRI(porto, refire)))
+                               if(fire1)
+                               if(!actor.porto_current)
+                               if(!actor.porto_forbidden)
+                               if(weapon_prepareattack(thiswep, actor, false, WEP_CVAR_PRI(porto, refire)))
                                {
                                        W_Porto_Attack(0);
-                                       weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready);
+                                       weapon_thinkf(actor, WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready);
                                }
 
-                               if(self.BUTTON_ATCK2)
-                               if(!self.porto_current)
-                               if(!self.porto_forbidden)
-                               if(weapon_prepareattack(1, WEP_CVAR_SEC(porto, refire)))
+                               if(fire2)
+                               if(!actor.porto_current)
+                               if(!actor.porto_forbidden)
+                               if(weapon_prepareattack(thiswep, actor, true, WEP_CVAR_SEC(porto, refire)))
                                {
                                        W_Porto_Attack(1);
-                                       weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(porto, animtime), w_ready);
+                                       weapon_thinkf(actor, WFRAME_FIRE2, WEP_CVAR_SEC(porto, animtime), w_ready);
                                }
                        }
                        else
                        {
-                               if(self.porto_v_angle_held)
+                               if(actor.porto_v_angle_held)
                                {
-                                       if(!self.BUTTON_ATCK2)
+                                       if(!fire2)
                                        {
-                                               self.porto_v_angle_held = 0;
+                                               actor.porto_v_angle_held = 0;
 
-                                               ClientData_Touch(self);
+                                               ClientData_Touch(actor);
                                        }
                                }
                                else
                                {
-                                       if(self.BUTTON_ATCK2)
+                                       if(fire2)
                                        {
-                                               self.porto_v_angle = self.v_angle;
-                                               self.porto_v_angle_held = 1;
+                                               actor.porto_v_angle = actor.v_angle;
+                                               actor.porto_v_angle_held = 1;
 
-                                               ClientData_Touch(self);
+                                               ClientData_Touch(actor);
                                        }
                                }
-                               if(self.porto_v_angle_held)
-                                       makevectors(self.porto_v_angle); // override the previously set angles
+                               if(actor.porto_v_angle_held)
+                                       makevectors(actor.porto_v_angle); // override the previously set angles
 
-                               if(self.BUTTON_ATCK)
-                               if(!self.porto_current)
-                               if(!self.porto_forbidden)
-                               if(weapon_prepareattack(0, WEP_CVAR_PRI(porto, refire)))
+                               if(fire1)
+                               if(!actor.porto_current)
+                               if(!actor.porto_forbidden)
+                               if(weapon_prepareattack(thiswep, actor, false, WEP_CVAR_PRI(porto, refire)))
                                {
                                        W_Porto_Attack(-1);
-                                       weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready);
+                                       weapon_thinkf(actor, WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready);
                                }
                        }
-
-                       return true;
                }
                METHOD(PortoLaunch, wr_checkammo1, bool(entity this))
                {
@@ -371,36 +372,24 @@ void W_Porto_Attack(float type)
                        // always allow infinite ammo
                        return true;
                }
-               METHOD(PortoLaunch, wr_init, bool(entity this))
+               METHOD(PortoLaunch, wr_init, void(entity this))
                {
                        PORTO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
-                       return true;
                }
-               METHOD(PortoLaunch, wr_setup, bool(entity thiswep))
+               METHOD(PortoLaunch, wr_setup, void(entity thiswep))
                {
                        SELFPARAM();
                        self.ammo_field = ammo_none;
-                       return true;
                }
-               METHOD(PortoLaunch, wr_resetplayer, bool(entity thiswep))
+               METHOD(PortoLaunch, wr_resetplayer, void(entity thiswep))
                {
                        SELFPARAM();
                        self.porto_current = world;
-                       return true;
                }
 #endif
 #ifdef CSQC
-               METHOD(PortoLaunch, wr_impacteffect, bool(entity this)) {
+               METHOD(PortoLaunch, wr_impacteffect, void(entity this)) {
                        LOG_WARNING("Since when does Porto send DamageInfo?\n");
-                       return true;
-               }
-               METHOD(PortoLaunch, wr_init, bool(entity this)) {
-                       // nothing to do
-                       return true;
-               }
-               METHOD(PortoLaunch, wr_zoomreticle, bool(entity this)) {
-                       // no weapon specific image for this weapon
-                       return false;
                }
 #endif
 #endif