There is no magic, just obfuscation. Take a high level view. The first thing to notice is that in the future, each character in the lines is interpreted as if it were the previous character:
[1] map{chr(ord()-1)} ...
Thus, a string like “6qD” will result in “5rC” (characters before “6”, “q” and “D” respectively). Of primary interest is the array of strings at the beginning:
[2] ">>>E!)",">>>E)",">>>E",">>>",">>",">",""
This defines the sequence of the “mask”, which we will replace later, with this line:
[3] "9$_*\x{0e}"
They will be inserted at the point $_ . The string \x{0e} represents the hexadecimal control character; that \x{0d} , the character before it, is a carriage return. This will be replaced by [3] when we do [1].
Before assembly [3] is assembled, we will add a number ! equal to i to each element in [2]. Each subsequent element gets one more ! than the item in front of it. Please note that the character whose value is immediately before ! is space .
The rest of the script iterates over each of the collected elements of the array, which now look more like this:
[4] "!!!!!9>>>E!)\x{0e}", ---> " 8===D (" "!!!!!!9>>>E)\x{0e}", ---> " 8===D(" "!!!!!!!9>>>E\x{0e}", ---> " 8===D" "!!!!!!!!9>>>\x{0e}", ---> " 8===" "!!!!!!!!!9>>\x{0e}", ---> " 8==" "!!!!!!!!!!9>\x{0e}", ---> " 8=" "!!!!!!!!!!!9\x{0e}", ---> " 8"
The reverse operation then adds the same elements in reverse order, creating a loop.
At this point, you can see the template that creates the animation. Now it's just a matter of going through each step in the animation and vice versa, which is executed by the rest of the script. The time delay of each step is determined by the select statement:
[5] select undef, undef, undef, 0.25
which tells us to wait 250 milliseconds between each iteration. You can change this if you want it to accelerate or decelerate.