Sly 1:LOCKG: Difference between revisions
m
Fix typo
TheOnlyZac (talk | contribs) (→Implementation: Fixed apostrophe) |
TheOnlyZac (talk | contribs) m (Fix typo) |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1:
{{Infobox data structure
| image= File:Sly 1 SDC 3key unlocking.png
| official= y
}}
'''LOCKG''' (
▲'''LOCKG''' (likely short for '''Lock G'''oal) is a data structure in {{Sly 1}} that handles interaction between Sly and treasure key locks.
{{Todo|Replace all the XXX placeholders throughout the article with the actual values}}
== Fields ==
The LOCKG struct has the following fields:
{{Struct top}}
{{Struct field||4|int|grfws|Bitfield OR'd with the grfws on the global {{Sly 1|GS}} struct when triggered}}
{{Struct field|offset=|size=4|type=struct SMA*|name=psma|description=The SMA activated when triggered}}
{{Struct field|offset=|size=4|type=struct SM*|name=psm|description='''Unknown''' SM pointer}}
{{Struct field||4|int|coidLock|Count of lock OIDs}}
{{Struct field||32|enum OID[8]|aoidLock|Array of lock OIDs}}
{{Struct field|offset=|size=4|type=int|name=cplock|description=Count of locks in the group}}
{{Struct field|offset=|size=32|type=LOCK*[8]|name=aplock|description=Array of lock pointers}}
{{Struct bottom}}
{{Investigate}}
== Implementation ==
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
At some point a message with ID 0xXXX{{check}} is sent to the [[JT (Sly 1)|JT]] struct. This message is processed by <code>HandleJtMessage</code>, which checks if the <code>ckey</code> on the current [[WS]] (World State) is greater than the <code>cpLock</code>{{check}} on the LOCKG (ie. it checks if you have enough keys to open the lock).▼
▲At some point a message with ID 0xXXX{{check}} is sent to the
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 <code>smaGoal</code> 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).▼
▲If the check passes, it uses the
Once all locks complete their unlock [[ASEG|animation]], they are removed from from the game world along with the LOCKG itself.{{check}}▼
▲Once all locks complete their unlock
=== Example ===▼
In Prowling the Grounds, the LOCKG which handles unlocking the cannon is based at address 0xXXXXXX{{check}}. It’s <code>cpLock</code>{{check}} value is 7, meaning there are 7 locks in the <code>apLock</code> array, so when you approach the cannon it checks if you have 7 keys.▼
▲In Prowling the Grounds, the LOCKG which handles unlocking the cannon is based at address 0xXXXXXX{{check}}. It’s <code>
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 <code>
{{Navbox Sly 1}}
|