]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make jetpacks respect g_powerups and add settings to disable them individually
authorMario <mario.mario@y7mail.com>
Thu, 1 Aug 2024 05:09:59 +0000 (15:09 +1000)
committerMario <mario.mario@y7mail.com>
Thu, 1 Aug 2024 05:09:59 +0000 (15:09 +1000)
mutators.cfg
qcsrc/common/items/item/jetpack.qh
qcsrc/common/mutators/mutator/instagib/sv_instagib.qc
xonotic-server.cfg

index 0851dc4f7cbc81fd6095c12824af650e4ca8c834..bed614445e2e3a88ffcfe28cb5b73bb04ee9baa1 100644 (file)
@@ -49,6 +49,7 @@ set g_instagib_blaster_keepdamage 0 "allow secondary fire to hurt players"
 set g_instagib_blaster_keepforce 0 "allow secondary fire to push players"
 set g_instagib_mirrordamage 0 "allow damage mirror instagib"
 set g_instagib_friendlypush 1 "allow pushing teammates with the vaporizer primary attack"
+set g_instagib_allow_jetpacks 0 "allow jetpacks and fuel regenerators to appear in maps"
 
 
 // ==========
index 0ece1bf32c93a81d1c012b771c5fa9af3cce0d17..ca52f5466111e28b0429d64cbeb4714d211d1124 100644 (file)
@@ -16,9 +16,13 @@ MODEL(Jetpack_ITEM, Item_Model("g_jetpack.md3"));
 #endif
 
 #ifdef SVQC
+bool autocvar_g_powerups_jetpack = true;
 PROPERTY(int, g_pickup_fuel_jetpack);
-void powerup_jetpack_init(Pickup this, entity item)
+void powerup_jetpack_init(Pickup def, entity item)
 {
+    if(!autocvar_g_powerups || !autocvar_g_powerups_jetpack)
+        def.spawnflags |= ITEM_FLAG_MUTATORBLOCKED;
+
     if(!GetResource(item, RES_FUEL))
         SetResourceExplicit(item, RES_FUEL, g_pickup_fuel_jetpack);
 }
@@ -83,13 +87,22 @@ SPAWNFUNC_ITEM(item_fuel, ITEM_JetpackFuel)
 MODEL(JetpackRegen_ITEM, Item_Model("g_fuelregen.md3"));
 #endif
 
+#ifdef SVQC
+bool autocvar_g_powerups_fuelregen = true;
+void powerup_fuelregen_init(Pickup def, entity item)
+{
+    if(!autocvar_g_powerups || !autocvar_g_powerups_fuelregen)
+        def.spawnflags |= ITEM_FLAG_MUTATORBLOCKED;
+}
+#endif
+
 CLASS(JetpackRegen, Powerup)
 ENDCLASS(JetpackRegen)
 
 REGISTER_ITEM(JetpackRegen, JetpackRegen) {
     this.m_canonical_spawnfunc = "item_fuel_regen";
 #ifdef GAMEQC
-       this.spawnflags = ITEM_FLAG_NORMAL;
+       this.spawnflags             = ITEM_FLAG_NORMAL;
     this.m_model                =   MDL_JetpackRegen_ITEM;
 #endif
     this.netname                =   "fuel_regen";
@@ -102,6 +115,7 @@ REGISTER_ITEM(JetpackRegen, JetpackRegen) {
     this.m_botvalue             =   3000;
     this.m_itemid               =   IT_FUEL_REGEN;
     this.m_pickupevalfunc       =   ammo_pickupevalfunc;
+    this.m_iteminit             =   powerup_fuelregen_init;
 #endif
 }
 
index 028dc7e32c6980ec761bd76cf51e658f41230c44..9f10236e4f5c0963ff92d5de104003f91470272e 100644 (file)
@@ -16,6 +16,7 @@ bool autocvar_g_instagib_ammo_convert_cells;
 bool autocvar_g_instagib_ammo_convert_rockets;
 bool autocvar_g_instagib_ammo_convert_shells;
 bool autocvar_g_instagib_ammo_convert_bullets;
+bool autocvar_g_instagib_allow_jetpacks;
 
 /// \brief Returns a random classname of the instagib item.
 /// \param[in] prefix Prefix of the cvars that hold probabilities.
@@ -344,6 +345,9 @@ MUTATOR_HOOKFUNCTION(mutator_instagib, FilterItem)
                        if(autocvar_g_instagib_ammo_convert_bullets)
                                instagib_replace_item_with(item, ITEM_VaporizerCells);
                        return true;
+               case ITEM_Jetpack:
+               case ITEM_JetpackRegen:
+                       return !autocvar_g_instagib_allow_jetpacks;
        }
 
        switch (item.weapon)
index d7304eca0ab8967ad22b79d8d54239552d376ef7..cd109e608665c0fa36b2959220ac0c5e3f211f14 100644 (file)
@@ -207,6 +207,8 @@ set g_powerups_strength 1 "allow strength powerups to spawn"
 set g_powerups_shield 1 "allow shield powerups to spawn"
 set g_powerups_speed 1 "allow speed powerups to spawn"
 set g_powerups_invisibility 1 "allow invisibility powerups to spawn"
+set g_powerups_jetpack 1 "allow jetpacks to spawn"
+set g_powerups_fuelregen 1 "allow fuel regenerators to spawn"
 set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammo"
 set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn"
 set g_pickup_respawntime_scaling_reciprocal 0 "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `reciprocal` (with `offset` and `linear` set to 0) can be used to achieve a constant number of items spawned *per player*"