Exemple #1
0
short save_continue_game(LevelNumber lvnum)
{
    char *fname;
    long fsize;
    // Update continue level number
    if (is_singleplayer_like_level(lvnum))
      set_continue_level_number(lvnum);
    SYNCDBG(6,"Continue set to level %d (loaded is %d)",(int)get_continue_level_number(),(int)get_loaded_level_number());
    fname = prepare_file_path(FGrp_Save,continue_game_filename);
    fsize = LbFileSaveAt(fname, &game, sizeof(struct Game));
    return (fsize == sizeof(struct Game));
}
Exemple #2
0
/**
 * Indicates whether continue game option is available.
 * @return
 */
TbBool continue_game_available(void)
{
    unsigned char buf[14];
    char cmpgn_fname[CAMPAIGN_FNAME_LEN];
    long lvnum;
    long i;
    SYNCDBG(6,"Starting");
    {
        if (!read_continue_game_part(buf,0,sizeof(buf)))
        {
            return false;
        }
        i = (char *)&game.campaign_fname[0] - (char *)&game;
        read_continue_game_part((unsigned char *)cmpgn_fname,i,CAMPAIGN_FNAME_LEN);
        cmpgn_fname[CAMPAIGN_FNAME_LEN-1] = '\0';
        lvnum = ((struct Game *)buf)->continue_level_number;
        if (!change_campaign(cmpgn_fname))
        {
          ERRORLOG("Unable to load campaign");
          return false;
        }
        if (is_singleplayer_like_level(lvnum))
        {
            set_continue_level_number(lvnum);
        }
    }
    lvnum = get_continue_level_number();
    if (is_singleplayer_like_level(lvnum))
    {
        SYNCDBG(7,"Continue to level %d is available",(int)lvnum);
        return true;
    } else
    {
        SYNCDBG(7,"Level %d from continue file is not single player",(int)lvnum);
        return false;
    }
}
Exemple #3
0
short load_continue_game(void)
{
    unsigned char buf[14];
    unsigned char bonus[20];
    char cmpgn_fname[CAMPAIGN_FNAME_LEN];
    long lvnum;
    long i;

    if (!read_continue_game_part(buf,0,14))
    {
        WARNLOG("Can't read continue game file head");
        return false;
    }
    i = (char *)&game.campaign_fname[0] - (char *)&game;
    read_continue_game_part((unsigned char *)cmpgn_fname,i,CAMPAIGN_FNAME_LEN);
    cmpgn_fname[CAMPAIGN_FNAME_LEN-1] = '\0';
    if (!change_campaign(cmpgn_fname))
    {
        ERRORLOG("Unable to load campaign");
        return false;
    }
    lvnum = ((struct Game *)buf)->continue_level_number;
    if (!is_singleplayer_like_level(lvnum))
    {
      WARNLOG("Level number in continue file is incorrect");
      return false;
    }
    set_continue_level_number(lvnum);
    LbMemorySet(bonus, 0, sizeof(bonus));
    i = (char *)&game.intralvl.bonuses_found[0] - (char *)&game;
    read_continue_game_part(bonus,i,16);
    for (i=0; i < BONUS_LEVEL_STORAGE_COUNT; i++)
      game.intralvl.bonuses_found[i] = bonus[i];
    LbStringCopy(game.campaign_fname,campaign.fname,sizeof(game.campaign_fname));
    update_extra_levels_visibility();
    i = (char *)&game.intralvl_transfered_creature - (char *)&game.intralvl.bonuses_found[0];
    game.intralvl_transfered_creature.model = bonus[i];
    game.intralvl_transfered_creature.explevel = bonus[i+1];
    return true;
}
/**
 * Sets the continue level number. The level informs of campaign progress.
 * Levels which are not part of campaign will be ignored.
 */
LevelNumber set_continue_level_number(LevelNumber lvnum)
{
  if (is_singleplayer_like_level(lvnum))
    game.continue_level_number = lvnum;
  return game.continue_level_number;
}