--- xlib_bw_120x80.c	2026-01-13 22:14:56.733931548 +0100
+++ xlib_bw_120x80w.c	2026-01-16 02:15:25.273203391 +0100
@@ -106,18 +106,19 @@
 struct _elem {
   unsigned int x;
   unsigned int y;
+  unsigned int pow;
   enum _dir dir;
   int dx; // dest
   int dy;
 };
 
 struct _elem elems[] = {
-  { 10, 10, RIGHT,  -1, -1 },
-  { 20, 15, BOTTOM, -1, -1 },
-  { 15,  5, LEFT,   -1, -1 },
-  { 15, 20, TOP,    -1, -1 },
-  { 35, 30, RIGHT,  -1, -1 },
-  { 55, 50, BOTTOM, -1, -1 },
+  { 10, 10, 100, RIGHT,  -1, -1 },
+  { 20, 15, 100, BOTTOM, -1, -1 },
+  { 15,  5, 100, LEFT,   -1, -1 },
+  { 15, 20, 100, TOP,    -1, -1 },
+  { 35, 30, 100, RIGHT,  -1, -1 },
+  { 55, 50, 100, BOTTOM, -1, -1 },
 };
 
 struct _controler {
@@ -130,6 +131,7 @@
   { 105,  4, "d" },
   { 105, 20, "c" },
   { 105, 36, "p" },
+  { 105, 52, "w" },
 };
 
 struct _clb { // collectible
@@ -178,6 +180,15 @@
 }
 
 void
+induction_wave()
+{
+  for (int e = 0; e < sizeof(elems) / sizeof(struct _elem); e++) {
+    struct _elem *elm = &elems[e];
+    if (elm->pow == 0) elm->pow += 100;
+  }
+}
+
+void
 print_collectible()
 {
   for (int d = 0; d < sizeof(collectibles) / sizeof(struct _clb); d++) {
@@ -375,7 +386,7 @@
 {
   for (int d = 0; d < sizeof(elems) / sizeof(struct _elem); d++) {
     struct _elem *elm = &elems[d];
-    printf("# %2d: %2d, %2d ; %d ", d, elm->x, elm->y, elm->dir);
+    printf("# %2d: %2d, %2d ; %d ; %3d ", d, elm->x, elm->y, elm->dir, elm->pow);
     printf("; %2d, %2d\n", elm->dx, elm->dy);
   }
   printf("\n");
@@ -516,21 +527,31 @@
     for (int d = 0; d < sizeof(elems) / sizeof(struct _elem); d++) {
       struct _elem *elm = &elems[d];
       XDrawElem(ximg, map, elm->x, elm->y);
-      if (elm->dx == -1 && elm->dy == -1) {
-        dir_move(elm);
-        pos_wrap(elm);
-        rand_turn(elm);
-      } else {
-        int r;
-        r = dir_dest(elm);
-        if (r) {
+      if (elm->pow > 0) { elm->pow--; }
+      else {
+        elm->dx = -1;
+        elm->dy = -1;
+      }
+      if (elm->pow > 0) {
+        if (elm->dx == -1 && elm->dy == -1) {
           dir_move(elm);
-        } else { // dest-reach'd
-          int r = rem_collectible(elm->x, elm->y);
-          if (r) printf(" [%d] <= (%d,%d)\n", d, elm->x, elm->y);
+          pos_wrap(elm);
           rand_turn(elm);
-          elm->dx = -1;
-          elm->dy = -1;
+        } else {
+          int r;
+          r = dir_dest(elm);
+          if (r) {
+            dir_move(elm);
+          } else { // dest-reach'd
+            int r = rem_collectible(elm->x, elm->y);
+            if (r) {
+              printf(" [%d] <= (%d,%d)\n", d, elm->x, elm->y);
+              elm->pow += 100;
+            }
+            rand_turn(elm);
+            elm->dx = -1;
+            elm->dy = -1;
+          }
         }
       }
     }
@@ -563,6 +584,9 @@
             print_collectible();
             print_elms();
             break;
+          case 'w':
+            induction_wave();
+            break;
         }
       }
     }
