]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Begin making generator a common networked entity
authorMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 05:58:30 +0000 (15:58 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 05:58:30 +0000 (15:58 +1000)
qcsrc/client/Main.qc
qcsrc/client/monsters.qc
qcsrc/client/monsters.qh
qcsrc/client/progs.src
qcsrc/server/generator.qc [new file with mode: 0644]
qcsrc/server/generator.qh [new file with mode: 0644]
qcsrc/server/monsters/lib/monsters_early.qh
qcsrc/server/mutators/gamemode_onslaught.qc
qcsrc/server/mutators/gamemode_towerdefense.qc
qcsrc/server/progs.src

index 2567373cc5a5779dc6bb4590b078313dbbb50e9f..72c22553b0fc34d33b912039cc124c460e28086a 100644 (file)
@@ -781,7 +781,7 @@ void CSQC_Ent_Update(float bIsNewEntity)
                case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
                case ENT_CLIENT_TURRET: ent_turret(); break; 
                case ENT_CLIENT_MONSTER: ent_monster(); break;
-               case ENT_CLIENT_GENERATOR: ent_td_generator(); break;
+               case ENT_CLIENT_GENERATOR: ent_generator(); break;
                case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break;
                case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break;  
                case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); break;
index 64dd4f137d5da5c0fe7dc4dbc372d03a8d402bf3..53292d28ea1e74d3907a428dbc40ca7256641c9f 100644 (file)
@@ -382,67 +382,3 @@ void ent_monster()
                self.health = _tmp;
        }
 }
-
-void td_generator_precache()
-{
-       precache_model("models/onslaught/generator.md3");
-       precache_model("models/onslaught/generator_dead.md3");
-       precache_sound("onslaught/generator_underattack.wav");
-}
-
-void td_generator_die()
-{
-       setmodel(self, "models/onslaught/generator_dead.md3");
-       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-}
-
-void td_generator_draw() { } // TODO
-
-void td_generator_construct()
-{      
-       self.netname = "Generator";
-
-       setorigin(self, self.origin);
-       setmodel(self, "models/onslaught/generator.md3");
-       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
-       
-       self.move_movetype      = MOVETYPE_NOCLIP;
-       self.health                     = 255;
-       self.solid                      = SOLID_BBOX;
-       self.movetype           = MOVETYPE_NOCLIP; 
-       self.move_origin        = self.origin;
-       self.move_time          = time;
-       self.drawmask           = MASK_NORMAL;  
-       self.alpha                      = 1;
-       self.draw                       = td_generator_draw;
-}
-
-void ent_td_generator()
-{
-       float sf;
-       sf = ReadByte();
-
-       if(sf & MSF_SETUP)
-       {
-               self.origin_x = ReadCoord();
-               self.origin_y = ReadCoord();
-               self.origin_z = ReadCoord();
-               setorigin(self, self.origin);
-               
-               td_generator_precache();
-               td_generator_construct();
-               self.colormap = 1024;
-               self.glowmod = '1 1 0'; 
-       }
-
-       if(sf & MSF_STATUS)
-       {
-               float _tmp = ReadByte();
-               
-               if(_tmp == 0 && self.health != 0)
-                       td_generator_die();
-
-               self.health = _tmp;
-       }
-}
-
index 897b0d957d16fbfa04a8206c695ce52c7f49e77c..83dac2956fa224faa866c9aed2f06dee99234186 100644 (file)
@@ -1,3 +1,2 @@
 void ent_monster();
 void Monsters_Precache();
-void ent_td_generator();
index 29e1143f69d3a41f6da52acd12c9165fa9fa2c3f..dfe8184a658f6fdb922bd62570bfe6e4ae4b2dad 100644 (file)
@@ -49,6 +49,7 @@ tturrets.qh
 monsters.qh
 ../server/monsters/lib/monsters_early.qh
 ../server/movelib.qc
+../server/generator.qh
 main.qh
 vehicles/vehicles.qh
 ../common/csqcmodel_settings.qh
@@ -119,6 +120,8 @@ command/cl_cmd.qc
 ../warpzonelib/client.qc
 tturrets.qc
 
+../server/generator.qc
+
 ../server/monsters/monsters.qh
 monsters.qc
 
