	1 * 1	00 04 07 01 FORKLIFT_PLATFORM
		08 "ISRP"

		// Sprite layout
		1A 02
			// 00 (x)
			44
			\dx000003F4 \wx0000 // ground sprite - track
			\dx8000042D \wx0040 // platform back
			00 00 00 // x/y/z offset
			10 05 03 // x/y/z extent
			04 // value for variable 10
			\dx8000842D \wx0002 // forklift
			05 01 03 // x/y/z offset
			06 02 09 // x/y/z extent
			08 // register
			\dx80000431 \wx0003 // cargo
			0A 01 80 // x/y/z offset
			03 06 // registers
			\dx8000042E \wx0040 // platform front
			00 0B 00 // x/y/z offset
			10 05 03 // x/y/z extent
			04 // value for variable 10

			// 01 (y)
			44
			\dx000003F3 \wx0000 // ground sprite - track
			\dx8000042F \wx0040 // platform back
			00 00 00 // x/y/z offset
			05 10 03 // x/y/z extent
			04 // value for variable 10
			\dx8000842F \wx0002 // forklift
			01 05 03 // x/y/z offset
			02 06 09 // x/y/z extent
			08 // register
			\dx80000432 \wx0003 // cargo
			00 01 80 // x/y/z offset
			03 06 // registers
			\dx80000430 \wx0040 // platform front
			0B 00 00 // x/y/z offset
			05 10 03 // x/y/z extent
			04 // value for variable 10

		0B 02 // use callback for sprite layout

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

		11 FF // pylon placement (all)

		12 \dxC4313C2C // cargo types for randomisation triggers


// Real sprites
// ------------
	// Test variable 10 for real sprites
	1 * 1	02 04 1B // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx00FC 04 04 // platform sprites
		\wx00D1 // forklift sprites

	// Random cargo thresholds
	1 * 1	02 04 08 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		12 // use bits 18 and 19
		04
		\wx8000
		\wx8019
		\wx8032
		\wx804B

	// Cargo show/hide
	1 * 1	02 04 10 // ID
		85
		7D 20 // read register for this cargo type
		20 \wxFFFF
		\2rst
		7B 60 // get amount of cargo waiting
		20 \wxFFFF
		\2+
		7E 08 // add random value
		00 \wx00FF
		01
		\wx8000 \w0 \w100 // hide cargo
		\wx8001 // show cargo

	// Random crate variety
	1 * 1	02 04 11 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		11 // use bit 17
		02
		\wx8002
		\wx8004

	// Random barrel variety
	1 * 1	02 04 05 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		11 // use bit 17
		02
		\wx8006
		\wx8008

	//Cargo type
	1 * 1	02 04 09 // ID
		85
		7D 20 // read register for this cargo type
		00 \wxFFFF
		05
		\wx8000 \wx000B \wx000B // paper
		\wx0005 \wx0003 \wx0003 // oil - barrel
		\wx0005 \wx0010 \wx001A // rubber/petrol - barrel
		\wx0005 \wx0024 \wx0029 // fertiliser to alcohol - barrel
		\wx0005 \wx002F \wx002F // milk - barrel
		\wx0011 // crate

	// Random forklift variety
	1 * 1	02 04 07 // ID
		80
		00 // don't re-randomise
		10 // use bit 16
		02
		\wx8000
		\wx8001

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

	1 * 1	02 04 12 // ID
		85
		7E 07 // get random offset for forklift
		20 \wx00FF
		\2sto 1A
		20 \wx0008 // store in register
		\2rst
		7E 09 // get offset for cargo type
		20 \wx00FF
		\2sto 1A
		20 \wx0006 // store in register
		\2rst
		7E 10 // get show/hide flag for cargo
		20 \wx00FF
		\2sto 1A
		00 \wx0003 // store in register
		01
		\wx001B \w0 \w0
		\wx001B

	// No suitable cargo
	1 * 1	02 04 13 // ID
		85
		7E 07 // get random offset for forklift
		20 \wx00FF
		\2sto 1A
		20 \wx0008 // store in register
		\2rst 1A // all bits on
		20 \w0
		\2sto 1A
		20 \wx0006 // store in register
		\2sto 1A
		00 \wx0003 // store in register - hide cargo
		01
		\wx001B \w0 \w0
		\wx001B

	// Purchase
	1 * 1	02 04 14 // ID
		85
		1A // all bits on
		20 \w1 // offset for cc forklift
		\2sto 1A
		20 \wx0008 // store in register
		\2rst 1A // all bits on
		20 \w2 // offset for crate
		\2sto 1A
		20 \wx0006 // store in register
		\2rst 1A // all bits on
		20 \w1 // show cargo
		\2sto 1A
		00 \wx0003 // store in register
		01
		\wx001B \w0 \w0
		\wx001B

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


