]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/t_quake3.qc
Merge remote branch 'origin/fruitiex/ctsfix' into fruitiex/ctsfix
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / t_quake3.qc
index 52214c2a6d276958dd933731fa16a487589e26f0..44036ade494e9b437934f93438fdd5ead1dab8ab 100644 (file)
@@ -5,46 +5,65 @@
 // NOTE: for best experience, you need to swap MGs with SGs in the map or it won't have a MG
 
 // SG -> SG
-void spawnfunc_ammo_shells()         { spawnfunc_item_shells();        }
-                                                 
-// MG -> MG                                      
-void spawnfunc_weapon_machinegun()   { spawnfunc_weapon_uzi();         }
-void spawnfunc_ammo_bullets()        { spawnfunc_item_bullets();       }
-                                                 
-// GL -> Mortar                                  
-void spawnfunc_ammo_grenades()       { spawnfunc_item_rockets();       }
-                                                 
-// LG -> Electro                                 
-void spawnfunc_weapon_lightning()    { spawnfunc_weapon_electro();     }
-void spawnfunc_ammo_lightning()      { spawnfunc_item_cells();         }
-                                                 
-// Plasma -> Hagar                             
-void spawnfunc_weapon_plasmagun()    { spawnfunc_weapon_hagar();       }
-void spawnfunc_ammo_cells()          { spawnfunc_item_rockets();       }
-                                                 
-// Rail -> Nex                                   
-void spawnfunc_weapon_railgun()      { spawnfunc_weapon_nex();         }
-void spawnfunc_ammo_slugs()          { spawnfunc_item_cells();         }
-                                                 
-// BFG -> Crylink                                  
-void spawnfunc_weapon_bfg()          { spawnfunc_weapon_crylink();     }
-void spawnfunc_ammo_bfg()            { spawnfunc_item_cells();         }
+void spawnfunc_ammo_shells()         { spawnfunc_item_shells();         }
+
+// MG -> MG
+void spawnfunc_weapon_machinegun()   { spawnfunc_weapon_uzi();          }
+void spawnfunc_ammo_bullets()        { spawnfunc_item_bullets();        }
+
+// GL -> Mortar
+void spawnfunc_ammo_grenades()       { spawnfunc_item_rockets();        }
+
+// LG -> Electro
+void spawnfunc_weapon_lightning()    { spawnfunc_weapon_electro();      }
+void spawnfunc_ammo_lightning()      { spawnfunc_item_cells();          }
+
+// Plasma -> Hagar
+void spawnfunc_weapon_plasmagun()    { spawnfunc_weapon_hagar();        }
+void spawnfunc_ammo_cells()          { spawnfunc_item_rockets();        }
+
+// Rail -> Rifle
+void spawnfunc_weapon_railgun()      { spawnfunc_weapon_campingrifle(); }
+void spawnfunc_ammo_slugs()          { spawnfunc_item_bullets();        }
+
+// BFG -> Crylink
+void spawnfunc_weapon_bfg()          { spawnfunc_weapon_crylink();      }
+void spawnfunc_ammo_bfg()            { spawnfunc_item_cells();          }
 
 // RL -> RL
-void spawnfunc_ammo_rockets()        { spawnfunc_item_rockets();       }
-                          
-// Armor                  
-void spawnfunc_item_armor_body()     { spawnfunc_item_armor_large();   }
-void spawnfunc_item_armor_combat()   { spawnfunc_item_armor_big();     }
-void spawnfunc_item_armor_shard()    { spawnfunc_item_armor_small();   }
-void spawnfunc_item_enviro()         { spawnfunc_item_invincible();    }
-
-// weapon remove ent from defrag
-void spawnfunc_target_init()         
+void spawnfunc_ammo_rockets()        { spawnfunc_item_rockets();        }
+
+// Armor
+void spawnfunc_item_armor_body()     { spawnfunc_item_armor_large();    }
+void spawnfunc_item_armor_combat()   { spawnfunc_item_armor_big();      }
+void spawnfunc_item_armor_shard()    { spawnfunc_item_armor_small();    }
+void spawnfunc_item_enviro()         { spawnfunc_item_invincible();     }
+
+// weapon remove ent from df
+void target_init_verify()
+{
+       entity trigger, targ;
+       for(trigger = world; (trigger = find(trigger, classname, "trigger_multiple")); )
+               for(targ = world; (targ = find(targ, targetname, trigger.target)); )
+                       if (targ.classname == "target_init" || targ.classname == "target_give" || targ.classname == "target_items")
+                       {
+                               trigger.wait = 0;
+                               trigger.delay = 0;
+                               targ.wait = 0;
+                               targ.delay = 0;
+
+                               //setsize(targ, trigger.mins, trigger.maxs);
+                               //setorigin(targ, trigger.origin);
+                               //remove(trigger);
+                       }
+}
+
+void spawnfunc_target_init()
 {
        self.spawnflags = 0; // remove all weapons except the ones listed below
-       self.netname = "laser uzi"; // keep these weapons through the remove trigger
+       self.netname = "shotgun"; // keep these weapons through the remove trigger
        spawnfunc_target_items();
+       InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET);
 }
 
 // weapon give ent from defrag
@@ -53,25 +72,25 @@ void target_give_init()
        entity targ;
        for (targ = world; (targ = find(targ, targetname, self.target)); ) {
                if (targ.classname == "weapon_rocketlauncher") {
-                       self.ammo_rockets += targ.count * cvar("g_balance_rocketlauncher_ammo");
+                       self.ammo_rockets += targ.count * autocvar_g_balance_rocketlauncher_ammo;
                        self.netname = "rocketlauncher";
                }
                else if (targ.classname == "weapon_plasmagun") {
-                       self.ammo_rockets += targ.count * cvar("g_balance_hagar_primary_ammo");
+                       self.ammo_rockets += targ.count * autocvar_g_balance_hagar_primary_ammo;
                        if(self.netname == "")
                                self.netname = "hagar";
                        else
                                self.netname = strcat(self.netname, " hagar");
                }
                else if (targ.classname == "weapon_bfg") {
-                       self.ammo_cells += targ.count * cvar("g_balance_crylink_primary_ammo");
+                       self.ammo_cells += targ.count * autocvar_g_balance_crylink_primary_ammo;
                        if(self.netname == "")
                                self.netname = "crylink";
                        else
                                self.netname = strcat(self.netname, " crylink");
                }
                else if (targ.classname == "weapon_grenadelauncher") {
-                       self.ammo_rockets += targ.count * cvar("g_balance_grenadelauncher_primary_ammo");
+                       self.ammo_rockets += targ.count * autocvar_g_balance_grenadelauncher_primary_ammo;
                        if(self.netname == "")
                                self.netname = "grenadelauncher";
                        else
@@ -81,10 +100,13 @@ void target_give_init()
                        self.armorvalue = 100;
                else if (targ.classname == "item_health_mega")
                        self.health = 200;
-               remove(targ);
+               //remove(targ); // removing ents in init functions causes havoc, workaround:
+        targ.think = SUB_Remove;
+        targ.nextthink = time;
        }
        self.spawnflags = 2;
        spawnfunc_target_items();
+       InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET);
 }
 
 void spawnfunc_target_give()