	1 * 1	00 04 06 01 CONTAINERS_TRACK
		08 "ISRP"

		// Sprite layout
		1A 02
			// 00 (x)
			44
			\dx000003F4 \wx0000 // ground sprite - track
			\dx8000042D \wx0040 // back platform
			00 00 00 // x/y/z offset
			10 05 03 // x/y/z extent
			04 // value for variable 10
			\dx8000842D \wx0000 // containers
			00 00 03 // x/y/z offset
			10 04 11 // x/y/z extent
			\dx8000042E \wx0040 // front platform
			00 0B 00 // x/y/z offset
			10 05 03 // x/y/z extent
			04 // value for variable 10
			\dx8000842E \wx0000 // containers
			00 0C 03 // x/y/z offset
			10 04 11 // x/y/z extent

			// 01 (y)
			44
			\dx000003F3 \wx0000 // ground sprite - track
			\dx8000042F \wx0040 // back platform
			00 00 00 // x/y/z offset
			05 10 03 // x/y/z extent
			04 // value for variable 10
			\dx8000842F \wx0000 // containers
			00 00 03 // x/y/z offset
			04 10 11 // x/y/z extent
			\dx80000430 \wx0040 // front platform
			0B 00 00 // x/y/z offset
			05 10 03 // x/y/z extent
			04 // value for variable 10
			\dx80008430 \wx0000 // containers
			0C 00 03 // x/y/z offset
			04 10 11 // x/y/z extent

		0B 03 // use callback to determine date availability (1) and layout (2)

		10 \w600 // set little/lots threshold

		11 FF // pylon placement (all)

		12 \dxC0003824 // cargo types for randomisation triggers


	// Real sprites
	1 * 1	02 04 23 // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx00FC 04 04 // platform sprites
		\wx00DC // container sprites

	// Real sprites - empty
	1 * 1	02 04 24 // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx00FC 04 04 // platform sprites
		\wx00DB // container sprites - empty

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

	1 * 1	02 04 05 // ID
		81 0C // callback
		00 FF
		02
		\wx0007 13 13 // date availability
		\wx8000 14 14 // sprite layout
		\wx0023 // real sprites

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 09 // ID
		80
		02 // no more cargo
		10 // trigger bits 16 to 19
		10
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024
		\wx0024

//@@WARNING ENABLE 113

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

	1 * 1	03 04
		01 CONTAINERS_TRACK
		15
		02 \wx0005 // mail
		05 \wx0005 // goods
		0B \wx0005 // paper
		0C \wx0005 // food
		0D \wx0005 // fruit
		1E \wx0005 // fish
		1F \wx0005 // wool
		20 \wx0005 // glass
		21 \wx0005 // ceramics
		22 \wx0005 // bricks
		23 \wx0005 // vehicles
		2A \wx0005 // building materials
		2B \wx0005 // engineering supplies
		2D \wx0005 // farm supplies
		30 \wx0005 // manufacturing supplies
		31 \wx0005 // recyclables
		32 \wx0005 // scrap metal
		37 \wx0005 // sugar
		38 \wx0005 // coffee
		3B \wx0005 // vehicle parts
		FF \wx0005 // purchase list
		\wx0006 // no suitable cargo


	1 * 1	00 04 06 01 CONTAINERS_TRACK_LOW
		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 \wx0000 // containers back
			00 00 00 // x/y/z offset
			10 04 11 // x/y/z extent
			\dx8000842E \wx0000 // containers front
			00 0C 00 // x/y/z offset
			10 04 11 // x/y/z extent

			// 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 \wx0000 // containers back
			00 00 00 // x/y/z offset
			04 10 11 // x/y/z extent
			\dx80008430 \wx0000 // containers front
			0C 00 00 // x/y/z offset
			04 10 11 // x/y/z extent

			// 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
			\dx8000842D \wx0000 // containers back
			00 00 00 // x/y/z offset
			10 04 11 // x/y/z extent
			\dx8000842E \wx0000 // containers front
			00 0C 00 // x/y/z offset
			10 04 11 // x/y/z extent

			// 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
			\dx8000842F \wx0000 // containers back
			00 00 00 // x/y/z offset
			04 10 11 // x/y/z extent
			\dx80008430 \wx0000 // containers front
			0C 00 00 // x/y/z offset
			04 10 11 // x/y/z extent

		0B 03 // use callback to determine date availability (1) and layout (2)

		10 \w600 // set little/lots threshold
		12 \dxC0003824 // cargo types for randomisation triggers

		11 FF // pylon placement (all)


	// Real sprites
	1 * 1	02 04 23 // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx00FD 04 04 // ground overlay sprites
		\wx00DC // container sprites

	// Real sprites - empty
	1 * 1	02 04 24 // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx00FD 04 04 // ground overlay sprites
		\wx00DB // container sprites - empty