// Check for callback
// ------------------

// Store cargo id in register 0x20 and check for callback 0x14
#define CCB(a, b) 1 * 1	02 04 a 85 1A 20 b 00 \2sto 1A 20 \wx0020 \2rst 0C 00 \wxFFFF 01 \wx8000 \wx0014 \wx0014 \wx0012

// (ID, cargo id)
CCB(1D, 02) // mail
CCB(1E, 03) // oil
CCB(1F, 05) // goods
CCB(20, 0A) // valuables
CCB(21, 0B) // paper
CCB(22, 0C) // food
CCB(23, 0D) // fruit
CCB(24, 10) // rubber
CCB(25, 14) // gold
CCB(26, 15) // diamonds
CCB(27, 1A) // petrol
CCB(28, 1E) // fish
CCB(29, 1F) // wool
CCB(2A, 20) // glass
CCB(2B, 21) // ceramics
CCB(2C, 24) // fertiliser
CCB(2D, 25) // dyes
CCB(2E, 26) // refined products
CCB(2F, 27) // plastic
CCB(30, 29) // alcohol
CCB(31, 2A) // building materials
CCB(32, 2B) // engineering supplies
CCB(33, 2D) // farm supplies
CCB(34, 2E) // fruit (and veg)
CCB(35, 2F) // milk
CCB(36, 30) // manufacturing supplies
CCB(37, 31) // recyclables
CCB(38, 32) // scrap metal
CCB(39, 37) // sugar
CCB(3A, 38) // coffee
CCB(3B, 3B) // vehicle parts

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

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

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 0B // ID
		80
		02 // no more cargo
		11 // trigger bits 17 to 19
		08
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013

//@@WARNING ENABLE 113

	// No suitable cargo
	1 * 1	02 04 06 // ID
		81 0C // callback
		00 FF
		01
		\wx8000 14 14 // sprite layout
		\wx000B // real sprites

	1 * 1	03 04
		01 FORKLIFT_PLATFORM
		20
		02 \wx001D // mail
		03 \wx001E // oil
		05 \wx001F // goods
		0A \wx0020 // valuables
		0B \wx0021 // paper
		0C \wx0022 // food
		0D \wx0023 // fruit
		10 \wx0024 // rubber
		14 \wx0025 // gold
		15 \wx0026 // diamonds
		1A \wx0027 // petrol
		1E \wx0028 // fish
		1F \wx0029 // wool
		20 \wx002A // glass
		21 \wx002B // ceramics
		24 \wx002C // fertiliser
		25 \wx002D // dyes
		26 \wx002E // refined products
		27 \wx002F // plastic
		29 \wx0030 // alcohol
		2A \wx0031 // building materials
		2B \wx0032 // engineering supplies
		2D \wx0033 // farm supplies
		2E \wx0034 // fruit (and veg)
		2F \wx0035 // milk
		30 \wx0036 // manufacturing supplies
		31 \wx0037 // recyclables
		32 \wx0038 // scrap metal
		37 \wx0039 // sugar
		38 \wx003A // coffee
		3B \wx003B // vehicle parts
		FF \wx0002 // purchase list
		\wx0006 // no suitable cargo


	1 * 1	00 04 07 01 FORKLIFT_PLATFORM_G
		08 "ISRP"

		// Sprite layout
		1A 04
			// 00 (x)
			43
			\dx000003F4 \wx0002 // ground sprite - track
			10 // register
			\dx8000042D \wx0040 // ground overlay (child) - platforms
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000842D \wx0002 // forklift
			05 01 00 // x/y/z offset
			06 02 09 // x/y/z extent
			08 // register
			\dx80000431 \wx0003 // cargo
			0A 01 80 // x/y/z offset
			03 06 // registers

			// 01 (y)
			43
			\dx000003F3 \wx0002 // ground sprite - track
			10 // register
			\dx8000042E \wx0040 // ground overlay (child) - platforms
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000842F \wx0002 // forklift
			01 05 00 // x/y/z offset
			02 06 09 // x/y/z extent
			08 // register
			\dx80000432 \wx0003 // cargo
			00 01 80 // x/y/z offset
			03 06 // registers

			// 02 (x) - purchase
			43
			\dx000003F4 \wx0000 // ground sprite - track
			\dx8000042D \wx0040 // ground overlay (child) - platforms
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000842E \wx0000 // forklift
			05 01 00 // x/y/z offset
			06 02 09 // x/y/z extent
			\dx80000433 \wx0000 // cargo
			0A 01 80 // x/y/z offset

			// 03 (y) - purchase
			43
			\dx000003F3 \wx0000 // ground sprite - track
			\dx8000042E \wx0040 // ground overlay (child) - platforms
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80008430 \wx0000 // forklift
			01 05 00 // x/y/z offset
			02 06 09 // x/y/z extent
			\dx80000434 \wx0000 // cargo
			00 01 80 // x/y/z offset

		0B 02 // use callback for sprite layout

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

		11 FF // pylon placement (all)

		12 \dxC4313C2C // cargo types for randomisation triggers


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

