]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Automatically replace the New Toy weapons with health/armor spawns when New Toys...
authorMario <mario.mario@y7mail.com>
Mon, 13 Jan 2020 10:52:15 +0000 (20:52 +1000)
committerMario <mario.mario@y7mail.com>
Mon, 13 Jan 2020 10:52:15 +0000 (20:52 +1000)
qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc
qcsrc/common/t_items.qc
qcsrc/common/weapons/weapon/hlac.qc
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/rifle.qc
qcsrc/common/weapons/weapon/seeker.qc
qcsrc/server/autocvars.qh
qcsrc/server/weapons/spawning.qc
xonotic-server.cfg

index 47e1c97a9a9a70f1df5a7214ac56e12e8080bbed..fdcce46086fb07e63ebf441662f83904e209acf0 100644 (file)
@@ -86,6 +86,8 @@ REGISTER_MUTATOR(nt, expr_evaluate(cvar_string("g_new_toys")) && !MUTATOR_IS_ENA
                        if(nt_IsNewToy(it.m_id))
                                it.spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
                });
+
+               cvar_settemp("sv_nexuizcompat_weaponswap", "0"); // disable compatibility so these weapons aren't auto replaced elsewhere
        }
 
        MUTATOR_ONROLLBACK_OR_REMOVE
index 1029f7865682df59cdde8d83500552bd0503a8b7..9756752dae8e5c07eed54aee7a3be2654620cb55 100644 (file)
@@ -1384,6 +1384,11 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 void StartItem(entity this, GameItem def)
 {
     def = def.m_spawnfunc_hookreplace(def, this);
+    if (def.instanceOfWeapon)
+    {
+       weapon_defaultspawnfunc(this, def);
+       return;
+    }
     if (def.spawnflags & ITEM_FLAG_MUTATORBLOCKED)
     {
         delete(this);
index 6511d22b572b4fab5938c035aea73d2e18dec6a2..dbc65b93efb0e5de068136f0e6e2442419878b69 100644 (file)
@@ -2,6 +2,15 @@
 
 #ifdef SVQC
 
+METHOD(HLAC, m_spawnfunc_hookreplace, Weapon(HLAC this, entity e))
+{
+    if (autocvar_sv_nexuizcompat_weaponswap && !Item_IsLoot(e))
+    {
+        return ITEM_ArmorBig;
+    }
+    return this;
+}
+
 void W_HLAC_Touch(entity this, entity toucher)
 {
        float isprimary;
index 7f60c5b571d90c84b9d8ff52717c19462300d89d..48b869f941d33de665ecdfc08766153c2f7adf88 100644 (file)
@@ -2,6 +2,15 @@
 
 #ifdef SVQC
 
+METHOD(MineLayer, m_spawnfunc_hookreplace, Weapon(MineLayer this, entity e))
+{
+    if (autocvar_sv_nexuizcompat_weaponswap && !Item_IsLoot(e))
+    {
+        return ITEM_HealthBig;
+    }
+    return this;
+}
+
 void W_MineLayer_Stick(entity this, entity to)
 {
        spamsound(this, CH_SHOTS, SND_MINE_STICK, VOL_BASE, ATTN_NORM);
index 7daf4ec40803c445f109569a9a8e73e532beb4e6..9edf486a0b7fb4efba7e819d952109a3dfd49977 100644 (file)
@@ -2,6 +2,15 @@
 
 #ifdef SVQC
 
+METHOD(Rifle, m_spawnfunc_hookreplace, Weapon(Rifle this, entity e))
+{
+    if (autocvar_sv_nexuizcompat_weaponswap && !Item_IsLoot(e))
+    {
+        return ITEM_ArmorBig;
+    }
+    return this;
+}
+
 void W_Rifle_FireBullet(Weapon thiswep, .entity weaponentity, float pSpread, float pDamage, float pForce, float pSolidPenetration, float pAmmo, int deathtype, float pTracer, float pShots, Sound pSound, entity actor)
 {
        float i;
index d7ba289f5ca7ee9f1e92669a9fd5098b93791771..9a6abb11cc7832c0233e85160cbebb43a483fab6 100644 (file)
@@ -2,6 +2,15 @@
 
 #ifdef SVQC
 
+METHOD(Seeker, m_spawnfunc_hookreplace, Weapon(Seeker this, entity e))
+{
+    if (autocvar_sv_nexuizcompat_weaponswap && !Item_IsLoot(e))
+    {
+        return ITEM_HealthBig;
+    }
+    return this;
+}
+
 // ============================
 // Begin: Missile functions, these are general functions to be manipulated by other code
 // ============================
index 8213aaddec322cb0cf4f547b058c9c90adf3d72e..111564a23478dca8f9e7894697b252b05945ad8a 100644 (file)
@@ -324,6 +324,7 @@ string autocvar_sv_motd;
 int autocvar_sv_name_maxlength = 64;
 bool autocvar_sv_precacheplayermodels;
 bool autocvar_sv_q3acompat_machineshotgunswap;
+bool autocvar_sv_nexuizcompat_weaponswap = true;
 bool autocvar_sv_servermodelsonly;
 int autocvar_sv_spectate;
 float autocvar_sv_spectator_speed_multiplier;
index 93c49af9bddb7c7fe02cdd47018d5ce34a3758dd..235893a5ba67c988e5fef697c950c33ea8148e80 100644 (file)
@@ -29,6 +29,11 @@ string W_Apply_Weaponreplace(string in)
 void weapon_defaultspawnfunc(entity this, Weapon wpn)
 {
        wpn = wpn.m_spawnfunc_hookreplace(wpn, this);
+       if (!wpn.instanceOfWeapon)
+       {
+               StartItem(this, wpn);
+               return;
+       }
        this.classname = wpn.m_canonical_spawnfunc;
        if (!Item_IsLoot(this) && !this.m_isreplaced)
        {
index 6e040d5b0f747abd3055f21cacfb5d1178f301e9..076ace25ee047d451e5a7bfb2a2c26d5fef218f7 100644 (file)
@@ -488,6 +488,7 @@ sv_gameplayfix_nogravityonground 1
 
 set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping machinegun and shotgun (for Q3A map compatibility in mapinfo files)"
 set sv_q3defragcompat 0 "toggle for some compatibility hacks (for Q3DF map compatibility)"
+set sv_nexuizcompat_weaponswap 1 "automatically replace legacy weapons with health and armor items (for Nexuiz map compatibility), automatically disabled by the New Toys mutator"
 
 set g_movement_highspeed 1 "multiplier scale for movement speed (applies to sv_maxspeed and sv_maxairspeed, also applies to air acceleration when g_movement_highspeed_q3_compat is set to 0)"
 set g_movement_highspeed_q3_compat 0 "apply speed modifiers to air movement in a more Q3-compatible way (only apply speed buffs and g_movement_highspeed to max air speed, not to acceleration)"