//@@WARNING DISABLE 100

	1 * 1	02 04 21 // ID
		85
		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
		01
		\wx0023 \w0 \w0
		\wx0023

	// Empty
	1 * 1	02 04 22 // ID
		85
		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
		01
		\wx0024 \w0 \w0
		\wx0024

//@@WARNING ENABLE 100


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

	1 * 1	02 04 05 // ID
		81 0C // callback
		00 FF
		01
		\wx8000 14 14 // sprite layout
		\wx0021 // real sprites

	// Purchase
	1 * 1	02 04 08 // ID
		81 0C // callback
		00 FF
		02
		\wx0007 13 13 // date availability
		\wx8002 14 14 // sprite layout
		\wx0023 // real sprites

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 09 // ID
		80
		02 // no more cargo
		10 // trigger bits 16 to 19
		10
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022
		\wx0022

//@@WARNING ENABLE 113

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

	1 * 1	03 04
		01 CONTAINERS_TRACK_LOW
		15
		02 \wx0005 // mail
		05 \wx0005 // goods
		0B \wx0005 // paper
		0C \wx0005 // food
		0D \wx0005 // fruit
		1E \wx0005 // fish
		1F \wx0005 // wool
		20 \wx0005 // glass
		21 \wx0005 // ceramics
		22 \wx0005 // bricks
		23 \wx0005 // vehicles
		2A \wx0005 // building materials
		2B \wx0005 // engineering supplies
		2D \wx0005 // farm supplies
		30 \wx0005 // manufacturing supplies
		31 \wx0005 // recyclables
		32 \wx0005 // scrap metal
		37 \wx0005 // sugar
		38 \wx0005 // coffee
		3B \wx0005 // vehicle parts
		FF \wx0008 // purchase list
		\wx0006 // no suitable cargo


	1 * 1	00 04 0C 01 CONTAINERS_CRANE
		08 "ISRP"

		// Sprite layout
		1A 02
			// 00 (x)
			46
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042D \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000042D \wx0013 // crane back
			00 00 00 // x/y/z offset
			08 04 19 // x/y/z extent
			01 05 06 07 // registers - show, sprite offset, x, y
			\dx8000842D \wx0042 // container
			00 05 00 // x/y/z offset
			10 06 10 // x/y/z extent
			04 // registers - sprite offset
			05 // value for variable 10
			\dx8000843B \wx0013 // crane front
			00 0C 00 // x/y/z offset
			08 04 19 // x/y/z extent
			01 05 06 07 // registers - show, sprite offset, x, y
			\dx80000449 \wx0013 // crane top
			00 00 19 // x/y/z offset
			08 10 03 // x/y/z extent
			01 05 06 07 // registers - show, sprite offset, x, y
			\dx80000457 \wx0013 // crane hoist
			00 02 19 // x/y/z offset
			08 06 0A // x/y/z extent
			01 05 06 08 // registers - show, sprite offset, x, y

			// 01 (y)
			46
			\dx00000F8D \wx0002 // ground sprite
			10 // register
			\dx8000042E \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx80000434 \wx0013 // crane back
			00 00 00 // x/y/z offset
			04 08 19 // x/y/z extent
			01 05 07 06 // registers - show, sprite offset, x, y
			\dx8000842E \wx0042 // container
			05 00 00 // x/y/z offset
			06 10 10 // x/y/z extent
			04 // registers - sprite offset
			05 // value for variable 10
			\dx80008442 \wx0013 // crane front
			0C 00 00 // x/y/z offset
			04 08 19 // x/y/z extent
			01 05 07 06 // registers - show, sprite offset, x, y
			\dx80000450 \wx0013 // crane top
			00 00 19 // x/y/z offset
			10 00 03 // x/y/z extent
			01 05 07 06 // registers - show, sprite offset, x, y
			\dx8000045E \wx0013 // crane hoist
			02 00 19 // x/y/z offset
			06 08 0A // x/y/z extent
			01 05 08 06 // registers - show, sprite offset, x, y


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

		0D F1 // disallow platform length 1 and > 4

		10 \w900 // set little/lots threshold

		12 \dxC0003824 // cargo types for randomisation triggers

		14 FF // no wires
		11 00 // no pylons
		15 FF // prevent trains entering the tile

		16 \wx01E1 // animation info 226 frames looping
		17 04      // animation speed 2^4 ticks per frame
		18 \wx0002 // animation triggers - cargo arrives (2)


	1 * 1	01 04 01 04
	1 images/newcontainers2.pcx  72   5  01   31  64  -31   0 // 042D x, crane-track
	1 images/newcontainers2.pcx 214   5  01   31  64  -31   0 // 042E y, crane-track
	1 images/newcontainers2.pcx   4   5  01   31  64  -31   0 // 042F x, non-track
	1 images/newcontainers2.pcx 145   5  01   31  64  -31   0 // 0430 y, non-track

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


	1 * 1	01 04 01 38