diff --git a/qcsrc/server/generator.qc b/qcsrc/server/generator.qc
new file mode 100644 (file)
index 0000000..dd7ab19
--- /dev/null
@@ -0,0 +1,139 @@
+#ifdef CSQC
+void generator_precache()
+{
+       precache_model("models/onslaught/generator.md3");
+       precache_model("models/onslaught/generator_dead.md3");
+       precache_sound("onslaught/generator_underattack.wav");
+}
+
+void generator_die()
+{
+       setmodel(self, "models/onslaught/generator_dead.md3");
+}
+
+void generator_draw() { } // TODO
+
+void generator_construct()
+{      
+       self.netname = "Generator";
+
+       setorigin(self, self.origin);
+       setmodel(self, "models/onslaught/generator.md3");
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
+       
+       self.move_movetype      = MOVETYPE_NOCLIP;
+       self.health                     = 255;
+       self.solid                      = SOLID_BBOX;
+       self.movetype           = MOVETYPE_NOCLIP; 
+       self.move_origin        = self.origin;
+       self.move_time          = time;
+       self.drawmask           = MASK_NORMAL;  
+       self.alpha                      = 1;
+       self.draw                       = generator_draw;
+}
+
+.vector glowmod;
+void generator_changeteam()
+{      
+       switch(self.team - 1)
+       {
+               case NUM_TEAM_1: // Red
+               {
+                       self.glowmod = '2 0 0';
+                       self.teamradar_color = '1 0 0';
+                       break;
+               }
+               case NUM_TEAM_2: // Blue
+               {
+                       self.glowmod = '0 0 2';
+                       self.teamradar_color = '0 0 1';
+                       break;
+               }
+               case NUM_TEAM_3: // Yellow
+               {
+                       self.glowmod = '1 1 0';
+                       self.teamradar_color = '1 1 0';
+                       break;
+               }
+               case NUM_TEAM_4: // Pink
+               {
+                       self.glowmod = '1 0 1';
+                       self.teamradar_color = '1 0 1';
+                       break;
+               }
+       }
+       
+       if(self.team)
+               self.colormap = 1024 + (self.team - 1) * 17;
+}
+
+void ent_generator()
+{
+       float sf;
+       sf = ReadByte();
+
+       if(sf & GSF_SETUP)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+               setorigin(self, self.origin);
+               
+               generator_precache();
+               generator_construct();
+               self.colormap = 1024;
+               self.glowmod = '1 1 0'; 
+       }
+
+       if(sf & GSF_STATUS)
+       {
+               float _tmp;
+               _tmp = ReadByte();
+               if(_tmp != self.team)
+               {                       
+                       self.team = _tmp;                               
+                       generator_changeteam();
+               }
+               
+               _tmp = ReadByte();
+               
+               if(_tmp == 0 && self.health != 0)
+                       generator_die();
+
+               self.health = _tmp;
+       }
+}
+#endif // CSQC
+
+#ifdef SVQC
+float generator_send(entity to, float sf)
+{
+       WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR);    
+       WriteByte(MSG_ENTITY, sf);
+       if(sf & GSF_SETUP)
+       {
+           WriteCoord(MSG_ENTITY, self.origin_x);
+           WriteCoord(MSG_ENTITY, self.origin_y);
+           WriteCoord(MSG_ENTITY, self.origin_z);
+    }
+    
+    if(sf & GSF_STATUS)
+    {
+               WriteByte(MSG_ENTITY, self.team);
+       
+        if(self.health <= 0)
+            WriteByte(MSG_ENTITY, 0);
+        else
+            WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
+    }
+    
+       return TRUE;
+}
+
+void generator_link(void() spawnproc)
+{
+    Net_LinkEntity(self, TRUE, 0, generator_send);
+    self.think      = spawnproc;
+    self.nextthink  = time;
+}
+#endif // SVQC
diff --git a/qcsrc/server/generator.qh b/qcsrc/server/generator.qh
new file mode 100644 (file)
index 0000000..cd17371
--- /dev/null
@@ -0,0 +1,9 @@
+#define GENERATOR_MIN '-52 -52 -14'
+#define GENERATOR_MAX '52 52 75'
+
+float GSF_STATUS = 4;
+float GSF_SETUP = 8;
+
+#ifdef CSQC
+void ent_generator();
+#endif
\ No newline at end of file
index 5059764138ab1b5a063608762eb65c2230a8983d..3493b44a78f9ad3c246c2732e598727a9186a00d 100644 (file)
@@ -48,7 +48,4 @@ float MSF_SIZE                   = 128;
 
 float MSF_FULL_UPDATE  = 16777215;
 
