X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FMain.qc;h=06d8c512841040fd45734d8a36e330b9d404e576;hb=55c5e5f476604b1e99df20f8974d561f99d0f405;hp=9843033a1df20e49011c8852d22fb5fbd3ed1f14;hpb=fc0e4c6f26156858a71e0ec62eb974fa11eec2f9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 9843033a1..06d8c5128 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -156,7 +156,8 @@ void CSQC_Init(void) CALL_ACCUMULATED_FUNCTION(RegisterGametypes); CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); - + CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels); + WaypointSprite_Load(); // precaches @@ -210,7 +211,6 @@ void CSQC_Init(void) hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin)); hud_configure_prev = -1; - tab_panel = -1; draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin"))); } @@ -698,30 +698,104 @@ void Ent_ReadAccuracy(void) void Spawn_Draw(void) { - pointparticles(particleeffectnum("EF_STARDUST"), self.origin, '0 0 2', bound(0, frametime, 0.1)); + pointparticles(self.cnt, self.origin + '0 0 28', '0 0 2', bound(0, frametime, 0.1)); } -void Ent_ReadSpawnPoint(float is_new) +void Ent_ReadSpawnPoint(float is_new) // entity for spawnpoint { - self.team = ReadByte(); - self.origin_x = ReadShort(); - self.origin_y = ReadShort(); - self.origin_z = ReadShort(); + float teamnum = (ReadByte() - 1); + vector spn_origin; + spn_origin_x = ReadShort(); + spn_origin_y = ReadShort(); + spn_origin_z = ReadShort(); + + if(is_new) + { + self.origin = spn_origin; + setsize(self, PL_MIN, PL_MAX); + droptofloor(); - //self.colormod = colormapPaletteColor(self.team - 1, FALSE); + /*if(autocvar_cl_spawn_point_model) // needs a model first + { + self.mdl = "models/spawnpoint.md3"; + self.colormod = Team_ColorRGB(teamnum); + precache_model(self.mdl); + setmodel(self, self.mdl); + self.drawmask = MASK_NORMAL; + //self.movetype = MOVETYPE_NOCLIP; + //self.draw = Spawn_Draw; + }*/ + if(autocvar_cl_spawn_point_particles) + { + if(teamplay) + { + switch(teamnum) + { + case NUM_TEAM_1: self.cnt = particleeffectnum("spawn_point_red"); break; + case NUM_TEAM_2: self.cnt = particleeffectnum("spawn_point_blue"); break; + case NUM_TEAM_3: self.cnt = particleeffectnum("spawn_point_yellow"); break; + case NUM_TEAM_4: self.cnt = particleeffectnum("spawn_point_pink"); break; + default: self.cnt = particleeffectnum("spawn_point_neutral"); break; + } + } + else { self.cnt = particleeffectnum("spawn_point_neutral"); } + + self.draw = Spawn_Draw; + } + } - //setsize(self, PL_MIN, PL_MAX); + //print(sprintf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d, effect = %d\n", is_new, vtos(self.origin), teamnum, self.cnt)); +} - //droptofloor(); +void Ent_ReadSpawnEvent(float is_new) +{ + // If entnum is 0, ONLY do the local spawn actions + // this way the server can disable the sending of + // spawn origin or such to clients if wanted. + float entnum = ReadByte(); + + if(entnum) + { + self.origin_x = ReadShort(); + self.origin_y = ReadShort(); + self.origin_z = ReadShort(); - //self.mdl = "models/domination/dom_unclaimed.md3"; - //precache_model(self.mdl); - //setmodel(self, self.mdl); - self.drawmask = MASK_NORMAL; - self.movetype = MOVETYPE_NOCLIP; - self.draw = Spawn_Draw; + if(is_new) + { + float teamnum = GetPlayerColor(entnum - 1); - print(ftos(is_new), " - read a spawnpoint at ", vtos(self.origin), ", bitches.\n"); + if(autocvar_cl_spawn_event_particles) + { + switch(teamnum) + { + case NUM_TEAM_1: pointparticles(particleeffectnum("spawn_event_red"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_2: pointparticles(particleeffectnum("spawn_event_blue"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_3: pointparticles(particleeffectnum("spawn_event_yellow"), self.origin, '0 0 0', 1); break; + case NUM_TEAM_4: pointparticles(particleeffectnum("spawn_event_pink"), self.origin, '0 0 0', 1); break; + default: pointparticles(particleeffectnum("spawn_event_neutral"), self.origin, '0 0 0', 1); break; + } + } + if(autocvar_cl_spawn_event_sound) + { + sound(self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM); + } + } + } + + // local spawn actions + if(is_new && (!entnum || (entnum == player_localentnum))) + { + zoomin_effect = 1; + current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16)); + + if(autocvar_cl_unpress_zoom_on_spawn) + { + localcmd("-zoom\n"); + button_zoom = FALSE; + } + } + + //print(sprintf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(self.origin), entnum, player_localentnum)); } // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured. @@ -810,6 +884,7 @@ void CSQC_Ent_Update(float bIsNewEntity) case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break; case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); break; case ENT_CLIENT_SPAWNPOINT: Ent_ReadSpawnPoint(bIsNewEntity); break; + case ENT_CLIENT_SPAWNEVENT: Ent_ReadSpawnEvent(bIsNewEntity); break; case ENT_CLIENT_NOTIFICATION: Read_Notification(bIsNewEntity); break; default: @@ -952,8 +1027,6 @@ void Ent_Init() armorblockpercent = ReadByte() / 255.0; - g_weaponswitchdelay = ReadByte() / 255.0; - g_balance_grenadelauncher_bouncefactor = ReadCoord(); g_balance_grenadelauncher_bouncestop = ReadCoord(); g_balance_electro_secondary_bouncefactor = ReadCoord(); @@ -1131,18 +1204,6 @@ void Net_ReadRace() } } -void Net_ReadSpawn() -{ - zoomin_effect = 1; - current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16)); - - if(autocvar_cl_unpress_zoom_on_spawn) - { - localcmd("-zoom\n"); - button_zoom = FALSE; - } -} - void Net_TeamNagger() { teamnagger = 1; @@ -1212,10 +1273,6 @@ float CSQC_Parse_TempEntity() Net_ReadRace(); bHandled = true; break; - case TE_CSQC_SPAWN: - Net_ReadSpawn(); - bHandled = true; - break; case TE_CSQC_ZCURVEPARTICLES: Net_ReadZCurveParticles(); bHandled = true;