//@@LET xpos = 4
//@@LET ypos = 43
//@@LET xsize = 23
//@@LET ysize = 34
//@@LET xrel = -11
//@@LET yrel = -23
//@@LET xsizeh = 10
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)     (yrel 6 +) // 042D x, back
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)     (yrel 4 +) // 042E x, back
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)     (yrel 2 +) // 042F x, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)      (yrel)     // 0430 x, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +) (yrel 2 -) // 0431 x, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +) (yrel 4 -) // 0432 x, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +) (yrel 6 -) // 0433 x, back

//@@LET xpos = 108
//@@LET ypos = 43
//@@LET xsize = 23
//@@LET ysize = 34
//@@LET xrel = -10
//@@LET yrel = -23
//@@LET xsizeh = 13
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +)  (yrel 6 +) // 0434 y, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +)  (yrel 4 +) // 0435 y, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +)  (yrel 2 +) // 0436 y, back
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)       (yrel)     // 0437 y, back
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)      (yrel 2 -) // 0438 y, back
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)      (yrel 4 -) // 0439 y, back
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)      (yrel 6 -) // 043A y, back

//@@LET xpos = 31
//@@LET ypos = 43
//@@LET xsize = 23
//@@LET ysize = 34
//@@LET xrel = -15
//@@LET yrel = -25
//@@LET xsizeh = 10
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)     (yrel 6 +) // 043B x, front
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)     (yrel 4 +) // 043C x, front
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)     (yrel 2 +) // 043D x, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)      (yrel)     // 043E x, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +) (yrel 2 -) // 043F x, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +) (yrel 4 -) // 0440 x, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +) (yrel 6 -) // 0441 x, front

//@@LET xpos = 135
//@@LET ypos = 43
//@@LET xsize = 23
//@@LET ysize = 34
//@@LET xrel = -6
//@@LET yrel = -25
//@@LET xsizeh = 13
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +)  (yrel 6 +) // 0442 y, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +)  (yrel 4 +) // 0443 y, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +)  (yrel 2 +) // 0444 y, front
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)       (yrel)     // 0445 y, front
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)      (yrel 2 -) // 0446 y, front
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)      (yrel 4 -) // 0447 y, front
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)      (yrel 6 -) // 0448 y, front

