- } //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) {
- int team;
-
- for (team = 1; team < 7; team++) {
- for (i = 1; i < MAX_SCREENS; i++)
- if ((Players[i].alive > 0) && (Players[i].team == team))
- break; //team in use
- 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,
- 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 gravity; //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.gravity, &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), &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,
- sizeof(_Player), &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(&Players[event.u.net.sender].curShape,
- event.u.net.data, sizeof(Players[0].curShape));
- 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: