You can find the scripts for them in the scriptbank.
Basically, each light puzzle has a "Controller" entity that handles everything.
When you step on one of the lights (each are set up as a triggerzone), they activate the controller script with their number. The controller script then activates certain lights based on which number it's been activated with.
For example, let's assume the follow is a puzzle:
1 2 3
Where each number is a light on the ground. If the player stepped on light #1, that light's script would activate the controller script with a "1". Same goes for the others except they'd activate it with a 2 or a 3.
The controller unit take in the number and it's been programmed to activate light 1 & 2 if it's been activated with a 1. It'll activate 1,2 & 3 if it's been activated with a 2 (Since it's in the middle). And it'll activate 2 & 3 if it's been activated with a 3.
Now every light in the game works like this:
- Either start off as on or off (red or green)
- If activated... alternate between them.
- If green, increment a variable.
Here's the tricky part... For each puzzle there is ALSO a "Scoring Entity", which handles the task of determining whether or not the puzzle is "finished".
As I said just a moment ago, when a light is turned to green, it increments a variable. The scoring entity checks this variable for if it is equal to the number of lights in the puzzle. If there were 14 lights in the puzzle then the variable would need to be equal to 14 for it to be finished.
After the Scoring Script has finished checking for a completed puzzle, it resets the variable back to 0 for a recount.
Now, the scoring entity is also the one that opens/closes the doors when the puzzle is completed or not (or even UNcompleted lol) by activating it's IfUsed.
There.. that about does it. Each puzzle had it's very own unique Controlling and Scoring scripts.
Hope that made sense, the pressure buttons worked just about the same way for determining if a door should be opened or not.
The one and only,