X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=5de902ee040948e2592db7bac1a772c07bf7274e;hb=c4b26cf489dcc65a00bfcc05f7898700d2f0c9e4;hp=4851f4aa7745267c5226d1012c325fba70dcac4f;hpb=e5c5bf5c4a76a04f9bf64e92227bf2ef969fd25c;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 4851f4aa..5de902ee 100644 --- a/src/game.c +++ b/src/game.c @@ -25,16 +25,24 @@ void GetPlayerConfig() { - int old_joystick_nr = setup.joystick_nr; +#if 0 + int old_joystick_nr = setup.input[0].joystick_nr; +#endif + + + if (sound_status == SOUND_OFF) + setup.sound_on = FALSE; - if (sound_status==SOUND_OFF) - local_player->setup &= ~SETUP_SOUND; if (!sound_loops_allowed) { - local_player->setup &= ~SETUP_SOUND_LOOPS; - local_player->setup &= ~SETUP_SOUND_MUSIC; + setup.sound_loops_on = FALSE; + setup.sound_music_on = FALSE; } + setup.sound_simple_on = setup.sound_on; + + +#if 0 setup.sound_on = setup.sound_simple_on = SETUP_SOUND_ON(local_player->setup); setup.sound_loops_on = SETUP_SOUND_LOOPS_ON(local_player->setup); setup.sound_music_on = SETUP_SOUND_MUSIC_ON(local_player->setup); @@ -42,19 +50,28 @@ void GetPlayerConfig() setup.direct_draw_on = SETUP_DIRECT_DRAW_ON(local_player->setup); setup.fading_on = SETUP_FADING_ON(local_player->setup); setup.autorecord_on = SETUP_AUTO_RECORD_ON(local_player->setup); + +#if 0 setup.joystick_nr = SETUP_2ND_JOYSTICK_ON(local_player->setup); +#endif + + setup.input[0].joystick_nr = SETUP_2ND_JOYSTICK_ON(local_player->setup); + setup.quick_doors = SETUP_QUICK_DOORS_ON(local_player->setup); setup.scroll_delay_on = SETUP_SCROLL_DELAY_ON(local_player->setup); setup.soft_scrolling_on = SETUP_SOFT_SCROLL_ON(local_player->setup); #ifndef MSDOS - if (setup.joystick_nr != old_joystick_nr) + if (setup.input[0].joystick_nr != old_joystick_nr) { if (joystick_device) close(joystick_device); InitJoystick(); } #endif + +#endif + } void InitGame() @@ -76,6 +93,8 @@ void InitGame() player->present = FALSE; player->active = FALSE; + player->action = 0; + /* player->local = FALSE; */ @@ -193,21 +212,30 @@ void InitGame() */ player->present = TRUE; - if (player->connected) + if (!network_playing || player->connected) { player->active = TRUE; + /* remove potentially duplicate players */ + if (StorePlayer[jx][jy] == Feld[x][y]) + StorePlayer[jx][jy] = 0; + + StorePlayer[x][y] = Feld[x][y]; + printf("Player %d activated.\n", player->element_nr); printf("[Local player is %d and currently %s.]\n", local_player->element_nr, local_player->active ? "active" : "not active"); } +#if 0 /* remove potentially duplicate players */ if (StorePlayer[jx][jy] == Feld[x][y]) StorePlayer[jx][jy] = 0; StorePlayer[x][y] = Feld[x][y]; +#endif + Feld[x][y] = EL_LEERRAUM; player->jx = player->last_jx = x; player->jy = player->last_jy = y; @@ -555,13 +583,22 @@ void GameWon() SaveLevelTape(tape.level_nr); /* Ask to save tape */ } + + /* if (level_nr == local_player->handicap && level_nr < leveldir[leveldir_nr].levels-1) { local_player->handicap++; bumplevel = TRUE; + + +#if 0 SavePlayerInfo(PLAYER_LEVEL); +#endif + } + */ + if ((hi_pos=NewHiScore()) >= 0) { @@ -2866,7 +2903,7 @@ void PlayerActions(struct PlayerInfo *player, byte player_action) stored_player_action[player->index_nr] = 0; num_stored_actions++; - if (!player->active || player->gone) + if (!player->active || player->gone || tape.pausing) return; if (player_action) @@ -2933,24 +2970,19 @@ void PlayerActions(struct PlayerInfo *player, byte player_action) } } -void GameActions(byte player_action) +void GameActions() { static long action_delay = 0; long action_delay_value; int sieb_x = 0, sieb_y = 0; int i, x,y, element; - int *recorded_player_action; + byte *recorded_player_action; if (game_status != PLAYING) return; -#ifdef DEBUG - action_delay_value = - (tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GameFrameDelay); -#else action_delay_value = - (tape.playing && tape.fast_forward ? FFWD_FRAME_DELAY : GAME_FRAME_DELAY); -#endif + (tape.playing && tape.fast_forward ? FfwdFrameDelay : GameFrameDelay); /* main game synchronization point */ WaitUntilDelayReached(&action_delay, action_delay_value); @@ -2986,32 +3018,14 @@ void GameActions(byte player_action) else if (tape.recording) TapeRecordDelay(); - - if (tape.playing) - recorded_player_action = TapePlayAction(); - else - recorded_player_action = NULL; + recorded_player_action = (tape.playing ? TapePlayAction() : NULL); if (network_playing) - SendToServer_MovePlayer(player_action); + SendToServer_MovePlayer(local_player->action); for(i=0; i jx-MIDPOSX+offset) && jx >= MIDPOSX-1-offset && jx <= lev_fieldx-(MIDPOSX-offset)) - scroll_x = jx-MIDPOSX + (scroll_x < jx-MIDPOSX ? -offset : offset); + scroll_x = jx-MIDPOSX + (scroll_x < jx-MIDPOSX ? -offset : +offset); + */ + + if ((player->MovDir == MV_LEFT && scroll_x > jx-MIDPOSX+offset) || + (player->MovDir == MV_RIGHT && scroll_x < jx-MIDPOSX-offset)) + scroll_x = jx-MIDPOSX + (scroll_x < jx-MIDPOSX ? -offset : +offset); + + /* don't scroll over playfield boundaries */ + if (scroll_x < -1 || scroll_x > lev_fieldx - SCR_FIELDX + 2) + scroll_x = (scroll_x < -1 ? -1 : lev_fieldx - SCR_FIELDX + 2); /* don't scroll more than one field at a time */ scroll_x = old_scroll_x + SIGN(scroll_x - old_scroll_x); @@ -3402,9 +3425,19 @@ boolean MoveFigure(struct PlayerInfo *player, int dx, int dy) } else /* player has moved vertically */ { + /* if ((scroll_y < jy-MIDPOSY-offset || scroll_y > jy-MIDPOSY+offset) && jy >= MIDPOSY-1-offset && jy <= lev_fieldy-(MIDPOSY-offset)) - scroll_y = jy-MIDPOSY + (scroll_y < jy-MIDPOSY ? -offset : offset); + scroll_y = jy-MIDPOSY + (scroll_y < jy-MIDPOSY ? -offset : +offset); + */ + + if ((player->MovDir == MV_UP && scroll_y > jy-MIDPOSY+offset) || + (player->MovDir == MV_DOWN && scroll_y < jy-MIDPOSY-offset)) + scroll_y = jy-MIDPOSY + (scroll_y < jy-MIDPOSY ? -offset : +offset); + + /* don't scroll over playfield boundaries */ + if (scroll_y < -1 || scroll_y > lev_fieldy - SCR_FIELDY + 2) + scroll_y = (scroll_y < -1 ? -1 : lev_fieldy - SCR_FIELDY + 2); /* don't scroll more than one field at a time */ scroll_y = old_scroll_y + SIGN(scroll_y - old_scroll_y);