- } //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 < 1
- || Players[event.u.net.sender].team > 7) {
- Players[event.u.net.sender].team =
- event.u.net.sender % 7 + 1;
- SendPacketTo(event.u.net.sender,
- event.u.net.sender, NP_team,
- sizeof(Players[event.u.net.sender].team),
- &Players[event.u.net.sender].team);
- } //invalid team
- 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> (%s)\n",
- event.u.net.sender,
- Players[event.u.net.sender].name,
- Players[event.u.net.sender].host,
- teams[Players[event.u.net.sender].team]);
- if (++playersReady >= minplayers) {
- if (Game.started > 1)
- 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: