	1 * 1	00 04 0A 01 GANTRY_CRANE_N
		08 "ISRI"

		// Sprite layout
		1A 04
			// 00 (x)
			44
			\dx000003F4 \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000843A \wx0007 // crane back
			00 00 00 // x/y/z offset
			10 05 0F // x/y/z extent
			01 05 12 // registers
			\dx80008445 \wx0007 // crane front
			00 0B 00 // x/y/z offset
			10 05 0F // x/y/z extent
			01 05 12 // registers
			\dx8000842D \wx0007 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent
			02 06 12 // registers

			// 01 (y)
			44
			\dx000003F3 \wx0002 // ground sprite
			10 // register
			\dx8000042E \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000846A \wx0007 // crane back
			00 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			01 05 12 // registers
			\dx80008475 \wx0007 // crane front
			0B 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			01 05 12 // registers
			\dx8000845D \wx0007 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent
			02 06 12 // registers

			// 02 (x) purchase
			44
			\dx000003F4 \wx0000 // ground sprite
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000043F \wx0000 // crane back
			00 00 00 // x/y/z offset
			10 05 0F // x/y/z extent
			\dx8000044A \wx0000 // crane front
			00 0B 00 // x/y/z offset
			10 05 0F // x/y/z extent
			\dx80000433 \wx0000 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent

			// 03 (y) purchase
			44
			\dx000003F3 \wx0000 // ground sprite
			\dx8000042E \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000046F \wx0000 // crane back
			00 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			\dx8000047A \wx0000 // crane front
			0B 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			\dx80000463 \wx0000 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent


		0C FE // only allow 1 platform
		0D F1 // disallow platform length 1 and > 4

		14 FF // wires (none)
		11 00 // pylon placement (none)

		16 \wx01F3 // animation info 244 frames looping
		17 05      // animation speed 2^5 ticks per frame (~800ms), changed by callback 142
		18 \wx0018 // animation triggers - train enters (0x08), train leaves (0x10)

		0B 0F // use callback to determine date availability (1), layout (2), animation frame (4) and animation speed (8)


	1 * 1	01 04 01 04
	1 images/newgantry1.pcx  556   7  01   31  64  -31   0 // 042D x, platforms with crane rails
	1 images/newgantry1.pcx  624   7  01   31  64  -31   0 // 042E y, platforms with crane rails
	1 images/newgantry1.pcx  238   7  01   31  64  -31   0 // 042F x, non-track tiles with crane rails
	1 images/newgantry1.pcx  398   7  01   31  64  -31   0 // 0430 y, non-track tiles with crane rails

	1 * 1	02 04
		80 // ID
		00 01
		\w0


	1 * 1	01 04 01 60
	1 images/newgantry1.pcx  792 166  01   54  21  -14 -19 // 042D x, top 0
	1 images/newgantry1.pcx  788 166  01   54  25  -14 -21 // 042E x, top 1
	1 images/newgantry1.pcx  784 166  01   54  29  -14 -23 // 042F x, top 2
	1 images/newgantry1.pcx  780 166  01   54  33  -14 -25 // 0430 x, top 3
	1 images/newgantry1.pcx  776 166  01   54  37  -14 -27 // 0431 x, top 4
	1 images/newgantry1.pcx  754 166  01   54  59  -32 -29 // 0432 x, top 5
	1 images/newgantry1.pcx  754 166  01   54  59  -28 -31 // 0433 x, top 6 - mid posn
	1 images/newgantry1.pcx  754 166  01   54  59  -24 -33 // 0434 x, top 7
	1 images/newgantry1.pcx  754 166  01   54  38  -20 -35 // 0435 x, top 8
	1 images/newgantry1.pcx  754 166  01   54  34  -16 -37 // 0436 x, top 9
	1 images/newgantry1.pcx  754 166  01   54  30  -12 -39 // 0437 x, top 10
	1 images/newgantry1.pcx  754 166  01   54  26   -8 -41 // 0438 x, top 11
	1 images/newgantry1.pcx  754 166  01   54  22   -4 -43 // 0439 x, top 12

	1 images/newgantry1.pcx  139   7  01   23   6  -24   2 // 043A x, back 0
	1 images/newgantry1.pcx  135   7  01   23  10  -24   0 // 043B x, back 1
	1 images/newgantry1.pcx  131   7  01   23  14  -24  -2 // 043C x, back 2
	1 images/newgantry1.pcx  126   7  01   23  19  -25  -4 // 043D x, back 3
	1 images/newgantry1.pcx  126   7  01   23  19  -21  -6 // 043E x, back 4
	1 images/newgantry1.pcx  126   7  01   23  19  -17  -8 // 043F x, back 5 - mid posn
	1 images/newgantry1.pcx  126   7  01   23  19  -13 -10 // 0440 x, back 6
	1 images/newgantry1.pcx  126   7  01   23  19   -9 -12 // 0441 x, back 7
	1 images/newgantry1.pcx  126   7  01   23  13   -5 -14 // 0442 x, back 8
	1 images/newgantry1.pcx  126   7  01   23   9   -1 -16 // 0443 x, back 9
	1 images/newgantry1.pcx  126   7  01   23   5    3 -18 // 0444 x, back 10

	1 images/newgantry1.pcx  163   7  01   23   8  -26   0 // 0445 x, front 0
	1 images/newgantry1.pcx  159   7  01   23  12  -26  -2 // 0446 x, front 1
	1 images/newgantry1.pcx  155   7  01   23  16  -26  -4 // 0447 x, front 2
	1 images/newgantry1.pcx  148   7  01   23  23  -29  -6 // 0448 x, front 3
	1 images/newgantry1.pcx  148   7  01   23  23  -25  -8 // 0449 x, front 4
	1 images/newgantry1.pcx  148   7  01   23  23  -21 -10 // 044A x, front 5 - mid posn
	1 images/newgantry1.pcx  148   7  01   23  23  -17 -12 // 044B x, front 6
	1 images/newgantry1.pcx  148   7  01   23  23  -13 -14 // 044C x, front 7
	1 images/newgantry1.pcx  148   7  01   23  15   -9 -16 // 044D x, front 8
	1 images/newgantry1.pcx  148   7  01   23  11   -5 -18 // 044E x, front 9
	1 images/newgantry1.pcx  148   7  01   23   7   -1 -20 // 044F x, front 10

	1 images/newgantry1.pcx  754 166  01   54  59  -28 -31 // 0450 x, top traverse 35 - in
	1 images/newgantry1.pcx  692 166  01   54  59  -28 -31 // 0451 x, top traverse 36
	1 images/newgantry1.pcx  630 166  01   54  59  -28 -31 // 0452 x, top traverse 37
	1 images/newgantry1.pcx  568 166  01   54  59  -28 -31 // 0453 x, top traverse 38
	1 images/newgantry1.pcx  506 166  01   54  59  -28 -31 // 0454 x, top traverse 39
	1 images/newgantry1.pcx  444 166  01   54  59  -28 -31 // 0455 x, top traverse 40
	1 images/newgantry1.pcx  382 166  01   54  59  -28 -31 // 0456 x, top traverse 41
	1 images/newgantry1.pcx  320 166  01   54  59  -28 -31 // 0457 x, top traverse 42
	1 images/newgantry1.pcx  258 166  01   54  59  -28 -31 // 0458 x, top traverse 43
	1 images/newgantry1.pcx  196 166  01   54  59  -28 -31 // 0459 x, top traverse 44
	1 images/newgantry1.pcx  134 166  01   54  59  -28 -31 // 045A x, top traverse 45
	1 images/newgantry1.pcx   72 166  01   54  59  -28 -31 // 045B x, top traverse 46
	1 images/newgantry1.pcx    9 166  01   54  60  -29 -31 // 045C x, top traverse 47 - out

	1 images/newgantry1.pcx  754 231  01   54  21   -5 -19 // 045D y, top 0
	1 images/newgantry1.pcx  754 231  01   54  25   -9 -21 // 045E y, top 1
	1 images/newgantry1.pcx  754 231  01   54  29  -13 -23 // 045F y, top 2
	1 images/newgantry1.pcx  754 231  01   54  33  -17 -25 // 0460 y, top 3
	1 images/newgantry1.pcx  754 231  01   54  37  -21 -27 // 0461 y, top 4
	1 images/newgantry1.pcx  754 231  01   54  59  -25 -29 // 0462 y, top 5
	1 images/newgantry1.pcx  754 231  01   54  59  -29 -31 // 0463 y, top 6 - mid posn
	1 images/newgantry1.pcx  754 231  01   54  59  -33 -33 // 0464 y, top 7
	1 images/newgantry1.pcx  775 231  01   54  38  -16 -35 // 0465 y, top 8
	1 images/newgantry1.pcx  779 231  01   54  34  -16 -37 // 0466 y, top 9
	1 images/newgantry1.pcx  783 231  01   54  30  -16 -39 // 0467 y, top 10
	1 images/newgantry1.pcx  787 231  01   54  26  -16 -41 // 0468 y, top 11
	1 images/newgantry1.pcx  791 231  01   54  22  -16 -43 // 0469 y, top 12

	1 images/newgantry1.pcx  182   7  01   23   6   20   2 // 046A y, back 0
	1 images/newgantry1.pcx  182   7  01   23  10   16   0 // 046B y, back 1
	1 images/newgantry1.pcx  182   7  01   23  14   12  -2 // 046C y, back 2
	1 images/newgantry1.pcx  182   7  01   23  19    8  -4 // 046D y, back 3
	1 images/newgantry1.pcx  182   7  01   23  19    4  -6 // 046E y, back 4
	1 images/newgantry1.pcx  182   7  01   23  19    0  -8 // 046F y, back 5 - mid posn
	1 images/newgantry1.pcx  182   7  01   23  19   -4 -10 // 0470 y, back 6
	1 images/newgantry1.pcx  182   7  01   23  19   -8 -12 // 0471 y, back 7
	1 images/newgantry1.pcx  188   7  01   23  13   -6 -14 // 0472 y, back 8
	1 images/newgantry1.pcx  192   7  01   23   9   -6 -16 // 0473 y, back 9
	1 images/newgantry1.pcx  196   7  01   23   5   -6 -18 // 0474 y, back 10

	1 images/newgantry1.pcx  204   7  01   29   8   18  -6 // 0475 y, front 0
	1 images/newgantry1.pcx  204   7  01   29  12   14  -8 // 0476 y, front 1
	1 images/newgantry1.pcx  204   7  01   29  16   10 -10 // 0477 y, front 2
	1 images/newgantry1.pcx  204   7  01   29  25    6 -12 // 0478 y, front 3
	1 images/newgantry1.pcx  204   7  01   29  25    2 -14 // 0479 y, front 4
	1 images/newgantry1.pcx  204   7  01   29  25   -2 -16 // 047A y, front 5 - mid posn
	1 images/newgantry1.pcx  204   7  01   29  25   -6 -18 // 047B y, front 6
	1 images/newgantry1.pcx  204   7  01   29  25  -10 -20 // 047C y, front 7
	1 images/newgantry1.pcx  212   7  01   29  17   -6 -22 // 047D y, front 8
	1 images/newgantry1.pcx  216   7  01   29  13   -6 -24 // 047E y, front 9
	1 images/newgantry1.pcx  220   7  01   29   9   -6 -26 // 047F y, front 10

	1 images/newgantry1.pcx  754 231  01   54  59  -29 -31 // 0480 y, top traverse 35 - in
	1 images/newgantry1.pcx  692 231  01   54  59  -29 -31 // 0481 y, top traverse 36
	1 images/newgantry1.pcx  630 231  01   54  59  -29 -31 // 0482 y, top traverse 37
	1 images/newgantry1.pcx  568 231  01   54  59  -29 -31 // 0483 y, top traverse 38
	1 images/newgantry1.pcx  506 231  01   54  59  -29 -31 // 0484 y, top traverse 39
	1 images/newgantry1.pcx  444 231  01   54  59  -29 -31 // 0485 y, top traverse 40
	1 images/newgantry1.pcx  382 231  01   54  59  -29 -31 // 0486 y, top traverse 41
	1 images/newgantry1.pcx  320 231  01   54  59  -29 -31 // 0487 y, top traverse 42
	1 images/newgantry1.pcx  258 231  01   54  59  -29 -31 // 0488 y, top traverse 43
	1 images/newgantry1.pcx  196 231  01   54  59  -29 -31 // 0489 y, top traverse 44
	1 images/newgantry1.pcx  134 231  01   54  59  -29 -31 // 048A y, top traverse 45
	1 images/newgantry1.pcx   72 231  01   54  59  -29 -31 // 048B y, top traverse 46
	1 images/newgantry1.pcx    9 231  01   54  60  -29 -31 // 048C y, top traverse 47 - out

	1 * 1	02 04
		00 // ID
		00 01
		\w0


