X-Git-Url: http://git.shiar.net/netris.git/blobdiff_plain/0e934ad47c5e35e9a652dbe56961a707a32e7a54..1e54ff896419cfb2a3e5e576e75713c4fbeeed5b:/game.c diff --git a/game.c b/game.c index f26e07a..fcc2379 100644 --- a/game.c +++ b/game.c @@ -15,8 +15,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: game.c,v 1.39 1999/05/16 06:56:27 mhw Exp $ */ #define NOEXT @@ -52,14 +50,17 @@ static struct option options[] = { { 0, 0, 0, 0 } }; -enum { KT_left, KT_right, KT_rotright, KT_rotleft, KT_drop, KT_down, - KT_faster, KT_pause, KT_redraw, KT_quit, KT_numKeys }; +enum { + KT_left, KT_right, KT_rotright, KT_rotleft, KT_drop, KT_down, + KT_faster, KT_pause, KT_redraw, KT_quit, KT_numKeys +}; static char *keyNames[KT_numKeys+1] = { "Left", "Right", "RotRight", "RotLeft", "Drop", "Down", - "Faster", "Pause", "Redraw", "Quit", NULL }; + "Faster", "Pause", "Redraw", "Quit", NULL +}; -_Sets Sets = {7, 0, 1, 1, 1}; //Sets +_Sets Sets = {7, 0, 1, 1, 1}; static char keyTable[KT_numKeys+1]; @@ -121,54 +122,60 @@ void WriteConf(void) void HandleOption(char tag, char *value) { switch (tag) { - case 'a': //ascii - if (value && !strcasecmp(value, "0")) Sets.ascii = 0; - else Sets.ascii = 1; - break; - case 'c': //connect - game = GT_classicTwo; - hostStr = value; - break; - case 'p': //port - port = atoi(value); - break; - case 'i': //speed (of level 1) - 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; - break; - case 'n': //nick - memcpy(Players[0].name, value, strlen(value) + 1); - break; - case 't': //team - Players[0].team = atoi(value); - break; - case 'd': //dropmode - Sets.dropmode = atoi(value); - break; - case 'C': //color - if (value && !strcasecmp(value, "1")) Sets.color = 1; - else Sets.color = 0; - break; - case 'S': //slowterm - if (value && !strcasecmp(value, "1")) Sets.standout = 1; - else Sets.standout = 0; - break; - case 'k': //keys - MapKeys(value); break; - case 'H': //info - Header(); - DistInfo(); exit(0); - case 'R': //rules - Rules(); exit(0); - case 'h': //help - Usage(); exit(0); - default: - Usage(); exit(1); + case 'a': //ascii + if (value && !strcasecmp(value, "0")) Sets.ascii = 0; + else Sets.ascii = 1; + Sets.drawstyle &= ~Sets.ascii; + break; + case 'c': //connect + game = GT_classicTwo; + hostStr = value; + break; + case 'p': //port + port = atoi(value); + break; + case 'i': //speed (of level 1) + 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; + break; + case 'n': //nick + memcpy(Players[0].name, value, strlen(value) + 1); + break; + case 't': //team + Players[0].team = atoi(value); + break; + case 'd': //dropmode + Sets.dropmode = atoi(value); + break; + case 'C': //color + if (value && !strcasecmp(value, "1")) Sets.color = 1; + else Sets.color = 0; + break; + case 'S': //slowterm + if (value && !strcasecmp(value, "1")) Sets.standout = 1; + else Sets.standout = 0; + break; + case 'k': //keys + MapKeys(value); + break; + case 'H': //info + Header(); + DistInfo(); + exit(0); + case 'R': //rules + Rules(); + exit(0); + case 'h': //help + Usage(); + exit(0); + default: + Usage(); + exit(1); } } @@ -185,7 +192,7 @@ void ReadConf(char *filename) while (fgets(buf, 512, file_in) != NULL) { if ((ch = strchr(buf, '#'))) *ch = '\0'; // truncate string from # char - for (i = strlen(buf)-1; i >= 0; i--) + for (i = strlen(buf) - 1; i >= 0; i--) if (buf[i] == ' ' || buf[i] == '\n' || buf[i] == '\t' || buf[i] == 13) buf[i] = '\0'; else break; @@ -345,69 +352,69 @@ void OneGame(void) if (Players[me].alive <= 0 && key != KT_quit) return; if (paused && key < KT_pause) return; switch (key) { - case KT_left: - if (MovePiece(me, 0, -1) && spied) SendPacket(me, NP_left, 0, NULL); - break; - case KT_right: - if (MovePiece(me, 0, 1) && spied) SendPacket(me, NP_right, 0, NULL); - break; - case KT_rotleft: - if (RotatePiece(me, -1) && spied) SendPacket(me, NP_rotleft, 0, NULL); - break; - case KT_rotright: - if (RotatePiece(me, 1) && spied) SendPacket(me, NP_rotright, 0, NULL); - break; - case KT_down: - SetITimer(Game.speed, Game.speed); - if (MovePiece(me, -1, 0)) { - if (spied) SendPacket(me, NP_down, 0, NULL); - } //move one down - else - gameStatus = 1; //completely dropped - break; - case KT_drop: - SetITimer(Game.speed, Game.speed); - if (DropPiece(me)) { - if (spied) SendPacket(me, NP_drop, 0, NULL); - if (!Sets.dropmode) gameStatus = 1; //instadrop - } - else gameStatus = 1; //dropped - dropMode = Sets.dropmode>1; - break; - case KT_faster: - if (game != GT_onePlayer) break; - if ((Game.speed /= SPEEDINC) < SPEEDMINIMUM) - Game.speed = SPEEDMINIMUM; - SetITimer(Game.speed, SetITimer(0, 0)); - Players[me].score.level++; - ShowScore(me, Players[me].score); - changed = 1; - break; - case KT_pause: - Players[me].flags ^= SCF_paused; - if (Game.started > 1) - Message(Players[me].flags & SCF_paused - ? "You paused the game" : "You unpaused the game"); - else - Message(Players[me].flags & SCF_paused - ? "You are not ready" : "You are ready"); - checkPaused(); - if (game == GT_classicTwo) - SendPacket(me, NP_pause, 0, NULL); - ShowPause(me); - changed = 1; - break; - case KT_redraw: - clear(); - InitFields(); -// ScheduleFullRedraw(); - refresh(); - break; - case KT_quit: - ShowPause(me); - refresh(); - gameStatus = 0; - break; + case KT_left: + if (MovePiece(me, 0, -1) && spied) SendPacket(me, NP_left, 0, NULL); + break; + case KT_right: + if (MovePiece(me, 0, 1) && spied) SendPacket(me, NP_right, 0, NULL); + break; + case KT_rotleft: + if (RotatePiece(me, -1) && spied) SendPacket(me, NP_rotleft, 0, NULL); + break; + case KT_rotright: + if (RotatePiece(me, 1) && spied) SendPacket(me, NP_rotright, 0, NULL); + break; + case KT_down: + SetITimer(Game.speed, Game.speed); + if (MovePiece(me, -1, 0)) { + if (spied) SendPacket(me, NP_down, 0, NULL); + } //move one down + else + gameStatus = 1; //completely dropped + break; + case KT_drop: + SetITimer(Game.speed, Game.speed); + if (DropPiece(me)) { + if (spied) SendPacket(me, NP_drop, 0, NULL); + if (!Sets.dropmode) gameStatus = 1; //instadrop + } + else gameStatus = 1; //dropped + dropMode = Sets.dropmode > 1; + break; + case KT_faster: + if (game != GT_onePlayer) break; + if ((Game.speed /= SPEEDINC) < SPEEDMINIMUM) + Game.speed = SPEEDMINIMUM; + SetITimer(Game.speed, SetITimer(0, 0)); + Players[me].score.level++; + ShowScore(me, Players[me].score); + changed = 1; + break; + case KT_pause: + Players[me].flags ^= SCF_paused; + if (Game.started > 1) + Message(Players[me].flags & SCF_paused + ? "You paused the game" : "You unpaused the game"); + else + Message(Players[me].flags & SCF_paused + ? "You are not ready" : "You are ready"); + checkPaused(); + if (game == GT_classicTwo) + SendPacket(me, NP_pause, 0, NULL); + ShowPause(me); + changed = 1; + break; + case KT_redraw: + clear(); + InitFields(); +// ScheduleFullRedraw(); + refresh(); + break; + case KT_quit: + ShowPause(me); + refresh(); + gameStatus = 0; + break; } //E_key if (dropMode && DropPiece(me) > 0) { SetITimer(Game.speed, Game.speed); @@ -463,11 +470,11 @@ void OneGame(void) netint4 data[3]; short column; - if (Players[me].alive<=0) break; + if (Players[me].alive <= 0) break; memcpy(data, net.data, sizeof(data[0])); column = Random(0, Players[me].boardWidth); Message("\\%d%s sends %d lines", - Players[net.uid].team>7 ? 7 : Players[net.uid].team, + Players[net.uid].team > 7 ? 7 : Players[net.uid].team, Players[net.uid].name, data[0]); lastadd = net.uid; InsertJunk(me, Players[net.uid].team, data[0], column); @@ -481,7 +488,7 @@ void OneGame(void) case NP_msg: { Message("<\\%d%s\\7> %s", - Players[net.uid].team>7 ? 7 : Players[net.uid].team, + Players[net.uid].team > 7 ? 7 : Players[net.uid].team, Players[net.uid].name, net.data, net.type); break; } //chat @@ -492,30 +499,30 @@ void OneGame(void) Game.started = 2; paused = 0; Message("The game has started"); - for (i = 1; i0) + for (i = 1; i < MAX_SCREENS; i++) if (Players[i].alive > 0) ShowPause(i); break; } //start game case NP_stop: { - if (Game.started>1) { + if (Game.started > 1) { int winner; float timer; int i; Message("The game has ended"); - timer = CurTimeval()/1e6; - if (timer>5) { - for (i = MAX_SCREENS-1; i>0; i--) if (Players[i].alive>=0) { + timer = CurTimeval() / 1e6; + if (timer > 5) { + for (i = MAX_SCREENS-1; i > 0; i--) if (Players[i].alive >= 0) { Message("\\%d%10s%6.1fp%5.1fa", - Players[i].team>7 ? 7 : Players[i].team, Players[i].name, - Players[i].score.pieces/timer*60, - Players[i].score.adds/timer*60); - if (Players[i].alive>0) winner = i; + Players[i].team > 7 ? 7 : Players[i].team, Players[i].name, + Players[i].score.pieces / timer * 60, + Players[i].score.adds / timer * 60); + if (Players[i].alive > 0) winner = i; } //show player stats if (winner) Message("%s won after %0.0f'%02d\"", - Players[winner].name, timer/60, (int)timer%60); + Players[winner].name, timer / 60, (int)timer % 60); } //show game stats Message(NULL); } //game was playing @@ -524,7 +531,7 @@ void OneGame(void) { int i; - for (i = 1; i=0) { + for (i = 1; i < MAX_SCREENS; i++) if (Players[i].alive >= 0) { Players[i].alive = 1; Players[i].flags |= SCF_paused; } //reset players @@ -546,12 +553,12 @@ void OneGame(void) memcpy(&Players[net.uid], net.data, net.size); ClearField(net.uid); InitFields(); - if (Players[net.uid].team>7) + if (Players[net.uid].team > 7) Message("%s joined the game", Players[net.uid].name); else Message("%s joined %s team", Players[net.uid].name, teams[Players[net.uid].team]); - if (Players[net.uid].flags&SCF_paused) { + if (Players[net.uid].flags & SCF_paused) { checkPaused(); } //player has paused // DrawField(net.uid); @@ -564,7 +571,7 @@ void OneGame(void) char s[20]; Players[net.uid].flags ^= SCF_paused; - if (Game.started>1) + if (Game.started > 1) strcpy(s, Players[net.uid].flags&SCF_paused ? "paused the game" : "unpaused the game"); else @@ -593,13 +600,13 @@ void OneGame(void) memcpy(&i, net.data, sizeof(i)); Players[net.uid].alive = 0; if (i == me) Message("\\%dYou fragged %s", - Players[me].team>7 ? 7 : Players[me].team, Players[net.uid].name); + Players[me].team > 7 ? 7 : Players[me].team, Players[net.uid].name); else if (i==net.uid) Message("\\%d%s died", - Players[i].team>7 ? 7 : Players[i].team, Players[i].name); + Players[i].team > 7 ? 7 : Players[i].team, Players[i].name); else Message("\\%d%s fragged %s", - Players[i].team>7 ? 7 : Players[i].team, Players[i].name, + Players[i].team > 7 ? 7 : Players[i].team, Players[i].name, Players[net.uid].name); checkPaused(); ShowPause(net.uid); @@ -656,21 +663,21 @@ GameLoop: if (playercount < 1) gameStatus = 0; } switch (WaitMyEvent(&event, EM_any)) { - case E_alarm: - if (!paused && Players[me].alive > 0) - if (!MovePiece(me, -1, 0)) //move down - gameStatus = 1; //new piece - else - if (spied) SendPacket(me, NP_down, 0, NULL); - break; - case E_key: - GameKey(event.u.key); - break; - case E_net: - GameNet(event.u.net); - break; - case E_lostConn: - goto gameOver; + case E_alarm: + if (!paused && Players[me].alive > 0) + if (!MovePiece(me, -1, 0)) //move down + gameStatus = 1; //new piece + else + if (spied) SendPacket(me, NP_down, 0, NULL); + break; + case E_key: + GameKey(event.u.key); + break; + case E_net: + GameNet(event.u.net); + break; + case E_lostConn: + goto gameOver; } //handle event if (paused != oldPaused) { if (paused) {