Idle Deload: Difference between revisions

From JakSpeedruns Wiki
Jump to navigation Jump to search
(Created page with "An '''idle deload''' is a bug in the game's level loading system that can be used to load in fail-safe/stored checkpoints and levels. If performed correctly you will generally see your current level deload to a black void and as the pause menu opens your location should change to the next checkpoint the game has available. Idle deloading is used for Klaww Skip, Lava Tube Skip, and for Citadel Skip only in All Orbs and All Flies categories. == Technical == Jak and Daxte...")
 
No edit summary
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
An '''idle deload''' is a bug in the game's level loading system that can be used to load in fail-safe/stored checkpoints and levels. If performed correctly you will generally see your current level deload to a black void and as the pause menu opens your location should change to the next checkpoint the game has available.
[[File:Idle Deload.gif|frame|An idle deload being performed in Forbidden Jungle to get to Sentinel Beach.]]
An '''idle deload''' is a bug in the game's level loading system that can be used to load in fail-safe/stored checkpoints and levels. If performed correctly, you will typically see your current level deload to a black void which Jak will then fall into. When Jak respawns, he will be in the newly loaded level.


Idle deloading is used for Klaww Skip, Lava Tube Skip, and for Citadel Skip only in All Orbs and All Flies categories.
Idle deloading is used for [[Klaww Skip]], [[Lava Tube Skip]], and for [[Citadel Skip]] but only in the [[All Orbs]] and [[All Flies]] categories.


== Technical ==
== Technical ==
Jak and Daxter: The Precursor Legacy uses a hand-crafted game engine with seamless level-loading, meaning you can travel from place to place without ever experiencing a loading screen. The game dynamically tosses out old levels as you leave a certain area through an invisible boundary, freeing memory for new levels to be loaded, without the player knowing any different. Similarly, levels are loaded from disc upon crossing a boundary leading into the level.


Some events in the game cause the current pair of loaded and active levels to be backed up - the four known events that cause this are Jak dying, viewing a cutscene, loading the game, and Jak performing an idle animation, which occurs after being inactive in a grounded state for 30 seconds. By interrupting the idle animation while the animation is still being loaded from the disc, it is possible to trigger a fail-safe which restores the levels in memory to the backed up state, deloading any levels not present in the backup list and loading any that were. Additionally, if the active level that is restored is different upon triggering the fail-safe, then Jak will be assigned the checkpoint in the active level that is geographically closest to his current position.
<youtube>https://www.youtube.com/watch?v=yJzPplb1U4A</youtube>


This is advantageous because it allows the player to store an active level of their choosing, then make it inactive, and trigger the fail-safe from a location that is closer to a later checkpoint in the level than the one they had access to normally, allowing them to bypass certain requirements such as defeating a boss or unlocking the zoomer.
On a technical level, an idle deload is when the game's backup load state sequence is interrupted and only the restore functions are executed.


While most actions can be used to interrupt the idle animation and trigger the fail-safe, they require quite precise timing. Instead runners prefer to use a Pause Buffer when the idle animation is about to occur, as it gives a window of roughly 2.5 seconds to time the input, as opposed to roughly 11 frames with other actions. In some cases such a pause is required to allow the game time to load the stored levels.  
During cutscenes, certain objects or characters need to be moved around or deloaded as the cutscene plays out. After the cutscene is over, the game needs to be able to return all the characters and objects to their original positions before the cutscene was started. In order to do this, the game creates a backup load state right before the cutscene begins. It then refers to the data within the backup load state after the cutscene is finished to properly return everything to how it was before the cutscene started. This backup load state process is controlled by the game's animation system, which is also used by 3 other events: Jak dying, Jak using the warp gate, and Jak performing an idle animation after 30 seconds of standing still. This means that these 3 other events can trigger the backup load state sequence.
 
There are two sets of functions that control this process:
 
=== Function Set 1 ===
; ja-play-spooled-anim : This function loads sounds and animations needed for the event. It also calls the function "backup-load-state-and-set-cmds".
; backup-load-state-and-set-cmds : This function creates and stores a backup of Jak's current load state (level buffer state, level visibility data, and object names and statuses).
 
=== Function Set 2 ===
; ja-abort-spooled-anim : This ends the sounds and animations for the event. It also calls the function "restore-load-state-and-cleanup".
; restore-loads-state-and-cleanup : Loads in the stored backup load state.
 
 
If the player holds the Start, L1, R1, Triangle, Circle, Cross, or Square button while Jak does his idle animation, this will trigger '''Function Set 2''' before '''Function Set 1'''. This means that the backup load state is not updated with Jak's current data. Instead, only the restore sequence is executed, meaning whatever data happens to be in the current backup load state is loaded in.
 
Here is an example. If Jak dies in Sentinel Beach, this counts as one of the events that utilizes the animation system, meaning a backup load state has been created for Jak in Sentinel Beach. If Jak then walks to Forbidden Jungle, holds the Circle button for 30 seconds, then does his idle animation, it will skip to Function Set 2 and restore the data from when Jak died in Sentinel Beach. Forbidden Jungle will deload (since there is no Forbidden Jungle data in the backup load state) and Sentinel Beach will load in.