// frame     : current frame of animation (0 to 243)
// a_frame   : adjusted frame number for direction change (0 to 121, 121 to 0)
// t_frame   : frame number for tile (0 to 46)

// Frames
// frame:       0  1  2 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 37 38 39 40 41 42 43 44 ... 53 54 55 56 57 58 59 60 61 62 63 64 65 ...
// t_frame t0: 23 24 25 ... 37 38 39 40 41 42 43 44 45 46
//         t1:                        0  1  2  3  4  5  6  7  8  9 10 11 ... 20 21 22 23 24 25 26 27 ... 36 37 38 39 40 41 42 43 44 45 46
//         t2:                                                                                                        0  1  2  3  4  5  6  7  8 ...

// t1 movement:                         |  along platform   | -  -|   traverse out   | -  -|   traverse in    | -  -| along platform |
// t1 sprite offset (top):               0  1  2  3  4  5  6  6  6 35 36 ... 45 46 47 47 47 47 46 45 ... 36 35  6  6  7  8  9 10 11 12
// t1 visible (top):                  0  1  1  1  1  1  1  1  1  1  1  1 ...  1  1  1  1  1  1  1  1 ...  1  1  1  1  1  1  1  1  1  1  0
// t1 sprite offset (side):                 0  1  2  3  4  5  5  5  5  5 ...  5  5  5  5  5  5  5  5 ...  5  5  5  5  6  7  8  9 10
// t1 visible (side):                 0  0  1  1  1  1  1  1  1  1  1  1 ...  1  1  1  1  1  1  1  1 ...  1  1  1  1  1  1  1  1  1  0  0

	// Test variable 10 for real sprites
	1 * 1	02 04 1B // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx0080 04 04 // ground overlay sprites
		\wx0000 // crane sprites

