diff --git a/NS.py b/NS.py index 5572892..7f86851 100644 --- a/NS.py +++ b/NS.py @@ -925,7 +925,8 @@ class LevelSelect(Animation): self.grow_sound_channel.stop() self.grow_sound_channel = None self.get_game().peers["localhost"].seed = random.randint(0, self.get_configuration("system", "max-seed")) - print(f"Set seed to {self.get_game().peers['localhost'].seed}") + self.seed = self.get_game().peers['localhost'].seed + print(f"Set seed to {self.seed}") self.play(self.force_launch, delay=self.get_configuration("network", "join-time-limit")) # Wipe away other levels and zoom selected for level_index in range(3): @@ -933,6 +934,7 @@ class LevelSelect(Animation): self.platforms[level_index].view.play(self.platforms[level_index].view.wipe_out) self.previews[level_index].play(self.previews[level_index].wipe_out, interval=100) self.get_audio().play_sfx("complete_pattern_3") + self.players_counted = 1 break else: if self.grow_sound_channel is None: @@ -952,16 +954,21 @@ class LevelSelect(Animation): # Check if peers are still deciding elif not self.level_launched: + # Sync seed and wait time with players who have voted for the same level + for peer in self.get_game().peers.values(): + if peer.address != "localhost" and peer.status == "voted" and peer.level == self.level_index_selected: + peer.versus = True + if self.get_game().count_players() > self.players_counted: + self.players_counted += 1 + self.seed = (self.seed + peer.seed) % self.get_configuration("system", "max-seed") + self.halt(self.force_launch) + self.play(self.force_launch, delay=self.get_configuration("network", "join-time-limit")) + # Launch if time is up, the lobby is empty, or everyone present has voted if all(peer.status != "level select" or peer.status == "voted" for peer in self.get_game().peers.values()) or \ self.launch_forced: - seed = self.get_game().peers["localhost"].seed - for peer in self.get_game().peers.values(): - if peer.address != "localhost" and peer.status == "voted" and peer.level == self.level_index_selected: - peer.versus = True - seed = (seed + peer.seed) % self.get_configuration("system", "max-seed") - print(f"Seeding generator with {seed}") - random.seed(seed) + print(f"Seeding generator with {self.seed}") + random.seed(self.seed) self.halt(self.force_launch) self.get_game().pop_up("", clear=True) self.level_launched = True @@ -974,8 +981,10 @@ class LevelSelect(Animation): # Update displayed wait message else: - self.get_game().pop_up( - f"Waiting {self.accounts[self.force_launch].delay // 1000 + 1}s for players to join", clear=True) + remaining = self.accounts[self.force_launch].delay + if remaining < self.get_configuration("network", "join-time-limit") - 500: + self.get_game().pop_up( + f"Waiting {remaining // 1000 + 1}s for players to join", clear=True) # Second half of launch animation elif not self.get_game().wipe.is_playing() and any(preview.is_hidden() for preview in self.previews):