Sly 1:LOCKG: Difference between revisions

From SlyMods
Jump to navigation Jump to search
Content added Content deleted
(→‎Implementation: Added image)
Tags: Mobile edit Mobile web edit
(→‎Implementation: Fixed apostrophe)
Line 11: Line 11:


== Implementation ==
== Implementation ==
[[File:Sly 1 SDC 3key unlocking.png|thumb|The cutscene after triggering a LOCKG in [[The Swamp’s Dark Center]]]]
[[File:Sly 1 SDC 3key unlocking.png|thumb|The cutscene after triggering a LOCKG in [[The Swamp's Dark Center]]]]
When the trigger volume associated with a LOCKG is triggered it sets off a sequence of events. It starts with the animation that spawns a [[KEY]] for each [[LOCK]] in the <code>apLock</code> array. Each key flies to its assigned lock and then despawns.
When the trigger volume associated with a LOCKG is triggered it sets off a sequence of events. It starts with the animation that spawns a [[KEY]] for each [[LOCK]] in the <code>apLock</code> array. Each key flies to its assigned lock and then despawns.



Revision as of 20:12, 4 August 2022

LOCKG
Data Structure
GameSly Cooper and the Thievius Raccoonus
Official NameYes

LOCKG (likely short for Lock Goal) is a data structure in Sly Cooper and the Thievius Raccoonus that handles interaction between Sly and treasure key locks.

Structure

The structure of a LOCKG is as follows:

Implementation

The cutscene after triggering a LOCKG in The Swamp's Dark Center

When the trigger volume associated with a LOCKG is triggered it sets off a sequence of events. It starts with the animation that spawns a KEY for each LOCK in the apLock array. Each key flies to its assigned lock and then despawns.

At some point a message with ID 0xXXX[check] is sent to the JT struct. This message is processed by HandleJtMessage, which checks if the ckey on the current WS (World State) is greater than the cpLock[check] on the LOCKG (ie. it checks if you have enough keys to open the lock).

If the check passes, it uses the LOCKG’s FWS as a bit mask to set the corresponding flag on the FWS of the current WS. It then unlocks the locks and sets the SMA goal based on the LOCKG’s smaGoal pointer. The SMA goal, which seems to be processed by Splice, determines the outcome (ie. what happens as a result of the locks being opened).

Once all locks complete their unlock animation, they are removed from from the game world along with the LOCKG itself.[check]

Example

In Prowling the Grounds, the LOCKG which handles unlocking the cannon is based at address 0xXXXXXX[check]. It’s cpLock[check] value is 7, meaning there are 7 locks in the apLock array, so when you approach the cannon it checks if you have 7 keys.

If the check fails, nothing happens. If the check passes, it sets the SMA goal to 0xXXXXXX[check], which seems to handle removing the lid from the cannon.

Notes

  • The apLock field is an array of 8 LOCK pointers. You can change these to point to any other entity in the level and they key will fly to and delete that entity instead. If you use this method to delete JT, the cutscene can’t complete and the game softlocks.