X-Git-Url: http://git.shiar.net/netris.git/blobdiff_plain/eb820d60637feceb84f559675344cf24a2c2f1cd..93d1d285b606413a0c60905f8b43389661ac30ec:/client.c diff --git a/client.c b/client.c index 788684c..926c08b 100644 --- a/client.c +++ b/client.c @@ -41,7 +41,6 @@ static struct option options[] = { { "level", 1, 0, 'l' }, { "nick", 1, 0, 'n' }, { "team", 1, 0, 't' }, - { "dropmode", 2, 0, 'd' }, { "color", 2, 0, 'C' }, { "slowterm", 2, 0, 'S' }, { "keys", 1, 0, 'k' }, @@ -74,11 +73,11 @@ static char *cmds[] = { }; static char *hostStr; -static int paused = 0; +static bool paused = 0; static char lastadd; -void MapKeys(char *newKeys) +void handle_setkeys(char *newKeys) { int i, k, ch; char used[256]; @@ -134,8 +133,6 @@ void Usage(void) " -t, --team \tJoin a team (don't receive lines from your teammates)\n" " -l, --level \tBegin at a higher level (can be used as handicap)\n" " -k, --keys \tRemap keys (default is \"%s\" for cursors)\n" - " -d, --dropmode\tDrops go into drop mode\n" - " -D, --instadrop\tInstant drop\n" "\n" " -r, --robot \tExecute program to control the game instead of keyboard\n" " -F, --fair-robot\tUse fair robot interface\n" @@ -144,7 +141,7 @@ void Usage(void) ); } -void HandleOption(char tag, char *value) +void handle_arg(char tag, char *value) { switch (tag) { case 'a': //ascii @@ -152,7 +149,7 @@ void HandleOption(char tag, char *value) Sets.drawstyle &= ~Sets.ascii; break; case 'c': //connect - game = GT_classicTwo; + Game.type = GT_classicTwo; hostStr = value; break; case 'p': //port @@ -170,9 +167,6 @@ void HandleOption(char tag, char *value) case 't': //team Players[0].team = atoi(value); break; - case 'd': //dropmode - Sets.dropmode = value ? atoi(value) : 1; - break; case 'C': //color Sets.color = value && strcasecmp(value, "0") ? 1 : 0; break; @@ -180,7 +174,7 @@ void HandleOption(char tag, char *value) Sets.standout = value && !strcasecmp(value, "0") ? 1 : 0; break; case 'k': //keys - MapKeys(value); + handle_setkeys(value); break; case 'H': //info Header(); @@ -198,7 +192,7 @@ void HandleOption(char tag, char *value) } } -void ReadConf(char *filename) +void handle_conffile(char *filename) { FILE *file_in; char buf[513]; @@ -219,7 +213,7 @@ void ReadConf(char *filename) sscanf(buf, "%80[^= \t] = %80[^\n]", tag, value); for (i = 0; options[i].name; i++){ if (!strcasecmp(options[i].name, tag)) { - HandleOption(options[i].val, value); + handle_arg(options[i].val, value); break; } } @@ -229,10 +223,9 @@ void ReadConf(char *filename) else { fprintf(stderr, "Unable to open config file %s.\n", filename); } //defaults - } -int StartNewPiece(int scr, char shape) +int game_piece(int scr, char shape) { Players[scr].score.pieces++; { @@ -252,17 +245,16 @@ int StartNewPiece(int scr, char shape) return 1; } -void checkPaused(void) +void game_setpaused(void) { //check whether anyone paused the game int i; paused = Game.started < 1; for (i = 1; i < MAX_SCREENS; i++) if (Players[i].alive > 0) - paused |= Players[i].flags & SCF_paused; - if (paused) paused = 1; + paused |= (Players[i].flags & SCF_paused) != 0; } -void StartGame(void) +void game_reset(void) { //init new game int i; @@ -285,7 +277,7 @@ void StartGame(void) InitFields(); } -void CheckClears(int scr) +void game_clear(int scr) { //check for full lines int linesCleared; int linevalues[] = { 40, 100, 400, 1200, }; //= 50*lines! - 10*(lines==1) @@ -295,7 +287,7 @@ void CheckClears(int scr) 2500, 3000, 3500, 4000, 4500, 5000, 6000, 7500 }; if ((linesCleared = ClearFullLines(scr)) > 0) { - if (game == GT_onePlayer) + if (Game.type == GT_onePlayer) if ((Players[scr].score.lines / 10) < ((Players[scr].score.lines+linesCleared)/10)) { if ((Game.speed /= SPEEDINC) < SPEEDMINIMUM) @@ -308,7 +300,7 @@ void CheckClears(int scr) Players[scr].score.lines += linesCleared; Players[scr].score.adds += linesCleared - (linesCleared < 4); //XXX match handicap if (scr == me) { - if (game == GT_classicTwo) { + if (Game.type == GT_classicTwo) { SendPacket(scr, NP_clear, 0, NULL); if (linesCleared > 1) { short junkLines; @@ -329,11 +321,11 @@ void CheckClears(int scr) } //lines cleared } -void OneGame(void) +void game_loop(void) { - int changed = 0; + bool changed = 0; short gameStatus = 2; //2=loop; 1=new piece; 0=quit - int chatMode = 0; + bool chatMode = 0; char chatText[MSG_WIDTH] = "\0"; void handle_cmd(char cmd, char *arg) @@ -353,8 +345,8 @@ void OneGame(void) else Message(Players[me].flags & SCF_paused ? "You are not ready" : "You are ready"); - checkPaused(); - if (game == GT_classicTwo) + game_setpaused(); + if (Game.type == GT_classicTwo) SendPacket(me, NP_pause, 0, NULL); ShowPause(me); changed = 1; @@ -394,11 +386,11 @@ void OneGame(void) Message("<\\%d%s\\7> %s", Players[me].team > 7 ? 7 : Players[me].team, Players[me].name, chatText); - if (game == GT_classicTwo) + if (Game.type == GT_classicTwo) SendPacket(me, NP_msg, strlen(chatText) + 1, chatText); } - void GameKey(char key) + void handle_key(char key) { char *p; @@ -426,7 +418,7 @@ void OneGame(void) if (!(p = strchr(keyTable, tolower(key)))) return; key = p - keyTable; - bool handle_key(char key) + void handle_keycmd(char key) { switch (key) { case KT_redraw: @@ -434,23 +426,18 @@ void OneGame(void) InitFields(); // ScheduleFullRedraw(); refresh(); - return 1; + return; case KT_say: chatMode = 1; Messagetype(key, strlen(chatText) - 1, chatText); - return 1; + return; case KT_quit: handle_cmd(CT_quit, NULL); - return 1; + return; case KT_pause: handle_cmd(CT_pause, NULL); - return 1; - default: - return 0; + return; } - } - // global actions (always possible, even if not playing) - if (handle_key(key)) return; if (Players[me].alive <= 0 || paused) return; // actions only available while actually playing @@ -490,7 +477,7 @@ void OneGame(void) gameStatus = 1; // drop break; case KT_faster: - if (game != GT_onePlayer) break; + if (Game.type != GT_onePlayer) break; if ((Game.speed /= SPEEDINC) < SPEEDMINIMUM) Game.speed = SPEEDMINIMUM; SetITimer(Game.speed, SetITimer(0, 0)); @@ -499,19 +486,20 @@ void OneGame(void) changed = 1; break; } - return; - } //GameKey + } + handle_keycmd(key); + } int oldPaused = 0; - void GameNet(_netEvent net) + void handle_net(_netEvent net) { switch(net.type) { case NP_newPiece: { memcpy(&Players[net.uid].nextShape, net.data, sizeof(Players[0].nextShape)); - StartNewPiece(net.uid, Players[net.uid].curShape); + game_piece(net.uid, Players[net.uid].curShape); break; } case NP_down: @@ -533,7 +521,7 @@ void OneGame(void) DropPiece(net.uid); break; case NP_clear: - CheckClears(net.uid); + game_clear(net.uid); break; case NP_insertJunk: { @@ -614,9 +602,9 @@ void OneGame(void) Players[i].flags |= SCF_paused; } //reset players } - StartGame(); //reset everything + game_reset(); //reset everything ShowTime(); //redraw timer while unpaused - checkPaused(); //pause + game_setpaused(); //pause oldPaused = 0; //reset pause changed = 1; gameStatus = 1; @@ -624,9 +612,6 @@ void OneGame(void) } //stop game case NP_newPlayer: { - char teams[10][7] = { "", "Green", "Cyan", "Blue", "Purple", - "Red", "Grey", "White", "*Orange" }; - if (net.uid>maxPlayer) maxPlayer = net.uid; memcpy(&Players[net.uid], net.data, net.size); ClearField(net.uid); @@ -635,9 +620,9 @@ void OneGame(void) Message("%s joined the game", Players[net.uid].name); else Message("%s joined %s team", Players[net.uid].name, - teams[Players[net.uid].team]); + teamname[Players[net.uid].team]); if (Players[net.uid].flags & SCF_paused) { - checkPaused(); + game_setpaused(); } //player has paused // DrawField(net.uid); // ShowPause(net.uid); @@ -656,18 +641,18 @@ void OneGame(void) strcpy(s, Players[net.uid].flags&SCF_paused ? "is not ready" : "is ready"); Message("%s %s", Players[net.uid].name, s); - checkPaused(); + game_setpaused(); ShowPause(net.uid); changed = 1; break; } //(un)pause case NP_part: // player left - checkPaused(); + game_setpaused(); oldPaused = 0; Players[net.uid].alive = -1; Message("%s left", Players[net.uid].name); - checkPaused(); + game_setpaused(); ShowPause(net.uid); changed = 1; break; @@ -686,34 +671,34 @@ void OneGame(void) Message("\\%d%s fragged %s", Players[i].team > 7 ? 7 : Players[i].team, Players[i].name, Players[net.uid].name); - checkPaused(); + game_setpaused(); ShowPause(net.uid); changed = 1; break; } //G/O default: break; - } //E_net - } //GameNet + } + } MyEvent event; long pauseTimeLeft; int i; - StartGame(); + game_reset(); while (gameStatus) { -GameLoop: gameStatus = 2; if (Players[me].alive > 0) { - if (!StartNewPiece(me, ChooseOption(stdOptions))) { - netint4 data[4]; + if (!game_piece(me, ChooseOption(stdOptions))) { + netint4 data[4]; + Players[me].alive = 0; if (lastadd == me) Message("\\%dYou died", Players[me].team > 7 ? 7 : Players[me].team); else Message("\\%d%s fragged you", Players[lastadd].team > 7 ? 7 : Players[lastadd].team, Players[lastadd].name); - if (game == GT_classicTwo) + if (Game.type == GT_classicTwo) SendPacket(me, NP_argghhh, sizeof(lastadd), &lastadd); ShowPause(me); changed = 1; @@ -749,10 +734,10 @@ GameLoop: if (spied) SendPacket(me, NP_down, 0, NULL); break; case E_key: - GameKey(event.u.key); + handle_key(event.u.key); break; case E_net: - GameNet(event.u.net); + handle_net(event.u.net); break; case E_lostConn: goto gameOver; @@ -770,7 +755,7 @@ GameLoop: } //(un)pause } //game loop Players[me].score.score++; - CheckClears(me); + game_clear(me); } //new piece loop gameOver: SetITimer(0, 0); @@ -780,12 +765,12 @@ int main(int argc, char **argv) { char ch; - game = GT_onePlayer; + Game.type = GT_onePlayer; port = DEFAULT_PORT; maxPlayer = 1; Game.initspeed = DEFAULT_INTERVAL; Game.gravity = 0; - MapKeys(DEFAULT_KEYS); + handle_setkeys(DEFAULT_KEYS); { int i; char *userName; @@ -805,17 +790,16 @@ int main(int argc, char **argv) strncpy(Players[0].name, userName, 16); //sizeof(Player.name) Players[0].name[16] = 0; Players[0].alive = 1; - Players[0].dropmode = 0; } //set defaults // if (getopt(argc, argv, "f:") == 'f') -// ReadConf(optarg); +// handle_conffile(optarg); // else - ReadConf(CONFIG_FILE); + handle_conffile(CONFIG_FILE); while ((ch = getopt_long( - argc, argv, "hHRk:c:n:odDSCap:i:l:t:", options, NULL + argc, argv, "hHRk:c:n:oSCap:i:l:t:", options, NULL )) != -1) - HandleOption(ch, optarg); + handle_arg(ch, optarg); if (optind < argc) { Usage(); exit(1); @@ -824,13 +808,13 @@ int main(int argc, char **argv) InitScreens(); //setup screen - if (game == GT_classicTwo) { + if (Game.type == GT_classicTwo) { spied = 1; InitiateConnection(hostStr, port); HandShake(); maxPlayer = me; - checkPaused(); - OneGame(); + game_setpaused(); + game_loop(); } //client else { Game.seed = time(0); @@ -838,7 +822,7 @@ int main(int argc, char **argv) me = 1; memcpy(&Players[me], &Players[0], sizeof(_Player)); Players[me].team = 7; - OneGame(); + game_loop(); } //singleplay return 0; }