{"id":1026,"date":"2026-09-08T23:10:34","date_gmt":"2026-09-08T23:10:34","guid":{"rendered":"https:\/\/x.sheep-mine.ts.net\/index.php\/adventures-in-map-zooming-part-5-qol\/"},"modified":"2026-09-08T23:10:34","modified_gmt":"2026-09-08T23:10:34","slug":"adventures-in-map-zooming-part-5-qol","status":"publish","type":"post","link":"https:\/\/x.sheep-mine.ts.net\/index.php\/adventures-in-map-zooming-part-5-qol\/","title":{"rendered":"Adventures in Map Zooming, Part 5: QoL &#8211; Cogmind \/ Grid Sage Games"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div>\n<p>Map zooming again! Although I finished off the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2023\/12\/adventures-in-map-zooming-part-4-polishing\/\">final bits<\/a> of the core map zooming feature, that series went quiet when I turned my attention to planning and preparation for the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2024\/01\/full-ui-upscaling-part-1-history-and-theory\/\">upscaled UI<\/a>, essentially due to my belief that once the latter is implemented, map zooming wouldn\u2019t be as necessary in the first place.<\/p>\n<p><em>But<\/em> it would still no doubt be used by some, and more urgently I also realized that it wouldn\u2019t make sense to put out map zoom test builds without including the additional QoL required to make a zoomed view actually <em>playable<\/em> in a normal sense. Although I rightly assumed few <em>current<\/em> players are very interested in zooming, some of them might at least test it out, and for proper feedback the QoL needs to be in place, otherwise any feedback will essentially amount to \u201cneeds QoL\u201d \ud83d\ude1b<\/p>\n<p>Good QoL is a make or break part of map zooming, where the real magic happens, and I love me some QoL design, so let\u2019s see what we can do to facilitate zoomed play!<\/p>\n<p>First of all, not exactly surprising or amazing, but one piece of the puzzle did suddenly fall into place here: scroll wheel zoom toggling. Back in the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2023\/12\/adventures-in-map-zooming-part-4-polishing\/\">polishing<\/a> stage I covered the reasoning for using methods <em>other than<\/em> the scroll wheel to zoom, but when putting together the QoL features I realized that zooming in and out might often be done in conjunction with map panning, which among several other methods can be accomplished by holding Shift and moving the mouse. Well if you\u2019re panning with the Shift key held, using the mouse wheel wouldn\u2019t do anything since that\u2019s not a command yet (Shift-Wheel), so we can conveniently assign it to zooming!<\/p>\n<div id=\"attachment_5247\" style=\"width: 570px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" aria-describedby=\"caption-attachment-5247\" class=\"wp-image-5247 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_mouse_map_zoom_and_pan.gif\" alt=\"cogmind_mouse_map_zoom_and_pan\" width=\"560\" height=\"476\" \/><\/p>\n<p id=\"caption-attachment-5247\" class=\"wp-caption-text\">It feels very natural to add mouse wheel zoom functionality to the existing Shift panning method, making it easy to quickly zoom in and out between multiple distant locations.<\/p>\n<\/div>\n<p>That\u2019s low-hanging fruit, though. We\u2019re going to need much more powerful QoL\u2026<\/p>\n<h2>Relative Centering<\/h2>\n<p>A common theme throughout map zooming QoL development is enabling the player to get information about, and react to, things that are <em>outside<\/em> the current map view. As explained in my article on <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2024\/01\/full-ui-upscaling-part-1-history-and-theory\/\">the history and theory behind Cogmind\u2019s interface and plans for other layouts<\/a>, in a roguelike it\u2019s crucial to have easy access to knowledge that affects near-term decision-making, and by shrinking the map view to increase the size of its content we\u2019re giving up a lot of that easy access!<\/p>\n<p>We need to find ways to retain it where possible, or at least create alternatives.<\/p>\n<p>One of the most direct ways to accomplish this is to offset the player\u2019s position from the center of the map. Normally Cogmind is shown at the center of the view, allowing the player to see equally in all directions, but technically we can assume that what\u2019s most important while exploring the world is what\u2019s <em>in front of<\/em> the player in whatever general direction they\u2019d like to focus on. Thus one new optional feature is the ability to manually set a new relative centerpoint.<\/p>\n<div id=\"attachment_5248\" style=\"width: 807px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5248\" class=\"wp-image-5248 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_view_centerpoint_manual_mouse.gif\" alt=\"cogmind_view_centerpoint_manual_mouse\" width=\"797\" height=\"610\" \/><\/p>\n<p id=\"caption-attachment-5248\" class=\"wp-caption-text\">In this zoomed map view, notice how one can choose to look further in a particular direction, and the view continues to shift along with your movement, as usual. For as long as such a point is set, it is used in most instances which otherwise want center on Cogmind, and the point is never allowed to be so far away it results in Cogmind being out of view entirely. Zooming the map in\/out adjusts the relative centerpoint by the same factor, and it\u2019s ignored or even automatically reset in some special instances, like\u2026 say\u2026 outright <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2023\/11\/teleportation-mechanics\/\">teleportation<\/a> \ud83d\ude09<\/p>\n<\/div>\n<p>The above recording shows how setting such a point is accompanied by a fading cardinal crosshair animation akin to the drone centering\/following animation, but here is grey instead of green. This keeps our visual theming consistent for the idea of interface-controlled \u201ccentering.\u201d While a manual centerpoint is set, you can also see the intermittent flash of the current centerpoint, which is optional and can be adjusted or disabled. Restoring the default centering is as simple as setting your current position as the centerpoint.<\/p>\n<p>How do you set that point, anyway? Oh no, it\u2019s time to go\u2026 back to the engine! (are you counting? this is the fifth time :P)<\/p>\n<p>I decided for this feature we are finally, after ten years, going to have RMB detection based on <em>releasing<\/em> the button. Cogmind has always responded to mouse down events for input, which I prefer since it\u2019s that much more responsive, but the difference isn\u2019t huge, and by forgoing that approach we gain access to a new realm of mouse input: holding the button for a different effect!<\/p>\n<p>Now this alone doesn\u2019t require any extra engine work, it\u2019s just a different event we could always detect, but if you\u2019re going to have input based on holding a key you probably need to know how long it\u2019s been held, and for that we\u2019re going to need more engine functionality. Paging the REX testing environment!<\/p>\n<div id=\"attachment_5249\" style=\"width: 321px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5249\" class=\"wp-image-5249 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/rex_mousedown_timers_demo.gif\" alt=\"rex_mousedown_timers_demo\" width=\"311\" height=\"156\" \/><\/p>\n<p id=\"caption-attachment-5249\" class=\"wp-caption-text\">Testing LMB\/RMB holding timers, a new feature for the engine.<\/p>\n<\/div>\n<p>RMB has always been one of the other methods for panning the map in Cogmind, by just right-clicking on some location outside FOV, but now if you hold down the button for a bit longer (the default is 350ms, but it\u2019s adjustable) it will not only pan the map over there but also set it as the new relative centerpoint, as seen in the demo.<\/p>\n<p>As far as implementation goes, although a little more difficult to implement, it made more sense to cause the centering effect to occur immediately after a set time had passed, rather than simply waiting for the player to depress the mouse button after a minimum amount of time, because otherwise the player has to guess whether they\u2019ve held down the mouse long enough to count for one input over another.<\/p>\n<h2>Dynamic Centering<\/h2>\n<p>Pure keyboard users need access to this recentering concept as well, though unlike with a mouse where it\u2019s fairly quick to select a new forward point to center around, this isn\u2019t so convenient to do via keyboard\u2026 We need an automated alternative!<\/p>\n<p>By default whenever zoomed in keyboard mode, simple regular movement will automatically attempt to adjust the map view so that a more useful or pertinent area is visible at all times. Exactly how to achieve this is a big question, however \ud83d\ude42<\/p>\n<p>I\u2019m sure no single algorithm will be perfect for everyone, but I experimented with five different possibilities before settling on a default. Most of these are included with the game as optional alternatives, and can also be completely disabled or further adjusted by specifying a maximum distance out to which they\u2019re allowed to offset the view. Many of them feel quite strange at first, but with some actual play experience I got more and more used to the default as a helpful feature.<\/p>\n<div id=\"attachment_5250\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5250\" class=\"wp-image-5250 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_keyboard_automated_view_centerpoint_style_WIP_3_instant.gif\" alt=\"cogmind_keyboard_automated_view_centerpoint_style_WIP_3_instant\" width=\"796\" height=\"609\" \/><\/p>\n<p id=\"caption-attachment-5250\" class=\"wp-caption-text\"><strong>INSTANT<\/strong>: \u201cSmart leading\u201d behavior #1, simply instantly \u201cface\u201d the direction of the most recent move. Just try not get whiplash \ud83d\ude1b (seriously though, controlling these, and also gaining some experience with them, is a lot different from watching them; also adjusting this one to have a shorter offset range would make it less jarring :P)<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5251\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5251\" class=\"wp-image-5251 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_keyboard_automated_view_centerpoint_style_WIP_2_midpoint.gif\" alt=\"cogmind_keyboard_automated_view_centerpoint_style_WIP_2_midpoint\" width=\"796\" height=\"609\" \/><\/p>\n<p id=\"caption-attachment-5251\" class=\"wp-caption-text\"><strong>MIDPOINT<\/strong>: Behavior #2 is the same as INSTANT, but makes diagonal turning less violent by checking whether a new movement direction is only 45 degrees off the previous one, in which case the new centerpoint instead uses the midpoint between the old and what would otherwise be the new instant direction\u2019s centerpoint.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5252\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5252\" class=\"wp-image-5252 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_keyboard_automated_view_centerpoint_style_WIP_1_gradual.gif\" alt=\"cogmind_keyboard_automated_view_centerpoint_style_WIP_1_gradual\" width=\"796\" height=\"609\" \/><\/p>\n<p id=\"caption-attachment-5252\" class=\"wp-caption-text\"><strong>GRADUAL<\/strong>: This more tame approach slowly shifts the view to reflect ongoing movements, both in terms of direction and distance, so that moving forward gradually extends the view outward.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5254\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5254\" class=\"wp-image-5254 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_keyboard_automated_view_centerpoint_style_WIP_4_pure_fov_weight.gif\" alt=\"cogmind_keyboard_automated_view_centerpoint_style_WIP_4_pure_fov_weight\" width=\"796\" height=\"609\" \/><\/p>\n<p id=\"caption-attachment-5254\" class=\"wp-caption-text\"><strong>WEIGHTED<\/strong>: GRADUAL doesn\u2019t perform as well with sudden changes in direction like going around corners, so I wanted to experiment with using a more complex algorithm that instead tries to orient the view based on the weighted center of all FOV cells. The theory seems nice, but in practice is kinda chaotic and not very effective. primarily because it entirely forgoes predictability in the face of a pure focus on information, when we probably want a balance between the two. (This particular gif happens to have a persistent red dot where it\u2019s centering the view, so I could better keep track of it during the experiments, since the weighted behavior was harder to get right.)<\/p>\n<\/div>\n<p>The behavior I actually chose for the default was a combination of the last two, gradually shifting the centerpoint with each move, and using a second pass to try to ensure that FOV edges are visible where it\u2019s possible to shift the view without obscuring already-visible FOV cells. This is a pretty effective way to solve the corner problem, or whenever a large batch of new cells becomes visible, for example on passing through a door, or terrain destruction. It can also even keep the FOV shifted backwards if the current direction of movement doesn\u2019t yet really contain much to see.<\/p>\n<div id=\"attachment_5255\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5255\" class=\"wp-image-5255 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_keyboard_automated_view_centerpoint_style_WIP_5_gradual_with_FOV_shifting.gif\" alt=\"cogmind_keyboard_automated_view_centerpoint_style_WIP_5_gradual_with_FOV_shifting\" width=\"796\" height=\"609\" \/><\/p>\n<p id=\"caption-attachment-5255\" class=\"wp-caption-text\">The default behavior, a gradual two-pass approach striking a balance between seeing further in the direction of exploration and maintaining visual confirmation of existing FOV areas.<\/p>\n<\/div>\n<p>As with the mouse, keyboard users can also manually designate a relative centerpoint. This is done with the \u2018s\u2019 key in examine mode with the cursor over your desired target cell. Assigning a manual centerpoint deactivates the automation feature until designating Cogmind\u2019s own position to reset it, at which point the automated system will again take over. This feature is also useful for quickly recentering the map to reset the automated system, by simply pressing \u2018x\u2019 to enter examine mode followed by an immediate \u2018s\u2019.<\/p>\n<div id=\"attachment_5256\" style=\"width: 807px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5256\" class=\"wp-image-5256 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_view_centerpoint_manual_keyboard.gif\" alt=\"cogmind_view_centerpoint_manual_keyboard\" width=\"797\" height=\"610\" \/><\/p>\n<p id=\"caption-attachment-5256\" class=\"wp-caption-text\">Manually setting centerpoints while playing in keyboard mode. It\u2019s actually fairly fast if you\u2019re familiar with jumping the examine cursor!<\/p>\n<\/div>\n<p>While playtesting keyboard mode, zoomed in for almost the entirety of play, I started to rather like the combination of default autocentering sprinkled with occasional setting of a manual offset for certain situations!<\/p>\n<p>Notice that while in keyboard mode, the centerpoint highlight is <em>not<\/em> shown&#8211;that\u2019s a mouse-only thing because it is automatic, and also at times quite near Cogmind\u2019s own position.<\/p>\n<p>Internally, the automated centering feature is implemented by simply adjusting the same offset variable used for manual centering, just doing it on the fly. So they\u2019re the same mechanism. Automating this behavior during mouse-based play doesn\u2019t really work because you have to be able to click on locations, including most importantly your next move destination, but that\u2019s hard to pull off when everything is shifting around in a semi-unpredictable manner.<\/p>\n<p>And even for keyboard mode, the automation behavior is <em>only<\/em> applied while the map is zoomed in, but it\u2019s always being calculated and updated while not zoomed, so that zooming in again can continue to take the latest navigation information into account.<\/p>\n<p>Of course I added new contextual tutorial content for these features, including Cogmind\u2019s first tutorial messages that will eventually <em>repeat<\/em> themselves if you haven\u2019t actually tried a given feature yet, because these are quite important \ud83d\ude42<\/p>\n<h2>Offscreen Object Info<\/h2>\n<p>So far we have ways to try to keep important objects in view, but once you\u2019re zoomed in on only a quarter of the normal map area it\u2019s literally impossible to always see everything you might need to see in every situation. We need new indicators for important objects outside the current map view, especially those which are still within FOV (and probably even attack range!).<\/p>\n<p>While manually panning the map or designating a centerpoint to keep an eye on a particular direction is useful, and temporarily zooming out to get a general idea of the surroundings is another option, to save time there are a variety of new markers that can appear at the edges of the map view to denote objects in that direction. You\u2019ll see markers for offscreen hostiles, non-hostiles (both neutral and friendly), new items, and sensor data. Each marker category uses its own unique background color, and in the case of sensor data is also darker and blinks in and out to reflect the fact that it is not a directly visible object like the others. Items are only marked until automatically labeled for the first time after entering view.<\/p>\n<div id=\"attachment_5259\" style=\"width: 808px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5259\" class=\"wp-image-5259 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_edge_labels_robots.gif\" alt=\"cogmind_map_zoom_qol_edge_labels_robots\" width=\"798\" height=\"611\" \/><\/p>\n<p id=\"caption-attachment-5259\" class=\"wp-caption-text\">A demo of flashing offscreen zoom markers for visible robots (I have some drones out here to help demonstrate). Threats appear on a dark red background, while non-hostile robots use dark-green. As usual, the colors used are different if colorblind mode is active. (Also curse <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.gridsagegames.com\/blog\/2020\/04\/developing-multitile-creatures-roguelikes\/\">multitile robots<\/a> and their special requirements, but yeah I got them working with this system too\u2026)<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5260\" style=\"width: 527px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5260\" class=\"wp-image-5260 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_edge_labels_items.gif\" alt=\"cogmind_map_zoom_qol_edge_labels_items\" width=\"517\" height=\"372\" \/><\/p>\n<p id=\"caption-attachment-5260\" class=\"wp-caption-text\">Flashing offscreen zoom markers for new items, which use a dark gray background.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5261\" style=\"width: 431px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5261\" class=\"wp-image-5261 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_edge_labels_sensors.gif\" alt=\"cogmind_map_zoom_qol_edge_labels_sensors\" width=\"421\" height=\"604\" \/><\/p>\n<p id=\"caption-attachment-5261\" class=\"wp-caption-text\">Dark offscreen sensor data markers with a low-frequency blink out effect. The range for this and other FOV data (which actually includes drone FOV that may be further away!) actually uses the non-zoom window dimensions to determine the extent within which to draw objects from, meaning this feature essentially serves the specific purpose of giving you more info about many things you\u2019d normally be able to see if not zoomed in.<\/p>\n<\/div>\n<p>We\u2019ve seen such map edge markers before, for map intel (for example known interactive machine locations) and also Cogmind or drones currently out of view. The latter appear a couple rows away from the map edge, so there aren\u2019t any issues with overlap, though intel would technically be able to overlap these markers, also being up against the view edge. I\u2019ve updated those to not only reposition to avoid any offscreen object markers, but they also avoid covering visible robots currently at the edge.<\/p>\n<div id=\"attachment_5258\" style=\"width: 298px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5258\" class=\"wp-image-5258 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_intel_markers_avoiding_visible_edge_robots.gif\" alt=\"cogmind_intel_markers_avoiding_visible_edge_robots\" width=\"288\" height=\"382\" \/><\/p>\n<p id=\"caption-attachment-5258\" class=\"wp-caption-text\">Intel markers avoiding visible robots at the map view edge.<\/p>\n<\/div>\n<p>Similarly, the new offscreen object markers will also avoid covering visible robots.<\/p>\n<div id=\"attachment_5262\" style=\"width: 562px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5262\" class=\"wp-image-5262 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_offscreen_object_markers_avoiding_visible_edge_robots.gif\" alt=\"cogmind_offscreen_object_markers_avoiding_visible_edge_robots\" width=\"552\" height=\"187\" \/><\/p>\n<p id=\"caption-attachment-5262\" class=\"wp-caption-text\">Offscreen robots markers shifting aside when necessary to reveal visible robots at a position they would otherwise occupy.<\/p>\n<\/div>\n<h2>Offscreen Object Responses<\/h2>\n<p>Indicators are great, but not quite enough. After all, what do you generally want to do when a new threat comes into view? A quick visual check! What exactly are they, what\u2019s their status, do they have company, what\u2019s the surrounding environment like\u2026 These can be important questions to answer before making your next decision, and by default Cogmind already pauses for a moment in these situations in order to let the player have a moment to take it in (and avoid accidentally wasting valuable turns), so why not also use that opportunity to automatically shift the view over to spot the threat?<\/p>\n<div id=\"attachment_5263\" style=\"width: 564px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5263\" class=\"wp-image-5263 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_view_shift_for_new_threat.gif\" alt=\"cogmind_map_zoom_qol_view_shift_for_new_threat\" width=\"554\" height=\"209\" \/><\/p>\n<p id=\"caption-attachment-5263\" class=\"wp-caption-text\">Automatically shifting the view a bit more to the left as soon as a Sentry is spotted down at the end of a corridor.<\/p>\n<\/div>\n<p>This feature is optional, but active by default.<\/p>\n<div id=\"attachment_5264\" style=\"width: 527px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5264\" class=\"wp-image-5264 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_view_shift_for_new_threat_multiple.gif\" alt=\"cogmind_map_zoom_qol_view_shift_for_new_threat_multiple\" width=\"517\" height=\"406\" \/><\/p>\n<p id=\"caption-attachment-5264\" class=\"wp-caption-text\">Another autoshifting example, in this case simultaneously spotting enemies down two different corridors and shifting to put them all in view.<\/p>\n<\/div>\n<p>Notice that the shift leaves one space of padding to the edge rather than putting the hostile right at the edge, which is harder to see and there may also be other markers present, plus it\u2019s nice to know a little of what\u2019s around the target.<\/p>\n<p>There are also a couple other important threats that don\u2019t involve direct sighting of enemies, but that most players would probably find worth automatically shifting to see for better situational awareness.<\/p>\n<div id=\"attachment_5265\" style=\"width: 434px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5265\" class=\"wp-image-5265 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_view_shift_for_watcher_alert.gif\" alt=\"cogmind_map_zoom_qol_view_shift_for_watcher_alert\" width=\"424\" height=\"428\" \/><\/p>\n<p id=\"caption-attachment-5265\" class=\"wp-caption-text\">The view shifts twice here, once on first spotting the Watcher, and again when it sends out an alert to some nearby ally.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5266\" style=\"width: 527px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5266\" class=\"wp-image-5266 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_view_shift_for_heavy_sensors.gif\" alt=\"cogmind_map_zoom_qol_view_shift_for_heavy_sensors\" width=\"517\" height=\"421\" \/><\/p>\n<p id=\"caption-attachment-5266\" class=\"wp-caption-text\">Heavy active sensor proximity alert!<\/p>\n<\/div>\n<p>We can use this shifting behavior for more than just enemies, too!<\/p>\n<div id=\"attachment_5267\" style=\"width: 415px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5267\" class=\"wp-image-5267 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_view_shift_for_machine_ping.gif\" alt=\"cogmind_map_zoom_qol_view_shift_for_machine_ping\" width=\"405\" height=\"391\" \/><\/p>\n<p id=\"caption-attachment-5267\" class=\"wp-caption-text\">There are a few special types of environmental pings you really want to know about, like machine pings. Show me that RIF Installer so I know where I can get my next fix!<\/p>\n<\/div>\n<h2>Other Features<\/h2>\n<p>As part of this update I even added a completely new type of indicator, one that can come in handy even when <em>not<\/em> zoomed in. Sometimes those pesky Operators spot you and immediately zip out of FOV, much less out of view, on their way to their Terminal. At least there\u2019s a log message reflecting that fact, though it may not be obvious where they were at the time. Now it will be.<\/p>\n<div id=\"attachment_5268\" style=\"width: 502px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5268\" class=\"wp-image-5268 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_operator_reporting_response_animation.gif\" alt=\"cogmind_operator_reporting_response_animation\" width=\"492\" height=\"453\" \/><\/p>\n<p id=\"caption-attachment-5268\" class=\"wp-caption-text\">Operator reporting indicator, which remains for a short duration whether the position is visible or not.<\/p>\n<\/div>\n<p>Although available even while not zoomed, a new <hostiles> button that appears above the map while there are hostiles within Cogmind\u2019s FOV was added primarily to facilitate play while zoomed in, offering another way to know and confirm that there are hostiles in line of sight, even if not currently in view. The button reports the total enemy count, and can be pressed to focus on and highlight the largest concentration of enemies. Pressing it again restores the centerpoint to its original area, or in some cases if there are other enemies not visible in the first highlight area it may be able to determine that and focus there instead.<\/hostiles><\/p>\n<div id=\"attachment_5270\" style=\"width: 375px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5270\" class=\"wp-image-5270 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_fov_hostiles_button.gif\" alt=\"cogmind_map_zoom_qol_fov_hostiles_button\" width=\"365\" height=\"539\" \/><\/p>\n<p id=\"caption-attachment-5270\" class=\"wp-caption-text\">Demonstrating basic functionality of the <hostiles> button, although in this situation there would be no strong need to actually use it.<\/hostiles><\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5271\" style=\"width: 452px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5271\" class=\"wp-image-5271 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_fov_hostiles_button_return.gif\" alt=\"cogmind_map_zoom_qol_fov_hostiles_button_return\" width=\"442\" height=\"539\" \/><\/p>\n<p id=\"caption-attachment-5271\" class=\"wp-caption-text\">Using the <hostiles> button to refocus the view on a new squad still out of view to the north.<\/hostiles><\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div id=\"attachment_5272\" style=\"width: 801px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5272\" class=\"wp-image-5272 size-full\" src=\"https:\/\/www.gridsagegames.com\/blog\/gsg-content\/uploads\/2024\/01\/cogmind_map_zoom_qol_fov_hostiles_button_multiple_out_of_view.gif\" alt=\"cogmind_map_zoom_qol_fov_hostiles_button_multiple_out_of_view\" width=\"791\" height=\"181\" \/><\/p>\n<p id=\"caption-attachment-5272\" class=\"wp-caption-text\">Cycling between two different enemies that aren\u2019t present in the same view. Remember that in targeting mode Cogmind can also cycle between visible robots, this is just another more general way to achieve a similar effect while not in that mode.<\/p>\n<\/div>\n<p>I also have notes on even more QoL ideas for map zooming, as well as ways to further extend these new features, but this seems quite good enough for now and we\u2019ll have to see how more playtesting pans out.<\/p>\n<p>Shortly before the first testing build went out I did my own playtest run, trying out both mouse and keyboard play while zoomed\u2026 it went well!<\/p>\n<p><iframe loading=\"lazy\" title=\"[Stream] Cogmind Beta 13 Map Zoom Playtesting\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/eB4NV3UzyaY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p><em>We\u2019ve arrived at the end of our five-part adventure through the process of putting all this together:<\/em><\/p>\n<\/p><\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/www.gridsagegames.com\/blog\/2024\/02\/adventures-in-map-zooming-part-5-qol\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Map zooming again! Although I finished off the final bits of the core map zooming&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1027,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[715,2133,1826,1827,1828,2134],"tags":[],"class_list":["post-1026","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cogmind","category-dev-series-map-zooming","category-gui","category-scaling","category-ui","category-zooming"],"_links":{"self":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts\/1026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/comments?post=1026"}],"version-history":[{"count":0,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts\/1026\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/media\/1027"}],"wp:attachment":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/media?parent=1026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/categories?post=1026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/tags?post=1026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}