// Assign register values for sprite layout
// ----------------------------------------
	// Get animation frame of south tile
	1 * 1	02 04 0A // ID
		81 41 // platform info and relative position
		24 0F // position along platform from south
		\2rst
		7B 66 // animation frame of nearby tile using position from south as parameter
		00 FF
		00 // return frame
		\wx8000

	// Calculate a_frame for reverse movement
	1 * 1	02 04 50 // ID
		81 1A // all bits on
		20 \b243 // max_frame
		\2-
		7D 25 // read register for frame of south tile
		00 FF
		00 // return a_frame = max_frame - frame
		\wx8000

	// Set a_frame to frame for forward movement
	1 * 1	02 04 51 // ID
		81
		7D 25 // read register for frame of south tile
		00 FF
		00 // return a_frame = frame
		\wx8000

	// Select movement direction
	1 * 1	02 04 52 // ID
		81 7E 0A // animation frame - south tile
		20 FF
		\2sto 1A
		00 25 // store in register to prevent multiple calls to frame of nearby tile
		01
		\wx0051 \b0 \b121 // frames 0 to 121
		\wx0050 // frames 122 to max

	// Calculate t_frame {t_frame = (a_frame + 23) - (p_pos * 40)}
	1 * 1	02 04 53 // ID
		85 1A // all bits on
		20 \wx0000
		\2-
		41 // platform info and relative position
		24 \wx000F // position along platform from south
		\2*
		1A // all bits on
		20 \w40 // val * 40
		\2+
		7E 52 // get a_frame
		20 \wxFFFF
		\2+
		1A // all bits on
		20 \w23 // val + 23
		\2> // result = max(val1, val2)
		1A // all bits on
		20 \w0 // result is capped at min 0
		\2< // result = min(val1, val2)
		1A // all bits on
		00 \w46 // result is capped at max 46
		00 // return t_frame
		\wx8000


// Top part sprite offsets
	// Move along platform - return {t_frame - 1}
	1 * 1	02 04 54 // ID
		81
		7D 21 // read register for t_frame
		20 FF
		\2-
		1A // all bits on
		20 \b1 // val - 1
		\2> // result = max(val1, val2)
		1A // all bits on
		00 \b0 // result is capped at min 0
		00 // return sprite offset
		\wx8000

	// Move along platform - return {t_frame - 33}
	1 * 1	02 04 55 // ID
		81
		7D 21 // read register for t_frame
		20 FF
		\2-
		1A // all bits on
		20 \b33 // val - 33
		\2< // result = min(val1, val2)
		1A // all bits on
		00 \b12 // result is capped at max 12
		00 // return sprite offset
		\wx8000

	// Sideways movement (traverse out) - return {(t_frame - 10) + 35}
	//                                         = {t_frame + 25}
	1 * 1	02 04 56 // ID
		81
		7D 21 // read register for t_frame
		20 FF
		\2+
		1A // all bits on
		00 \b25 // val + 25
		00 // return sprite offset
		\wx8000

	// Sideways movement (traverse in) - return {(37 - t_frame) + 35}
	//                                        = {72 - t_frame}
	1 * 1	02 04 57 // ID
		81 1A // all bits on
		20 \b72 // val = 72
		\2-
		7D 21 // read register for t_frame
		00 FF
		00 // return sprite offset
		\wx8000


