Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Widescreen 2: The Electric Boogaloo #5861

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
843b7b7
partially working
harryob Mar 27, 2023
8e684c9
feature complete basically
harryob Mar 31, 2023
c6140d7
makes the pref go
harryob Apr 1, 2023
b3fddff
better login size
harryob Apr 1, 2023
3a64c02
Merge remote-tracking branch 'upstream/master' into view-refactor
harryob Feb 29, 2024
c4a4ae3
ruins the game, for real
harryob Feb 29, 2024
a5af62b
Merge pull request #1 from harryob/view-refactor
567Turtle Mar 1, 2024
3af2293
e
567Turtle Mar 1, 2024
5a38ad9
makes the preference save
harryob Mar 2, 2024
d95e7ba
ungriefs the pr
harryob Mar 2, 2024
9ed61db
centers human ui
harryob Mar 2, 2024
9575f30
centres xeno ui
harryob Mar 2, 2024
047f64c
preserves skin.dmf changes
harryob Mar 2, 2024
611d9d5
pc
harryob Mar 2, 2024
69212f4
cleanup
harryob Mar 2, 2024
fced64c
binoc change
harryob Mar 6, 2024
5172a99
Merge remote-tracking branch 'upstream/master' into pr/567Turtle/5861
harryob Mar 6, 2024
eff1725
calculates viewsize correctly
harryob Mar 6, 2024
8d6262d
sigh
harryob Mar 6, 2024
8a674f4
md fix
harryob Mar 6, 2024
2e69112
fixes demolition simulator
harryob Mar 6, 2024
8df6ab7
unfucks motion detector
harryob Mar 6, 2024
87ff493
removes animation jank
harryob Mar 6, 2024
10b7398
fixes screen alert
harryob Mar 6, 2024
f8714cc
unbreaks farsight
harryob Mar 6, 2024
81ccc7e
fixes helmet stuff
harryob Mar 6, 2024
7cee3ec
ubreaks screen alerts, remvoes unused var
harryob Mar 6, 2024
f1cb216
removes more animation jank
harryob Mar 6, 2024
ebb978f
unfucks pointing
harryob Mar 6, 2024
3ac5112
that's a bad one
harryob Mar 6, 2024
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
12 changes: 12 additions & 0 deletions code/__DEFINES/__game.dm
Original file line number Diff line number Diff line change
Expand Up @@ -550,3 +550,15 @@
#define PERF_TOGGLE_SHUTTLES (1<<3)
/// Disables loading Techwebs and additional Z-Levels
#define PERF_TOGGLE_TECHWEBS (1<<4)

#define PIXEL_SCALING_AUTO 0
#define PIXEL_SCALING_1X 1
#define PIXEL_SCALING_1_2X 1.5
#define PIXEL_SCALING_2X 2
#define PIXEL_SCALING_2_2X 2.5
#define PIXEL_SCALING_3X 3
#define PIXEL_SCALING_4X 4

#define SCALING_METHOD_NORMAL "normal"
#define SCALING_METHOD_DISTORT "distort"
#define SCALING_METHOD_BLUR "blur"
2 changes: 1 addition & 1 deletion code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@
#define FIRE_MULTIPLIER_EXTREME 2
#define FIRE_MULTIPLIER_DEADLY 3

#define TRAPPER_VIEWRANGE 13
#define TRAPPER_VIEWRANGE 12

#define SECRETE_RESIN_INTERRUPT -1
#define SECRETE_RESIN_FAIL 0
Expand Down
3 changes: 3 additions & 0 deletions code/_globalvars/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -522,3 +522,6 @@ GLOBAL_PROTECT(topic_tokens)

GLOBAL_LIST_EMPTY(topic_commands)
GLOBAL_PROTECT(topic_commands)

GLOBAL_LIST_INIT(pixel_size_options, list(PIXEL_SCALING_AUTO, PIXEL_SCALING_1X, PIXEL_SCALING_1_2X, PIXEL_SCALING_2X, PIXEL_SCALING_2_2X, PIXEL_SCALING_3X, PIXEL_SCALING_4X))
GLOBAL_LIST_INIT(scaling_options, list(SCALING_METHOD_NORMAL, SCALING_METHOD_DISTORT, SCALING_METHOD_BLUR))
18 changes: 9 additions & 9 deletions code/_onclick/click.dm
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@
/client/proc/change_view(new_size, atom/source)
if(SEND_SIGNAL(mob, COMSIG_MOB_CHANGE_VIEW, new_size) & COMPONENT_OVERRIDE_VIEW)
return TRUE
view = mob.check_view_change(new_size, source)
view = new_size
apply_clickcatcher()
mob.reload_fullscreens()

Expand Down Expand Up @@ -382,18 +382,18 @@


/proc/getviewsize(view)
var/viewX
var/viewY
if(isnum(view))
var/totalviewrange = 1 + 2 * view
viewX = totalviewrange
viewY = totalviewrange
var/totalviewrange = (view < 0 ? -1 : 1) + 2 * view
return list(totalviewrange, totalviewrange)
else
var/list/viewrangelist = splittext(view,"x")
viewX = text2num(viewrangelist[1])
viewY = text2num(viewrangelist[2])
return list(viewX, viewY)
return list(text2num(viewrangelist[1]), text2num(viewrangelist[2]))

///Return the center turf of the user's view
/proc/get_view_center(mob/user)
var/x_offset = round(user.client.pixel_x / 32)
var/y_offset = round(user.client.pixel_y / 32)
return locate(user.x + x_offset, user.y + y_offset, user.z)

#if DEBUG_CLICK_RATE
/obj/item/clickrate_test
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/configuration/entries/general.dm
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ The default value assumes youtube-dl is in your system PATH


/datum/config_entry/string/default_view
config_entry_value = "15x15"
config_entry_value = "19x15"

/datum/config_entry/string/default_view_square
config_entry_value = "15x15"
Expand Down
24 changes: 12 additions & 12 deletions code/datums/custom_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
var/ui_inventory = "WEST:6,1:5"

//Lower center, persistent menu
var/ui_sstore1 = "WEST+2:10,1:5"
var/ui_id = "WEST+3:12,1:5"
var/ui_belt = "WEST+4:14,1:5"
var/ui_back = "WEST+5:14,1:5"
var/ui_rhand = "WEST+6:16,1:5"
var/ui_lhand = "WEST+7:16,1:5"
var/ui_equip = "WEST+6:16,2:5"
var/ui_swaphand1 = "WEST+6:16,2:5"
var/ui_swaphand2 = "WEST+7:16,2:5"
var/ui_storage1 = "WEST+8:18,1:5"
var/ui_storage2 = "WEST+9:20,1:5"
var/ui_sstore1 = "CENTER-5:10,1:5"
var/ui_id = "CENTER-4:12,1:5"
var/ui_belt = "CENTER-3:14,1:5"
var/ui_back = "CENTER-2:14,1:5"
var/ui_rhand = "CENTER-1:16,1:5"
var/ui_lhand = "CENTER:16,1:5"
var/ui_equip = "CENTER-1:16,2:5"
var/ui_swaphand1 = "CENTER-1:16,2:5"
var/ui_swaphand2 = "CENTER:16,2:5"
var/ui_storage1 = "CENTER+1:18,1:5"
var/ui_storage2 = "CENTER+2:20,1:5"

//Lower right, persistent menu
var/ui_dropbutton = "EAST-4:22,1:5"
Expand Down Expand Up @@ -153,7 +153,7 @@
/datum/custom_hud/alien
ui_style_icon = 'icons/mob/hud/alien_standard.dmi'

ui_resist = "WEST+9:20,1:5"
ui_resist = "CENTER+1:20,1:5"
UI_HEALTH_LOC = "EAST-1:28,7:13"

