BOOL emulate_bd = TRUE; /* unless non-BOULDERDASH elements found */
BOOL emulate_sb = TRUE; /* unless non-SOKOBAN elements found */
+ /* don't play tapes over network */
+ network_playing = (network && !tape.playing);
+
for(i=0; i<MAX_PLAYERS; i++)
{
struct PlayerInfo *player = &stored_player[i];
local_player->active = TRUE;
local_player->local = TRUE;
- network_player_action_stored = FALSE;
-
-
+ network_player_action_received = FALSE;
/* initial null action */
- SendToServer_MovePlayer(0,0);
-
-
-
- /*
- printf("BLURB\n");
- */
-
-
+ if (network_playing)
+ SendToServer_MovePlayer(MV_NO_MOVING);
ZX = ZY = -1;
int i, x,y, element;
int *recorded_player_action;
-
if (game_status != PLAYING)
return;
-
#ifdef DEBUG
action_delay_value =
(tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GameFrameDelay);
(tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GAME_FRAME_DELAY);
#endif
- /*
- HandleNetworking();
-
- if (game_status != PLAYING)
- return;
- */
-
/* main game synchronization point */
WaitUntilDelayReached(&action_delay, action_delay_value);
- if (!network_player_action_stored)
+ if (network_playing && !network_player_action_received)
{
+ /*
#ifdef DEBUG
printf("DEBUG: try to get network player actions in time\n");
#endif
+ */
/* last chance to get network player actions without main loop delay */
HandleNetworking();
if (game_status != PLAYING)
return;
- if (!network_player_action_stored)
+ if (!network_player_action_received)
{
+ /*
#ifdef DEBUG
printf("DEBUG: failed to get network player actions in time\n");
#endif
+ */
return;
}
}
+
+ if (tape.pausing || (tape.playing && !TapePlayDelay()))
+ return;
+ else if (tape.recording)
+ TapeRecordDelay();
+
+
if (tape.playing)
recorded_player_action = TapePlayAction();
else
recorded_player_action = NULL;
-
- SendToServer_MovePlayer(player_action, FrameCounter);
-
+ if (network_playing)
+ SendToServer_MovePlayer(player_action);
for(i=0; i<MAX_PLAYERS; i++)
{
+ /*
+ int actual_player_action =
+ (network ? network_player_action[i] : player_action);
+ */
+
+ int actual_player_action =
+ (network_playing ? network_player_action[i] : player_action);
+
+ /*
int actual_player_action = network_player_action[i];
+ */
/*
int actual_player_action = player_action;
actual_player_action = 0;
*/
+ if (!network && i != TestPlayer)
+ actual_player_action = 0;
+
/* TEST TEST TEST */
if (recorded_player_action)
network_player_action[i] = 0;
}
- network_player_action_stored = FALSE;
+ network_player_action_received = FALSE;
ScrollScreen(NULL, SCROLL_GO_ON);
+ /*
if (tape.pausing || (tape.playing && !TapePlayDelay()))
return;
else if (tape.recording)
TapeRecordDelay();
+ */
FrameCounter++;
TimeFrames++;
+
/*
- printf("advancing FrameCounter to %d\n",
- FrameCounter);
+ printf("FrameCounter == %d, RND(100) == %d\n", FrameCounter, RND(100));
*/
+
for(y=0;y<lev_fieldy;y++) for(x=0;x<lev_fieldx;x++)
{
Stop[x][y] = FALSE;
if (!IN_LEV_FIELD(new_jx,new_jy))
return(MF_NO_ACTION);
- if (standalone && !AllPlayersInSight(player, new_jx,new_jy))
+ if (!network && !AllPlayersInSight(player, new_jx,new_jy))
return(MF_NO_ACTION);
element = MovingOrBlocked2Element(new_jx,new_jy);
*/
if (moved & MF_MOVING && !ScreenMovPos &&
- (player == local_player || standalone))
+ (player == local_player || !network))
{
int old_scroll_x = scroll_x, old_scroll_y = scroll_y;
int offset = (scroll_delay_on ? 3 : 0);
if (scroll_x != old_scroll_x || scroll_y != old_scroll_y)
{
- if (standalone && !AllPlayersInVisibleScreen())
+ if (!network && !AllPlayersInVisibleScreen())
{
scroll_x = old_scroll_x;
scroll_y = old_scroll_y;
player->dynamite--;
DrawText(DX_DYNAMITE, DY_DYNAMITE, int2str(local_player->dynamite, 3),
FS_SMALL, FC_YELLOW);
- DrawGraphicThruMask(SCREENX(jx),SCREENY(jy),GFX_DYNAMIT);
+ if (IN_SCR_FIELD(SCREENX(jx),SCREENY(jy)))
+ DrawGraphicThruMask(SCREENX(jx),SCREENY(jy),GFX_DYNAMIT);
}
else
{
Store2[jx][jy] = player->element_nr; /* for DynaExplode() */
MovDelay[jx][jy] = 96;
player->dynabombs_left--;
- DrawGraphicThruMask(SCREENX(jx),SCREENY(jy),GFX_DYNABOMB);
+ if (IN_SCR_FIELD(SCREENX(jx),SCREENY(jy)))
+ DrawGraphicThruMask(SCREENX(jx),SCREENY(jy),GFX_DYNABOMB);
}
return(TRUE);