Ejemplo n.º 1
0
void fronttorture_load(void)
{
    struct PlayerInfo *player;
    char *fname;
    unsigned char *ptr;
    long i,k;
    wait_for_cd_to_be_available();
    frontend_load_data_from_cd();
    memcpy(frontend_backup_palette, &frontend_palette, PALETTE_SIZE);
    // Texture blocks memory isn't used here, so reuse it instead of allocating
    ptr = block_mem;
    // Load RAW/PAL background
    fname = prepare_file_path(FGrp_LoData,"torture.raw");
    torture_background = ptr;
    i = LbFileLoadAt(fname, ptr);
    ptr += i;
    fname = prepare_file_path(FGrp_LoData,"torture.pal");
    torture_palette = ptr;
    i = LbFileLoadAt(fname, ptr);
    ptr += i;

    // Load DAT/TAB sprites for doors
    k = 0;
    {
        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.dat",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].data = ptr;
        ptr += i;
        doors[k].data_end = ptr;

        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.tab",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].sprites = (struct TbSprite *)ptr;
        ptr += i;
        doors[k].sprites_end =(struct TbSprite *) ptr;
    }
    ptr = &game.land_map_start;
    for (k=1; k < 8; k++)
    {
        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.dat",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].data = ptr;
        ptr += i;
        doors[k].data_end = ptr;
        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.tab",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].sprites = (struct TbSprite *)ptr;
        ptr += i;
        doors[k].sprites_end = (struct TbSprite *)ptr;
    }
    ptr = poly_pool;
    k = 8;
    {
        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.dat",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].data = ptr;
        ptr += i;
        doors[k].data_end = ptr;
        fname = prepare_file_fmtpath(FGrp_LoData,"door%02d.tab",k+1);
        i = LbFileLoadAt(fname, ptr);
        doors[k].sprites = (struct TbSprite *)ptr;
        ptr += i;
        doors[k].sprites_end = (struct TbSprite *)ptr;
    }

    if ( LbDataLoadAll(torture_load_files) )
        ERRORLOG("Unable to load torture load files");
    LbSpriteSetupAll(setup_torture_sprites);
    frontend_load_data_reset();
    memcpy(&frontend_palette, torture_palette, PALETTE_SIZE);
    torture_state.action = 0;
    torture_door_selected = -1;
    torture_end_sprite = -1;
    torture_sprite_direction = 0;
    LbMemorySet(door_sound_state, 0, TORTURE_DOORS_COUNT*sizeof(struct DoorSoundState));

    player = get_my_player();
    if (player->victory_state == VicS_WonLevel)
    {
        LbMouseChangeSpriteAndHotspot(&fronttor_sprites[1], 0, 0);
    } else
    {
        LbMouseChangeSpriteAndHotspot(0, 0, 0);
    }
    torture_left_button = 0;
}
Ejemplo n.º 2
0
short setup_screen_mode_minimal(unsigned short nmode)
{
  unsigned int flg_mem;
  TbScreenModeInfo *mdinfo;
  SYNCDBG(4,"Setting up mode %d",(int)nmode);
  if (!force_video_mode_reset)
  {
    if ((nmode == lbDisplay.ScreenMode) && (MinimalResolutionSetup))
      return 1;
  }
  flg_mem = lbDisplay.DrawFlags;
  if (LbGraphicsScreenHeight() < 200)
  {
      WARNLOG("Unhandled previous Screen Mode %d, Reset skipped",(int)lbDisplay.ScreenMode);
  } else
  if (LbGraphicsScreenHeight() < 400)
  {
      if (MinimalResolutionSetup)
      {
        if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
          LbScreenReset();
        LbDataFreeAll(mcga_load_files_minimal);
        MinimalResolutionSetup = 0;
      } else
      {
        reset_eye_lenses();
        reset_heap_manager();
        reset_heap_memory();
        set_pointer_graphic_none();
        unload_pointer_file(0);
        if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
          LbScreenReset();
        LbDataFreeAll(mcga_load_files);
      }
  } else
  {
      if (MinimalResolutionSetup)
      {
        set_pointer_graphic_none();
        unload_pointer_file(1);
        if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
          LbScreenReset();
        LbDataFreeAll(vres256_load_files_minimal);
        MinimalResolutionSetup = 0;
      } else
      {
        reset_eye_lenses();
        reset_heap_manager();
        reset_heap_memory();
        if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
          LbScreenReset();
        LbDataFreeAll(vres256_load_files);
      }
  }
  mdinfo = LbScreenGetModeInfo(nmode);
  if (mdinfo->Height < 200)
  {
      ERRORLOG("Unhandled Screen Mode %d, setup failed",(int)nmode);
      force_video_mode_reset = true;
      return 0;
  } else
  if (mdinfo->Height < 400)
  {
      SYNCDBG(17,"Preparing minimal low resolution mode");
      MinimalResolutionSetup = 1;
      if ( !LoadMcgaDataMinimal() )
      {
        ERRORLOG("Unable to load minimal MCGA files");
        return 0;
      }
      if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
      {
          if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 2, 0) != 1)
          {
            ERRORLOG("Unable to setup screen resolution %s (mode %d)",
                mdinfo->Desc,(int)nmode);
            force_video_mode_reset = true;
            return 0;
          }
      }
  } else
  {
      SYNCDBG(17,"Preparing minimal high resolution mode");
      MinimalResolutionSetup = 1;
      frontend_load_data_from_cd();
      if ( LbDataLoadAll(vres256_load_files_minimal) )
      {
        ERRORLOG("Unable to load vres256_load_files_minimal files");
        force_video_mode_reset = true;
        return 0;
      }
      frontend_load_data_reset();
      if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset))
      {
          if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 1, 0) != 1)
          {
             ERRORLOG("Unable to setup screen resolution %s (mode %d)",
                 mdinfo->Desc,(int)nmode);
             force_video_mode_reset = true;
             return 0;
          }
      }
  }
  LbScreenClear(0);
  LbScreenSwap();
  update_screen_mode_data(mdinfo->Width, mdinfo->Height);
  lbDisplay.DrawFlags = flg_mem;
  force_video_mode_reset = false;
  return 1;
}