var/ui_alien_nightvision = "EAST-1:28,9:13"
Expand Down
2 changes: 1 addition & 1 deletion code/datums/emergency_calls/contractor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
var/mob/living/carbon/human/H = new(spawn_loc)
H.key = M.key
if(H.client)
H.client.change_view(GLOB.world_view_size)
H.client.view_size.reset_to_default()

if(!leader && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader.
leader = H
Expand Down
2 changes: 1 addition & 1 deletion code/datums/emergency_calls/pmc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@
var/mob/living/carbon/human/H = new(spawn_loc)
H.key = M.key
if(H.client)
H.client.change_view(GLOB.world_view_size)
H.client.view_size.reset_to_default()

if(!leader && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader.
leader = H
Expand Down
2 changes: 1 addition & 1 deletion code/datums/mind.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
SSround_recording.recorder.update_key(new_character)
if(new_character.client)
new_character.client.init_verbs()
new_character.client.change_view(GLOB.world_view_size) //reset view range to default.
new_character.client.view_size.reset_to_default() //reset view range to default.
new_character.client.pixel_x = 0
new_character.client.pixel_y = 0
if(usr && usr.open_uis)
Expand Down
172 changes: 172 additions & 0 deletions code/datums/view.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
//This is intended to be a full wrapper. DO NOT directly modify its values
///Container for client viewsize
/datum/view_data
///width ratio of the parents clients view
var/width = 0
///height ratio of the parents clients view
var/height = 0
///Default view size, formatted as a string
var/default = ""

///Bool that determines whether we want it to ignore any other changes after we applied some changes
var/suppress_changes = FALSE
///the parent of this view data
var/client/parent = null

/datum/view_data/New(client/parent, view_string)
default = view_string
src.parent = parent
apply()

///sets the default view size froma string
/datum/view_data/proc/set_default(string)
default = string
apply()

///Updates formatting while considering zoom
/datum/view_data/proc/safe_apply_formatting()
if(is_zooming())
assert_format()
return
update_pixel_format()

///Resets the format type
/datum/view_data/proc/assert_format()
winset(parent, "mapwindow.map", "zoom=0")

///applies the current clients preferred pixel size setting
/datum/view_data/proc/update_pixel_format()
winset(parent, "mapwindow.map", "zoom=[parent.prefs.pixel_size]")

///applies the preferred clients scaling method
/datum/view_data/proc/update_zoom_mode()
winset(parent, "mapwindow.map", "zoom-mode=[parent.prefs.scaling_method]")

///Returns a boolean if the client has any form of zoom
/datum/view_data/proc/is_zooming()
return (width || height)

///Resets the zoom to the default string
/datum/view_data/proc/reset_to_default()
width = 0
height = 0
apply()

///adds the number inputted to the zoom and applies it
/datum/view_data/proc/add(num_to_add)
width += num_to_add
height += num_to_add
apply()

///adds the size, which can also be a string, to the default and applies it
/datum/view_data/proc/add_size(toAdd)
var/list/new_size = getviewsize(toAdd)
width += new_size[1]
height += new_size[2]
apply()

///sets the size, which can also be a string and applies it
/datum/view_data/proc/set_view_radius_to(toAdd)
var/list/new_size = getviewsize(toAdd) //Backward compatability to account
width = new_size[1] //for a change in how sizes get calculated. we used to include world.view in
height = new_size[2] //this, but it was jank, so I had to move it
apply()

///sets width and height as numbers
/datum/view_data/proc/set_width_and_height(new_width, new_height)
width = new_width
height = new_height
apply()

///sets the width of the view
/datum/view_data/proc/set_width(new_width)
width = new_width
apply()

///sets the height of the view
/datum/view_data/proc/set_height(new_height)
height = new_height
apply()

///adds the inputted width to the view
/datum/view_data/proc/add_to_width(width_to_add)
width += width_to_add
apply()

///adds the inputted height to the view
/datum/view_data/proc/add_to_height(height_to_add)
height += height_to_add
apply()

///applies all current outstanding changes to the client
/datum/view_data/proc/apply()
parent.change_view(get_client_view_size())
safe_apply_formatting()

///supresses any further view changes until it is unsupressed
/datum/view_data/proc/suppress()
suppress_changes = TRUE
apply()

///unsupresses to allow further view changes
/datum/view_data/proc/unsuppress()
suppress_changes = FALSE
apply()

///returns the client view size in string format
/datum/view_data/proc/get_client_view_size()
var/list/temp = getviewsize(default)
if(suppress_changes)
return "[temp[1]]x[temp[2]]"
return "[width + temp[1]]x[height + temp[2]]"

///Zooms the client back in with an animate pretty simple
/datum/view_data/proc/zoom_in()
reset_to_default()
animate(parent, pixel_x = 0, pixel_y = 0, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW)

///zooms out the client with a given radius and offset as well as a direction
/datum/view_data/proc/zoom_out(radius = 0, offset = 0, direction = NONE)
if(direction)
var/_x = 0
var/_y = 0
switch(direction)
if(NORTH)
_y = offset
if(EAST)
_x = offset
if(SOUTH)
_y = -offset
if(WEST)
_x = -offset
animate(parent, pixel_x = world.icon_size*_x, pixel_y = world.icon_size*_y, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW)

set_view_radius_to(radius)

///gets the current screen size as defined in config
/proc/get_screen_size(widescreen)
if(widescreen)
return CONFIG_GET(string/default_view)
return CONFIG_GET(string/default_view_square)

/client/verb/set_pixel_size(size as num)
set name = ".set_pixel_size"

if(!(size in GLOB.pixel_size_options))
return

prefs.pixel_size = size
prefs.save_preferences()

view_size.apply()

/client/verb/set_scaling_method(method as text)
set name = ".set_scaling_method"

if(!(method in GLOB.scaling_options))
return

prefs.scaling_method = method
prefs.save_preferences()

view_size.update_zoom_mode()
4 changes: 2 additions & 2 deletions code/game/cas_manager/datums/cas_fire_envelope.dm
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@
M.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
M.sync_lighting_plane_alpha()
if(linked_console.upgraded == MATRIX_WIDE)
M.client?.change_view(7, M)
M.client?.view_size.reset_to_default()
else
return

Expand Down Expand Up @@ -324,7 +324,7 @@

/datum/cas_fire_envelope/uscm_dropship
fire_length = 12
grace_period = 5 SECONDS
grace_period = 5 SECONDS
flyto_period = 4 SECONDS //sleep in the FM itself has been increased by one more second
flyoff_period = 5 SECONDS
cooldown_period = 10 SECONDS
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/cm_initialize.dm
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ Additional game mode variables.
// Let the round recorder know that the key has changed
SSround_recording.recorder.update_key(new_xeno)
if(new_xeno.client)
new_xeno.client.change_view(GLOB.world_view_size)
new_xeno.client.view_size.reset_to_default()

msg_admin_niche("[new_xeno.key] has joined as [new_xeno].")
if(isxeno(new_xeno)) //Dear lord
Expand Down
3 changes: 2 additions & 1 deletion code/game/gamemodes/colonialmarines/huntergames.dm
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,8 @@
H = new(picked)

H.key = M.key
if(H.client) H.client.change_view(GLOB.world_view_size)
if(H.client)
H.client.view_size.reset_to_default()

if(!H.mind)
H.mind = new(H.key)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/groundside_operations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@
usr.UnregisterSignal(cam, COMSIG_PARENT_QDELETING)
cam = null
usr.reset_view(null)
else if(usr.client.view != GLOB.world_view_size)
else if(usr.client.view_size.is_zooming())
to_chat(usr, SPAN_WARNING("You're too busy peering through binoculars."))
else
if(cam)
Expand Down
Loading
Loading