// Side sprite offsets
	// Move along platform - return {t_frame - 2}
	1 * 1	02 04 66 // ID
		81
		7D 21 // read register for t_frame
		20 FF
		\2-
		1A // all bits on
		20 \b2 // val - 2
		\2> // result = max(val1, val2)
		1A // all bits on
		00 \b0 // result is capped at min 0
		00 // return sprite offset
		\wx8000

	// Move along platform - return {t_frame - 34}
	1 * 1	02 04 67 // ID
		81
		7D 21 // read register for t_frame
		20 FF
		\2-
		1A // all bits on
		20 \b34 // val - 34
		\2< // result = min(val1, val2)
		1A // all bits on
		00 \b10 // result is capped at max 10
		00 // return sprite offset
		\wx8000


// Side sprite selection
	// Select sprite offset for sides
	1 * 1	02 04 65 // ID
		81
		7E 53 // get tile frame (0 to 46)
		20 FF
		\2sto 1A
		00 21 // store in register to prevent calculating t_frame multiple times
		02
		\wx0066 \b0 \b7  // t_frame 0 to 7 - move along platform - {t_frame - 2}
		\wx8005 \b8 \b39 // t_frame 8 to 39 - pause
		\wx0067          // t_frame 40 to max - move along platform - {t_frame - 34}

	// Check for animated tile
	1 * 1	02 04 64 // ID
		81 41 // platform info and relative position
		04 0F // position along platform from south
		01
		\wx0065 00 03 // if valid animation tile
		\wx8000 // hide

	// Hide sprite side
	1 * 1	02 04 69 // ID
		81
		7D 21 // read register for t_frame
		00 FF
		01
		\wx8001 \b2 \b44 // t_frame 2 to 44 - show
		\wx8000 // hide

	// Check for animated tile
	1 * 1	02 04 68 // ID
		81 41 // platform info and relative position
		04 0F // position along platform from south
		01
		\wx0069 00 03 // if valid animation tile
		\wx8000 // hide


// Top part sprite selection
	// Hide sprite top
	1 * 1	02 04 63 // ID
		81
		7D 21 // read register 21 for t_frame
		00 FF
		01
		\wx8001 \b1 \b45 // t_frame 1 to 45 - show
		\wx8000 // hide

	// Check for animated tile
	1 * 1	02 04 62 // ID
		81 41 // platform info and relative position
		04 0F // position along platform from south
		01
		\wx0063 00 03 // if valid animation tile
		\wx8000 // hide

	// Select sprite offset for top
	1 * 1	02 04 61 // ID
		81
		7D 21 // read register for t_frame
		00 FF
		06
		\wx0054 \b0 \b7   // t_frame 0 to 7 - move along platform - {t_frame - 1}
		\wx8006 \b8 \b9   // t_frame 8 to 9 - pause
		\wx0056 \b10 \b22 // t_frame 10 to 22 - move out (traverse) - {(t_frame - 10) + 35}
		\wx802F \b23 \b24 // t_frame 23 to 24 - pause
		\wx0057 \b25 \b37 // t_frame 25 to 37 - move in (traverse) - {(37 - t_frame) + 35}
		\wx8006 \b38 \b39 // t_frame 38 to 39 - pause
		\wx0055           // t_frame 40 to max - move along platform - {t_frame - 33}

	// Check for animated tile
	1 * 1	02 04 60 // ID
		81 41 // platform info and relative position
		04 0F // position along platform from south
		01
		\wx0061 00 03 // if valid animation tile
		\wx8000 // hide


// Selection of recolour sprite
	1 * 1	02 04 6A // ID
		85
		7F 10 // read parameter for recolour sprite base
		00 \wx7FFF // 1st recolour sprite needs no offset
		00
		\wx8000

	1 * 1	02 04 6B // ID
		85
		7F 10 // read parameter for recolour sprite base
		20 \wx7FFF
		\2+
		1A // all bits on
		00 \w1 // add offset of 2nd recolour sprite
		00
		\wx8000

	1 * 1	02 04 6C // ID
		85
		7F 10 // read parameter for recolour sprite base
		20 \wx7FFF
		\2+
		1A // all bits on
		00 \w2 // add offset of 3rd recolour sprite
		00
		\wx8000

	// Random colours
	1 * 1	02 04 02 // ID
		80
		00 // don't re-randomise
		00 // use bits 0 and 1
		04
		\wx8000
		\wx006A
		\wx006B
		\wx006C


//@@WARNING DISABLE 100
//@@WARNING DISABLE 170

	1 * 1	02 04 15 // ID
		85
		7E 02 // get random colours
		20 \wx7FFF
		\2sto 1A
		20 \wx0012 // store in register - recolour offset
		\2rst
		7E 64 // get sprite offset for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		7E 60 // get sprite offset for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		7E 68 // get hide/show flag for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2rst
		7E 62 // get hide/show flag for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0002 // store in register- show crane top flag
		\2rst
		7E BE // get normal/snow/desert offset
		20 \wx7FFF
		\2+
		7E BD // add monorail/maglev offset
		20 \wx00FF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

//@@WARNING ENABLE 170
//@@WARNING ENABLE 100


