From: Mario Date: Wed, 17 Apr 2013 05:58:30 +0000 (+1000) Subject: Begin making generator a common networked entity X-Git-Tag: xonotic-v0.8.0~241^2^2~380 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=7218ced39efbbdb4da411baa238121a029d5e8b4;p=xonotic%2Fxonotic-data.pk3dir.git Begin making generator a common networked entity --- diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 2567373cc..72c22553b 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -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; diff --git a/qcsrc/client/monsters.qc b/qcsrc/client/monsters.qc index 64dd4f137..53292d28e 100644 --- a/qcsrc/client/monsters.qc +++ b/qcsrc/client/monsters.qc @@ -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; - } -} - diff --git a/qcsrc/client/monsters.qh b/qcsrc/client/monsters.qh index 897b0d957..83dac2956 100644 --- a/qcsrc/client/monsters.qh +++ b/qcsrc/client/monsters.qh @@ -1,3 +1,2 @@ void ent_monster(); void Monsters_Precache(); -void ent_td_generator(); diff --git a/qcsrc/client/progs.src b/qcsrc/client/progs.src index 29e1143f6..dfe8184a6 100644 --- a/qcsrc/client/progs.src +++ b/qcsrc/client/progs.src @@ -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 index 000000000..dd7ab19c5 --- /dev/null +++ b/qcsrc/server/generator.qc @@ -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 index 000000000..cd1737189 --- /dev/null +++ b/qcsrc/server/generator.qh @@ -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 diff --git a/qcsrc/server/monsters/lib/monsters_early.qh b/qcsrc/server/monsters/lib/monsters_early.qh index 505976413..3493b44a7 100644 --- a/qcsrc/server/monsters/lib/monsters_early.qh +++ b/qcsrc/server/monsters/lib/monsters_early.qh @@ -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 diff --git a/qcsrc/server/mutators/gamemode_onslaught.qc b/qcsrc/server/mutators/gamemode_onslaught.qc index 3801de302..24131b682 100644 --- a/qcsrc/server/mutators/gamemode_onslaught.qc +++ b/qcsrc/server/mutators/gamemode_onslaught.qc @@ -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; diff --git a/qcsrc/server/mutators/gamemode_towerdefense.qc b/qcsrc/server/mutators/gamemode_towerdefense.qc index 3c31d57b4..d88457821 100644 --- a/qcsrc/server/mutators/gamemode_towerdefense.qc +++ b/qcsrc/server/mutators/gamemode_towerdefense.qc @@ -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() diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index f79845bcb..973784a5e 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -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