I think I have grasped the summary of this "transform" glitch. First, I explain some preliminary knowledge.
In this game, there are 30 actors. Actor indices are assigned as follows:
0: hero1
1: hero2
2-27: other actors (details not analyzed yet)
28: hero1's HUD (ammo, etc.)
29: hero2's HUD
Here is a summary of RAM:
* $04FE-$051B stores the state bitmask of each actor. If this value is zero, the actor doesn't exist.
* $0620-$063B stores the kind of each actor. But, for heroes, this value seems to indicate the index of the actor they are riding on. By the way, the actor kind for friendly tanks is 0x20.
Let's watch
my movie based on the above.
On frame 4100, $0620-$0621 stores [7, 8], and $0627-$0628 stores [0x20, 0x20]. This means that hero1 is riding on the tank at index 7, and hero2 is riding on the tank at index 8. At this moment, hero2's tank still exists because $0506 stores a nonzero value.
On frame 4115, the value of $0506 becomes zero. This means that hero2's tank is temporarily despawned, probably due to scrolling.
On frame 4118, the value of $0506 becomes nonzero again, and the value of $0628 becomes 0x08. This means that an enemy fort is spawned at index 8. As a result, hero2 will ride on the enemy fort instead of the tank!
When a hero rides on something, it is considered a tank if its actor kind is 0x20; otherwise, it is considered a helicopter (code: $F9CB). Therefore, a helicopter actually appears.
In conclusion, I think you can change a tank into a helicopter by executing this wrong scroll at a location where some kinds of enemy actors are spawned.
EDIT: The actor kind 0x08 seems to be a flash effect of a enemy fort. And, I think you can also use other actor kinds to overwrite the index of your original tank.