== Discovery ==
== Discovery ==
The idle deload was discovered by headstrong1290 on accident in [https://youtu.be/59dhHVL8Frs?si=6-EoxVJmVO18-Gky&t=1219 February 2016]. Blahpy figured out how to reproduce it a few days later. On August 22, 2021, Snugggles would discover the "button holding" method of the idle deload, which is the most commonly used method today.  
[[File:Idle Deload Button Hold Discovery.jpg|thumb|Snugggles posts about the Button Hold method in Discord.]]
The idle deload was [https://www.twitch.tv/videos/49764810 discovered by headstrong1290] on accident in February 23, 2016. Three days later, [https://www.youtube.com/watch?v=alTML2riGVc Blahpy figured out how to reproduce it]. On August 22, 2021, Snugggles would discover the "button holding" method of the idle deload, which is the most commonly used method today.  


Idle deload's first useful application for speedrunning was discovered by Boomer and yankee027 while accidentally doing Klaww Skip.
Idle deload's first useful application for speedrunning was discovered by Boomer and yankee027 while accidentally doing Klaww Skip.
{{Glitches}}

Latest revision as of 06:26, 19 February 2024

An idle deload being performed in Forbidden Jungle to get to Sentinel Beach.

An idle deload is a bug in the game's level loading system that can be used to load in fail-safe/stored checkpoints and levels. If performed correctly, you will typically see your current level deload to a black void which Jak will then fall into. When Jak respawns, he will be in the newly loaded level.

Idle deloading is used for Klaww Skip, Lava Tube Skip, and for Citadel Skip but only in the All Orbs and All Flies categories.

Technical

On a technical level, an idle deload is when the game's backup load state sequence is interrupted and only the restore functions are executed.

During cutscenes, certain objects or characters need to be moved around or deloaded as the cutscene plays out. After the cutscene is over, the game needs to be able to return all the characters and objects to their original positions before the cutscene was started. In order to do this, the game creates a backup load state right before the cutscene begins. It then refers to the data within the backup load state after the cutscene is finished to properly return everything to how it was before the cutscene started. This backup load state process is controlled by the game's animation system, which is also used by 3 other events: Jak dying, Jak using the warp gate, and Jak performing an idle animation after 30 seconds of standing still. This means that these 3 other events can trigger the backup load state sequence.

There are two sets of functions that control this process:

Function Set 1

ja-play-spooled-anim
This function loads sounds and animations needed for the event. It also calls the function "backup-load-state-and-set-cmds".
backup-load-state-and-set-cmds
This function creates and stores a backup of Jak's current load state (level buffer state, level visibility data, and object names and statuses).

Function Set 2

ja-abort-spooled-anim
This ends the sounds and animations for the event. It also calls the function "restore-load-state-and-cleanup".
restore-loads-state-and-cleanup
Loads in the stored backup load state.


If the player holds the Start, L1, R1, Triangle, Circle, Cross, or Square button while Jak does his idle animation, this will trigger Function Set 2 before Function Set 1. This means that the backup load state is not updated with Jak's current data. Instead, only the restore sequence is executed, meaning whatever data happens to be in the current backup load state is loaded in.

Here is an example. If Jak dies in Sentinel Beach, this counts as one of the events that utilizes the animation system, meaning a backup load state has been created for Jak in Sentinel Beach. If Jak then walks to Forbidden Jungle, holds the Circle button for 30 seconds, then does his idle animation, it will skip to Function Set 2 and restore the data from when Jak died in Sentinel Beach. Forbidden Jungle will deload (since there is no Forbidden Jungle data in the backup load state) and Sentinel Beach will load in.

Discovery

Snugggles posts about the Button Hold method in Discord.

The idle deload was discovered by headstrong1290 on accident in February 23, 2016. Three days later, Blahpy figured out how to reproduce it. On August 22, 2021, Snugggles would discover the "button holding" method of the idle deload, which is the most commonly used method today.

Idle deload's first useful application for speedrunning was discovered by Boomer and yankee027 while accidentally doing Klaww Skip.


Glitches, Bugs, Exploits, and Secrets
Jak and Daxter: The Precursor Legacy Audio Pause GlitchBridge BlastDark GlitchDeveloper PicturesDupe StateFlut Flut EscapeGame CrashGhost GlitchHard FishIdle DeloadLine GlitchMoon WalkOrb Duplication GlitchPause BufferPunch GlitchStatue GlitchVoid OutWalking While TalkingZombie GlitchZoomer Escape
Jak II Developer PicturesGame CrashGhost TownInvisibility GlitchInvulnerability GlitchLine GlitchOrb Duplication GlitchPause BufferPeacemaker StackingPunch GlitchStatue GlitchZombie Glitch
Jak 3 Developer PicturesGame CrashInvisibility GlitchInvulnerability GlitchLine GlitchOrb Duplication GlitchPeacemaker StackingPunch GlitchStatue GlitchZombie Glitch
Jak X Line Glitch
Daxter placeholder text
Jak and Daxter: The Lost Frontier placeholder text