//@@LET xpos = 56
//@@LET ypos = 43
//@@LET xsize = 30
//@@LET ysize = 17
//@@LET xrel = -5
//@@LET yrel = -1
//@@LET xsizeh = 15
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)     (yrel 6 +) // 0449 x, top
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)     (yrel 4 +) // 044A x, top
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)     (yrel 2 +) // 044B x, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)      (yrel)     // 044C x, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +) (yrel 2 -) // 044D x, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +) (yrel 4 -) // 044E x, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +) (yrel 6 -) // 044F x, top

//@@LET xpos = 160
//@@LET ypos = 43
//@@LET xsize = 30
//@@LET ysize = 17
//@@LET xrel = -23
//@@LET yrel = -1
//@@LET xsizeh = 15
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +)  (yrel 6 +) // 0450 y, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +)  (yrel 4 +) // 0451 y, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +)  (yrel 2 +) // 0452 y, top
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)       (yrel)     // 0453 y, top
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)      (yrel 2 -) // 0454 y, top
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)      (yrel 4 -) // 0455 y, top
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)      (yrel 6 -) // 0456 y, top

//@@LET xpos = 88
//@@LET ypos = 43
//@@LET xsize = 15
//@@LET ysize = 16
//@@LET xrel = -9
//@@LET yrel = -3
//@@LET xsizeh = 7
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)     (yrel 6 +) // 0457 x, hoist
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)     (yrel 4 +) // 0458 x, hoist
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)     (yrel 2 +) // 0459 x, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)      (yrel)     // 045A x, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +) (yrel 2 -) // 045B x, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +) (yrel 4 -) // 045C x, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +) (yrel 6 -) // 045D x, hoist

//@@LET xpos = 192
//@@LET ypos = 43
//@@LET xsize = 15
//@@LET ysize = 16
//@@LET xrel = -4
//@@LET yrel = -3
//@@LET xsizeh = 8
//@@LET xsizeh1 = (xsize xsizeh -)
//@@LET xposh = (xpos xsizeh1 +)
//@@LET xrelh = (xrel xposh + xpos - 8 -)
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 -) (xrel 12 +)  (yrel 6 +) // 045E y, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1)     (xrel  8 +)  (yrel 4 +) // 045F y, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsizeh1 4 +) (xrel  4 +)  (yrel 2 +) // 0460 y, hoist
	1 images/newcontainers2.pcx (xpos)      (ypos) 01 (ysize) (xsize)       (xrel)       (yrel)     // 0461 y, hoist
	1 images/newcontainers2.pcx (xposh 4 -) (ypos) 01 (ysize) (xsizeh 4 +)  (xrelh)      (yrel 2 -) // 0462 y, hoist
	1 images/newcontainers2.pcx (xposh)     (ypos) 01 (ysize) (xsizeh)      (xrelh)      (yrel 4 -) // 0463 y, hoist
	1 images/newcontainers2.pcx (xposh 4 +) (ypos) 01 (ysize) (xsizeh 4 -)  (xrelh)      (yrel 6 -) // 0464 y, hoist

	1 * 1	02 04 00 // ID
		00 01 // Number of sets (little and lots)
		\w0

	1 * 1	01 04 04 08
// Cargo level 0
	1 images/newcontainers2.pcx  33 252  01   01  01  -28 -14 // 042D x, container 1 (dummy)
	1 images/newcontainers2.pcx 168 252  01   01  01   -9  -9 // 042E y, container 1 (dummy)
	1 images/newcontainers2.pcx  33 252  01   01  01  -28 -14 // 042F x, container 2 (dummy)
	1 images/newcontainers2.pcx 168 252  01   01  01   -9  -9 // 0430 y, container 2 (dummy)
	1 images/newcontainers2.pcx  33 252  01   01  01  -28 -14 // 0431 x, container 3 (dummy)
	1 images/newcontainers2.pcx 168 252  01   01  01   -9  -9 // 0432 y, container 3 (dummy)
	1 images/newcontainers2.pcx  33 252  01   01  01  -28 -14 // 0433 x, container 3 (dummy)
	1 images/newcontainers2.pcx 168 252  01   01  01   -9  -9 // 0434 y, container 3 (dummy)
