I stuffed up the patch I sent yesterday, the remote display is out of sync by one piece. Blergh. So I fixed it up and here's a better and cleaner patch as a result. It completely supercedes the previous one I sent.
- Matt
diff -urN netris-0.52.orig/curses.c netris-0.52/curses.c
--- netris-0.52.orig/curses.c 2005-04-14 18:02:38.000000000 +1000
+++ netris-0.52/curses.c 2005-04-14 19:20:09.000000000 +1000
@@ -55,7 +55,8 @@
{ NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key };
static int boardYPos[MAX_SCREENS], boardXPos[MAX_SCREENS];
-static int statusYPos, statusXPos;
+int statusYPos, statusXPos;
+static int statusWidth = 30;
static int haveColor;
static int screens_dirty = 0;
@@ -199,10 +200,13 @@
boardXPos[scr] = 1;
else
boardXPos[scr] = boardXPos[scr - 1] +
- 2 * boardWidth[scr - 1] + 3;
+ 2 * boardWidth[scr - 1] + statusWidth +
4;
boardYPos[scr] = 22;
- if (statusXPos < boardXPos[scr] + 2 * boardWidth[scr] + 3)
- statusXPos = boardXPos[scr] + 2 * boardWidth[scr] + 3;
+
+ /* Status bar has a fixed position of 2 characters to the right of the
+ * local player's screen
+ */
+ statusXPos = boardXPos[0] + 2 * boardWidth[0] + 3;
for (y = boardVisible[scr] - 1; y >= 0; --y) {
move(boardYPos[scr] - y, boardXPos[scr] - 1);
addch('|');
@@ -281,11 +285,13 @@
}
move(statusYPos - 9, statusXPos);
+ addstr(" ");
+ move(statusYPos - 9, statusXPos);
printw("Seed: %d", initSeed);
- clrtoeol();
+ move(statusYPos - 8, statusXPos);
+ addstr(" ");
move(statusYPos - 8, statusXPos);
printw("Speed: %dms", speed / 1000);
- clrtoeol();
if (robotEnable) {
move(statusYPos - 6, statusXPos);
if (fairRobot)
@@ -317,12 +323,12 @@
if (pausedByThem)
addstr("Game paused by opponent");
else
- clrtoeol();
+ addstr(" ");
move(statusYPos - 2, statusXPos);
if (pausedByMe)
addstr("Game paused by you");
else
- clrtoeol();
+ addstr(" ");
}
ExtFunc void Message(char *s)
diff -urN netris-0.52.orig/game.c netris-0.52/game.c
--- netris-0.52.orig/game.c 2005-04-14 18:02:38.000000000 +1000
+++ netris-0.52/game.c 2005-04-15 22:46:36.207655832 +1000
@@ -79,16 +79,18 @@
exit(1);
}
+extern int statusXPos, statusYPos;
+
ExtFunc int StartNewPiece(int scr, Shape *shape)
{
curShape[scr] = shape;
curY[scr] = boardVisible[scr] + 4;
curX[scr] = boardWidth[scr] / 2;
- while (!ShapeVisible(shape, scr, curY[scr], curX[scr]))
+ while (!ShapeVisible(curShape[scr], scr, curY[scr], curX[scr]))
--curY[scr];
- if (!ShapeFits(shape, scr, curY[scr], curX[scr]))
+ if (!ShapeFits(curShape[scr], scr, curY[scr], curX[scr]))
return 0;
- PlotShape(shape, scr, curY[scr], curX[scr], 1);
+ PlotShape(curShape[scr], scr, curY[scr], curX[scr], 1);
return 1;
}
@@ -102,6 +104,7 @@
int pieceCount = 0;
int key;
char *p, *cmd;
+ Shape *nextLocalShape;
speed = stepDownInterval;
ResetBaseTime();
@@ -131,7 +134,16 @@
RobotCmd(0, "BeginGame\n");
RobotTimeStamp();
}
- while (StartNewPiece(scr, ChooseOption(stdOptions))) {
+
+ // Put an initial piece on the stack
+ nextLocalShape = ChooseOption(stdOptions);
+
+ while (StartNewPiece(scr, nextLocalShape)) {
+ nextLocalShape = ChooseOption(stdOptions);
+
+ move(statusYPos - 18, statusXPos);
+ printw("%c", nextLocalShape->shorthand);
+
if (robotEnable && !fairRobot)
RobotCmd(1, "NewPiece %d\n", ++pieceCount);
if (spied) {
diff -urN netris-0.52.orig/netris.h netris-0.52/netris.h
--- netris-0.52.orig/netris.h 2005-04-14 18:02:38.000000000 +1000
+++ netris-0.52/netris.h 2005-04-15 22:50:58.038851440 +1000
@@ -142,6 +142,7 @@
Dir initDir;
BlockType type;
Cmd *cmds;
+ char shorthand;
} Shape;
typedef struct _ShapeOption {
diff -urN netris-0.52.orig/shapes.c netris-0.52/shapes.c
--- netris-0.52.orig/shapes.c 2003-08-13 11:33:02.000000000 +1000
+++ netris-0.52/shapes.c 2005-04-14 19:42:31.000000000 +1000
@@ -28,44 +28,44 @@
#define PreDecl(name, dir) \
static Shape ShapeName(name, dir)
-#define StdShape(name, cmdName, mirror, type, realDir, dir, nextDir) \
+#define StdShape(name, cmdName, mirror, type, realDir, dir, nextDir,
character) \
static Shape ShapeName(name, dir) = { &ShapeName(name, nextDir), \
- 0, 0, mirror, D_ ## realDir, type, cmds_ ## cmdName }
+ 0, 0, mirror, D_ ## realDir, type, cmds_ ## cmdName, character}
-#define FourWayDecl(name, cmdName, mirror, type) \
+#define FourWayDecl(name, cmdName, mirror, type, character) \
PreDecl(name, down); \
- StdShape(name, cmdName, mirror, type, left, left, down); \
- StdShape(name, cmdName, mirror, type, up, up, left); \
- StdShape(name, cmdName, mirror, type, right, right, up); \
- StdShape(name, cmdName, mirror, type, down, down, right)
+ StdShape(name, cmdName, mirror, type, left, left, down, character); \
+ StdShape(name, cmdName, mirror, type, up, up, left, character); \
+ StdShape(name, cmdName, mirror, type, right, right, up, character); \
+ StdShape(name, cmdName, mirror, type, down, down, right, character)
-#define TwoWayDecl(name, cmdName, mirror, type) \
+#define TwoWayDecl(name, cmdName, mirror, type, character) \
PreDecl(name, vert); \
- StdShape(name, cmdName, mirror, type, right, horiz, vert); \
- StdShape(name, cmdName, mirror, type, down, vert, horiz)
+ StdShape(name, cmdName, mirror, type, right, horiz, vert, character); \
+ StdShape(name, cmdName, mirror, type, down, vert, horiz, character)
static Cmd cmds_long[] = { C_back, C_plot, C_forw, C_plot, C_forw, C_plot,
C_forw, C_plot, C_end };
-TwoWayDecl(long, long, 0, BT_blue);
+TwoWayDecl(long, long, 0, BT_blue, '|');
static Cmd cmds_square[] = { C_plot, C_forw, C_left, C_plot, C_forw, C_left,
C_plot, C_forw, C_left, C_plot, C_end };
static Shape shape_square = { &shape_square, 0, 0, D_up, 0, BT_magenta,
- cmds_square };
+ cmds_square, '#' };
static Cmd cmds_l[] = { C_right, C_back, C_plot, C_forw, C_plot, C_forw,
C_plot, C_left, C_forw, C_plot, C_end };
-FourWayDecl(l, l, 0, BT_cyan);
-FourWayDecl(l1, l, 1, BT_yellow);
+FourWayDecl(l, l, 0, BT_cyan, 'L');
+FourWayDecl(l1, l, 1, BT_yellow, 'J');
static Cmd cmds_t[] = { C_plot, C_forw, C_plot, C_back, C_right, C_forw,
C_plot, C_back, C_back, C_plot, C_end };
-FourWayDecl(t, t, 0, BT_white);
+FourWayDecl(t, t, 0, BT_white, 'T');
static Cmd cmds_s[] = { C_back, C_plot, C_forw, C_plot, C_left, C_forw,
C_plot, C_right, C_forw, C_plot, C_end };
-TwoWayDecl(s, s, 0, BT_green);
-TwoWayDecl(s1, s, 1, BT_red);
+TwoWayDecl(s, s, 0, BT_green, 'S');
+TwoWayDecl(s1, s, 1, BT_red, 'Z');
ShapeOption stdOptions[] = {
{1, &shape_long_horiz},
signature.asc
Description: Digital signature

