I started on this updated as soon as v1.3.4 was released (on January 9, 2021). I knew it was going to take a long time and that I was going to break a lot of things that would take a significant amount of time to fix, but it's all been worth it. I cleaned up a lot of the backend systems in the game to make development and bug fixing easier. This allowed me to fix a few bugs I was battling with for quite a while. I've also continued to increase performance and managed to find a solution to the Windows update issue that plagued some users causing the game to run at about 45 FPS instead of 60FPS (more details on this below).
As stated above, I made a lot of backend changes in this update. I've thoroughly tested the game as much as I feasibly could and haven't noticed any remaining bugs, but I'm sure there's something I missed, so please let me know if you notice anything weird!
That said, I want to warn players that I've renamed a few of the options settings in the save files. If you notice any options aren't set to what you left them at previously, you'll just need to update them in the new options menu after launching the v1.4.0 of the game. The other thing that you may notice is that Quick Play replays/deaths from previous version won't load. The Quick Play replays/deaths were never fully functional, and with v1.4.0, the way they are stored (folder structure) has been changed (more info below), which is why past replays/deaths are not loaded and why it's non-trivial to just write some code that moves them from the old locations to the new locations.
The biggest changes made in this update are the new menu system and the new options menu with a bunch of new options. Check out this video to see all of the major new features added with this update.
Here are the Pixel Art Timelapse I did for new graphics that were added to the game in this update:
Below are the full Changelog details.
Story mode level changes:
- Removed the right side floor on lvl_1_3 in order to force the player to stick to the ceiling to complete the level.
- In game time stops counting up when the game is paused.
- All play time after the player collects the final crown (after beating the final boss) no longer counts toward the in game time. The reason for this decision is that the player no longer has control over the character, and this would mark the end of a speedrun, so I wanted to end the in game timer at this point.
- Deaths in tutorial level now count toward total profile deaths.
- Changed how story mode level end goo is rewarded. Before, there was a set amount of goo available at the start of the level, and if you reached the end before the goo reached zero you would get the remaining goo. Now, there is a base amount of goo awarded at no matter what time the player gets when they finish. The base goo is 8% of the previous goo available at the start of the level. The new goo available at the start of each levels is 92% of the previous goo available at the start. This does not change how much goo is awarded for any times faster than when the goo runs out, but it makes it so that if the goo runs out the player still gets some base amount. The result of this is that just for completing the levels players will get 19% to 31% of the goo needed (depending on the subzone) to fully extend the goo access pile.
- Goo transfer rate from levels to goo access piles used to be a flat rate but is now proportional to the amount of goo required to fill a pile.
- Added a glass goo container graphic to display each level's goo score above the level doors in the overworld.
- The story mode overworld pipe teleporter map cursor now only snaps to doors in subzones that are unlocked. It used to snap to any door anywhere on the map (including non-visible doors).
- Portals now act as checkpoints (like doors) in that if the player goes through a portal, it records their overworld position at the portal and the player will be respawned there in the future when entering the overworld (until the player enters another door/portal).
- Added GUI information for how to interact with the faucet system to select a destination.
- Moved a few of the overworld lock blockers by 16 pixels (up/down) so their glow sprite would line up with walls and not just be over empty air.
- There was no overworld faucet for lvl_4_5. A faucet has been added.
- Bonus goo used to be applied directly to the goo access piles. Now it is transferred to the access piles via goo particles (just like now the completion goo amount is transferred to the access piles).
Options changes and additions:
- Removed the options sidebar because there are now too many options to fit on the sidebar. Removing the sidebar will also help with game performance and will help to declutter the visual field during gameplay. I may re-implement the sidebar later on with the most commonly used options. If I do this, players would be able to toggle the sidebar on/off as an option in the regular options menu.
- Expanded the options menu and increased the number of areas it can be accessed from. Added options to toggle/change the following: show level timer, show game timer, minimap opacity slider, show in-game achievements, save replays, save deaths, resolution resizing with typed numbers, enable manual window resizing, show particles, enable wall glow, enable screen shake, master volume, keybind for up, keybind for down, keybind for pause, keybind for back, controller deadzone size, controller virbrations.
- Add a keybind options for up and down, since they is used in the menu systems and teleporting system.
- Pause menu now has a button for restarting the level.
- Profile data "settings.ini" file has been renamed to "data.ini". The game should automatically rename the profile data files for all your profiles when you launch the game.
Level Editor changes:
- Added "*" indicator on the "Save" button in the level editor when there are unsaved changes.
- Added a new button in the level editor that allows players to place a temporary player spawn point in the level. When playtesting, the player will spawn from that location instead of from the door location.
Quick Play / Level Exchange changes:
- The default level browsing filter is now set to "Newest" (was previously "Most Played").
- Added back button to quick play level select room.
- Added tip text in quick play when the pause menu is brought up.
- Since players no longer need to load a profile before accessing quick play, the quick play replays are no longer saved within the profile folders. Instead, they save within a user_id folder (with the user_id of the current in user logged into quick play). The quick play replays are also now saving under a different folder scheme, so your past quick play replays won't show up any more (although the files haven't been deleted).
- Moved a bunch of the development testing code out of the main controller object and into its own object. This should slightly increase performance on the non-developer version of the game, since the controller won't have to continuously check whether it is in developer mode.
- Optimized the wall code some to increase performance.
- The chunk loader's function for activating objects within the view was computationally expensive. It used to run every step of the game, but now it only runs every 3 steps. This should provide a slight increase to performance.
- Moved some code from the overworld wall object create events to their initialization events (which only triggers when the chunk loader loads them). This slightly speeds up the load time of the overworld.
- Moved some code out of the overworld door object create events to their initialization events (which only triggers when the chunk loader loads them). This slightly speeds up the load time of the overworld.
- Moved some code from the overworld wall object draw event to the initialization event to save on computation. This increases performance in the overworld.
- Profile story mode data used to save at the end of every level. Now it only saves as necessary. This should slightly speed up the time it takes to reload levels and the time it takes to go between levels.
- The replay/deaths surfaces are now only the size of the viewport, rather than being the size of the entire room. This should slightly increase performance on larger rooms.
- Optimized the replay/deaths save files a little bit to help increase performance, load/save times, and reduce replay/deaths file sizes. Old replays/deaths are still compatible with the new system and will get loaded and displayed normally.
- Slightly improved speed of loading replays/deaths.
General changes and additions:
- Added more screen fading in/out transitions between rooms.
- Added very short animation for slime king entering doors.
- Reduced the volume of the clicking sound in the end_level_goo sound (which is also used for going through doors). The clicking was supposed to sound like a secondary splat, but at the volume it was at, it sounded more like an audio glitch.
- Player splat sound now scales in volume (from 0.6 to 1.0) with how fast the player was moving just before colliding with walls. Before, it was a randomly chosen volume between 0.6 and 1.0.
- Added snow particles when the snow blocks crumble.
- Added drop shadow to the title screen text "The True Slime King".
- End goo pile depth is now in front of the player object.
- Instant replay GUI now fades in (it used to abruptly pop in).
- Player movement used to allow for sub-pixel movement into walls. That has been fixed so that now player movement checks at minimum 1 pixel in the direction of movement and so that when players collide with walls, their position is snapped to the nearest pixel. This results in the player being completely against walls on collisions, with zero sub-pixel positioning on either side of the wall. Eliminating this sub-pixel movement into walls also fixes the issue where moving blocks could push the player into walls.
- Since the player used to sub-pixel clip through floor blocks, it allowed the player to have extra frames they could jump in (most of the time; it wasn't fully consistent), because the game thought the player was essentially coming out of a wall when they run off the side of a platform. To provide the same feeling in the new system, and to make it consistent, the player is given the same 4 frames of "coyote time" to jump (while in the air) after leaving a platform.
- Fixed an issue affecting some Windows users after one of the Windows updates in 2020. I tried fixing the issue with a Windows DLL (https://github.com/omicronrex/gms_scheduler_fix) and with a GameMaker extension (https://github.com/skyfloogle/gmsched), but neither of those seemed to work on the computer I was testing on. The only solution that worked was to set the GameMaker sleep margin from 1ms to 10ms. Having the sleep margin set at 10ms instead of the 1ms will mean the game will utilize more CPU. More info:
- Windows slowdown: Forum.yoyogames.com
- GameMaker sleep margin: Forum.yoyogames.com
- GameMaker sleep margin: Forum.yoyogames.com
- My computer's resource usage at the title screen with 1ms sleep margin: 3% CPU; 8.5% GPU.
- My computer's resource usage at the title screen with 10ms sleep margin: 8.5% CPU; 8.5% GPU.
- Fixed issue with stretched resolution graphic artifacts. Issue: When screen was stretched by a non-integer multiple, tiles could draw parts of neighboring tiles. See this GameMaker: Studio documentation page for more information: Docs.yoyogames.com use/more about backgrounds/designing tiles.html. The issue was fixed by adding a 1 pixel border around some of the tiles used in the game. This required all levels (story mode and level exchange) to be re-tiled (which was done programmatically) to make them use the new tile grids for the tilesets that now have 1 pixel borders around each tile. There is still backward support for loading older level versions into the game through the level editor or quick play area.
- Fixed issue with goo not transferring to the correct coordinates on some goo access piles.
- Fixed issue where teleporter pipes could cause the view to go beyond the edge of the room.
- Fixed issue with the game overriding the mouse cursor icon when near the edge of the window. This has been fixed by only setting the cursor when it is within the window area.
- Fixed issue with the in-level door tooltip being drawn behind walls (making it not visible if there is a wall directly above the in-level door).
- Fixed issue with some lines being drawn in game only drawing 1 pixel on the screen (no matter the size of the game). These instances now draw one pixel relative to the game surface (the GameMaker functions used to be draw_line() and were converted to draw_line_width()).
- Fixed issue with slime buddies not snapping orthogonally to the blocks they collide with.
- Made the "Delete Replays/Deaths/Profile" box larger so that the deleted data text didn't spill over the sides of the box.
- Fixed issue where player could jump on button blocks without activating them.
- Fixed issue with zone text displaying behind the black fog of the overworld pipes, making the zone text not visible.
- Fixed issue with the mouse coordinates not updating when the mouse was outside the window, which allowed for the mouse to get stuck hovered over buttons near the edge of the window even if the mouse was outside the window somewhere completely different.
- Fixed issue with replays/deaths not working for quick play levels.
- Fixed issue with game window not centering in the display on a new game with no previous settings file.
- Fixed issue with pipe teleporter not updating the zone and music when going between zones and the subzone remained the same (for example from the Echoing Entrance bonus area to the Crystal Caves bonus area).
- If "Allow window resizing" is on, resizing the window on the top or left side make the window move. This seems to be due to how the following GameMaker functions work with windows: window_set_min_width(), window_set_max_width(), window_set_min_height(), window_set_max_height(1).
- Replays don't display the correct positions when screen shake is applied to the view.
- Level editor doesn't remember all settings when switching between playtesting and editing.
- Some objects are still autotiled by the chunk loader when the room starts (such as the colored key blocker objects). These objects can occasionally tile incorrectly if their neighbors haven't yet been activated by the chunk loader.