// Cargo level 1
	1 images/newcontainers2.pcx   4 131  09   23  39  -28  -6 // 042D x, container 1
	1 images/newcontainers2.pcx 133 131  09   24  29   -9  -9 // 042E y, container 1
	1 images/newcontainers2.pcx   4 171  09   18  39  -28  -1 // 042F x, container 2
	1 images/newcontainers2.pcx 133 171  09   24  33   -3  -4 // 0430 y, container 2
	1 images/newcontainers2.pcx   4 212  09   16  29  -18  -4 // 0431 x, container 2
	1 images/newcontainers2.pcx 133 212  09   21  29   -9  -9 // 0432 y, container 2
	1 images/newcontainers2.pcx   4 252  09   34  27  -22 -14 // 0433 x, container 3
	1 images/newcontainers2.pcx 133 252  09   24  33   -9  -4 // 0434 y, container 3
// Cargo level 2
	1 images/newcontainers2.pcx  45 131  09   28  39  -28 -11 // 042D x, container 1
	1 images/newcontainers2.pcx 164 131  09   34  39   -9 -14 // 042E y, container 1
	1 images/newcontainers2.pcx  45 171  09   29  39  -28  -9 // 042F x, container 2
	1 images/newcontainers2.pcx 168 171  09   34  39   -9 -14 // 0430 y, container 2
	1 images/newcontainers2.pcx  35 212  09   28  39  -28 -11 // 0431 x, container 2
	1 images/newcontainers2.pcx 164 212  09   34  39   -9 -14 // 0432 y, container 2
	1 images/newcontainers2.pcx  33 252  09   34  33  -28 -14 // 0433 x, container 3
	1 images/newcontainers2.pcx 168 252  09   29  39   -9  -9 // 0434 y, container 3
// Cargo level 3
	1 images/newcontainers2.pcx  86 131  09   34  39  -28 -14 // 042D x, container 1
	1 images/newcontainers2.pcx 205 131  09   34  39   -9 -14 // 042E y, container 1
	1 images/newcontainers2.pcx  86 171  09   34  39  -28 -14 // 042F x, container 2
	1 images/newcontainers2.pcx 209 171  09   34  39   -9 -14 // 0430 y, container 2
	1 images/newcontainers2.pcx  76 212  09   34  39  -28 -14 // 0431 x, container 2
	1 images/newcontainers2.pcx 205 212  09   34  39   -9 -14 // 0432 y, container 2
	1 images/newcontainers2.pcx  68 252  09   34  39  -28 -14 // 0433 x, container 3
	1 images/newcontainers2.pcx 209 252  09   34  39   -9 -14 // 0434 y, container 3

	1 * 1	02 04 01 // ID
		0E 01
		\w0 \w1 \w1 \w1 \w1 \w1 \w2 \w2 \w2 \w2 \w2 \w3 \w3 \w3
		\w3

	1 * 1	02 04 02 // ID
		0E 01
		\w0 \w0 \w1 \w1 \w1 \w1 \w1 \w2 \w2 \w2 \w2 \w2 \w3 \w3
		\w3

	1 * 1	02 04 03 // ID
		0E 01
		\w0 \w0 \w0 \w1 \w1 \w1 \w1 \w1 \w2 \w2 \w2 \w2 \w2 \w3
		\w3

	1 * 1	02 04 04 // ID
		0E 01
		\w0 \w0 \w0 \w0 \w1 \w1 \w1 \w1 \w1 \w2 \w2 \w2 \w2 \w2
		\w3

	1 * 1	02 04 82 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		12 // use bits 18 and 19
		04
		\wx0001
		\wx0002
		\wx0003
		\wx0004

	// Empty
	1 * 1	02 04 81 // 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
		02
		\wx0080 04 04 // ground overlay sprites
		\wx0082 05 05 // container sprites
		\wx0000 // crane sprites

	// Test variable 10 for real sprites - empty
	1 * 1	02 04 1C // ID
		81 10 // additional information for sprite selection
		00 0F
		02
		\wx0080 04 04 // ground overlay sprites
		\wx0081 05 05 // container sprites
		\wx0000 // crane sprites

// frame     : current frame of animation (0 to 225)
// a_frame   : adjusted frame number for direction change (0 to 112, 112 to 0)
// t_frame   : frame number for tile (0 to 31)

// Frames
// frame:      0  1  2 ... 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ...
// t_frame t0: 8  9 10 ... 25 26 27 28 29 30 31
//         t1:                    0  1  2  3  4  5  6  7  8  9 10 11 12 ... 19 20 21 22 23 24 25 26 27 28 29 30 31
//         t2:                                                                                       0  1  2  3  4  5  6  7 ...

// t1 movement:                     | along platform | -  - |         traverse         | -  - | along platform |
// t1 sprite offset:                 0  1  2  3  3  3  3  3  3  3  3  3 ...  3  3  3  3  3  3  3  3  3  4  5  6
// t1 visible:                    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  0
// t1 x offset (move):               8  8  8  8  6  4  4  4  4  4  4  4 ...  4  4  4  4  4  4  4  2  0  0  0  0
// t1 y offset (traverse):           3  3  3  3  3  3  3  3  2  1  0  0 ...  6  6  5  4  3  3  3  3  3  3  3  3

	// 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 E1 // max_frame = 225
		\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 \b112 // frames 0 to 112
		\wx0050 // frames 113 to max

	// Calculate t_frame {t_frame = (a_frame + 8) - (p_pos * 27)}
	1 * 1	02 04 53 // ID
		85 1A // all bits on
		20 \w0
		\2-
		41 // platform info, get position along platform from south
		24 \wx000F
		\2*
		1A // all bits on
		20 \w27 // val * 27
		\2+
		7E 52 // get a_frame
		20 \wxFFFF
		\2+
		1A // all bits on
		20 \w8 // val + 8
		\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 \w31 // result is capped at max 31
		00 // return t_frame
		\wx8000



	// Select move offset
	1 * 1	02 04 65 // ID
		81
		7D 21 // read register for t_frame
		00 FF
		04
		\wx8008 \b1 \b4
		\wx8006 \b5 \b5
		\wx8004 \b6 \b25
		\wx8002 \b26 \b26
		\wx8000

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

	// Select hoist move offset
	1 * 1	02 04 67 // ID
		81
		7D 21 // read register for t_frame
		00 FF
		0A
		\wx8002 \b9 \b9
		\wx8001 \b10 \b10
		\wx8000 \b11 \b13
		\wx8001 \b14 \b14
		\wx8002 \b15 \b15
		\wx8004 \b17 \b17
		\wx8005 \b18 \b18
		\wx8006 \b19 \b20
		\wx8005 \b21 \b21
		\wx8004 \b22 \b22
		\wx8003

	// Check for animated tile
	1 * 1	02 04 66 // ID
		81 41 // platform info and relative position for individually built sections
		04 0F // position along platform from south
		01
		\wx0067 00 03 // if valid animation tile
		\wx8000 // else


	// Hide crane
	1 * 1	02 04 63 // ID
		81
		7D 21 // read register for t_frame
		00 FF
		01
		\wx8001 \b1 \b30 // t_frame 1 to 30 - show
		\wx8000 // hide

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


	// Select sprite
	1 * 1	02 04 61 // ID
		81 7E 53 // get tile frame (0 to 31)
		20 FF
		\2sto 1A
		00 21 // store in register to prevent calculating a_frame multiple times
		06
		\wx8000 \b1 \b1
		\wx8001 \b2 \b2
		\wx8002 \b3 \b3
		\wx8004 \b28 \b28
		\wx8005 \b29 \b29
		\wx8006 \b30 \b30
		\wx8003

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


	1 * 1	02 04 68 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		10 // use bits 16 and 17
		04
		\wx8000
		\wx8002
		\wx8004
		\wx8006



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

