X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=f6e226bc7fcde6e693b7dc065d7596489b456564;hb=3d236f777bca55fef0f6b23122b6affd0f424249;hp=c8519b390c7500c97d1d3b6507c04b63bd55e94d;hpb=2fe0fbc2a34fd4b50081f1829931dea3ca2c4c1c;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index c8519b39..f6e226bc 100644 --- a/src/game.c +++ b/src/game.c @@ -129,12 +129,12 @@ void InitGame() 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); + SendToServer_MovePlayer(MV_NO_MOVING); @@ -2874,11 +2874,9 @@ void GameActions(byte player_action) 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); @@ -2887,21 +2885,16 @@ void GameActions(byte player_action) (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 (!standalone && !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(); @@ -2909,27 +2902,40 @@ void GameActions(byte player_action) 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 (!standalone) + SendToServer_MovePlayer(player_action); for(i=0; idynamite--; 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 { @@ -4028,7 +4041,8 @@ BOOL PlaceBomb(struct PlayerInfo *player) 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);