Skip to content

Commit 3d8c9da

Browse files
committed
Add volleyball with custom ball rendering from tclient
1 parent 947d62a commit 3d8c9da

6 files changed

Lines changed: 73 additions & 6 deletions

File tree

src/engine/shared/config_variables_entity.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ MACRO_CONFIG_INT(TcRenderGhostAsCircle, ec_render_ghost_as_circle, 0, 0, 1, CFGF
3636
// Outline Variables
3737
MACRO_CONFIG_INT(ClOutline, ec_outline, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outlines")
3838
MACRO_CONFIG_INT(ClOutlineEntities, ec_outline_in_entities, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Only show outlines in entities")
39-
MACRO_CONFIG_INT(ClOutlineFreeze, ec_outline_freeze, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outline around freeze and deep")
39+
MACRO_CONFIG_INT(ClOutlineFreeze, ec_outline_freeze, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outline around freeze and deep")
4040
MACRO_CONFIG_INT(ClOutlineUnfreeze, ec_outline_unfreeze, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outline around unfreeze and undeep")
4141
MACRO_CONFIG_INT(ClOutlineSolid, ec_outline_solid, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outline around hook and unhook")
4242
MACRO_CONFIG_INT(ClOutlineTele, ec_outline_tele, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Draws outline around teleporters")
@@ -370,10 +370,10 @@ MACRO_CONFIG_INT(TcBgDrawWidth, ec_bg_draw_width, 5, 1, 50, CFGFLAG_CLIENT | CFG
370370
MACRO_CONFIG_INT(TcBgDrawFadeTime, ec_bg_draw_fade_time, 0, 0, 600, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Time until strokes disappear (0 = never)")
371371
MACRO_CONFIG_INT(TcBgDrawMaxItems, ec_bg_draw_max_items, 128, 0, 2048, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Maximum number of strokes")
372372
MACRO_CONFIG_COL(TcBgDrawColor, ec_bg_draw_color, 11893936, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Color of background draw strokes")
373-
MACRO_CONFIG_INT(TcBgDrawAutoSaveLoad, ec_bg_draw_auto_save_load, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Automatically save and load background drawings")
373+
MACRO_CONFIG_INT(TcBgDrawAutoSaveLoad, ec_bg_draw_auto_save_load, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Automatically save and load background drawings")
374374

375375
// Timer
376-
MACRO_CONFIG_INT(TcShowLocalTimeSeconds, tc_show_local_time_seconds, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show local time in seconds")
376+
MACRO_CONFIG_INT(TcShowLocalTimeSeconds, tc_show_local_time_seconds, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show local time in seconds")
377377

378378
// Weapon in Freeze
379379
MACRO_CONFIG_INT(ClRenderWeaponsInFreeze, ec_render_weapons_in_freeze, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Renders players' weapons while frozen")
@@ -383,6 +383,11 @@ MACRO_CONFIG_INT(ClMapOverview, ec_map_overview, 0, 0, 1, CFGFLAG_CLIENT | CFGFL
383383
MACRO_CONFIG_INT(ClMapOverviewSpectatingOnly, ec_map_overview_spectating_only, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Enable map overview only when spectating")
384384
MACRO_CONFIG_INT(ClMapOverviewOpacity, ec_map_overview_opacity, 15, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Opacity of the map overview")
385385

386+
// Volleyball
387+
MACRO_CONFIG_INT(EcVolleyBallBetterBall, ec_volleyball_better_ball, 1, 0, 2, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Make frozen players in volleyball look more like volleyballs (0 = disabled, 1 = in volleyball maps, 2 = always)")
388+
MACRO_CONFIG_STR(EcVolleyBallBetterBallSkin, ec_volleyball_better_ball_skin, 24, "beachball", CFGFLAG_CLIENT | CFGFLAG_SAVE | CFGFLAG_INSENSITIVE, "Player skin to use for better volleyball ball")
389+
MACRO_CONFIG_INT(EcVolleyBallSpinSpeed, ec_volleyball_spin_speed, 50, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "How fast the volleyball spins")
390+
386391
// Custom variables from my server for the editor
387392
// You can use these if you get my server from https://github.com/FoxNet-DDNet/FoxNet
388393

src/game/client/components/entity/entity.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,22 @@ void CEClient::NotifyOnMove()
393393
m_LastPos = LocalPos;
394394
}
395395

396+
void CEClient::UpdateVolleyball()
397+
{
398+
bool IsVolleyBall = false;
399+
if(g_Config.m_EcVolleyBallBetterBall > 0 && g_Config.m_EcVolleyBallBetterBallSkin[0] != '\0')
400+
{
401+
if(g_Config.m_EcVolleyBallBetterBall > 1)
402+
IsVolleyBall = true;
403+
else
404+
IsVolleyBall = str_startswith_nocase(Client()->GetCurrentMap(), "volleyball");
405+
};
406+
for(auto &Client : GameClient()->m_aClients)
407+
{
408+
Client.m_IsVolleyBall = IsVolleyBall && Client.m_DeepFrozen;
409+
}
410+
}
411+
396412
void CEClient::UpdateRainbow()
397413
{
398414
static bool m_RainbowWasOn = false;
@@ -499,6 +515,7 @@ void CEClient::OnInit()
499515
void CEClient::OnNewSnapshot()
500516
{
501517
NotifyOnMove();
518+
UpdateVolleyball();
502519
}
503520

504521
void CEClient::OnStateChange(int NewState, int OldState)

src/game/client/components/entity/entity.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class CEClient : public CComponent
7575
// Movement Notification if tabbed out
7676
vec2 m_LastPos = vec2(0, 0);
7777
void NotifyOnMove();
78+
void UpdateVolleyball();
7879

7980
// Rainbow
8081
void UpdateRainbow();

src/game/client/components/nameplates.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,9 @@ void CNamePlates::OnRender()
11491149
// Only render name plates for active characters
11501150
if(GameClient()->m_Snap.m_aCharacters[i].m_Active)
11511151
{
1152+
if(GameClient()->m_aClients[i].m_IsVolleyBall)
1153+
continue;
1154+
11521155
const vec2 RenderPos = GameClient()->m_aClients[i].m_RenderPos;
11531156
RenderNamePlateGame(RenderPos, pInfo, 1.0f);
11541157
}

src/game/client/components/players.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ void CPlayers::RenderHookCollLine(
163163
const CNetObj_Character *pPlayerChar,
164164
int ClientId)
165165
{
166+
// TClient
167+
if(ClientId >= 0 && GameClient()->m_aClients[ClientId].m_IsVolleyBall)
168+
return;
169+
166170
CNetObj_Character Prev;
167171
CNetObj_Character Player;
168172
Prev = *pPrevChar;
@@ -590,6 +594,44 @@ void CPlayers::RenderPlayer(
590594

591595
GameClient()->m_Flow.Add(Position, Vel * 100.0f, 10.0f);
592596

597+
// TClient
598+
if(ClientId >= 0 && GameClient()->m_aClients[ClientId].m_IsVolleyBall)
599+
{
600+
// Update
601+
const float Delta = Client()->IntraGameTickSincePrev(g_Config.m_ClDummy);
602+
auto &ClientData = GameClient()->m_aClients[ClientId];
603+
604+
vec2 TempVel = Vel;
605+
TempVel.x *= 0.65f;
606+
TempVel.y *= 0.25f;
607+
608+
ClientData.m_VolleyBallAngle += length(TempVel * Delta * g_Config.m_EcVolleyBallSpinSpeed * 0.00001);
609+
if(ClientData.m_VolleyBallAngle < 0.0f)
610+
ClientData.m_VolleyBallAngle += 2.0f * pi;
611+
else if(ClientData.m_VolleyBallAngle > 2.0f * pi)
612+
ClientData.m_VolleyBallAngle -= 2.0f * pi;
613+
// Render
614+
const CSkin *pSkin = GameClient()->m_Skins.Find(g_Config.m_EcVolleyBallBetterBallSkin);
615+
if(!pSkin)
616+
return;
617+
const float Size = pRenderInfo->m_Size * 1.2f;
618+
Graphics()->TextureSet(pSkin->m_OriginalSkin.m_BodyOutline);
619+
Graphics()->QuadsBegin();
620+
Graphics()->SetColor(ColorRGBA(1.0f, 1.0f, 1.0f, Alpha));
621+
IEngineGraphics::CQuadItem QuadOutline{Position.x, Position.y, Size, Size};
622+
Graphics()->QuadsSetRotation(ClientData.m_VolleyBallAngle);
623+
Graphics()->QuadsDraw(&QuadOutline, 1);
624+
Graphics()->QuadsEnd();
625+
Graphics()->TextureSet(pSkin->m_OriginalSkin.m_Body);
626+
Graphics()->QuadsBegin();
627+
Graphics()->SetColor(ColorRGBA(1.0f, 1.0f, 1.0f, Alpha));
628+
Graphics()->QuadsSetRotation(ClientData.m_VolleyBallAngle);
629+
IEngineGraphics::CQuadItem Quad{Position.x, Position.y, Size, Size};
630+
Graphics()->QuadsDraw(&Quad, 1);
631+
Graphics()->QuadsEnd();
632+
return;
633+
}
634+
593635
RenderInfo.m_GotAirJump = Player.m_Jumped & 2 ? false : true;
594636

595637
RenderInfo.m_FeetFlipped = false;

src/game/client/gameclient.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -554,10 +554,9 @@ class CGameClient : public IGameClient
554554
vec2 m_ImprovedPredPos = vec2(0, 0);
555555
vec2 m_PrevImprovedPredPos = vec2(0, 0);
556556
bool m_ValidAntipingSmooth = false;
557-
// vec2 m_DebugVector = vec2(0, 0);
558-
// vec2 m_DebugVector2 = vec2(0, 0);
559-
// vec2 m_DebugVector3 = vec2(0, 0);
560557
float m_Uncertainty = 0.0f;
558+
float m_VolleyBallAngle = 0.0f;
559+
bool m_IsVolleyBall = false;
561560

562561
std::shared_ptr<CManagedTeeRenderInfo> m_pSkinInfo = nullptr; // this is what the server reports
563562
CTeeRenderInfo m_RenderInfo; // this is what we use

0 commit comments

Comments
 (0)