	1 * 1	01 04 01 0C
	1 images/vehicles.pcx        44  104  01   23  18   -6 -14 // 042D x, forklift
	1 images/vehicles.pcx        21  104  01   23  18  -10 -14 // 042E y, forklift
	1 images/vehicles.pcx        79  104  01    6   9   -5   0 // 042F x, forks
	1 images/vehicles.pcx        66  104  01    6   9   -2   0 // 0430 y, forks
	1 images/vehicles.pcx       220  104  01   22  13   -6  -8 // 0431 forklift turn blue
	1 images/vehicles.pcx       201  104  01   22  13   -6  -8 // 0432 forklift turn white
	1 images/vehicles.pcx       111  104  09   11  13   -9  -4 // 0433 x, container blue start
	1 images/vehicles.pcx        93  104  09   11  13   -2  -4 // 0434 y, container white start
	1 images/vehicles.pcx       147  104  09   11  13   -2  -4 // 0435 x, container blue stacked
	1 images/vehicles.pcx       129  104  09   11  13   -9  -4 // 0436 y, container white stacked
	1 images/vehicles.pcx       183  104  09   11  13   -2  -4 // 0437 x, container yellow static
	1 images/vehicles.pcx       165  104  09   11  13   -9  -4 // 0438 y, container red static

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


	1 * 1	00 04 0B 01 FORKLIFT_L
		08 "ISRP"

		// Sprite layout
		1A 06
			// 00 (x) - move forward/lift/back
			45
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000437 \wx0001 // container yellow static
			00 0A 00 // x/y/z offset
			02 05 05 // x/y/z extent
			01 // register - show
			\dx80000433 \wx0031 // container blue start
			0A 00 00 // x/y/z offset
			05 02 05 // x/y/z extent
			01 05 06 07 // registers - show, x, y, z
			\dx8000042F \wx0031 // forks
			0B 00 00 // x/y/z offset
			04 02 01 // x/y/z extent
			02 08 09 0A // registers - show, x, y, z
			\dx8000042D \wx0010 // forklift
			0B 02 00 // x/y/z offset
			04 07 12 // x/y/z extent
			08 09 // registers - x, y

			// 01 (y) - move forward/lift/back
			45
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000438 \wx0001 // container red static
			0A 00 00 // x/y/z offset
			05 02 05 // x/y/z extent
			01 // register - show
			\dx80000434 \wx0031 // container white start
			00 0A 00 // x/y/z offset
			02 05 05 // x/y/z extent
			01 06 05 07 // registers - show, x, y, z
			\dx80000430 \wx0031 // forks
			00 0B 00 // x/y/z offset
			02 04 01 // x/y/z extent
			02 09 08 0A // registers - show, x, y, z
			\dx8000042E \wx0010 // forklift
			02 0B 00 // x/y/z offset
			07 04 12 // x/y/z extent
			09 08 // registers - x, y

			// 02 (x) - turn
			43
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000437 \wx0001 // container yellow static
			00 0A 00 // x/y/z offset
			02 05 05 // x/y/z extent
			01 // register - show
			\dx80000431 \wx0010 // forklift
			08 08 00 // x/y/z offset
			08 08 12 // x/y/z extent
			08 09 // registers - x, y

			// 03 (y) - turn
			43
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000438 \wx0001 // container red static
			0A 00 00 // x/y/z offset
			05 02 05 // x/y/z extent
			01 // register - show
			\dx80000432 \wx0010 // forklift
			08 08 00 // x/y/z offset
			08 08 12 // x/y/z extent
			09 08 // registers - x, y

			// 04 (x) - move forward/lower/back
			45
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000437 \wx0001 // container yellow static
			00 0A 00 // x/y/z offset
			02 05 05 // x/y/z extent
			01 // register - show
			\dx80000435 \wx0031 // container blue stacked
			00 0A 05 // x/y/z offset
			02 05 05 // x/y/z extent
			01 05 06 07 // registers - show, x, y, z
			\dx80000430 \wx0031 // forks
			00 0B 00 // x/y/z offset
			02 04 01 // x/y/z extent
			02 08 09 0A // registers - show, x, y, z
			\dx8000042E \wx0010 // forklift
			02 0B 00 // x/y/z offset
			07 04 12 // x/y/z extent
			08 09 // registers - x, y

			// 05 (y) - move forward/lower/back
			45
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000438 \wx0001 // container red static
			0A 00 00 // x/y/z offset
			05 02 05 // x/y/z extent
			01 // register - show
			\dx80000436 \wx0031 // container white stacked
			0A 00 05 // x/y/z offset
			05 02 05 // x/y/z extent
			01 06 05 07 // registers - show, x, y, z
			\dx8000042F \wx0031 // forks
			0B 00 00 // x/y/z offset
			04 02 01 // x/y/z extent
			02 09 08 0A // registers - show, x, y, z
			\dx8000042D \wx0010 // forklift
			0B 02 00 // x/y/z offset
			04 07 12 // x/y/z extent
			09 08 // registers - x, y


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

		// Only allow a 1 x 1 layout
		0C FE
		0D FE

		11 00 // no pylons
		14 FF // no wires

		15 FF // prevent trains entering the tile from any direction

		16 \wx015B // animation info 92 frames looping
		17 03      // animation speed 2^3 ticks per frame
		18 \wx0003 // animation triggers - build (1), cargo arrives (2)


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

	// Calculate a_frame for reverse movement
	1 * 1	02 04 50 // ID
		81 1A // all bits on
		20 \b91 // max_frame
		\2-
		4A // animation frame
		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 4A // animation frame
		00 FF
		00 // return a_frame = frame
		\wx8000

	// Select movement direction
	1 * 1	02 04 52 // ID
		81 4A // animation frame
		00 FF
		01
		\wx0051 \b0 \b45 // frames 0 to 45
		\wx0050 // frames 46 to max


	1 * 1	02 04 7A // ID
		81
		1A // all bits on
		20 \b29 // val = 29
		\2-
		7D 21 // read register for a_frame
		00 FF
		00
		\wx8000

	1 * 1	02 04 7B // ID
		81
		7D 21 // read register for a_frame
		20 FF
		\2-
		1A // all bits on
		00 \b33 // val = 33
		00
		\wx8000

	1 * 1	02 04 7C // ID
		81
		1A // all bits on
		20 \b7 // val = 7
		\2-
		7D 21 // read register for a_frame
		00 FF
		00
		\wx8000

	1 * 1	02 04 7D // ID
		81
		7D 21 // read register for a_frame
		20 FF
		\2-
		1A // all bits on
		00 \b11 // val = 11
		00
		\wx8000


	// Offset for movement x
	1 * 1	02 04 70 // ID
		81
		7E 52 // a_frame 0 to 45
		20 FF
		\2sto 1A
		00 21 // store in register to prevent calculating a_frame multiple times
		\b4
		\wx8007 \b21 \b22
		\wx007A \b23 \b28 // 06 to 01
		\wx007B \b34 \b39 // 01 to 06
		\wx8007 \b40 \b45
		\wx8000

	// Offset for movement y
	1 * 1	02 04 71 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b4
		\wx8007 \b00 \b00
		\wx007C \b01 \b06 // 06 to 01
		\wx007D \b12 \b17 // 01 to 06
		\wx8007 \b18 \b19
		\wx8000

	// Offset for forks z
	1 * 1	02 04 72 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b7
		\wx8002 \b0 \b1
		\wx8001 \b2 \b2
		\wx8005 \b35 \b40
		\wx8004 \b41 \b41
		\wx8003 \b42 \b42
		\wx8002 \b43 \b43
		\wx8001 \b44 \b44
		\wx8000

	// Show/hide flag for forks
	1 * 1	02 04 73 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b2
		\wx8001 \b0 \b5
		\wx8001 \b35 \b45
		\wx8000

	// Offset for container position x
	1 * 1	02 04 74 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b2
		\wx8007 \b21 \b22
		\wx007A \b23 \b28 // 06 to 01
		\wx8000

	// Offset for container position y
	1 * 1	02 04 75 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b2
		\wx007D \b12 \b17 // 01 to 06
		\wx8007 \b18 \b19
		\wx8000

	// Offset for container position z
	1 * 1	02 04 76 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b9
		\wx8001 \b8 \b8
		\wx8002 \b9 \b9
		\wx8003 \b10 \b10
		\wx8004 \b11 \b19
		\wx8001 \b24 \b24
		\wx8002 \b25 \b25
		\wx8003 \b26 \b30
		\wx8002 \b31 \b31
		\wx8001 \b32 \b32
		\wx8000

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

	// Set registers
	1 * 1	02 04 5A // ID
		85
		// forklift
		7E 70 // get offset for movement - x
		20 \wx7FFF
		\2sto 1A
		20 \wx0008 // store in register - x offset
		\2rst
		7E 71 // get offset for movement - y
		20 \wx7FFF
		\2sto 1A
		20 \wx0009 // store in register - y offset
		\2rst
		// forks
		7E 73 // get show/hide flag
		20 \wx7FFF
		\2sto 1A
		20 \wx0002 // store in register - show/hide flag
		\2rst
		7E 72 // get offset for movement -z
		20 \wx7FFF
		\2sto 1A
		20 \wx000A // store in register - z offset
		\2rst
		// container
		7E 74 // get offset for movement - x
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - x offset
		\2rst
		7E 75 // get offset for movement - y
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - y offset
		\2rst
		7E 76 // get offset for movement -z
		20 \wx7FFF
		\2sto 1A
		20 \wx0007 // store in register - z offset
		\2rst
		// ground
		7E BF // get normal/snow/desert offset
		20 \wx7FFF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx8000 \w0 \w0
		\wx8000

	1 * 1	02 04 53 // ID
		85
		1A // all bits on
		20 \w1 // val = 1
		\2sto 1A
		20 \wx0001 // store in register - show/hide containers flag
		\2rst
		7E 5A // set registers
		00 \w0
		01
		\wx001B \w0 \w0
		\wx001B

	1 * 1	02 04 59 // ID
		85
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0001 // store in register - show/hide containers flag
		\2rst
		7E 5A // set registers
		00 \w0
		01
		\wx001B \w0 \w0
		\wx001B

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

	1 * 1	02 04 54 // ID
		81 4A // animation frame
		00 FF
		02
		\wx0059 \b46 \b46 // empty
		\wx0059 \b0 \b0 // empty
		\wx0053 // continue

	1 * 1	02 04 58 // ID
		85
		7D 20 // read register for this cargo type
		20 \wxFFFF
		\2rst
		7B 60 // get amount of cargo waiting
		00 \wxFFFF
		01
		\wx0054 \w0 \w50 // if not much cargo
		\wx0053 // continue



	// Animation control - maybe start animation
	1 * 1	02 04 56 // ID
		81 10 // extra callback info - random bits
		00 03 // use low bits (different for each tile)
		01
		\wx80FE 00 02 // 75% chance of start
		\wx80FD // do nothing

	// Animation start/stop control
	1 * 1	02 04 57 // ID
		81 18 // extra callback info - reason for call
		00 FF
		02
		\wx8001 00 00 // build - start
		\wx0056 01 01 // cargo arrives - maybe start
		\wx80FD // do nothing


	// Animation frame
	1 * 1	02 04 55 // ID
		81 4A // animation frame
		00 FF
		02
		\wx80FF \b46 \b46 // stop
		\wx80FF \b0 \b0 // stop
		\wx80FE // continue

	1 * 1	02 04 5D // ID
		85
		7D 20 // read register for this cargo type
		20 \wxFFFF
		\2rst
		7B 60 // get amount of cargo waiting
		00 \wxFFFF
		01
		\wx0055 \w0 \w50 // if not much cargo
		\wx80FE // continue


	// Callback 14
	1 * 1	02 04 10 // ID
		81
		7E 52 // a_frame 0 to 45
		00 FF
		02
		\wx8002 \b20 \b20
		\wx8004 \b21 \b45
		\wx8000

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