// Callback 141 - Next animation frame
// --------------------------------
	// Calculate new frame for reverse movement
	1 * 1	02 04 6A // ID
		81 1A // all bits on
		20 \b225 // max_frame = 225
		\2-
		4A // animation frame
		00 FF
		00 // return new_frame = max_frame - frame
		\wx8000

	// Animation frame control - determine point to reverse direction
	// {max frame = ((plat_len - 1) * 32) - 6}
	1 * 1	02 04 6B // ID
		85 41 // platform info, total platform length
		30 \wx000F // shift 16 and mask 4 bits
		\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 \w5 // val * 32
		\2-
		1A // all bits on
		20 \w6 // val - 6 - gives max frame for this platform length
		\2-
		4A // animation frame
		00 \wx00FF // subtract animation frame from max frame
		01
		\wx006A \w0 \w0 // if animation frame = max frame, set new frame
		\wx80FE // continue animation

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

	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
		\wx80FF \w0 \w50 // if not much cargo
		\wx005C // continue

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

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

	1 * 1	02 04 15 // ID
		85
		7E 60 // get crane sprite offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - sprite offset
		\2rst
		7E 62 // get hide/show flag
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane flag
		\2rst
		7E 64 // get movement offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - move x offset
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0007 // store in register - move y offset
		\2rst
		7E 66 // get hoist movement offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0008 // store in register - move y offset - hoist
		\2rst
		7E 68 // get random container sprite offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0004 // store in register - container sprite offset
		\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

	// Empty
	1 * 1	02 04 17 // ID
		85
		7E 60 // get crane sprite offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - sprite offset
		\2rst
		7E 62 // get hide/show flag
		20 \wx7FFF
		\2sto 1A
		20 \wx0001 // store in register - show crane flag
		\2rst
		7E 64 // get movement offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0006 // store in register - move x offset
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0007 // store in register - move y offset
		\2rst
		7E 66 // get hoist movement offset
		20 \wx7FFF
		\2sto 1A
		20 \wx0008 // store in register - move y offset - hoist
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0004 // store in register - container sprite offset
		\2rst
		7E BF // get normal/snow/desert offset
		20 \wx7FFF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001C \w0 \w0
		\wx001C

	// Purchase
	1 * 1	02 04 16 // ID
		85
		1A // all bits on
		20 \w3 // val = 3
		\2sto 1A
		20 \wx0005 // store in register - sprite offset
		\2rst
		1A // all bits on
		20 \w1 // val = 1
		\2sto 1A
		20 \wx0001 // store in register - show crane flag
		\2rst
		1A // all bits on
		20 \w4 // val = 4
		\2sto 1A
		20 \wx0006 // store in register - move x offset
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0007 // store in register - move y offset
		\2rst
		1A // all bits on
		20 \w3 // val = 3
		\2sto 1A
		20 \wx0008 // store in register - move y offset - hoist
		\2rst
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0004 // store in register - container sprite offset
		\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


	// Check for availability
	1 * 1	02 04 07 // ID
		81 01 // current year
		00 FF
		01
		\wx8000 \b0 \b1960 // do not allow build before 1960
		\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 \wx8000 \wx0014 \wx0014 \wx005B \wx0140 \wx0140 \wx005D \wx0141 \wx0141 \wx0015

// (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


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

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 09 // ID
		80
		02 // no more cargo
		10 // trigger bits 16 to 19
		10
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017

