#import "/lib.typ": diorama, example, note, todo #show raw.where(lang: "mc-diorama"): it => diorama(autoplay: true, loop: true, theta: 160, phi: 20, it.text) = Block Event Delay Block Event Delay is not a complete substitute for tilesets, but it can significantly reduce the required length of tilesets and compact repetetive systems. It is based on a behavior of piston push lists which repeats a given global order for multiple components. A smaller tileset can set a 'template' ordering for a few components, then BED can trivially 'repeat' that order for a subsequent set of components. #show raw.where(lang: "mc-diorama"): it => diorama( autoplay: true, loop: true, radius: 5, theta: 160, it.text, ) ```mc-diorama p -1 0 0 observer facing=west powered=false p 0 0 -1 piston facing=down extended=false p 0 0 0 light_gray_terracotta p 0 1 0 redstone_wire east=side west=side power=0 p 1 -1 -1 piston facing=up extended=false p 1 0 -2 observer facing=south powered=false p 1 0 0 light_gray_terracotta p 1 1 0 redstone_wire east=side west=side power=0 p 2 -1 -1 piston facing=up extended=false p 2 0 -2 observer facing=south powered=false p 2 0 0 light_gray_terracotta p 2 1 0 redstone_wire east=side west=side power=0 p 3 -1 -1 piston facing=up extended=false p 3 0 -2 observer facing=south powered=false p 3 0 0 light_gray_terracotta p 3 1 0 redstone_wire east=side west=side power=0 p 4 -1 -1 piston facing=up extended=false p 4 0 -2 observer facing=south powered=false p 4 0 0 light_gray_terracotta p 4 1 0 redstone_wire east=side west=side power=0 t 0 p -1 0 0 powered=true p 0 1 0 power=15 p 1 1 0 power=14 p 2 1 0 power=13 p 3 1 0 power=12 p 4 1 0 power=11 t 1 p 0 0 -1 extended=true p 0 -0.5 -1 piston_head facing=down short=true type=normal p 1 -1 -1 extended=true p 1 -0.5 -1 piston_head facing=up short=true type=normal p 2 -1 -1 extended=true p 2 -0.5 -1 piston_head facing=up short=true type=normal p 3 -1 -1 extended=true p 3 -0.5 -1 piston_head facing=up short=true type=normal p 4 -1 -1 extended=true p 4 -0.5 -1 piston_head facing=up short=true type=normal t 2 p -1 0 0 powered=false p 0 1 0 power=0 p 1 1 0 power=0 p 2 1 0 power=0 p 3 1 0 power=0 p 4 1 0 power=0 p 0 -1 -1 piston_head facing=down short=false type=normal p 1 0 -1 piston_head facing=up short=false type=normal p 2 0 -1 piston_head facing=up short=false type=normal p 3 0 -1 piston_head facing=up short=false type=normal p 4 0 -1 piston_head facing=up short=false type=normal p 0 -0.5 -1 air p 1 -0.5 -1 air p 2 -0.5 -1 air p 3 -0.5 -1 air p 4 -0.5 -1 air p 1 0 -2 powered=true p 2 0 -2 powered=true p 3 0 -2 powered=true p 4 0 -2 powered=true t 3 p 0 -1 -1 air p 1 0 -1 air p 2 0 -1 air p 3 0 -1 air p 4 0 -1 air p 0 -0.5 -1 piston_head facing=down short=true type=normal p 1 -0.5 -1 piston_head facing=up short=true type=normal p 2 -0.5 -1 piston_head facing=up short=true type=normal p 3 -0.5 -1 piston_head facing=up short=true type=normal p 4 -0.5 -1 piston_head facing=up short=true type=normal t 4 p 0 -0.5 -1 air p 1 -0.5 -1 air p 2 -0.5 -1 air p 3 -0.5 -1 air p 4 -0.5 -1 air p 0 0 -1 extended=false p 1 -1 -1 extended=false p 2 -1 -1 extended=false p 3 -1 -1 extended=false p 4 -1 -1 extended=false p 1 0 -2 powered=false p 2 0 -2 powered=false p 3 0 -2 powered=false p 4 0 -2 powered=false t 20 p 0 0 0 ``` #show raw.where(lang: "mc-diorama"): it => diorama( autoplay: true, loop: true, radius: 5, theta: 180, phi: 0, it.text, ) ``` prefix | BED --> 00 | A D G J ... 01 | B E H K ... 10 | C F I L ... ``` #show raw.where(lang: "mc-diorama"): it => diorama( autoplay: true, loop: true, radius: 9, phi: 30, theta: 110, speed: 0.4, it.text, ) ```mc-diorama p 0 0 -2 observer facing=south powered=false p 1 0 -2 observer facing=south powered=false p 2 0 -2 observer facing=south powered=false p 3 0 -2 observer facing=south powered=false p 0 -1 -1 piston facing=up extended=false p 1 -1 -1 piston facing=up extended=false p 2 -1 -1 piston facing=up extended=false p 3 -1 -1 piston facing=up extended=false p 4 0 -1 piston facing=down extended=false p -3 -1 0 smooth_stone_slab type=top p -2 -1 0 smooth_stone_slab type=top p -1 -1 0 smooth_stone_slab type=top p -3 0 0 repeater facing=west powered=false locked=false delay=1 p -2 0 0 comparator facing=west powered=false mode=compare p -1 0 0 observer facing=west powered=false p 0 0 0 light_gray_terracotta p 1 0 0 light_gray_terracotta p 2 0 0 light_gray_terracotta p 3 0 0 light_gray_terracotta p 4 0 0 light_gray_terracotta p 0 1 0 redstone_wire east=side west=side power=0 p 1 1 0 redstone_wire east=side west=side power=0 p 2 1 0 redstone_wire east=side west=side power=0 p 3 1 0 redstone_wire east=side west=side power=0 p 4 1 0 redstone_wire east=side west=side power=0 p 0 0 2 observer facing=south powered=false p 1 0 2 observer facing=south powered=false p 2 0 2 observer facing=south powered=false p 3 0 2 observer facing=south powered=false p 0 -1 3 piston facing=up extended=false p 1 -1 3 piston facing=up extended=false p 2 -1 3 piston facing=up extended=false p 3 -1 3 piston facing=up extended=false p 4 0 3 piston facing=down extended=false p -3 -1 4 smooth_stone_slab type=top p -2 -1 4 smooth_stone_slab type=top p -1 -1 4 smooth_stone_slab type=top p -3 0 4 comparator facing=west powered=false mode=compare p -2 0 4 repeater facing=west powered=false locked=false delay=1 p -1 0 4 observer facing=west powered=false p 0 0 4 cyan_terracotta p 1 0 4 cyan_terracotta p 2 0 4 cyan_terracotta p 3 0 4 cyan_terracotta p 4 0 4 cyan_terracotta p 0 1 4 redstone_wire east=side west=side power=0 p 1 1 4 redstone_wire east=side west=side power=0 p 2 1 4 redstone_wire east=side west=side power=0 p 3 1 4 redstone_wire east=side west=side power=0 p 4 1 4 redstone_wire east=side west=side power=0 p 0 0 6 observer facing=south powered=false p 1 0 6 observer facing=south powered=false p 2 0 6 observer facing=south powered=false p 3 0 6 observer facing=south powered=false p 0 -1 7 piston facing=up extended=false p 1 -1 7 piston facing=up extended=false p 2 -1 7 piston facing=up extended=false p 3 -1 7 piston facing=up extended=false p 4 0 7 piston facing=down extended=false p 5 -1 8 smooth_stone_slab type=top p 6 -1 8 smooth_stone_slab type=top p 7 -1 8 smooth_stone_slab type=top p 0 0 8 white_terracotta p 1 0 8 white_terracotta p 2 0 8 white_terracotta p 3 0 8 white_terracotta p 4 0 8 white_terracotta p 5 0 8 observer facing=east powered=false p 6 0 8 repeater facing=east powered=false locked=false delay=1 p 7 0 8 repeater facing=east powered=false locked=false delay=1 p 0 1 8 redstone_wire east=side west=side power=0 p 1 1 8 redstone_wire east=side west=side power=0 p 2 1 8 redstone_wire east=side west=side power=0 p 3 1 8 redstone_wire east=side west=side power=0 p 4 1 8 redstone_wire east=side west=side power=0 t 1 p -3 0 0 powered=true p -3 0 4 powered=true p 7 0 8 powered=true t 3 p -2 0 0 powered=true p -2 0 4 powered=true p 6 0 8 powered=true t 6 p -3 0 0 powered=false p -3 0 4 powered=false p 7 0 8 powered=false t 8 p 5 0 8 powered=true p 0 1 8 power=15 p 1 1 8 power=14 p 2 1 8 power=13 p 3 1 8 power=12 p 4 1 8 power=11 t 9 p -1 0 4 powered=true p 0 1 4 power=15 p 1 1 4 power=14 p 2 1 4 power=13 p 3 1 4 power=12 p 4 1 4 power=11 t 10 p -1 0 0 powered=true p 0 1 0 power=11 p 1 1 0 power=12 p 2 1 0 power=13 p 3 1 0 power=14 p 4 1 0 power=15 t 11 p 4 0 7 extended=true p 4 -1 7 piston_head type=normal facing=down short=false t 12 p 4 0 3 extended=true p 4 -1 3 piston_head type=normal facing=down short=false t 13 p 4 0 -1 extended=true p 4 -1 -1 piston_head type=normal facing=down short=false t 14 p 3 -1 7 extended=true p 3 0 7 piston_head type=normal facing=up short=false t 15 p 3 -1 3 extended=true p 3 0 3 piston_head type=normal facing=up short=false t 16 p 3 -1 -1 extended=true p 3 0 -1 piston_head type=normal facing=up short=false t 17 p 2 -1 7 extended=true p 2 0 7 piston_head type=normal facing=up short=false t 18 p 2 -1 3 extended=true p 2 0 3 piston_head type=normal facing=up short=false t 19 p 2 -1 -1 extended=true p 2 0 -1 piston_head type=normal facing=up short=false t 20 p 1 -1 7 extended=true p 1 0 7 piston_head type=normal facing=up short=false t 21 p 1 -1 3 extended=true p 1 0 3 piston_head type=normal facing=up short=false t 22 p 1 -1 -1 extended=true p 1 0 -1 piston_head type=normal facing=up short=false t 23 p 0 -1 7 extended=true p 0 0 7 piston_head type=normal facing=up short=false t 24 p 0 -1 3 extended=true p 0 0 3 piston_head type=normal facing=up short=false t 25 p 0 -1 -1 extended=true p 0 0 -1 piston_head type=normal facing=up short=false t 26 p -2 0 0 powered=false p -2 0 4 powered=false p 6 0 8 powered=false t 28 p 5 0 8 powered=false p 0 1 8 power=0 p 1 1 8 power=0 p 2 1 8 power=0 p 3 1 8 power=0 p 4 1 8 power=0 t 29 p -1 0 4 powered=false p 0 1 4 power=0 p 1 1 4 power=0 p 2 1 4 power=0 p 3 1 4 power=0 p 4 1 4 power=0 t 30 p -1 0 0 powered=false p 0 1 0 power=0 p 1 1 0 power=0 p 2 1 0 power=0 p 3 1 0 power=0 p 4 1 0 power=0 t 31 p 3 0 6 powered=true t 32 p 3 0 2 powered=true t 33 p 3 0 -2 powered=true t 34 p 2 0 6 powered=true t 35 p 2 0 2 powered=true t 36 p 2 0 -2 powered=true t 37 p 1 0 6 powered=true t 38 p 1 0 2 powered=true t 39 p 1 0 -2 powered=true t 40 p 0 0 6 powered=true t 41 p 0 0 2 powered=true t 42 p 0 0 -2 powered=true t 43 p 4 0 7 extended=false p 4 -1 7 air t 44 p 4 0 3 extended=false p 4 -1 3 air t 45 p 4 0 -1 extended=false p 4 -1 -1 air t 46 p 3 -1 7 extended=false p 3 0 7 air t 47 p 3 -1 3 extended=false p 3 0 3 air t 48 p 3 -1 -1 extended=false p 3 0 -1 air t 49 p 2 -1 7 extended=false p 2 0 7 air t 50 p 2 -1 3 extended=false p 2 0 3 air t 51 p 2 -1 -1 extended=false p 2 0 -1 air t 52 p 1 -1 7 extended=false p 1 0 7 air t 53 p 1 -1 3 extended=false p 1 0 3 air t 54 p 1 -1 -1 extended=false p 1 0 -1 air t 55 p 0 -1 7 extended=false p 0 0 7 air t 56 p 0 -1 3 extended=false p 0 0 3 air t 57 p 0 -1 -1 extended=false p 0 0 -1 air t 58 p 3 0 6 powered=false t 59 p 3 0 2 powered=false t 60 p 3 0 -2 powered=false t 61 p 2 0 6 powered=false t 62 p 2 0 2 powered=false t 63 p 2 0 -2 powered=false t 64 p 1 0 6 powered=false t 65 p 1 0 2 powered=false t 66 p 1 0 -2 powered=false t 67 p 0 0 6 powered=false t 68 p 0 0 2 powered=false t 69 p 0 0 -2 powered=false t 72 p 0 0 0 ``` #note()[This isn't *exactly* correct because the pistons take 2gt to extend and retract, but it correctly explains the update order of the observers] == Single-Priority Loops