- } //NP_hello
- case NP_newPlayer:
- //receive player details and return other players
- memcpy(&Players[event.u.net.sender],
- event.u.net.data, event.u.net.size);
- if (!Players[event.u.net.sender].team)
- Players[event.u.net.sender].team =
- 256 - event.u.net.sender;
- if (Game.started < 2)
- Players[event.u.net.sender].flags |= SCF_paused;
- if (!Game.continuous && Game.started >= 2) {
- char data[40];
- strcpy(data,"Can't join: Game has already started");
- fprintf(stderr, "- Can't join player #%d in "
- "non-continuous game\n", event.u.net.sender);
- SendPacketTo(event.u.net.sender, 0, NP_error,
- strlen(data)+1, data);
-// SCloseNet(event.u.net.sender, 0);
- break;
- } //can't join started game
- {
- static struct {
- int playerflags;
- int maxplayers; //1
- int started; //2
- int continuous; //3
- long seed; //4
- int initspeed; //5
- } data;
-
- memcpy(&data, &Players[event.u.net.sender].flags,
- sizeof(data.playerflags));
- memcpy(&data.maxplayers, &Game,
- sizeof(data) - sizeof(data.playerflags));
- SendPacketTo(event.u.net.sender, 0, NP_gamedata,
- sizeof(data), &data);
- } //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)
- - sizeof(Players[0].spy)
- - sizeof(Players[0].small),
- &Players[i]);
- SendPacketTo(event.u.net.sender, i,
- NP_newPiece, sizeof(currentpiece[i]),
- ¤tpiece[i]);
- SendPacketTo(i, event.u.net.sender,
- NP_newPlayer, sizeof(Player)
- - sizeof(Players[0].spy)
- - sizeof(Players[0].small),
- &Players[event.u.net.sender]);
- } //send (to) players
- fprintf(stderr, "> Joined player #%d: %s <%s>\n",
- event.u.net.sender,
- Players[event.u.net.sender].name,
- Players[event.u.net.sender].host);
- if (++playersReady >= minplayers) {
- if (Game.started)
- SendPacketTo(event.u.net.sender, 0,
- NP_start, 0, NULL);
- else {
- fprintf(stderr, "* Starting game (%010d)\n",
- Game.seed);
- for (i = 1; i < MAX_SCREENS; i++)
- SendPacketTo(i, 0, NP_start, 0, NULL);
- Game.started++;
- } //first goahead (to all)
- } //give go ahead
- break; //NP_playerdata
- case NP_newPiece:
- memcpy(¤tpiece[event.u.net.sender],
- event.u.net.data, sizeof(currentpiece[0]));
- goto sendtoall;
- case NP_argghhh:
- Players[event.u.net.sender].alive = 0;
- fprintf(stderr, "< Player #%d died\n",
- event.u.net.sender);
- //check for unpaused game
- case NP_pause: