#N canvas 618 113 1254 596 12; #X obj 97 48 grid; #X obj 97 73 route 1; #X msg 21 28 connect; #N canvas 2 570 450 250 (subpatch) 0; #X array life0 128 float 2; #X coords 0 1 128 -1 200 140 1; #X restore 582 107 graph; #X obj 97 98 unpack f f; #X obj 97 141 +; #X obj 164 121 * 16; #X obj 120 193 tabread life0; #X obj 120 253 tabwrite life0; #X obj 120 218 == 0; #X obj 97 16 r grid; #X obj 97 166 t b f f; #X obj 97 276 s draw; #X obj 216 13 r draw; #X obj 276 141 bng 15 250 50 0 empty empty reset 17 7 0 10 -262144 -1 -1; #X msg 275 160 \; life0 const 0; #X obj 216 69 s grid; #N canvas 0 50 450 250 (subpatch) 0; #X array life1 128 float 2; #X coords 0 1 128 -1 200 140 1; #X restore 784 107 graph; #N canvas 413 342 714 757 neighbors 0; #X obj 152 41 inlet; #X obj 152 176 until; #X obj 152 201 f; #X obj 152 231 + 1; #X obj 205 327 t f f; #X obj 165 364 mod 3; #X obj 237 394 div 3; #X obj 165 414 +; #X msg 196 176 0; #X obj 152 149 t f b; #X obj 205 296 - 1; #X obj 165 389 * 16; #X obj 201 465 - 17; #X obj 165 485 +; #X obj 165 511 mod 128; #X text 240 458 has the effect of moving up a row and left a cell to start neighbor search (which should be correct); #X obj 201 420 r \$0-cell; #X obj 198 110 s \$0-cell; #X msg 152 121 8; #X obj 165 536 tabread life0; #X obj 165 561 +; #X obj 165 586 t f f; #X obj 147 614 f; #X obj 147 639 t f b; #X msg 192 639 0; #X obj 152 70 t b f, f 7; #X text 197 562 accumulator by IOhannes on #dataflow; #X obj 152 256 t f f, f 8; #X obj 149 281 sel 9; #X obj 147 664 outlet; #X connect 0 0 25 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 2 1; #X connect 3 0 27 0; #X connect 4 0 5 0; #X connect 4 1 6 0; #X connect 5 0 11 0; #X connect 6 0 7 1; #X connect 7 0 13 0; #X connect 8 0 2 0; #X connect 9 0 1 0; #X connect 9 1 8 0; #X connect 10 0 4 0; #X connect 11 0 7 0; #X connect 12 0 13 1; #X connect 13 0 14 0; #X connect 14 0 19 0; #X connect 16 0 12 0; #X connect 18 0 9 0; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 21 0 22 1; #X connect 21 1 20 1; #X connect 22 0 23 0; #X connect 23 0 29 0; #X connect 23 1 24 0; #X connect 24 0 21 0; #X connect 25 0 18 0; #X connect 25 1 17 0; #X connect 27 0 28 0; #X connect 27 1 10 0; #X connect 28 0 22 0; #X restore 304 419 pd neighbors; #N canvas 1180 376 692 562 draw-old 0; #X obj 44 92 until; #X obj 44 60 t f f; #X msg 88 92 0; #X obj 44 129 f; #X obj 44 155 + 1; #X obj 44 180 - 1; #X msg 44 35 127; #X obj 115 252 tabread life0; #X obj 44 204 t f f f; #X obj 67 252 mod 16; #X obj 18 252 div 16; #X obj 34 315 pack f f f; #X msg 34 340 set \$2 \$1 \$3; #X obj 44 9 inlet; #X obj 34 365 outlet; #X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc messages to 4; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 1 1 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 3 1; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 1 0; #X connect 7 0 11 2; #X connect 8 0 10 0; #X connect 8 1 9 0; #X connect 8 2 7 0; #X connect 9 0 11 1; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 14 0; #X connect 13 0 6 0; #X restore 830 53 pd draw-old; #X msg 305 232 128; #X obj 304 287 until; #X obj 304 312 f; #X obj 304 337 + 1; #X obj 305 257 t f b; #N canvas 1180 376 692 562 draw-old 0; #X obj 44 92 until; #X obj 44 60 t f f; #X msg 88 92 0; #X obj 44 129 f; #X obj 44 155 + 1; #X obj 44 180 - 1; #X msg 44 35 127; #X obj 115 252 tabread life0; #X obj 44 204 t f f f; #X obj 67 252 mod 16; #X obj 18 252 div 16; #X obj 34 315 pack f f f; #X msg 34 340 set \$2 \$1 \$3; #X obj 44 9 inlet; #X obj 34 365 outlet; #X text 88 8 TODO optimise. Could use grid/map to reduce from 128 osc messages to 4; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 1 1 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 3 1; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 1 0; #X connect 7 0 11 2; #X connect 8 0 10 0; #X connect 8 1 9 0; #X connect 8 2 7 0; #X connect 9 0 11 1; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 14 0; #X connect 13 0 6 0; #X restore 216 40 pd draw-old; #X msg 356 291 0; #X obj 304 362 - 1; #X obj 304 444 sel 4 3, f 9; #X msg 364 475 0; #X msg 334 475 1; #X obj 334 537 tabwrite life1; #X obj 254 473 spigot; #X obj 235 498 tabread life0; #X obj 304 387 t f f f f, f 18; #X obj 50 407 sel 127; #X obj 82 458 array get life1 0 128; #X obj 50 432 t b b; #X obj 82 483 array set life0 0 128; #X text 307 11 this could all be optimised \, but I went for a "simple" solution \, and I'm bad at patching. TODO optimise drawing \, implement sample triggers; #X obj 50 512 s draw; #X connect 0 0 1 0; #X connect 1 0 4 0; #X connect 2 0 0 0; #X connect 4 0 5 0; #X connect 4 1 6 0; #X connect 5 0 11 0; #X connect 6 0 5 1; #X connect 7 0 9 0; #X connect 9 0 8 0; #X connect 10 0 0 0; #X connect 11 0 12 0; #X connect 11 1 7 0; #X connect 11 2 8 1; #X connect 13 0 25 0; #X connect 14 0 15 0; #X connect 18 0 28 0; #X connect 20 0 24 0; #X connect 21 0 22 0; #X connect 22 0 23 0; #X connect 23 0 27 0; #X connect 23 0 22 1; #X connect 24 0 21 0; #X connect 24 1 26 0; #X connect 25 0 16 0; #X connect 26 0 22 1; #X connect 27 0 34 0; #X connect 28 0 32 1; #X connect 28 1 30 0; #X connect 28 2 29 0; #X connect 29 0 31 0; #X connect 30 0 31 0; #X connect 32 0 33 0; #X connect 33 0 31 0; #X connect 34 0 35 0; #X connect 34 1 32 0; #X connect 34 2 18 0; #X connect 34 3 31 1; #X connect 35 0 37 0; #X connect 36 0 38 0; #X connect 37 0 40 0; #X connect 37 1 36 0;