Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Release Notes

## 2.5.3 (Beta)
**Released:**

### Fixes
- Fixed message stack message (top-right) on round start showing Traitors who their allies are even if there was an Illusionist in the round
- Fixed (mostly unused) previous round role tracking

## 2.5.2
**Released: August 8th, 2026**

Expand Down
1 change: 1 addition & 0 deletions gamemodes/terrortown/gamemode/cl_lang.lua
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ local styledmessages = {
rolecolour = {
"round_traitors_one",
"round_traitors_more",
"round_traitors_illusionist",

"body_found",
"body_found_updated",
Expand Down
30 changes: 18 additions & 12 deletions gamemodes/terrortown/gamemode/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -590,8 +590,22 @@ function GM:TTTDelayRoundStartForVote()
return false
end

local prev_roles = {}
function PrepareRound()
table.Empty(prev_roles)

-- Initialize the table for every role
for wrole = ROLE_NONE, ROLE_MAX do
prev_roles[wrole] = {}
end

if not GAMEMODE.LastRole then GAMEMODE.LastRole = {} end

for _, v in PlayerIterator() do
-- save previous role and sign up as a possible role
local r = GAMEMODE.LastRole[v:SteamID64()] or v:GetRole() or ROLE_NONE
table.insert(prev_roles[r], v)

v:SetRole(ROLE_INNOCENT)
v:SetInvulnerable(false, false)
v:SetNWVector("PlayerColor", Vector(1, 1, 1))
Expand Down Expand Up @@ -710,7 +724,10 @@ function TellTraitorsAboutTraitors()
v:QueueMessage(MSG_PRINTBOTH, "There is " .. ROLE_STRINGS_EXT[ROLE_GLITCH] .. ".")
end

if #traitornicks < 2 then
if IsIllusionistBlocking() then
LANG.Msg(v, "round_traitors_illusionist", { role = ROLE_STRINGS[ROLE_TRAITOR], anillusionist = ROLE_STRINGS_EXT[ROLE_ILLUSIONIST] })
return
elseif #traitornicks < 2 then
LANG.Msg(v, "round_traitors_one", { role = ROLE_STRINGS[ROLE_TRAITOR] })
return
else
Expand Down Expand Up @@ -1202,22 +1219,11 @@ end

function SelectRoles()
local choices = {}
local prev_roles = {}
-- Initialize the table for every role
for wrole = ROLE_NONE, ROLE_MAX do
prev_roles[wrole] = {}
end

if not GAMEMODE.LastRole then GAMEMODE.LastRole = {} end

for _, v in PlayerIterator() do
if IsValid(v) then
-- everyone on the spec team is in specmode
if not v:IsSpec() then
-- save previous role and sign up as a possible role
local r = GAMEMODE.LastRole[v:SteamID64()] or v:GetRole() or ROLE_NONE

table.insert(prev_roles[r], v)
table.insert(choices, v)
end

Expand Down
7 changes: 5 additions & 2 deletions gamemodes/terrortown/gamemode/lang/english.lua
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ L.round_restart = "The round has been forced to restart by an admin."

L.round_traitors_one = "{role}, you stand alone."
L.round_traitors_more = "{role}, these are your allies: {names}"
L.round_traitors_illusionist = "{role}, {anillusionist} is blocking ally information"

L.win_prevented = "Map was prevented from ending the round."
L.win_showreport = "Let's look at the round report for {num} seconds."
Expand Down Expand Up @@ -705,7 +706,8 @@ L.info_popup_monster_alone = [[You have no allies this round.
Kill all others to win!]]

L.info_popup_monster_illusionist = [[Work with your allies to kill all others.
BUT BEWARE! There is {anillusionist} that is preventing you from knowing who your comrades are.]]
BUT BEWARE! There is {anillusionist} that is preventing you
from knowing who your comrades are.]]

L.info_popup_traitor_comrades = [[Work with fellow {traitors} to kill all others.
But take care, or your treason may be discovered...
Expand All @@ -724,7 +726,8 @@ These may or may not be your comrades:
{traitorlist}]]

L.info_popup_traitor_illusionist = [[Work with fellow {traitors} to kill all others.
BUT BEWARE! There is {anillusionist} that is preventing you from knowing who your comrades are.]]
BUT BEWARE! There is {anillusionist} that is preventing you
from knowing who your comrades are.]]

--- Various other text
L.name_kick = "A player was automatically kicked for changing their name during a round."
Expand Down
2 changes: 1 addition & 1 deletion gamemodes/terrortown/gamemode/shared.lua
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ local TableInsert = table.insert
include("player_class/player_ttt.lua")

-- Version string for display and function for version checks
CR_VERSION = "2.5.2"
CR_VERSION = "2.5.3"
CR_BETA = true
CR_WORKSHOP_ID = CR_BETA and "2404251054" or "2421039084"

Expand Down
Loading