// Callback 140 - Animation control
// --------------------------------
	1 * 1	02 04 5B // ID
		81 18 // extra callback info - reason for call
		00 FF
		02
		\wx80FE 03 03 // vehicle enters station - start
		\wx80FF 04 04 // vehicle leaves station - stop
		\wx80FD


// Callback 141 - Next animation frame
// --------------------------------
	// Calculate new frame for reverse movement
	1 * 1	02 04 5D // ID
		85 1A // all bits on
		20 \w243 // max_frame = 243
		\2-
		4A // animation frame
		00 \wx00FF
		00 // return new_frame = max_frame - frame
		\wx8000

	// Animation frame control - determine point to reverse direction
	// {max frame = (plat_len - 1) * 40)}
	1 * 1	02 04 5E // ID
		85 41 // platform info and relative position
		30 \wx000F // platform length
		\2< // result = min(val1, val2)
		1A // all bits on
		20 \w4 // result is capped at max 4
		\2-
		1A // all bits on
		20 \w1 // val - 1
		\2*
		1A // all bits on
		20 \w40 // val * 40 - gives max frame for this platform length
		\2-
		4A // animation frame
		00 \wx00FF // subtract animation frame from max frame
		01
		\wx005D \w0 \w0 // if animation frame = max frame, set new frame
		\wx80FE // continue

	// Next animation frame
	1 * 1	02 04 5C // ID
		81 41 // platform info and relative position
		04 0F // position along platform from south
		01
		\wx005E 00 00 // if most southerly tile
		\wx80FE // continue

// Callback 142 - Animation speed
// ------------------------------
	1 * 1	02 04 5F // ID
		81 7E 52 // get a_frame (0 to 121)
		00 FF
		04
		\wx8003 \b0 \b14    // a_frame 0 to 14 - move in/out (traverse)
		\wx8003 \b27 \b54   // a_frame 27 to 54 - move in/out (traverse)
		\wx8003 \b67 \b94   // a_frame 67 tp 94 - move in/out (traverse)
		\wx8003 \b107 \b121 // a_frame 107 to 121 - move in/out (traverse)
		\wx8005             // else - move along platform

// ----------------------------------------

	// Check for availability
	1 * 1	02 04 0C // ID
		81 01 // current year
		00 FF
		01
		\wx8000 \b0 \b1960 // do not allow build before 1960
		\wx8001

	1 * 1	02 04 10 // ID
		85 0C // callback
		00 \wxFFFF
		04
		\wx8000 \wx0014 \wx0014 // sprite layout
		\wx005B \wx0140 \wx0140 // animation control
		\wx005C \wx0141 \wx0141 // animation frame
		\wx005F \wx0142 \wx0142 // animation speed
		\wx0015 // real sprites

	// For purchase list
	1 * 1	02 04 11 // ID
		85 0C // callback
		00 \wxFFFF
		02
		\wx000C \wx0013 \wx0013 // date availability
		\wx8002 \wx0014 \wx0014 // sprite layout (crane at tile centre)
		\wx001B // real sprites

	1 * 1	03 04
		01 GANTRY_CRANE_N
		01
		FF \wx0011 // purchase
		\wx0010


	1 * 1	00 04 0B 01 GANTRY_CRANE_N_NT
		08 "ISRI"

		// Sprite layout
		1A 02
			// 00 (x)
			44
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042F \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000843A \wx0007 // crane back
			00 00 00 // x/y/z offset
			10 05 0F // x/y/z extent
			01 05 12 // registers
			\dx80008445 \wx0007 // crane front
			00 0B 00 // x/y/z offset
			10 05 0F // x/y/z extent
			01 05 12 // registers
			\dx8000842D \wx0007 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent
			02 06 12 // registers

			// 01 (y)
			44
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx80000430 \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000846A \wx0007 // crane back
			00 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			01 05 12 // registers
			\dx80008475 \wx0007 // crane front
			0B 00 00 // x/y/z offset
			05 10 0F // x/y/z extent
			01 05 12 // registers
			\dx8000845D \wx0007 // crane top
			00 00 0F // x/y/z offset
			10 10 23 // x/y/z extent
			02 06 12 // registers


		0C FE // only allow 1 platform
		0D F1 // disallow platform length 1 and > 4

		14 FF // wires (none)
		11 00 // pylon placement (none)

		15 FF // prevent trains entering the tile

		16 \wx01F3 // animation info 244 frames looping
		17 05      // animation speed 2^5 ticks per frame (~800ms), changed by callback 142
		18 \wx0006 // animation triggers - cargo arrives (2), cargo removed (4)

		0B 0F // use callback to determine date availability (1), layout (2), animation frame (4) and animation speed (8)


	// Test variable 10 for real sprites
	1 * 1	02 04 1B // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx0080 04 04 // ground overlay sprites
		\wx0000 // crane sprites

// Assign register values for sprite layout
// ----------------------------------------

//@@WARNING DISABLE 100
//@@WARNING DISABLE 170

	1 * 1	02 04 15 // ID
		85
		7E 02 // get random recolour sprites
		20 \wx7FFF
		\2sto 1A
		20 \wx0012 // store in register - recolour sprite
		\2rst
		7E 64 // get sprite offset for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		7E 60 // get sprite offset for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		7E 68 // get hide/show flag for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2rst
		7E 62 // get hide/show flag for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0002 // store in register - show crane top flag
		\2rst
		7E BF // get normal/snow/desert offset
		20 \wx7FFF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

	// Purchase
	1 * 1	02 04 16 // ID
		85
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0012 // store in register - recolour offset
		\2rst
		1A // all bits on
		20 \w5 // val = 5
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		1A // all bits on
		20 \w6 // val = 6
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		1A // all bits on
		20 \w1 // val = 1
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2sto 1A
		20 \wx0002 // store in register - show crane top flag
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

//@@WARNING ENABLE 170
//@@WARNING ENABLE 100