-#define GENERATOR_MIN '-52 -52 -14'
-#define GENERATOR_MAX '52 52 75'
-
 #endif // CSQC/SVQC
\ No newline at end of file
index 3801de302d9c80fa2ab8cb0e7e3215d01dbf0ff4..24131b6821531026cc0a4dad9783ba87f2d3c4e1 100644 (file)
@@ -689,6 +689,8 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage,
        if(random() < damage/200+0.2)
                if(random() < 0.5)
                        ons_throwgib(hitloc + '0 0 20', randomvec()*360, "models/onslaught/gen_gib1.md3", 5, FALSE);
+                       
+       self.SendFlags |= GSF_STATUS;
 }
 
 // update links after a delay
@@ -696,8 +698,9 @@ void onslaught_generator_delayed()
 {
        onslaught_updatelinks();
        // now begin normal thinking
-       self.think = onslaught_generator_think;
-       self.nextthink = time;
+       generator_link(onslaught_generator_think);
+       
+       self.SendFlags = GSF_SETUP;
 }
 
 string onslaught_generator_waypointsprite_for_team(entity e, float t)
@@ -923,7 +926,7 @@ void spawnfunc_onslaught_generator()
        self.movetype = MOVETYPE_NONE;
        self.lasthealth = self.max_health = self.health = autocvar_g_onslaught_gen_health;
        setmodel(self, "models/onslaught/generator.md3");
-       setsize(self, '-52 -52 -14', '52 52 75');
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
        setorigin(self, self.origin);
        self.takedamage = DAMAGE_AIM;
        self.bot_attack = TRUE;
index 3c31d57b475337b2b09d86f7c8fc65520443241e..d8845782125f4189f6dea120c3bcce9f1896e319 100644 (file)
@@ -51,6 +51,8 @@ void td_generator_die()
                
        gendestroyed = TRUE;
        
+       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
+       
        Send_Notification(NOTIF_ALL, world, MSG_MULTI, MULTI_TD_GENDESTROYED);
        
        self.solid                      = SOLID_NOT;
@@ -85,28 +87,6 @@ void td_generator_damage(entity inflictor, entity attacker, float damage, float
        self.SendFlags |= MSF_STATUS;
 }
 
-float td_generator_send(entity to, float sf)
-{
-       WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR);    
-       WriteByte(MSG_ENTITY, sf);
-       if(sf & MSF_SETUP)
-       {
-           WriteCoord(MSG_ENTITY, self.origin_x);
-           WriteCoord(MSG_ENTITY, self.origin_y);
-           WriteCoord(MSG_ENTITY, self.origin_z);
-    }
-    
-    if(sf & MSF_STATUS)
-    {
-        if(self.health <= 0)
-            WriteByte(MSG_ENTITY, 0);
-        else
-            WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
-    }
-    
-       return TRUE;
-}
-
 void td_generator_think()
 {
        self.think = td_generator_think;
@@ -115,7 +95,6 @@ void td_generator_think()
 
 void td_generator_setup()
 {
-       
        self.think = td_generator_think;
        self.nextthink = time + 0.1;
        
@@ -135,13 +114,6 @@ void td_generator_setup()
        WaypointSprite_UpdateHealth(self.sprite, self.health);
 }
 
-void td_generator_link()
-{
-    Net_LinkEntity(self, TRUE, 0, td_generator_send);
-    self.think      = td_generator_setup;
-    self.nextthink  = time;
-}
-
 void spawnfunc_td_generator() 
 {
        if not(g_td) { remove(self); return; }
@@ -158,7 +130,7 @@ void spawnfunc_td_generator()
        
        droptofloor();
        
-       td_generator_link();
+       generator_link(td_generator_setup);
 }
 
 entity PickGenerator()
index f79845bcb27069608ddc369c50534de32a79c1ed..973784a5e85fc70a1a1fc664da7f7a1bbf00c2aa 100644 (file)
@@ -49,6 +49,8 @@ vehicles/vehicles_def.qh
 
 monsters/lib/monsters_early.qh
 
+generator.qh
+
 campaign.qh
 ../common/campaign_common.qh
 ../common/mapinfo.qh
@@ -197,6 +199,8 @@ scores.qc
 
 portals.qc
 
+generator.qc
+
 target_spawn.qc
 func_breakable.qc
 target_music.qc