#JavaScript (ES7), <s>&nbsp;216 212 209 205&nbsp;</s> 201 bytes

Takes input as `(block)(double)`, where _block_ is either \$-2\$ (top right), \$-1\$ (bottom left), \$1\$ (bottom right) or \$2\$ (top left) and _double_ is a Boolean value.

<!-- language-all: lang-javascript -->

    b=>d=>(g=x=>y<31?` |-+=OTF
    `[X=x-19,Y=y-15,p=X*Y*b<0,q=Y>0^b&1,X*=X,Y*=Y,i=x*24%35<3|16>>Y%62%6&2,x<39?Y?p*X|(d?Y:X-87)>169?0:i-3?X-1|Y-16|q?i:7:q*(d?X-87:Y)%169?6:3:x%38?4:5:++y&&8]+g(-~x%40):'')(y=0)

[Try it online!](https://tio.run/##ZYvNToNAGEX3fYpvITADMw0DLW2nfExi1K0bF0yaGspPK9qU/qiBFHx1pG5d3NzcnHPfN9@bS3Yuj5/8UOVFv8U@xSjHiOywxqgJfaESaLmDzy9Po2QVY83FgmlsuJiyI8a2ttPQZSfUkfuamoLFNsZM26hZibXtTQx/GvqtCKJIG4FnBKbH6tBfKK2OdtySXGkZ8/mMRiJYKFeW3FcxF63mImhPqpQzebIH6@ZITY2bFUhf1oY/VxM5lY7TmOZ87ewI/6mNiUulZVHSoEv7bXUmOSC4S8ghRBBDOw6F6whgxT0GggEf4q3Hg/q4yd5IChj9cYCsOlyqfTHeVzuS3O@r7APurmnH4KH6SveFHFYOCqymuFggwTpUVpfQf9ctSSnJ6Q10dDnq@l8 "JavaScript (Node.js) – Try It Online")

[Formatted version](https://tio.run/##jVPbboJAEH3nK85DFRakAUVUKpo0TV/70gdJL0EEjS1htbaNROiv21k03rAXEtidc@acnRngZfg5XIzeprN3PeFhtB676wBuDyHdigRM4GJJAG2BFF00TPSLAPCR6Zp7d3/7mPgPWwwYFAodZqe2wzzCUoE199iMsAFU4lQEZGzsqTlRHnow8ExUFWbtwF0l2aEzxd4@nhanq6hbqKDRFAUj27HiMm30eqSrwK6LB/nX9/qlUHR2LW6O6B8ZzMh@cGKqhOjDcwjX0W4xqt20Oyc6wDiKnRN2StpGSYPC00RGdeii@IzGU04ieQlzzmS1pL9y5lBLWNHepjc48BjN7Vx/4rL/VUZD@olfivfWLllbv46uKZ1jNC1FtYr2FnqCtt1NFP1LnGMZTDoUybLElJS@IIOtx/yNuqbtFUJ0XZi0ahpbUaqg6CcRUCAoi9YtBYx4suBxdBnzieJfx3z0iotVkNdwwz@COHIoEsOU02gh0yzlhMu5z0rSsRIwJWSCyKV8/Q0)

###How?

We iterate from \$y=0\$ to \$y=30\$ and from from \$x=0\$ to \$x=39\$ for each value of \$y\$.

We first define \$X=x-19\$ and \$Y=y-15\$.

The variables `p = X * Y * b < 0` and `q = Y > 0 ^ b & 1` are used to determine what do draw in each quarter according to the block \$b\$.

From now on, both \$X\$ and \$Y\$ are squared in order to easily test absolution positions within each quarter of the field.

The expression `x * 24 % 35 < 3` yields _true_ if \$x\$ belongs to \$\{0, 3, 19, 35, 38\}\$ (the positions of the vertical lines) or _false_ otherwise.

[Try it online!](https://tio.run/##y0osSyxOLsosKNHNy09J/f8/Lb9Io0LBVsHAWqFCwUbBBERra2sqVHMpKCTn5xXn56Tq5eSna1ToAOW1FIxMFFQVjE2BKo01rblq//8HAA "JavaScript (Node.js) – Try It Online")

The expression `16 >> Y % 62 % 6 & 2` yields \$2\$ if \$y\$ belongs to \$\{0, 2, 12, 18, 28, 30\}\$ (the positions of the horizontal lines, excluding the net) or \$0\$ otherwise.

[Try it online!](https://tio.run/##FYrNCkBAGEX3nuJuyPjLjNgM3sNS/iL5hNQkzz4@m3Pr3LO0d3t2x7xf8Ub9YO1Ih29QIdUwKJFJ3jAUeBygYc9nDJkLBAGUZtnRdtI6JCtNvokgC9Q1ly4K9QMelNDOa@0H "JavaScript (Node.js) – Try It Online")

The variable \$i\$ is defined as the result of a bitwise OR between the two values above, and is therefore interpreted as:

- 0: space
- 1: `|`
- 2: `-`
- 3: `+` or `T`

The expression `(d ? Y : X - 87) > 169` is used to crop the field according to the game type \$d\$ (single or double). The similar expression `(d ? X - 87 : Y) % 169` is used to draw the `T`'s at the appropriate positions.