// Callback 140 - Animation control
// --------------------------------
	1 * 1	02 04 5B // ID
		81 18 // extra callback info - reason for call
		00 FF
		02
		\wx80FE 01 01 // cargo arrives - start
		\wx80FF 02 02 // cargo completely taken - stop
		\wx80FD // do nothing

// --------------------------------

	1 * 1	02 04 10 // ID
		85 0C // callback
		00 \wxFFFF
		04
		\wx8000 \wx0014 \wx0014 // sprite layout
		\wx005B \wx0140 \wx0140 // animation control
		\wx005C \wx0141 \wx0141 // animation frame
		\wx005F \wx0142 \wx0142 // animation speed
		\wx0015 // real sprites

	// For purchase list
	1 * 1	02 04 11 // ID
		85 0C // callback
		00 \wxFFFF
		02
		\wx000C \wx0013 \wx0013 // date availability
		\wx8000 \wx0014 \wx0014 // sprite layout (crane at tile centre)
		\wx0016 // real sprites

	1 * 1	03 04
		01 GANTRY_CRANE_N_NT
		01
		FF \wx0011 // purchase
		\wx0010


	1 * 1	00 04 0A 01 GANTRY_CRANE_S
		08 "ISRI"
		0A GANTRY_CRANE_N // copy sprite layout

		0C FE // only allow 1 platform
		0D F1 // disallow platform length 1 and > 4

		14 FF // wires (none)
		11 00 // pylon placement (none)

		16 \wx01F3 // animation info 244 frames looping
		17 05      // animation speed 2^5 ticks per frame (~800ms), changed by callback 142
		18 \wx0018 // animation triggers - train enters (0x08), train leaves (0x10)

		0B 0F // use callback to determine date availability (1), layout (2), animation frame (4) and animation speed (8)

	1 * 1	01 04 01 60
	1 images/newgantry1.pcx  851  47  01   47  21  -14 -12 // 042D x, top 0
	1 images/newgantry1.pcx  847  47  01   47  25  -14 -14 // 042E x, top 1
	1 images/newgantry1.pcx  843  47  01   47  29  -14 -16 // 042F x, top 2
	1 images/newgantry1.pcx  839  47  01   47  33  -14 -18 // 0430 x, top 3
	1 images/newgantry1.pcx  835  47  01   47  37  -14 -20 // 0431 x, top 4
	1 images/newgantry1.pcx  813  47  01   47  59  -32 -22 // 0432 x, top 5
	1 images/newgantry1.pcx  813  47  01   47  59  -28 -24 // 0433 x, top 6 - mid posnposn
	1 images/newgantry1.pcx  813  47  01   47  59  -24 -26 // 0434 x, top 7
	1 images/newgantry1.pcx  813  47  01   47  38  -20 -28 // 0435 x, top 8
	1 images/newgantry1.pcx  813  47  01   47  34  -16 -30 // 0436 x, top 9
	1 images/newgantry1.pcx  813  47  01   47  30  -12 -32 // 0437 x, top 10
	1 images/newgantry1.pcx  813  47  01   47  26   -8 -34 // 0438 x, top 11
	1 images/newgantry1.pcx  813  47  01   47  22   -4 -36 // 0439 x, top 12

	1 images/newgantry1.pcx   22   7  01   31   6  -24  -6 // 043A x, back 0
	1 images/newgantry1.pcx   18   7  01   31  10  -24  -8 // 043B x, back 1
	1 images/newgantry1.pcx   14   7  01   31  14  -24 -10 // 043C x, back 2
	1 images/newgantry1.pcx    9   7  01   31  19  -25 -12 // 043D x, back 3
	1 images/newgantry1.pcx    9   7  01   31  19  -21 -14 // 043E x, back 4
	1 images/newgantry1.pcx    9   7  01   31  19  -17 -16 // 043F x, back 5 - mid posnposn
	1 images/newgantry1.pcx    9   7  01   31  19  -13 -18 // 0440 x, back 6
	1 images/newgantry1.pcx    9   7  01   31  19   -9 -20 // 0441 x, back 7
	1 images/newgantry1.pcx    9   7  01   31  13   -5 -22 // 0442 x, back 8
	1 images/newgantry1.pcx    9   7  01   31   9   -1 -24 // 0443 x, back 9
	1 images/newgantry1.pcx    9   7  01   31   5    3 -26 // 0444 x, back 10

	1 images/newgantry1.pcx   47   7  01   23   8  -26   0 // 0445 x, front 0
	1 images/newgantry1.pcx   43   7  01   23  12  -26  -2 // 0446 x, front 1
	1 images/newgantry1.pcx   39   7  01   23  16  -26  -4 // 0447 x, front 2
	1 images/newgantry1.pcx   32   7  01   23  23  -29  -6 // 0448 x, front 3
	1 images/newgantry1.pcx   32   7  01   23  23  -25  -8 // 0449 x, front 4
	1 images/newgantry1.pcx   32   7  01   23  23  -21 -10 // 044A x, front 5 - mid posn posn
	1 images/newgantry1.pcx   32   7  01   23  23  -17 -12 // 044B x, front 6
	1 images/newgantry1.pcx   32   7  01   23  23  -13 -14 // 044C x, front 7
	1 images/newgantry1.pcx   32   7  01   23  15   -9 -16 // 044D x, front 8
	1 images/newgantry1.pcx   32   7  01   23  11   -5 -18 // 044E x, front 9
	1 images/newgantry1.pcx   32   7  01   23   7   -1 -20 // 044F x, front 10

	1 images/newgantry1.pcx  751  47  01   47  59  -28 -24 // 0450 x, top 35 - in
	1 images/newgantry1.pcx  690  47  01   47  59  -28 -24 // 0451 x, top 36
	1 images/newgantry1.pcx  628  47  01   47  59  -28 -24 // 0452 x, top 37
	1 images/newgantry1.pcx  566  47  01   47  59  -28 -24 // 0453 x, top 38
	1 images/newgantry1.pcx  504  47  01   47  59  -28 -24 // 0454 x, top 39
	1 images/newgantry1.pcx  442  47  01   47  59  -28 -24 // 0455 x, top 40
	1 images/newgantry1.pcx  381  47  01   47  59  -28 -24 // 0456 x, top 41
	1 images/newgantry1.pcx  319  47  01   47  59  -28 -24 // 0457 x, top 42
	1 images/newgantry1.pcx  257  47  01   47  59  -28 -24 // 0458 x, top 43
	1 images/newgantry1.pcx  195  47  01   47  59  -28 -24 // 0459 x, top 44
	1 images/newgantry1.pcx  133  47  01   47  59  -28 -24 // 045A x, top 45
	1 images/newgantry1.pcx   71  47  01   48  59  -28 -24 // 045B x, top 46
	1 images/newgantry1.pcx    9  47  01   49  59  -28 -24 // 045C x, top 47 - out

	1 images/newgantry1.pcx  815 107  01   47  21   -5 -12 // 045D y, top 0
	1 images/newgantry1.pcx  815 107  01   47  25   -9 -14 // 045E y, top 1
	1 images/newgantry1.pcx  815 107  01   47  29  -13 -16 // 045F y, top 2
	1 images/newgantry1.pcx  815 107  01   47  33  -17 -18 // 0460 y, top 3
	1 images/newgantry1.pcx  815 107  01   47  37  -21 -20 // 0461 y, top 4
	1 images/newgantry1.pcx  815 107  01   47  59  -25 -22 // 0462 y, top 5
	1 images/newgantry1.pcx  815 107  01   47  59  -29 -24 // 0463 y, top 6 - mid posnposn
	1 images/newgantry1.pcx  815 107  01   47  59  -33 -26 // 0464 y, top 7
	1 images/newgantry1.pcx  836 107  01   47  38  -16 -28 // 0465 y, top 8
	1 images/newgantry1.pcx  840 107  01   47  34  -16 -30 // 0466 y, top 9
	1 images/newgantry1.pcx  844 107  01   47  30  -16 -32 // 0467 y, top 10
	1 images/newgantry1.pcx  848 107  01   47  26  -16 -34 // 0468 y, top 11
	1 images/newgantry1.pcx  852 107  01   47  22  -16 -36 // 0469 y, top 12

	1 images/newgantry1.pcx   66   7  01   23   8   20   2 // 046A y, back 0
	1 images/newgantry1.pcx   66   7  01   23  12   16   0 // 046B y, back 1
	1 images/newgantry1.pcx   66   7  01   23  16   12  -2 // 046C y, back 2
	1 images/newgantry1.pcx   66   7  01   23  23    8  -4 // 046D y, back 3
	1 images/newgantry1.pcx   66   7  01   23  23    4  -6 // 046E y, back 4
	1 images/newgantry1.pcx   66   7  01   23  23    0  -8 // 046F y, back 5 - mid posnposn
	1 images/newgantry1.pcx   66   7  01   23  23   -4 -10 // 0470 y, back 6
	1 images/newgantry1.pcx   66   7  01   23  23   -8 -12 // 0471 y, back 7
	1 images/newgantry1.pcx   74   7  01   23  15   -4 -14 // 0472 y, back 8
	1 images/newgantry1.pcx   78   7  01   23  11   -4 -16 // 0473 y, back 9
	1 images/newgantry1.pcx   82   7  01   23   7   -4 -18 // 0474 y, back 10

	1 images/newgantry1.pcx   92   7  01   23   8   20   0 // 0475 y, front 0
	1 images/newgantry1.pcx   92   7  01   23  12   16  -2 // 0476 y, front 1
	1 images/newgantry1.pcx   92   7  01   23  16   12  -4 // 0477 y, front 2
	1 images/newgantry1.pcx   92   7  01   23  23    8  -6 // 0478 y, front 3
	1 images/newgantry1.pcx   92   7  01   23  23    4  -8 // 0479 y, front 4
	1 images/newgantry1.pcx   92   7  01   23  23    0 -10 // 047A y, front 5 - mid posn posn
	1 images/newgantry1.pcx   92   7  01   23  23   -4 -12 // 047B y, front 6
	1 images/newgantry1.pcx   92   7  01   23  23   -8 -14 // 047C y, front 7
	1 images/newgantry1.pcx  100   7  01   23  15   -4 -16 // 047D y, front 8
	1 images/newgantry1.pcx  104   7  01   23  11   -4 -18 // 047E y, front 9
	1 images/newgantry1.pcx  108   7  01   23   7   -4 -20 // 047F y, front 10

	1 images/newgantry1.pcx  753 107  01   47  59  -29 -24 // 0480 y, top 35 - in
	1 images/newgantry1.pcx  691 107  01   47  59  -29 -24 // 0481 y, top 36
	1 images/newgantry1.pcx  629 107  01   47  59  -29 -24 // 0482 y, top 37
	1 images/newgantry1.pcx  567 107  01   47  59  -29 -24 // 0483 y, top 38
	1 images/newgantry1.pcx  505 107  01   47  59  -29 -24 // 0484 y, top 39
	1 images/newgantry1.pcx  443 107  01   47  59  -29 -24 // 0485 y, top 40
	1 images/newgantry1.pcx  381 107  01   47  59  -29 -24 // 0486 y, top 41
	1 images/newgantry1.pcx  319 107  01   47  59  -29 -24 // 0487 y, top 42
	1 images/newgantry1.pcx  257 107  01   47  59  -29 -24 // 0488 y, top 43
	1 images/newgantry1.pcx  195 107  01   47  59  -29 -24 // 0489 y, top 44
	1 images/newgantry1.pcx  133 107  01   47  59  -29 -24 // 048A y, top 45
	1 images/newgantry1.pcx   71 107  01   48  59  -29 -24 // 048B y, top 46
	1 images/newgantry1.pcx    9 107  01   49  59  -29 -24 // 048C y, top 47 - out

	1 * 1	02 04
		00 // ID
		00 01
		\w0


	// Test variable 10 for real sprites
	1 * 1	02 04 1B // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx0080 04 04 // ground overlay sprites
		\wx0000 // crane sprites

