Printing criss cross of two strings

Jelly, 10 8 bytes

żṚj@¥2\U

Try it online!

How it works

żṚj@¥2\U  Main link. Arguments: s, t (strings)

          Arguments:    "Truck", Tower"
ż         Ziphwith; create all pairs of corresponding characters.
          Return value: ["TT", "ro", "uw", "ce", "kr"].
     2\   Reduce each pair of adjacent strings by the quicklink to the left.
    ¥       Combine the two links to the left into a dyadic chain.
 Ṛ            Reverse the left string.
  j@          Join the second string, using the previous result as separator.
          Map:          "TT", "ro" -> join("ro", "TT") -> "rTTo"
                        "ro", "uw" -> join("uw", "or") -> "uorw"
                        etc.
          Return value: ["rTTo", "uorw", "cwue", "kecr"]
       U  Upend; reverse each string.
          Return value: ["oTTr", "wrou", "euwc", "rcek"]
          (implicit) Flatten and print.

JavaScript (ES6), 51 bytes

f=([G,...O],[L,...F])=>O[0]?F[0]+G+L+O[0]+f(O,F):''

f=([G,...O],[L,...F])=>O[0]?F[0]+G+L+O[0]+f(O,F):''

console.log(f("Truck", "Tower"))


Haskell, 44 38 bytes

Crossed out 44 is still 44

[_]#_=""
(a:b)#(x:y)=y!!0:a:x:b!!0:b#y

Slightly less golfed / maybe a little more readable:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))