for (y = Players[scr].boardVisible - 1; y >= 0; y--)
if ((c = changed[scr][y])) { //line changed
for (x = 0; c; (c >>= 1), x++)
- if ((c & 1) && board[scr][y][x] != oldBoard[scr][y][x]) {
+ if (c & 1 && board[scr][y][x] != oldBoard[scr][y][x]) {
PlotBlock(scr, y, x, board[scr][y][x]);
oldBoard[scr][y][x] = board[scr][y][x];
}
if (!Game.gravity) return 0;
for (y = Players[scr].boardHeight - 1; y > 0; y--)
for (x = 0; x < Players[scr].boardWidth; x++) {
- if (((z = GetBlock(scr, y, x)) > BT_none) && ((z & 160) == 0)) {
+ if ((z = GetBlock(scr, y, x)) > BT_none && (z & 160) == 0) {
//doesn't stick left/up => topleft block
if (BlockFree(scr, x, y, 240)) {
BlockFall(scr, x, y, 240);
while (LineIsFull(scr, from)) {
from++; //skip
for (x = 0; x<Players[scr].boardWidth; x++) {
- SetBlock(scr, from, x, GetBlock(scr, from, x)&239);
+ SetBlock(scr, from, x, GetBlock(scr, from, x) & 239);
if (from > 1)
- SetBlock(scr, from-2, x, GetBlock(scr, from-2, x)&223);
+ SetBlock(scr, from-2, x, GetBlock(scr, from-2, x) & 223);
} //don't stick blocks to line which we'll remove
} //full lines
CopyLine(scr, from++, to++);
CopyLine(scr, y, y + count);
for (y = 0; y < count; ++y)
for (x = 0; x < Players[scr].boardWidth; ++x)
- SetBlock(scr, y, x, (x == column) ? BT_none : color + 1
+ SetBlock(scr, y, x, x == column ? BT_none : color + 1
+ 64 * (x != column-1 && x < Players[scr].boardWidth-1)
+ 128 * (x != column+1 && x > 0));
Players[scr].curY += count; //move piece up..
* Ctrl-C during initialization might leave the terminal in a bad state.
*/
BlockSignals(&oldMask, SIGINT, 0);
- initscr(); //start curses
+ initscr(); //start curses
#ifdef CURSES_HACK
{
messageXPos = 2;
messageYPos = 24;
- if ((messageWidth = x - messageXPos - 2) > MSG_WIDTH) messageWidth = MSG_WIDTH;
- if ((messageHeight = y - messageYPos - 1) > MSG_HEIGHT) messageHeight = MSG_HEIGHT;
+ messageWidth = MIN(x - messageXPos - 2, MSG_WIDTH);
+ messageHeight = MIN(y - messageYPos - 1, MSG_HEIGHT);
if (messageHeight <= 0) {
messageWidth = 27;
messageHeight = y - 3;
DrawBox(messageXPos - 2, messageYPos - 1,
messageXPos + messageWidth + 1, messageYPos+messageHeight);
if (msgwin = subwin(stdscr, messageHeight, messageWidth,
- messageYPos, messageXPos))
+ messageYPos, messageXPos))
scrollok(msgwin, 1); //allow scrolling
wmove(msgwin, messageHeight - 2, 0);
for (scr = messageHeight - 2; scr >= 0; scr--) //display message history
while (psearch = strchr(p, '\\')) {
*psearch = '\0';
waddstr(msgwin, p);
- c = atoi(++psearch)+1;
+ c = atoi(++psearch) + 1;
if (haveColor) wattrset(msgwin, A_REVERSE | COLOR_PAIR(c));
p = ++psearch;
} //search for color escapes (\)
mvaddstr(13, statusXPos, MSG_NEXT " ");
mvaddstr(14, statusXPos + 5, " ");
- ShapeIterate(Players[scr].nextShape, scr,
- 8, statusXPos/2 + (Players[scr].nextShape/4 == 5 ? 3 : 4),
+ ShapeIterate(Players[scr].nextShape, scr, 8,
+ statusXPos/2 + (Players[scr].nextShape/4 == 5 ? 3 : 4),
GlanceFunc); //draw; stick one more to the left
mvprintw(3, statusXPos, MSG_LEVEL, score.level);
mvprintw(5, statusXPos, MSG_SCORE, score.score);
Game.initspeed = atof(value) * 1e6;
break;
case 'l': //level
- if ((Players[0].score.level = atof(value)) < 1)
- Players[0].score.level = 1;
- if (Players[0].score.level > 15)
- Players[0].score.level = 15;
+ Players[0].score.level = MIN(MAX(atof(value), 1), 15);
break;
case 'n': //nick
memcpy(Players[0].name, value, strlen(value) + 1);
short junkLines;
netint4 data[1];
- if (Game.gravity) junkLines = linesCleared - 1;
- else junkLines = linesCleared - (linesCleared < 4);
+ junkLines = linesCleared - (Game.gravity ? 1 : linesCleared < 4);
data[0] = junkLines;
SendPacket(me, NP_giveJunk, sizeof(data), data);
Message("\\%dYou send %d lines",
Message("<\\%d%s\\7> %s",
Players[me].team > 7 ? 7 : Players[me].team,
Players[me].name, chatText);
- if (game==GT_classicTwo)
+ if (game == GT_classicTwo)
SendPacket(me, NP_msg, strlen(chatText) + 1, chatText);
memset(chatText, 0, sizeof(chatText));
} //say it
return;
} //leave chat mode
} //enter pressed (start/stop chat mode)
+
if (chatMode) {
if (key == 27) //escape
chatMode = 0;
Messagetype(key, strlen(chatText) - 1, chatText);
return;
} //key in chat mode
+
if (!(p = strchr(keyTable, tolower(key)))) return;
key = p - keyTable;
if (Players[me].alive <= 0 && key != KT_quit) return;
break;
} //(un)pause
case NP_part:
+ // player left
checkPaused();
oldPaused = 0;
- {
Players[net.uid].alive = -1;
Message("%s left", Players[net.uid].name);
checkPaused();
ShowPause(net.uid);
changed = 1;
break;
- } //player left
case NP_argghhh:
{
char i;
memcpy(&i, net.data, sizeof(i));
Players[net.uid].alive = 0;
- if (i == me) Message("\\%dYou fragged %s",
+ if (i == me)
+ Message("\\%dYou fragged %s",
Players[me].team > 7 ? 7 : Players[me].team, Players[net.uid].name);
- else if (i==net.uid)
+ else if (i == net.uid)
Message("\\%d%s died",
Players[i].team > 7 ? 7 : Players[i].team, Players[i].name);
else
}
else
fatal("Hm, the party apparantly ended prematurely.");
- }
- while (event.u.net.type != NP_gamedata);
+ } while (event.u.net.type != NP_gamedata);
}
fprintf(stderr, "- Closing connections...\n");
for (i = 1; i < MAX_SCREENS; i++)
- SCloseNet(i); //bye everybuddy
+ SCloseNet(i); // bye everybuddy
fprintf(stderr, "* All Done\n\n");
}
if (gen->bufSize < gen->bufGoal)
return E_none;
// *ugly* memcpy(data, gen->buf, sizeof(data));
- uid = ntoh4(data[0]);
+ uid = ntoh4(data[0]);
type = ntoh4(data[1]);
size = ntoh4(data[2]);
gen->bufGoal = size;
if (netGen[new].fd < 0) break;
if (new > maxplayers) return;
- if ((netGen[new].fd =
- accept(gen->fd, (struct sockaddr *)&addr, &addrLen)) < 0)
- die("accept");
+ if ((
+ netGen[new].fd = accept(gen->fd, (struct sockaddr *)&addr, &addrLen)
+ ) < 0)
+ die("accept");
fprintf(stderr, "+ Connection: %s\n", inet_ntoa(addr.sin_addr));
val2.l_onoff = 1;
val2.l_linger = 0;
sprintf(Players[new].host, "%s", inet_ntoa(addr.sin_addr));
if (addr.sin_family == AF_INET) {
- host = gethostbyaddr((void *)&addr.sin_addr,
- sizeof(struct in_addr), AF_INET);
+ host = gethostbyaddr(
+ (void *)&addr.sin_addr, sizeof(struct in_addr), AF_INET
+ );
if (host) {
strncpy(Players[new].host, host->h_name,
sizeof(Players[new].host) - 1);
int i, j;
playercount = 0;
for (i = 1; i < MAX_SCREENS; i++) if (Players[i].alive > 0) {
- if (Players[i].team < 128) for (j = 1; j < i; j++)
- if (Players[j].alive > 0 && (Players[j].team == Players[i].team)) {
- playercount--;
+ if (Players[i].team < 128) for (j = 1; j < i; j++) {
+ if (Players[j].alive > 0 && Players[j].team == Players[i].team) {
+ playercount--; // player of same team counted before
break;
- } //player of same team counted before
+ }
+ }
playercount++;
} //player alive
}
int major;
int protocolVersion;
- memcpy(versiondata, event.u.net.data,
- sizeof(versiondata));
+ memcpy(versiondata, event.u.net.data, sizeof(versiondata));
major = ntoh4(versiondata[0]);
protocolVersion = ntoh4(versiondata[1]);
if (major != MAJOR_VERSION
memcpy(&Players[event.u.net.sender],
event.u.net.data, event.u.net.size);
if (Players[event.u.net.sender].team < 1
- || Players[event.u.net.sender].team > 7) {
+ || Players[event.u.net.sender].team > 7) {
int team;
for (team = 1; team < 7; team++) {
for (i = 1; i < MAX_SCREENS; i++)
- if ((Players[i].alive > 0) && (Players[i].team == team))
+ if (Players[i].alive > 0 && Players[i].team == team)
break; //team in use
- if (i==MAX_SCREENS) break;
+ if (i == MAX_SCREENS) break;
} //find unused team
Players[event.u.net.sender].team = team;
SendPacketTo(event.u.net.sender, event.u.net.sender, NP_team,
} //send game options
for (i = 1; i < MAX_SCREENS; i++)
if (netGen[i].fd >= 0 && i != event.u.net.sender) {
- SendPacketTo(event.u.net.sender, i,
- NP_newPlayer, sizeof(_Player), &Players[i]);
+ SendPacketTo(event.u.net.sender, i, NP_newPlayer,
+ sizeof(_Player), &Players[i]);
SendPacketTo(event.u.net.sender, i, NP_newPiece,
sizeof(Players[i].curShape), &Players[i].curShape);
SendPacketTo(i, event.u.net.sender, NP_newPlayer,
break;
for (i = 1; i < MAX_SCREENS; i++)
if (i != event.u.net.sender)
- if (event.u.net.type != NP_giveJunk ||
- Players[i].team != Players[event.u.net.sender].team)
+ if (event.u.net.type != NP_giveJunk
+ || Players[i].team != Players[event.u.net.sender].team)
SendPacketTo(i, event.u.net.sender,
event.u.net.type, event.u.net.size,
event.u.net.data);
} //event
CountPlayers();
if (Game.started < 1) {
- if (playercount > 1) {
+ if (playercount >= 2) {
fprintf(stderr, "* Game (%010d) ready to start\n", Game.seed);
Game.started++;
} //give goahead
if (playercount < 2) {
fprintf(stderr, "* Stopping game\n");
if (Game.seed) Game.seed++;
- if (Game.started > 1) for (i = 1; i < MAX_SCREENS; i++)
+ if (Game.started > 1) for (i = 1; i < MAX_SCREENS; i++) {
if (Players[i].alive >= 0) {
Players[i].alive = 1;
Players[i].flags |= SCF_paused;
SendPacketTo(i, 0, NP_stop,
sizeof(Game.seed), &Game.seed);
} //transmit game stop and set players not ready
+ }
paused = 1;
Game.started = 0;
} //too few players for game
minplayers = atoi(value);
break;
case 'x': //max-players
- maxplayers = atoi(value);
- if (maxplayers >= MAX_SCREENS)
- maxplayers = MAX_SCREENS;
+ maxplayers = MIN(atoi(value), MAX_SCREENS);
break;
case 'q': //quadra-style gravity
Game.gravity ^= 1;
break;
case 'H': //info
SHeader();
- DistInfo(); exit(0);
+ DistInfo();
+ exit(0);
case 'h': //help
- SUsage(); exit(0);
+ SUsage();
+ exit(0);
default:
break;
}
#ifndef __UTIL_H
#define __UTIL_H
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
extern void AtExit(void (*handler)(void));
extern void Header(void);
extern void Usage(void);