+
+
+ if (strcmp(leveldir[new_leveldir_nr].name, new_leveldir_name) != 0)
+ Error(ERR_RETURN, "no such level directory: '%s'",new_leveldir_name);
+
+ leveldir_nr = new_leveldir_nr;
+
+ local_player->leveldir_nr = leveldir_nr;
+ LoadPlayerInfo(PLAYER_LEVEL);
+ SavePlayerInfo(PLAYER_SETUP);
+
+ level_nr = new_level_nr;
+
+ TapeErase();
+ LoadLevelTape(level_nr);
+
+ GetPlayerConfig();
+ LoadLevel(level_nr);
+
+ /*
+ if (autorecord_on)
+ TapeStartRecording();
+ */
+
+ if (tape.recording)
+ {
+ tape.random_seed = new_random_seed;
+ InitRND(tape.random_seed);
+ }
+
+ /*
+ printf("tape.random_seed == %d\n", tape.random_seed);
+ */
+
+ game_status = PLAYING;
+ InitGame();
+
+ break;
+ }
+
+ case OP_MOVE:
+ {
+ int frame_nr;
+ int i;
+
+ frame_nr =
+ (buf[2] << 24) | (buf[3] << 16) | (buf[4] << 8) | (buf[5]);
+
+ if (frame_nr != FrameCounter)
+ {
+ Error(ERR_RETURN, "client and servers frame counters out of sync");
+ Error(ERR_RETURN, "frame counter of client is %d", FrameCounter);
+ Error(ERR_RETURN, "frame counter of server is %d", frame_nr);
+ Error(ERR_EXIT, "this should not happen -- please debug");
+ }
+
+ for (i=0; i<MAX_PLAYERS; i++)
+ {
+ if (stored_player[i].active)
+ network_player_action[i] = buf[6 + i];
+ }
+
+ network_player_action_received = TRUE;
+
+ sprintf(msgbuf, "frame %d: client %d moves player [0x%02x]",
+ FrameCounter, buf[0], buf[2]);
+ sysmsg(msgbuf);
+