//@@WARNING DISABLE 100

	1 * 1	02 04 12 // ID
		85
		7E 07 // get random offset for forklift
		20 \wx00FF
		\2sto 1A
		20 \wx0008 // store in register
		\2rst
		7E 09 // get offset for cargo type
		20 \wx00FF
		\2sto 1A
		20 \wx0006 // store in register
		\2rst
		7E 10 // get show/hide flag for cargo
		20 \wx00FF
		\2sto 1A
		20 \wx0003 // store in register
		\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

	// No suitable cargo
	1 * 1	02 04 13 // ID
		85
		7E 07 // get random offset for forklift
		20 \wx00FF
		\2sto 1A
		20 \wx0008 // store in register
		\2rst 1A // all bits on
		20 \w0
		\2sto 1A
		20 \wx0006 // store in register
		\2sto 1A
		20 \wx0003 // store in register - hide cargo
		\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 100


// Check for callback
// ------------------

// Store cargo id in register 0x20 and check for callback 0x14

// (ID, cargo id)
CCB(1D, 02) // mail
CCB(1E, 03) // oil
CCB(1F, 05) // goods
CCB(20, 0A) // valuables
CCB(21, 0B) // paper
CCB(22, 0C) // food
CCB(23, 0D) // fruit
CCB(24, 10) // rubber
CCB(25, 14) // gold
CCB(26, 15) // diamonds
CCB(27, 1A) // petrol
CCB(28, 1E) // fish
CCB(29, 1F) // wool
CCB(2A, 20) // glass
CCB(2B, 21) // ceramics
CCB(2C, 24) // fertiliser
CCB(2D, 25) // dyes
CCB(2E, 26) // refined products
CCB(2F, 27) // plastic
CCB(30, 29) // alcohol
CCB(31, 2A) // building materials
CCB(32, 2B) // engineering supplies
CCB(33, 2D) // farm supplies
CCB(34, 2E) // fruit (and veg)
CCB(35, 2F) // milk
CCB(36, 30) // manufacturing supplies
CCB(37, 31) // recyclables
CCB(38, 32) // scrap metal
CCB(39, 37) // sugar
CCB(3A, 38) // coffee
CCB(3B, 3B) // vehicle parts

#undef CCB

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

	// Purchase list
	1 * 1	02 04 02 // ID
		81 0C // callback
		00 FF
		02
		\wx000C 13 13 // date availability
		\wx8002 14 14 // sprite layout
		\wx001B // real sprites

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 0B // ID
		80
		02 // no more cargo
		11 // trigger bits 17 to 19
		08
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013
		\wx0013

//@@WARNING ENABLE 113

	// No suitable cargo
	1 * 1	02 04 06 // ID
		81 0C // callback
		00 FF
		01
		\wx8000 14 14 // sprite layout
		\wx000B // real sprites

	1 * 1	03 04
		01 FORKLIFT_PLATFORM_G
		20
		02 \wx001D // mail
		03 \wx001E // oil
		05 \wx001F // goods
		0A \wx0020 // valuables
		0B \wx0021 // paper
		0C \wx0022 // food
		0D \wx0023 // fruit
		10 \wx0024 // rubber
		14 \wx0025 // gold
		15 \wx0026 // diamonds
		1A \wx0027 // petrol
		1E \wx0028 // fish
		1F \wx0029 // wool
		20 \wx002A // glass
		21 \wx002B // ceramics
		24 \wx002C // fertiliser
		25 \wx002D // dyes
		26 \wx002E // refined products
		27 \wx002F // plastic
		29 \wx0030 // alcohol
		2A \wx0031 // building materials
		2B \wx0032 // engineering supplies
		2D \wx0033 // farm supplies
		2E \wx0034 // fruit (and veg)
		2F \wx0035 // milk
		30 \wx0036 // manufacturing supplies
		31 \wx0037 // recyclables
		32 \wx0038 // scrap metal
		37 \wx0039 // sugar
		38 \wx003A // coffee
		3B \wx003B // vehicle parts
		FF \wx0002 // purchase list
		\wx0006 // no suitable cargo
