diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index c52bfc66d53..9a85ba171b2 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -90,6 +90,9 @@
// Last world.time that the player tried to request their resources.
var/last_ui_resource_send = 0
+ /// If true, client cannot ready up, late join, or observe. Used for players with EXTREMELY old byond versions.
+ var/version_blocked = FALSE
+
/// Date the client registered their BYOND account on
var/byondacc_date
/// Days since the client's BYOND account was created
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 5caf7eb3359..84f273b63fa 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -6,7 +6,7 @@
#define TOPIC_SPAM_DELAY 2 //2 ticks is about 2/10ths of a second; it was 4 ticks, but that caused too many clicks to be lost due to lag
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
-#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
+#define MIN_CLIENT_VERSION 513 // Minimum byond major version required to play.
//I would just like the code ready should it ever need to be used.
#define SUGGESTED_CLIENT_VERSION 513 // only integers (e.g: 513, 514) are useful here. This is the part BEFORE the ".", IE 513 out of 513.1536
#define SUGGESTED_CLIENT_BUILD 1536 // only integers (e.g: 1536, 1539) are useful here. This is the part AFTER the ".", IE 1536 out of 513.1536
@@ -324,11 +324,9 @@
if(connection != "seeker") //Invalid connection type.
return null
if(byond_version < MIN_CLIENT_VERSION) // Too out of date to play at all. Unfortunately, we can't send them a message here.
- return null
+ version_blocked = TRUE
if(byond_build < config.minimum_client_build)
- alert(src, "You are using a byond build which is not supported by this server. Please use a build version of atleast [config.minimum_client_build].", "Incorrect build", "OK")
- qdel(src)
- return
+ version_blocked = TRUE
var/show_update_prompt = FALSE
if(byond_version < SUGGESTED_CLIENT_VERSION) // Update is suggested, but not required.
@@ -418,7 +416,7 @@
apply_clickcatcher()
if(show_update_prompt)
- to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from Byond.com before playing.")
+ show_update_notice()
check_forum_link()
@@ -1090,6 +1088,8 @@
if(notify && (byondacc_age < config.byond_account_age_threshold))
message_admins("[key] has just connected for the first time. BYOND account registered on [byondacc_date] ([byondacc_age] days old)")
+/client/proc/show_update_notice()
+ to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from byond.com before playing. You can also update via the BYOND launcher application.")
#undef LIMITER_SIZE
#undef CURRENT_SECOND
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 71d3abd5e2c..344d97b58c8 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -172,6 +172,9 @@
if(!tos_consent)
to_chat(usr, "You must consent to the terms of service before you can join!")
return FALSE
+ if(client.version_blocked)
+ client.show_update_notice()
+ return FALSE
ready = !ready
new_player_panel_proc()
@@ -187,7 +190,9 @@
if(!tos_consent)
to_chat(usr, "You must consent to the terms of service before you can join!")
return FALSE
-
+ if(client.version_blocked)
+ client.show_update_notice()
+ return FALSE
if(!SSticker || SSticker.current_state == GAME_STATE_STARTUP)
to_chat(usr, "You must wait for the server to finish starting before you can join!")
return FALSE
@@ -230,6 +235,9 @@
if(!tos_consent)
to_chat(usr, "You must consent to the terms of service before you can join!")
return FALSE
+ if(client.version_blocked)
+ client.show_update_notice()
+ return FALSE
if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING)
to_chat(usr, "The round is either not ready, or has already finished...")
return