diff --git a/code/_onclick/hud/screen_object_holder.dm b/code/_onclick/hud/screen_object_holder.dm
index 78ed9606d49..0e84ef612de 100644
--- a/code/_onclick/hud/screen_object_holder.dm
+++ b/code/_onclick/hud/screen_object_holder.dm
@@ -25,6 +25,7 @@
screen_objects += screen_object
client?.screen += screen_object
+ return screen_object
/// Gives the screen object to the client, but does not qdel it when it's cleared
/datum/screen_object_holder/proc/give_protected_screen_object(atom/screen_object)
@@ -32,6 +33,7 @@
protected_screen_objects += screen_object
client?.screen += screen_object
+ return screen_object
/datum/screen_object_holder/proc/remove_screen_object(atom/screen_object)
ASSERT(istype(screen_object))
@@ -40,6 +42,7 @@
screen_objects -= screen_object
protected_screen_objects -= screen_object
client?.screen -= screen_object
+ qdel(screen_object)
/datum/screen_object_holder/proc/clear()
client?.screen -= screen_objects
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 879b7b64e1f..ad7590dad0e 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -318,7 +318,7 @@
/datum/config_entry/string/banappeals
/datum/config_entry/string/wikiurl
- default = "http://tgstation13.org/wiki"
+ default = "https://wiki.tgstation13.org"
/datum/config_entry/string/forumurl
default = "http://tgstation13.org/phpBB/index.php"
diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm
index 8819cacb920..c7d8ce30226 100644
--- a/code/datums/mocking/client.dm
+++ b/code/datums/mocking/client.dm
@@ -58,3 +58,6 @@
/datum/client_interface/proc/get_award_status(achievement_type, mob/user, value = 1)
return FALSE
+
+/datum/client_interface/proc/set_fullscreen(logging_in = FALSE)
+ return TRUE
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 2e89a101e2e..401338e8c2a 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -175,8 +175,6 @@
/// Messages currently seen by this client
var/list/seen_messages
- //Hide top bars
- var/fullscreen = FALSE
//Hide status bar (bottom left)
var/show_status_bar = TRUE
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index de1dd79672e..203599c34ff 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -562,6 +562,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
loot_panel = new(src)
view_size = new(src, getScreenSize(prefs.read_preference(/datum/preference/toggle/widescreen)))
+ set_fullscreen(logging_in = TRUE)
view_size.resetFormat()
view_size.setZoomMode()
Master.UpdateTickRate()
@@ -1200,8 +1201,18 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
set name = "Toggle Fullscreen"
set category = "OOC"
- fullscreen = !fullscreen
+ var/is_on = prefs.read_preference(/datum/preference/toggle/fullscreen_mode)
+ prefs.write_preference(GLOB.preference_entries[/datum/preference/toggle/fullscreen_mode], !is_on)
+ set_fullscreen()
+/client/proc/set_fullscreen(logging_in = FALSE)
+ var/fullscreen = prefs?.read_preference(/datum/preference/toggle/fullscreen_mode)
+ //no need to set every login to not fullscreen, they already aren't.
+ //we also dont need to call attempt_auto_fit_viewport, Login does that for us.
+ if(logging_in)
+ if(fullscreen)
+ winset(src, "mainwindow", "menu=;is-fullscreen=[fullscreen ? "true" : "false"]")
+ return
winset(src, "mainwindow", "menu=;is-fullscreen=[fullscreen ? "true" : "false"]")
attempt_auto_fit_viewport()
diff --git a/code/modules/client/preferences/auto_fit_viewport.dm b/code/modules/client/preferences/auto_fit_viewport.dm
index 3550af05454..89cff5ac111 100644
--- a/code/modules/client/preferences/auto_fit_viewport.dm
+++ b/code/modules/client/preferences/auto_fit_viewport.dm
@@ -4,4 +4,4 @@
savefile_identifier = PREFERENCE_PLAYER
/datum/preference/toggle/auto_fit_viewport/apply_to_client_updated(client/client, value)
- INVOKE_ASYNC(client, /client/verb/fit_viewport)
+ INVOKE_ASYNC(client, TYPE_VERB_REF(/client, fit_viewport))
diff --git a/code/modules/client/preferences/screen.dm b/code/modules/client/preferences/screen.dm
new file mode 100644
index 00000000000..a04a1f67d17
--- /dev/null
+++ b/code/modules/client/preferences/screen.dm
@@ -0,0 +1,16 @@
+/datum/preference/toggle/widescreen
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_key = "widescreenpref"
+ savefile_identifier = PREFERENCE_PLAYER
+
+/datum/preference/toggle/widescreen/apply_to_client(client/client, value)
+ client.view_size?.setDefault(getScreenSize(value))
+
+/datum/preference/toggle/fullscreen_mode
+ default_value = FALSE
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_key = "fullscreen_mode"
+ savefile_identifier = PREFERENCE_PLAYER
+
+/datum/preference/toggle/fullscreen_mode/apply_to_client(client/client, value)
+ client.set_fullscreen()
diff --git a/code/modules/client/preferences/widescreen.dm b/code/modules/client/preferences/widescreen.dm
deleted file mode 100644
index 1041a4f6f27..00000000000
--- a/code/modules/client/preferences/widescreen.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/datum/preference/toggle/widescreen
- category = PREFERENCE_CATEGORY_GAME_PREFERENCES
- savefile_key = "widescreenpref"
- savefile_identifier = PREFERENCE_PLAYER
-
-/datum/preference/toggle/widescreen/apply_to_client(client/client, value)
- client.view_size?.setDefault(getScreenSize(value))
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 96916c53a7a..631d27b446a 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -418,7 +418,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
/// Attempt to automatically fit the viewport, assuming the user wants it
/client/proc/attempt_auto_fit_viewport()
- if (!prefs.read_preference(/datum/preference/toggle/auto_fit_viewport))
+ if (!prefs?.read_preference(/datum/preference/toggle/auto_fit_viewport))
return
if(fully_created)
INVOKE_ASYNC(src, VERB_REF(fit_viewport))
diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm
index 38d456594de..32cabbabb19 100644
--- a/code/modules/escape_menu/escape_menu.dm
+++ b/code/modules/escape_menu/escape_menu.dm
@@ -30,6 +30,8 @@ GLOBAL_LIST_EMPTY(escape_menus)
atom/movable/plane_master_controller/plane_master_controller
+ list/resource_panels
+ show_resources = FALSE
menu_page = PAGE_HOME
/datum/escape_menu/New(client/client)
diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm
index fb40f6f4da7..c9a00fcf71b 100644
--- a/code/modules/escape_menu/home_page.dm
+++ b/code/modules/escape_menu/home_page.dm
@@ -53,6 +53,116 @@
)
)
+ //Bottom right buttons, from right to left, starting with the button to open the list.
+ page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small(
+ null,
+ /* hud_owner = */ null,
+ "Resources",
+ "Open/Close list of resources",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(src, PROC_REF(toggle_resources)),
+ /* button_overlay = */ "resources",
+ ))
+
+/datum/escape_menu/proc/toggle_resources()
+ show_resources = !show_resources
+ if(!show_resources)
+ //collapsing it
+ for(var/atom/movable/screen/escape_menu/lobby_button/small/collapsible/button as anything in resource_panels)
+ button.collapse(page_holder)
+ resource_panels.Cut()
+ return
+ //list of offsets we give, so missing icons don't leave a random gap.
+ var/list/offset_order = list(
+ -60,
+ -120,
+ -180,
+ -240,
+ -300,
+ -360,
+ -420,
+ -480,
+ )
+ resource_panels = list()
+
+ var/githuburl = CONFIG_GET(string/githuburl)
+ if(githuburl)
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Report Bug",
+ "Report a bug/issue",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, reportissue)),
+ /* button_overlay = */ "bug",
+ /* end_point */ offset_order[1],
+ ))
+ offset_order -= offset_order[1]
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Github",
+ "Open the repository for the game",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, github)),
+ /* button_overlay = */ "github",
+ /* end_point */ offset_order[1],
+ ))
+ offset_order -= offset_order[1]
+
+ var/forumurl = CONFIG_GET(string/forumurl)
+ if(forumurl)
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Forums",
+ "Visit the server's forums",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, forum)),
+ /* button_overlay = */ "forums",
+ /* end_point */ offset_order[1],
+ ))
+ offset_order -= offset_order[1]
+
+ var/rulesurl = CONFIG_GET(string/rulesurl)
+ if(rulesurl)
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Rules",
+ "View the server rules",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, rules)),
+ /* button_overlay = */ "rules",
+ /* end_point */ offset_order[1],
+ ))
+ offset_order -= offset_order[1]
+
+ var/wikiurl = CONFIG_GET(string/wikiurl)
+ if(wikiurl)
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Wiki",
+ "See the wiki for the game",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, wiki)),
+ /* button_overlay = */ "wiki",
+ /* end_point */ offset_order[1],
+ ))
+ offset_order -= offset_order[1]
+
+ resource_panels += page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button/small/collapsible(
+ null,
+ /* hud_owner = */ null,
+ "Change Log",
+ "See all changes to the server",
+ /* pixel_offset = */ list(260, -190),
+ CALLBACK(client, TYPE_VERB_REF(/client, changelog)),
+ /* button_overlay = */ "changelog",
+ /* end_point */ offset_order[1],
+ ))
+
/datum/escape_menu/proc/home_resume()
qdel(src)
diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm
index 9bfb8b8a069..bbdd31025b4 100644
--- a/code/modules/escape_menu/leave_body.dm
+++ b/code/modules/escape_menu/leave_body.dm
@@ -8,35 +8,35 @@
else
stack_trace("The leave body menu was opened before the atoms SS. This shouldn't be possible, as the leave body menu should only be accessible when you have a body.")
- page_holder.give_screen_object(new /atom/movable/screen/escape_menu/leave_body_button(
+ page_holder.give_screen_object(new /atom/movable/screen/escape_menu/lobby_button(
null,
/* hud_owner = */ null,
"Suicide",
"Perform a dramatic suicide in game",
- /* pixel_offset = */ -105,
+ /* pixel_offset = */ list(-105, -1),
CALLBACK(src, PROC_REF(leave_suicide)),
/* button_overlay = */ dead_clown,
))
page_holder.give_screen_object(
- new /atom/movable/screen/escape_menu/leave_body_button(
+ new /atom/movable/screen/escape_menu/lobby_button(
null,
/* hud_owner = */ null,
"Ghost",
"Exit quietly, leaving your body",
- /* pixel_offset = */ 0,
+ /* pixel_offset = */ list(0, -1),
CALLBACK(src, PROC_REF(leave_ghost)),
/* button_overlay = */ "ghost",
)
)
page_holder.give_screen_object(
- new /atom/movable/screen/escape_menu/leave_body_button(
+ new /atom/movable/screen/escape_menu/lobby_button(
null,
/* hud_owner = */ null,
"Back",
/* tooltip_text = */ null,
- /* pixel_offset = */ 105,
+ /* pixel_offset = */ list(105, -1),
CALLBACK(src, PROC_REF(open_home_page)),
/* button_overlay = */ "back",
)
@@ -73,58 +73,3 @@
// Not guaranteed to be human. Everything defines verb/suicide separately. Fuck you, still.
var/mob/living/carbon/human/human_user = client?.mob
human_user?.suicide()
-
-/atom/movable/screen/escape_menu/leave_body_button
- icon = 'icons/hud/escape_menu_leave_body.dmi'
- icon_state = "template"
- maptext_width = 96
- maptext_y = -32
-
- VAR_PRIVATE
- datum/callback/on_click_callback
- hovered = FALSE
- tooltip_text
-
-/atom/movable/screen/escape_menu/leave_body_button/Initialize(
- mapload,
- datum/hud/hud_owner,
- button_text,
- tooltip_text,
- pixel_offset,
- on_click_callback,
- button_overlay,
-)
- . = ..()
-
- src.on_click_callback = on_click_callback
- src.tooltip_text = tooltip_text
-
- add_overlay(button_overlay)
-
- maptext = MAPTEXT_VCR_OSD_MONO("[button_text]")
- screen_loc = "CENTER:[pixel_offset],CENTER-1"
-
-/atom/movable/screen/escape_menu/leave_body_button/Destroy()
- on_click_callback = null
-
- return ..()
-
-/atom/movable/screen/escape_menu/leave_body_button/Click(location, control, params)
- on_click_callback?.InvokeAsync()
-
-/atom/movable/screen/escape_menu/leave_body_button/MouseEntered(location, control, params)
- if (hovered)
- return
-
- hovered = TRUE
-
- // The UX on this is pretty shit, but it's okay enough for now.
- // Regularly goes way too far from your cursor. Not designed for large icons.
- openToolTip(usr, src, params, content = tooltip_text)
-
-/atom/movable/screen/escape_menu/leave_body_button/MouseExited(location, control, params)
- if (!hovered)
- return
-
- hovered = FALSE
- closeToolTip(usr)
diff --git a/code/modules/escape_menu/lobby_buttons.dm b/code/modules/escape_menu/lobby_buttons.dm
new file mode 100644
index 00000000000..ed3224d3d20
--- /dev/null
+++ b/code/modules/escape_menu/lobby_buttons.dm
@@ -0,0 +1,135 @@
+/atom/movable/screen/escape_menu/lobby_button
+ icon = 'icons/hud/escape_menu_leave_body.dmi'
+ icon_state = "template"
+ maptext_width = 96
+ maptext_y = -32
+
+ VAR_PROTECTED
+ font_size = 16
+ datum/callback/on_click_callback
+ hovered = FALSE
+ tooltip_text
+
+/atom/movable/screen/escape_menu/lobby_button/Initialize(
+ mapload,
+ datum/hud/hud_owner,
+ button_text,
+ tooltip_text,
+ list/pixel_offset,
+ on_click_callback,
+ button_overlay,
+)
+ . = ..()
+
+ src.on_click_callback = on_click_callback
+ src.tooltip_text = tooltip_text
+
+ add_overlay(button_overlay)
+
+ add_maptext(button_text)
+
+ screen_loc = "CENTER:[pixel_offset[1]],CENTER:[pixel_offset[2]]"
+
+/atom/movable/screen/escape_menu/lobby_button/Destroy()
+ on_click_callback = null
+
+ return ..()
+
+/atom/movable/screen/escape_menu/lobby_button/Click(location, control, params)
+ on_click_callback?.InvokeAsync()
+
+/atom/movable/screen/escape_menu/lobby_button/MouseEntered(location, control, params)
+ if (hovered)
+ return
+
+ hovered = TRUE
+
+ // The UX on this is pretty shit, but it's okay enough for now.
+ // Regularly goes way too far from your cursor. Not designed for large icons.
+ openToolTip(usr, src, params, content = tooltip_text)
+
+/atom/movable/screen/escape_menu/lobby_button/MouseExited(location, control, params)
+ if (!hovered)
+ return
+
+ hovered = FALSE
+ closeToolTip(usr)
+
+/atom/movable/screen/escape_menu/lobby_button/proc/add_maptext(button_text)
+ SHOULD_CALL_PARENT(TRUE)
+ animate(src,
+ maptext = MAPTEXT_VCR_OSD_MONO("[button_text]"),
+ flags = ANIMATION_CONTINUE,
+ )
+
+/atom/movable/screen/escape_menu/lobby_button/small
+ icon = 'icons/hud/escape_menu_icons.dmi'
+ font_size = 9
+ maptext_width = 80
+ maptext_x = -20
+ maptext_y = -14
+
+///Amount of time between animations when we fade in and out.
+#define COLLAPSIBLE_BUTTON_DURATION (0.4 SECONDS)
+
+/atom/movable/screen/escape_menu/lobby_button/small/collapsible
+ maptext_width = 48
+ maptext_x = -5
+ maptext_y = -44 //we change this during animation to bring it up
+ layer = parent_type::layer - 0.01
+
+ ///Reference point we animate the x from during the animation we play on its creation.
+ var/end_point
+
+/atom/movable/screen/escape_menu/lobby_button/small/collapsible/Initialize(
+ mapload,
+ datum/hud/hud_owner,
+ button_text,
+ tooltip_text,
+ list/pixel_offset,
+ on_click_callback,
+ button_overlay,
+ end_point,
+)
+ src.end_point = end_point
+ return ..()
+
+/atom/movable/screen/escape_menu/lobby_button/small/collapsible/add_maptext(button_text)
+ //more than 6 characters, lets bump the maptext down a bit, because we're smaller buttons we would be overlaying over the icon itself otherwise.
+ if(length(button_text) > 6)
+ maptext_y -= 12
+ //let's take the icons out
+ animate(src,
+ transform = transform.Translate(x = end_point, y = 0),
+ time = COLLAPSIBLE_BUTTON_DURATION,
+ easing = CUBIC_EASING|EASE_OUT,
+ )
+ . = ..()
+ //now we'll pull out the maptext
+ animate(src,
+ maptext_y = (maptext_y + 30),
+ time = (COLLAPSIBLE_BUTTON_DURATION / 2),
+ easing = CUBIC_EASING|EASE_IN,
+ flags = ANIMATION_CONTINUE,
+ )
+
+/atom/movable/screen/escape_menu/lobby_button/small/collapsible/proc/collapse(datum/screen_object_holder/page_holder)
+ //timers are delayed until MC is done, so we'll directly qdel during setup so it doesn't freeze on players.
+ if(MC_RUNNING())
+ animate(src,
+ maptext_y = (maptext_y -30),
+ time = (COLLAPSIBLE_BUTTON_DURATION / 2),
+ easing = CUBIC_EASING|EASE_IN,
+ )
+ animate(src,
+ transform = matrix(),
+ maptext = null,
+ time = COLLAPSIBLE_BUTTON_DURATION,
+ easing = CUBIC_EASING|EASE_OUT,
+ flags = ANIMATION_CONTINUE,
+ )
+ addtimer(CALLBACK(page_holder, TYPE_PROC_REF(/datum/screen_object_holder, remove_screen_object), src), COLLAPSIBLE_BUTTON_DURATION)
+ else
+ page_holder.remove_screen_object(src)
+
+#undef COLLAPSIBLE_BUTTON_DURATION
diff --git a/icons/hud/escape_menu_icons.dmi b/icons/hud/escape_menu_icons.dmi
new file mode 100644
index 00000000000..b41d5884e4c
Binary files /dev/null and b/icons/hud/escape_menu_icons.dmi differ
diff --git a/icons/hud/escape_menu_leave_body.dmi b/icons/hud/escape_menu_leave_body.dmi
index 2923e1376ac..d77e1749e90 100644
Binary files a/icons/hud/escape_menu_leave_body.dmi and b/icons/hud/escape_menu_leave_body.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index d120b8f385b..2eaf80ca467 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -1,62 +1,64 @@
//Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs.
-/client/verb/wiki(query as text)
+/client/verb/wiki()
set name = "wiki"
- set desc = "Type what you want to know about. This will open the wiki in your web browser. Type nothing to go to the main page."
+ set desc = "Brings you to the Wiki"
set hidden = TRUE
+
var/wikiurl = CONFIG_GET(string/wikiurl)
- if(wikiurl)
- if(query)
- var/output = wikiurl + "/index.php?title=Special%3ASearch&profile=default&search=" + query
- src << link(output)
- else if (query != null)
- src << link(wikiurl)
- else
+ if(!wikiurl)
to_chat(src, span_danger("The wiki URL is not set in the server configuration."))
- return
+ return
+
+ var/query = tgui_input_text(src,
+ "Type what you want to know about. This will open the wiki in your web browser. Type nothing to go to the main page.",
+ "Wiki",
+ max_length = MAX_MESSAGE_LEN,
+ )
+ if(isnull(query)) //cancelled out
+ return
+ var/output = wikiurl
+ if(query != "")
+ output += "?title=Special%3ASearch&profile=default&search=[query]"
+ DIRECT_OUTPUT(src, link(output))
/client/verb/forum()
set name = "forum"
set desc = "Visit the forum."
set hidden = TRUE
+
var/forumurl = CONFIG_GET(string/forumurl)
- if(forumurl)
- if(tgui_alert(src, "This will open the forum in your browser. Are you sure?",, list("Yes","No"))!="Yes")
- return
- src << link(forumurl)
- else
+ if(!forumurl)
to_chat(src, span_danger("The forum URL is not set in the server configuration."))
- return
+ return
+ DIRECT_OUTPUT(src, link(forumurl))
/client/verb/rules()
set name = "rules"
set desc = "Show Server Rules."
set hidden = TRUE
+
var/rulesurl = CONFIG_GET(string/rulesurl)
- if(rulesurl)
- if(tgui_alert(src, "This will open the rules in your browser. Are you sure?",, list("Yes","No"))!="Yes")
- return
- src << link(rulesurl)
- else
+ if(!rulesurl)
to_chat(src, span_danger("The rules URL is not set in the server configuration."))
- return
+ return
+ DIRECT_OUTPUT(src, link(rulesurl))
/client/verb/github()
set name = "github"
set desc = "Visit Github"
set hidden = TRUE
+
var/githuburl = CONFIG_GET(string/githuburl)
- if(githuburl)
- if(tgui_alert(src, "This will open the Github repository in your browser. Are you sure?",, list("Yes","No"))!="Yes")
- return
- src << link(githuburl)
- else
+ if(!githuburl)
to_chat(src, span_danger("The Github URL is not set in the server configuration."))
- return
+ return
+ DIRECT_OUTPUT(src, link(githuburl))
/client/verb/reportissue()
set name = "report-issue"
set desc = "Report an issue"
set hidden = TRUE
+
var/githuburl = CONFIG_GET(string/githuburl)
if(!githuburl)
to_chat(src, span_danger("The Github URL is not set in the server configuration."))
@@ -97,10 +99,10 @@
DIRECT_OUTPUT(src, link(jointext(concatable, "")))
-
/client/verb/changelog()
set name = "Changelog"
set category = "OOC"
+
if(!GLOB.changelog_tgui)
GLOB.changelog_tgui = new /datum/changelog()
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 20bd6d4a496..3b0a826eb5c 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -161,79 +161,6 @@ window "info_and_buttons"
splitter = 2
show-splitter = false
-window "infobuttons"
- elem "infobuttons"
- type = MAIN
- pos = 291,0
- size = 640x30
- anchor1 = 0,0
- anchor2 = 100,100
- saved-params = "pos;size;is-minimized;is-maximized"
- is-pane = true
- elem "changelog"
- type = BUTTON
- pos = 0,5
- size = 87x25
- anchor1 = 0,0
- anchor2 = 15,100
- saved-params = "is-checked"
- text = "Changelog"
- command = "changelog"
- elem "rules"
- type = BUTTON
- pos = 92,5
- size = 88x25
- anchor1 = 15,0
- anchor2 = 29,100
- saved-params = "is-checked"
- text = "Rules"
- command = "rules"
- elem "wiki"
- type = BUTTON
- pos = 185,5
- size = 87x25
- anchor1 = 29,0
- anchor2 = 43,100
- saved-params = "is-checked"
- text = "Wiki"
- command = "wiki"
- elem "forum"
- type = BUTTON
- pos = 277,5
- size = 87x25
- anchor1 = 43,0
- anchor2 = 57,100
- saved-params = "is-checked"
- text = "Forum"
- command = "forum"
- elem "github"
- type = BUTTON
- pos = 369,5
- size = 87x25
- anchor1 = 57,0
- anchor2 = 71,100
- saved-params = "is-checked"
- text = "GitHub"
- command = "github"
- elem "report-issue"
- type = BUTTON
- pos = 461,5
- size = 87x25
- anchor1 = 71,0
- anchor2 = 85,100
- saved-params = "is-checked"
- text = "Report Issue"
- command = "report-issue"
- elem "fullscreen-toggle"
- type = BUTTON
- pos = 553,5
- size = 89x25
- anchor1 = 85,0
- anchor2 = 99,100
- saved-params = "is-checked"
- text = "Fullscreen"
- command = "fullscreen"
-
window "infowindow"
elem "infowindow"
type = MAIN
diff --git a/tgstation.dme b/tgstation.dme
index a5ab17d664f..0ef7ea9553d 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3920,6 +3920,7 @@
#include "code\modules\client\preferences\runechat.dm"
#include "code\modules\client\preferences\scaling_method.dm"
#include "code\modules\client\preferences\scarred_eye.dm"
+#include "code\modules\client\preferences\screen.dm"
#include "code\modules\client\preferences\screentips.dm"
#include "code\modules\client\preferences\security_department.dm"
#include "code\modules\client\preferences\silicon_gender.dm"
@@ -3934,7 +3935,6 @@
#include "code\modules\client\preferences\underwear_color.dm"
#include "code\modules\client\preferences\uplink_location.dm"
#include "code\modules\client\preferences\voice.dm"
-#include "code\modules\client\preferences\widescreen.dm"
#include "code\modules\client\preferences\window_flashing.dm"
#include "code\modules\client\preferences\middleware\_middleware.dm"
#include "code\modules\client\preferences\middleware\antags.dm"
@@ -4152,6 +4152,7 @@
#include "code\modules\escape_menu\escape_menu.dm"
#include "code\modules\escape_menu\home_page.dm"
#include "code\modules\escape_menu\leave_body.dm"
+#include "code\modules\escape_menu\lobby_buttons.dm"
#include "code\modules\escape_menu\subsystem.dm"
#include "code\modules\escape_menu\title.dm"
#include "code\modules\events\_event.dm"
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screen_size.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screen_size.tsx
new file mode 100644
index 00000000000..030495ea071
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screen_size.tsx
@@ -0,0 +1,14 @@
+import { CheckboxInput, FeatureToggle } from '../base';
+
+export const widescreenpref: FeatureToggle = {
+ name: 'Enable widescreen',
+ category: 'UI',
+ component: CheckboxInput,
+};
+
+export const fullscreen_mode: FeatureToggle = {
+ name: 'Toggle Fullscreen',
+ category: 'UI',
+ description: 'Toggles Fullscreen for the game, can also be toggled with F11.',
+ component: CheckboxInput,
+};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx
deleted file mode 100644
index 052c3b68ca6..00000000000
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import { CheckboxInput, FeatureToggle } from '../base';
-
-export const widescreenpref: FeatureToggle = {
- name: 'Enable widescreen',
- category: 'UI',
- component: CheckboxInput,
-};