Skip to content

Commit 0411db4

Browse files
authored
Multiplayer: host receives correct defeat message (dkfans#4852)
1 parent ef7f3c6 commit 0411db4

5 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/front_input.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ static short get_global_inputs(void)
832832
return true;
833833
if (player->victory_state != VicS_Undecided && is_game_key_pressed(Gkey_FinishLevel, true, false))
834834
{
835-
if (player->victory_state == VicS_LostLevel && network_is_active() && player->id_number == get_host_player_id())
835+
if ((player->victory_state == VicS_LostLevel) && network_is_active() && (player->id_number == get_host_player_id()) && network_human_contenders_remain())
836836
{
837837
return true;
838838
}

src/frontend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3453,7 +3453,7 @@ void update_player_objectives(PlayerNumber plyr_idx)
34533453
break;
34543454
case VicS_LostLevel:
34553455
TextStringId msg_idx = CpgStr_LevelLost;
3456-
if (network_is_active() && player->id_number == get_host_player_id()) {
3456+
if (network_is_active() && (player->id_number == get_host_player_id()) && network_human_contenders_remain()) {
34573457
msg_idx = GUIStr_NetHostLostWaitingForPlayers;
34583458
}
34593459
set_level_objective(player->id_number, get_string(msg_idx));

src/net_game.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,17 @@ static TbBool network_has_remote_enemies_remaining(void)
324324
return false;
325325
}
326326

327+
TbBool network_human_contenders_remain(void)
328+
{
329+
for (PlayerNumber player_idx = 0; player_idx < PLAYERS_COUNT; player_idx++) {
330+
struct PlayerInfo *player = get_player(player_idx);
331+
if (player_exists(player) && (player->is_active == 1) && ((player->allocflags & PlaF_CompCtrl) == 0) && !player_cannot_win(player_idx)) {
332+
return true;
333+
}
334+
}
335+
return false;
336+
}
337+
327338
static TbBool network_has_remote_users_remaining(void)
328339
{
329340
for (NetUserId user_id = 0; user_id < (NetUserId)netstate.max_players; user_id += 1) {

src/net_game.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ long network_session_join(void);
5050

5151
TbBool network_player_active(int plyr_idx);
5252
const char *network_player_name(int plyr_idx);
53+
TbBool network_human_contenders_remain(void);
5354
void process_player_leave_game_packet(struct PlayerInfo *player);
5455
void process_disconnected_network_players(void);
5556
void sync_initial_network_seed(void);

src/packets.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ TbBool process_players_global_packet_action(PlayerNumber plyr_idx)
653653
quit_game = 1;
654654
}
655655
return 0;
656-
} else if (host_packet && (victory_state == VicS_LostLevel)) {
656+
} else if (host_packet && (victory_state == VicS_LostLevel) && network_human_contenders_remain()) {
657657
return 0;
658658
} else if (host_packet && (victory_state == VicS_WonLevel)) {
659659
player->additional_flags &= ~PlaAF_UnlockedLordTorture;

0 commit comments

Comments
 (0)