diff --git a/scripts/vscripts/client/_cl_misc_hud.nut b/scripts/vscripts/client/_cl_misc_hud.nut index 1eff8a6..4dd0fe6 100644 --- a/scripts/vscripts/client/_cl_misc_hud.nut +++ b/scripts/vscripts/client/_cl_misc_hud.nut @@ -828,9 +828,16 @@ function ServerCallback_AnnounceWinner( teamIndex, subStringIndex, winnerDetermi if ( subStringIndex ) subString = GetStringFromID( subStringIndex ) - local isFFAWinner = player == GetWinningPlayer() + local winningPlayer = null + if ( IsFFABased() ) + { + local players = GetSortedPlayers( GetScoreboardCompareFunc(), null ) + if ( players.len() ) + winningPlayer = players[0] + } + local isFFAWinner = player == winningPlayer - if ( !level.nv.winningTeam && !GetWinningPlayer() ) + if ( !level.nv.winningTeam && !winningPlayer ) { local outcomeAnnouncement = CAnnouncement( "#GAMEMODE_DRAW" ) outcomeAnnouncement.SetSubText( subString ) @@ -1090,4 +1097,4 @@ function ToggleDebugDrawFrontline() { local player = GetLocalViewPlayer() player.s.debugDrawFrontline = !player.s.debugDrawFrontline -} \ No newline at end of file +} diff --git a/scripts/vscripts/client/cl_gamemode_ffa.nut b/scripts/vscripts/client/cl_gamemode_ffa.nut index 8a00b4f..62c11b3 100644 --- a/scripts/vscripts/client/cl_gamemode_ffa.nut +++ b/scripts/vscripts/client/cl_gamemode_ffa.nut @@ -46,7 +46,10 @@ function UpdateFFAScoreBars() if ( !player ) return - local winningPlayer = GetWinningPlayer() + local winningPlayer = null + local players = GetSortedPlayers( GetScoreboardCompareFunc(), null ) + if ( players.len() ) + winningPlayer = players[0] local cockpit = player.GetCockpit() if ( !cockpit ) diff --git a/scripts/vscripts/client/cl_scoreboard.nut b/scripts/vscripts/client/cl_scoreboard.nut index fbfaf29..a876a32 100644 --- a/scripts/vscripts/client/cl_scoreboard.nut +++ b/scripts/vscripts/client/cl_scoreboard.nut @@ -383,10 +383,23 @@ function InitScoreboard_Think() file.header.gametypeAndMap.Show() file.header.gametypeDesc.Show() - file.teamElems[myTeam].logo.Show() - file.teamElems[myTeam].score.Show() - file.teamElems[enemyTeam].logo.Show() - file.teamElems[enemyTeam].score.Show() + if ( IsFFABased() ) + { + // FFA uses both nine-row HUD groups as one continuous 18-player list. + // Team branding and scores would make the second group look like an + // opposing team even though every entry is an individual competitor. + file.teamElems[myTeam].logo.Hide() + file.teamElems[myTeam].score.Hide() + file.teamElems[enemyTeam].logo.Hide() + file.teamElems[enemyTeam].score.Hide() + } + else + { + file.teamElems[myTeam].logo.Show() + file.teamElems[myTeam].score.Show() + file.teamElems[enemyTeam].logo.Show() + file.teamElems[enemyTeam].score.Show() + } foreach( elem in file.columnIconBackgrounds ) elem.Show() @@ -447,7 +460,8 @@ function ShowScoreboard() local playerSeperatorHeight = (SCOREBOARD_PLAYER_SEPARATOR_HEIGHT * resMultiplier).tointeger() local playerHeight = (playerHeightUnits * resMultiplier).tointeger() local teamSeparatorHeight = (8 * resMultiplier).tointeger() - local losingTeamYOffset = ((((playerHeightUnits + SCOREBOARD_PLAYER_SEPARATOR_HEIGHT) * numTeamPlayers) + 5) * resMultiplier).tointeger() + local teamGroupGap = IsFFABased() ? 0 : 5 + local losingTeamYOffset = ((((playerHeightUnits + SCOREBOARD_PLAYER_SEPARATOR_HEIGHT) * numTeamPlayers) + teamGroupGap) * resMultiplier).tointeger() file.background.Show() file.header.background.Show() @@ -488,6 +502,15 @@ function ShowScoreboard() playerSlotEmpty[myTeam] <- SCOREBOARD_MATERIAL_FRIENDLY_SLOT playerSlotEmpty[enemyTeam] <- SCOREBOARD_MATERIAL_ENEMY_SLOT + if ( IsFFABased() ) + { + // The second HUD group is rows 10-18 in FFA, not an enemy team. + teamColors[enemyTeam] = teamColors[myTeam] + playerSlotFilledEven[enemyTeam] = playerSlotFilledEven[myTeam] + playerSlotFilledOdd[enemyTeam] = playerSlotFilledOdd[myTeam] + playerSlotEmpty[enemyTeam] = playerSlotEmpty[myTeam] + } + local teamScore = {} teamScore[myTeam] <- [] teamScore[enemyTeam] <- [] @@ -509,6 +532,8 @@ function ShowScoreboard() local data_highlight_bg_color = {} data_highlight_bg_color[myTeam] <- [0, 138, 166] data_highlight_bg_color[enemyTeam] <- [156, 71, 6] + if ( IsFFABased() ) + data_highlight_bg_color[enemyTeam] = data_highlight_bg_color[myTeam] if ( IsFFABased() ) {