If you set the index to 5 in Construct's array you will get the content of the 5th cell of the array. This is not neccessarily the same value! For example:
+Always
-> Array: Set index 2 to Array(2) + 1
-> Text: Set text to Array(2)
Will show you an increasing number, it's a different value on every tick. That's because we change the content of that cell on every tick.
The way s is used here is different to what you already know of an array. But first an important point: If you select s.n({"warpX",5}) you will get the 6th variable, not the 5th. That's because s is zero-based, s.n({"warpX",0}) is the first element, s.n({"warpX",1}) is the second element, etc.
The arrays of s are dynamic arrays. You can add, delete and insert to an array of s at any time to any position. You don't need to take care about resizing, this is done automatically by s. The trick in that Braid-cap is that on every tick a new array cell is inserted before the first one and all others are shifted to the right. So after this insertion, the value that used to be s.n({"warpX",0}) is now located at s.n({"warpX",1}), and s.n({"warpX",0}) is a new cell with a new value. That's not changing the values, just relocating them. That's because they are dynamic, opposed to the rather static arrays of Construct.
I hope it explained it a bit
p.s. sure, if you still have problems with the logic, just pm me, I'm glad to answer in german