The tetris playing field has an extra row on top of the visible rows.
It is possible and not an error to place a tile in such a way that it
occupies a square of this invisible row (the game ends when the next
tile starts out on an already occupied square).
The problem with this is that there's a bug in the function eliding
rows: it never clears the extra row.
This means that once a square in the extra row is occupied, it remains
occupied. In other words, the column becomes unusable for game play.
This is helpful if one of the two columns at the border of the playing
field is concerned (you will be able to can clear future rows quicker)
and deadly otherwise (you soon won't be able to clear rows anymore).
So let's clear that extra row whenever a row is elided.
Index: tetris.c
===================================================================
RCS file: /var/cvs/src/games/tetris/tetris.c,v
retrieving revision 1.30
diff -u -p -r1.30 tetris.c
--- tetris.c 7 Mar 2016 12:07:57 -0000 1.30
+++ tetris.c 10 Jun 2016 03:09:10 -0000
@@ -105,6 +105,7 @@ elide(void)
tsleep();
while (--base != 0)
board[base + B_COLS] = board[base];
+ memset(&board[1], 0, B_COLS - 2);
scr_update();
tsleep();
break;