	1 * 1	01 04 01 0A
	1 images/vehicles.pcx       37  209  01   14  11   -3  -8 // 042D x, forklift
	1 images/vehicles.pcx       21  209  01   14  11   -6  -8 // 042E y, forklift
	1 images/vehicles.pcx       84  209  01    7   8   -3  -3 // 042F x, crate light
	1 images/vehicles.pcx       95  209  01    7   8   -3  -3 // 0430 y, crate dark
	1 images/vehicles.pcx       58  209  01    3   3   -1   1 // 0431 x, forks
	1 images/vehicles.pcx       52  209  01    3   3    0   1 // 0432 y, forks
	1 images/vehicles.pcx      107  209  01   15  24  -11  -5 // 0433 x, crates
	1 images/vehicles.pcx      135  209  01   19  28  -19  -5 // 0434 y, crates
	1 images/vehicles.pcx       66  209  01   16   5   -2  -9 // 0435 forklift turn light crate
	1 images/vehicles.pcx       75  209  01   16   5   -2  -9 // 0436 forklift turn dark crate

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


	1 * 1	00 04 0B 01 FORKLIFT_M
		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
			\dx80000433 \wx0001 // crates
			01 01 00 // x/y/z offset
			07 07 08 // x/y/z extent
			01 // register - show
			\dx8000042F \wx0031 // crate
			02 01 00 // x/y/z offset
			02 02 04 // x/y/z extent
			01 05 06 07 // registers - show, x, y, z
			\dx80000431 \wx0031 // forks
			04 01 00 // x/y/z offset
			02 02 01 // x/y/z extent
			02 08 09 0A // registers - show, x, y, z
			\dx8000042D \wx0010 // forklift
			04 03 00 // x/y/z offset
			02 04 0C // 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
			\dx80000434 \wx0001 // crates
			01 01 00 // x/y/z offset
			0B 05 08 // x/y/z extent
			01 // register - show
			\dx80000430 \wx0031 // crate
			01 02 00 // x/y/z offset
			02 02 04 // x/y/z extent
			01 06 05 07 // registers - show, x, y, z
			\dx80000432 \wx0031 // forks
			01 04 00 // x/y/z offset
			02 02 01 // x/y/z extent
			02 09 08 0A // registers - show, x, y, z
			\dx8000042E \wx0010 // forklift
			03 04 00 // x/y/z offset
			04 02 0C // 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
			\dx80000433 \wx0001 // crates
			01 01 00 // x/y/z offset
			07 07 08 // x/y/z extent
			01 // register - show
			\dx80000435 \wx0010 // forklift
			08 06 00 // x/y/z offset
			04 04 0C // 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
			\dx80000434 \wx0001 // crates
			01 01 00 // x/y/z offset
			0B 05 08 // x/y/z extent
			01 // register - show
			\dx80000436 \wx0010 // forklift
			06 08 00 // x/y/z offset
			04 04 0C // 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
			\dx80000433 \wx0001 // crates
			01 01 00 // x/y/z offset
			07 07 08 // x/y/z extent
			01 // register - show
			\dx8000042F \wx0031 // crate
			02 01 00 // x/y/z offset
			02 02 04 // x/y/z extent
			01 05 06 07 // registers - show, x, y, z
			\dx80000432 \wx0031 // forks
			02 03 00 // x/y/z offset
			02 02 01 // x/y/z extent
			02 08 09 0A // registers - show, x, y, z
			\dx8000042E \wx0010 // forklift
			04 03 00 // x/y/z offset
			04 02 0C // 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
			\dx80000434 \wx0001 // crates
			01 01 00 // x/y/z offset
			0B 05 08 // x/y/z extent
			01 // register - show
			\dx80000430 \wx0031 // crate
			01 02 00 // x/y/z offset
			02 02 04 // x/y/z extent
			01 06 05 07 // registers - show, x, y, z
			\dx80000431 \wx0031 // forks
			03 02 00 // x/y/z offset
			02 02 01 // x/y/z extent
			02 09 08 0A // registers - show, x, y, z
			\dx8000042D \wx0010 // forklift
			03 04 00 // x/y/z offset
			02 04 0C // 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 \wx0157 // animation info 88 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 \b87 // 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 \b43 // frames 0 to 43
		\wx0050 // frames 44 to max


	1 * 1	02 04 7A // ID
		81
		1A // all bits on
		20 \b30 // val = 30
		\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 \b35 // val = 35
		00
		\wx8000

	1 * 1	02 04 7C // ID
		81
		1A // all bits on
		20 \b9 // val = 9
		\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 \b16 // val = 16
		00
		\wx8000


	// Offset for movement x
	1 * 1	02 04 70 // ID
		81
		7E 52 // a_frame 0 to 43
		20 FF
		\2sto 1A
		00 21 // store in register to prevent calculating a_frame multiple times
		\b7
		\wx8007 \b00 \b21
		\wx8003 \b22 \b23
		\wx8002 \b24 \b24
		\wx8001 \b25 \b25
		\wx007A \b27 \b29 // 03 to 01
		\wx007B \b36 \b42 // 01 to 07
		\wx8007 \b43 \b43
		\wx8000

	// Offset for movement y
	1 * 1	02 04 71 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b7
		\wx8008 \b00 \b01
		\wx007C \b02 \b08 // 08 to 01
		\wx007D \b17 \b21 // 01 to 05
		\wx8003 \b22 \b23
		\wx8002 \b24 \b24
		\wx8001 \b25 \b25
		\wx8003 \b27 \b43
		\wx8000

	// Offset for forks z
	1 * 1	02 04 72 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b5
		\wx8003 \b0 \b2
		\wx8002 \b3 \b3
		\wx8001 \b4 \b4
		\wx8004 \b37 \b38
		\wx8003 \b39 \b43
		\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 \b7
		\wx8001 \b37 \b43
		\wx8000

	// Offset for crate position x
	1 * 1	02 04 74 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b4
		\wx8009 \b00 \b26
		\wx8003 \b27 \b27
		\wx8002 \b28 \b28
		\wx8001 \b29 \b29
		\wx8000

	// Offset for crate position y
	1 * 1	02 04 75 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b5
		\wx8001 \b17 \b17
		\wx8002 \b18 \b18
		\wx8003 \b19 \b19
		\wx8004 \b20 \b20
		\wx8005 \b21 \b43
		\wx8000

	// Offset for crate position z
	1 * 1	02 04 76 // ID
		81
		7D 21 // read register for a_frame
		00 FF
		\b8
		\wx8001 \b12 \b12
		\wx8002 \b13 \b13
		\wx8003 \b14 \b26
		\wx8004 \b27 \b27
		\wx8005 \b28 \b28
		\wx8006 \b29 \b32
		\wx8005 \b33 \b33
		\wx8004 \b34 \b43
		\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
		// crate
		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 crates 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 crates 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 \b44 \b44 // 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 \b44 \b44 // 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 43
		00 FF
		02
		\wx8002 \b22 \b26
		\wx8004 \b27 \b43
		\wx8000

	// Check for availability
	1 * 1	02 04 0C // ID
		81 01 // current year
		00 FF
		01
		\wx8000 \b0 \b1940 // do not allow build before 1940
		\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, 2A) // building materials
CCB(27, 2B) // engineering supplies
CCB(28, 2D) // farm supplies
CCB(29, 30) // manufacturing supplies
CCB(2A, 31) // recyclables
CCB(2B, 32) // scrap metal
CCB(2C, 37) // sugar
CCB(2D, 38) // coffee
CCB(2E, 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_M
		13
		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
		2A \wx0026 // building materials
		2B \wx0027 // engineering supplies
		2D \wx0028 // farm supplies
		30 \wx0029 // manufacturing supplies
		31 \wx002A // recyclables
		32 \wx002B // scrap metal
		37 \wx002C // sugar
		38 \wx002D // coffee
		3B \wx002E // vehicle parts
		FF \wx0002 // purchase list
		\wx0006 // no suitable cargo