// Assign register values for sprite layout
// ----------------------------------------

//@@WARNING DISABLE 100
//@@WARNING DISABLE 170

	1 * 1	02 04 15 // ID
		85
		7E 02 // get random colours
		20 \wx7FFF
		\2sto 1A
		20 \wx0012 // store in register - recolour offset
		\2rst
		7E 64 // get sprite offset for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		7E 60 // get sprite offset for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		7E 68 // get hide/show flag for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2rst
		7E 62 // get hide/show flag for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0002 // store in register - show crane top flag
		\2rst
		7E BE // get normal/snow/desert offset
		20 \wx7FFF
		\2+
		7E BD // add monorail/maglev offset
		20 \wx00FF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

//@@WARNING ENABLE 170
//@@WARNING ENABLE 100


// Callback 140 - Animation control
// --------------------------------
	1 * 1	02 04 5B // ID
		81 18 // extra callback info - reason for call
		00 FF
		02
		\wx80FE 03 03 // vehicle enters station - start
		\wx80FF 04 04 // vehicle leaves station - stop
		\wx80FD

// --------------------------------

	1 * 1	02 04 10 // ID
		85 0C // callback
		00 \wxFFFF
		04
		\wx8000 \wx0014 \wx0014 // sprite layout
		\wx005B \wx0140 \wx0140 // animation control
		\wx005C \wx0141 \wx0141 // animation frame
		\wx005F \wx0142 \wx0142 // animation speed
		\wx0015 // real sprites

	// For purchase list
	1 * 1	02 04 11 // ID
		85 0C // callback
		00 \wxFFFF
		02
		\wx000C \wx0013 \wx0013 // date availability
		\wx8002 \wx0014 \wx0014 // sprite layout (crane at tile centre)
		\wx001B // real sprites

	1 * 1	03 04
		01 GANTRY_CRANE_S
		01
		FF \wx0011 // purchase
		\wx0010


	1 * 1	00 04 0B 01 GANTRY_CRANE_S_NT
		08 "ISRI"
		0A GANTRY_CRANE_N_NT // copy sprite layout

		0C FE // only allow 1 platform
		0D F1 // disallow platform length 1 and > 4

		11 00 // pylon placement (none)
		14 FF // wires (none)

		15 FF // prevent trains entering the tile

		16 \wx01F3 // animation info 244 frames looping
		17 05      // animation speed 2^5 ticks per frame (~800ms), changed by callback 142
		18 \wx0006 // animation triggers - cargo arrives (2), cargo removed (4)

		0B 0F // use callback to determine date availability (1), layout (2), animation frame (4) and animation speed (8)


	// Test variable 10 for real sprites
	1 * 1	02 04 1B // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx0080 04 04 // ground overlay sprites
		\wx0000 // crane sprites