// Store cargo id in register 0x20 and check for callbacks 0x14, 0x140 and 0x141
#define CCB(a, b) 1 * 1	02 04 a 85 1A 20 b 00 \2sto 1A 20 \wx0020 \2rst 0C 00 \wxFFFF 03 \wx0010 \wx0014 \wx0014 \wx0057 \wx0140 \wx0140 \wx005D \wx0141 \wx0141 \wx0058

// (ID, cargo id)
CCB(1D, 02) // mail
CCB(1E, 05) // goods
CCB(1F, 0B) // paper
CCB(20, 0C) // food
CCB(21, 0D) // fruit
CCB(22, 1E) // fish
CCB(23, 1F) // wool
CCB(24, 20) // glass
CCB(25, 21) // ceramics
CCB(26, 22) // bricks
CCB(27, 23) // vehicles
CCB(28, 2A) // building materials
CCB(29, 2B) // engineering supplies
CCB(2A, 2D) // farm supplies
CCB(2B, 30) // manufacturing supplies
CCB(2C, 31) // recyclables
CCB(2D, 32) // scrap metal
CCB(2E, 37) // sugar
CCB(2F, 38) // coffee
CCB(30, 3B) // vehicle parts

#undef CCB

	// Empty
	1 * 1	02 04 06 // ID
		85 0C // callback
		00 \wxFFFF
		03
		\wx0010 \wx0014 \wx0014 // sprite layout
		\wx0057 \wx0140 \wx0140 // animation control
		\wx0055 \wx0141 \wx0141 // animation frame - stop
		\wx0054 // real sprites

	// For purchase list
	1 * 1	02 04 02 // ID
		81 0C // callback
		00 FF
		02
		\wx000C 13 13 // date availability
		\wx8000 14 14 // sprite layout
		\wx0053 // real sprites

	1 * 1	03 04
		01 FORKLIFT_L
		15
		02 \wx001D // mail
		05 \wx001E // goods
		0B \wx001F // paper
		0C \wx0020 // food
		0D \wx0021 // fruit
		1E \wx0022 // fish
		1F \wx0023 // wool
		20 \wx0024 // glass
		21 \wx0025 // ceramics
		22 \wx0026 // bricks
		23 \wx0027 // vehicles
		2A \wx0028 // building materials
		2B \wx0029 // engineering supplies
		2D \wx002A // farm supplies
		30 \wx002B // manufacturing supplies
		31 \wx002C // recyclables
		32 \wx002D // scrap metal
		37 \wx002E // sugar
		38 \wx002F // coffee
		3B \wx0030 // vehicle parts
		FF \wx0002 // purchase list
		\wx0006 // no suitable cargo