//@@WARNING ENABLE 113

	// No suitable cargo
	1 * 1	02 04 06 // ID
		85 0C // callback
		00 \wxFFFF
		03
		\wx8000 \wx0014 \wx0014 // sprite layout
		\wx005B \wx0140 \wx0140 // animation control
		\wx80FF \wx0141 \wx0141 // animation frame - stop
		\wx0009 // real sprites

	1 * 1	03 04
		01 CONTAINERS_CRANE
		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 \wx0005 // purchase list
		\wx0006 // no suitable cargo


	1 * 1	00 04 08 01 CONTAINERS_NON_TRACK
		08 "ISRP"

		// Sprite layout
		1A 02
			// 00 (x)
			43
			\dx00008F8D \wx0002 // ground sprite
			10 // register
			\dx8000042F \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000842D \wx0002 // container
			00 02 00 // x/y/z offset
			10 06 10 // x/y/z extent
			04 // registers - sprite offset
			\dx8000842D \wx0002 // container
			00 08 00 // x/y/z offset
			10 06 10 // x/y/z extent
			05 // registers - sprite offset

			// 01 (y)
			43
			\dx00008F8D \wx0002 // ground sprite
			10 // register
			\dx80000430 \wx0040 // ground overlay sprite (child)
			00 00 80 // x/y/z offset
			04 // value for variable 10
			\dx8000842E \wx0002 // container
			02 00 00 // x/y/z offset
			06 10 10 // x/y/z extent
			04 // registers - sprite offset
			\dx8000842E \wx0002 // container
			08 00 00 // x/y/z offset
			06 10 10 // x/y/z extent
			05 // registers - sprite offset


		0B 03 // use callback to determine date availability (1) and layout (2)

		10 \w900 // set little/lots threshold

		14 FF // wires (none)
		11 00 // pylons (none)
		15 FF // prevent trains entering the tile

		12 \dxC0003824 // cargo types for randomisation triggers


	// 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
		\wx0082 // container sprites

	// Test variable 10 for real sprites - empty
	1 * 1	02 04 1C // ID
		81 10 // additional information for sprite selection
		00 0F
		01
		\wx0080 04 04 // ground overlay sprites
		\wx0081 // container sprites - empty

	1 * 1	02 04 68 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		10 // use bits 16 and 17
		04
		\wx8000
		\wx8002
		\wx8004
		\wx8006

	1 * 1	02 04 69 // ID
		80
		00 // no more cargo (triggered by random in graphics chain)
		10 // use bits 16 and 17
		04
		\wx8002
		\wx8004
		\wx8006
		\wx8000

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

	1 * 1	02 04 15 // ID
		85
		7E 68 // get random container sprite offset 1
		20 \wx7FFF
		\2sto 1A
		20 \wx0004 // store in register - containers 1 sprite offset
		\2rst
		7E 69 // get random container sprite offset 2
		20 \wx7FFF
		\2sto 1A
		20 \wx0005 // store in register - containers 2 sprite offset
		\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

	// Empty
	1 * 1	02 04 17 // ID
		85
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0004 // store in register - containers 1 sprite offset
		\2sto 1A
		20 \wx0005 // store in register - containers 2 sprite offset
		\2rst
		7E BF // get normal/snow/desert offset
		20 \wx7FFF
		\2sto 1A
		00 \wx0010 // store in register - ground sprite offset
		01
		\wx001C \w0 \w0
		\wx001C

	// Purchase
	1 * 1	02 04 16 // ID
		85
		1A // all bits on
		20 \w0 // val = 0
		\2sto 1A
		20 \wx0004 // store in register - containers 1 sprite offset
		\2rst
		1A // all bits on
		20 \w2 // val = 2
		\2sto 1A
		20 \wx0005 // store in register - containers 2 sprite offset
		\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


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

	1 * 1	02 04 10 // ID
		81 0C // callback
		00 FF
		01
		\wx8000 14 14 // sprite layout
		\wx0015 // real sprites

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

//@@WARNING DISABLE 113

	// Random action 2 outside callback triggers re-randomisation
	1 * 1	02 04 09 // ID
		80
		02 // no more cargo
		10 // trigger bits 16 to 19
		10
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017
		\wx0017

//@@WARNING ENABLE 113

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

	1 * 1	03 04
		01 CONTAINERS_NON_TRACK
		15
		02 \wx0010 // mail
		05 \wx0010 // goods
		0B \wx0010 // paper
		0C \wx0010 // food
		0D \wx0010 // fruit
		1E \wx0010 // fish
		1F \wx0010 // wool
		20 \wx0010 // glass
		21 \wx0010 // ceramics
		22 \wx0010 // bricks
		23 \wx0010 // vehicles
		2A \wx0010 // building materials
		2B \wx0010 // engineering supplies
		2D \wx0010 // farm supplies
		30 \wx0010 // manufacturing supplies
		31 \wx0010 // recyclables
		32 \wx0010 // scrap metal
		37 \wx0010 // sugar
		38 \wx0010 // coffee
		3B \wx0010 // vehicle parts
		FF \wx0011 // purchase list
		\wx0012 // no suitable cargo
