Sly 1:LOCKG: Difference between revisions
m
Fix typo
TheOnlyZac (talk | contribs) (Added to do tag) |
TheOnlyZac (talk | contribs) m (Fix typo) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1:
{{Infobox data structure
| image= File:Sly 1 SDC 3key unlocking.png
| official= y
}}
'''LOCKG''' (
{{Todo|Replace all the XXX placeholders throughout the article with the actual values}}
==
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 [[Sly 1:KEY]] for each [[Sly 1: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 [[Sly 1:JT|JT]] struct. This message is processed by <code>HandleJtMessage</code>, which checks if the <code>ckey</code> on the current {{Sly 1|WS|world state}} is greater than the <code>cpLock</code>{{check}} on the LOCKG (i.e. 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 <code>LOCKG->FWS</code> as a bitmask to set the corresponding flag on the FWS of the current WS. It then unlocks the locks and sets the [[Sly 1:SMA|SmaGoal]] based on the <code>LOCKG-> smaGoal</code> pointer. The SMA goal, is processed by {{Sly 1|Splice}} to trigger whatever scripted event happens as a result of the locks being unlocked.▼
▲If the check passes, it uses the <code>LOCKG->FWS</code> as a bitmask to set the corresponding flag on the FWS of the current WS. It then unlocks the locks and sets the
Once all locks complete their unlock [[Sly 1:ASEG|animation]], the associated locks disappear from the world.▼
▲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>
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}}
|