// Assign register values for sprite layout
// ----------------------------------------

//@@WARNING DISABLE 100
//@@WARNING DISABLE 170

	1 * 1	02 04 15 // ID
		85
		7E 02 // get random colours
		20 \wx7FFF
		\2sto 1A
		20 \wx0012 // store in register - recolour offset
		\2rst
		7E 64 // get sprite offset for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		7E 60 // get sprite offset for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		7E 68 // get hide/show flag for sides
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2rst
		7E 62 // get hide/show flag for top
		20 \wx7FFF
		\2sto 1A
		20 \wx0002 // store in register - show crane top flag
		\2rst
		7E BF // get normal/snow/desert offset
		20 \wx7FFF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

	// Purchase
	1 * 1	02 04 16 // ID
		85
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0012 // store in register - recolour offset
		\2rst
		1A // all bits on
		20 \w5 // val = 5
		\2sto 1A
		20 \wx0005 // store in register - side sprite offset
		\2rst
		1A // all bits on
		20 \w6 // val = 6
		\2sto 1A
		20 \wx0006 // store in register - top sprite offset
		\2rst
		1A // all bits on
		20 \w1 // val = 1
		\2sto 1A
		20 \wx0001 // store in register - show crane sides flag
		\2sto 1A
		20 \wx0002 // store in register - show crane top flag
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001B \w0 \w0
		\wx001B

//@@WARNING ENABLE 170
//@@WARNING ENABLE 100


// Callback 140 - Animation control
// --------------------------------
	1 * 1	02 04 5B // ID
		81 18 // extra callback info - reason for call
		00 FF
		02
		\wx80FE 01 01 // cargo arrives - start
		\wx80FF 02 02 // cargo completely taken - stop
		\wx80FD // do nothing

// --------------------------------


	1 * 1	02 04 10 // ID
		85 0C // callback
		00 \wxFFFF
		04
		\wx8000 \wx0014 \wx0014 // sprite layout
		\wx005B \wx0140 \wx0140 // animation control
		\wx005C \wx0141 \wx0141 // animation frame
		\wx005F \wx0142 \wx0142 // animation speed
		\wx0015 // real sprites

	// For purchase list
	1 * 1	02 04 11 // ID
		85 0C // callback
		00 \wxFFFF
		02
		\wx000C \wx0013 \wx0013 // date availability
		\wx8000 \wx0014 \wx0014 // sprite layout (crane at tile centre)
		\wx0016 // real sprites

	1 * 1	03 04
		01 GANTRY_CRANE_S_NT
		01
		FF \wx0011 // purchase
		\wx0010
