Ejemplo n.º 1
0
SDL_Surface *WadImageCache::image_from_desc(WadImageDescriptor& desc)
{
	SDL_Surface *surface = NULL;
	OpenedFile wad_file;
	if (open_wad_file_for_reading(desc.file, wad_file))
	{
		struct wad_header header;
		if (read_wad_header(wad_file, &header))
		{
			struct wad_data *wad;
			wad = read_indexed_wad_from_file(wad_file, &header, desc.index, true);
			if (wad)
			{
				void *data;
				size_t length;
				data = extract_type_from_wad(wad, desc.tag, &length);
				if (data && length)
				{
					SDL_RWops *rwops = SDL_RWFromConstMem(data, length);
#ifdef HAVE_SDL_IMAGE
					surface = IMG_Load_RW(rwops, 1);
#else
					surface = SDL_LoadBMP_RW(rwops, 1);
#endif
				}
				free_wad(wad);
			}
		}
		close_wad_file(wad_file);
	}
	clear_game_error();
	return surface;
}
/* --------- local code */
static struct wad_data *get_physics_wad_data(
	bool *bungie_physics)
{
	struct wad_data *wad= NULL;
	
//	dprintf("Open is: %d %d %.*s", physics_file.vRefNum, physics_file.parID, physics_file.name[0], physics_file.name+1);

	OpenedFile PhysicsFile;
	if(open_wad_file_for_reading(PhysicsFileSpec,PhysicsFile))
	{
		struct wad_header header;

		if(read_wad_header(PhysicsFile, &header))
		{
			if(header.data_version==BUNGIE_PHYSICS_DATA_VERSION || header.data_version==PHYSICS_DATA_VERSION)
			{
				wad= read_indexed_wad_from_file(PhysicsFile, &header, 0, true);
				if(header.data_version==BUNGIE_PHYSICS_DATA_VERSION)
				{
					*bungie_physics= true;
				} else {
					*bungie_physics= false;
				}
			}
		}

		close_wad_file(PhysicsFile);
	} 
	
	/* Reset any errors that might have occurred.. */
	set_game_error(systemError, errNone);

	return wad;
}
Ejemplo n.º 3
0
static void load_preferences(
  void)
{
  /* If it was already allocated, we are reloading, so free the old one.. */
  if(prefInfo->wad) {
    free_wad(prefInfo->wad);
    prefInfo->wad= NULL;
  }

  OpenedFile PrefsFile;
  if (open_wad_file_for_reading(prefInfo->PrefsFile,PrefsFile)) {
    struct wad_header header;

    /* Read the header from the wad file */
    if(read_wad_header(PrefsFile, &header)) {
      /* Read the indexed wad from the file */
      prefInfo->wad= read_indexed_wad_from_file(PrefsFile, &header, 0, false);
      // LP change: more graceful degradation
      if (!prefInfo->wad) {
        set_game_error(gameError, errUnknownWadVersion);
      }
    }

    /* Close the file.. */
    close_wad_file(PrefsFile);
  }
}