This is a wiki for a reason. Anyone can contribute. If you see something that is inaccurate or can be improved, don't ask that it be fixed--just improve it.
[ Disclaimer, Create new user --- Wiki markup help, Install P99 ]

EQ Classic Enhanced

From Project 1999 Wiki
Jump to: navigation, search


What is the goal of this project?

The goal of this project is to improve the image quality of EQ while maintaining the spirit of the “classic” EQ experience by using the original EQ textures.

What’s been done so far?

Based on the original EQ textures in Titanium EQ Classic Enhanced uses modern AI (artificial intelligence) upscaling software to improve the quality of all zone textures used on Green (68 zones / 204 files). Textures from the high-res texture pack are only used if they are identical to the original textures (but higher resolution). Zone textures include the ground, walls, trees, buildings, stationary objects (e.g., forge), many mobs, and more. The updated textures include mipmaps, further improving image quality by preventing the shimmering effects on distant ground and wall textures. Textures are stored in an efficient format resulting in a modest file size increase over the original EQ textures of about only 230MB.

Show me the screenshots!

How do I install?

  1. Download the zip of version 1.05 (505MB).
  2. Backup your EQ folder in case you want to easily revert to your previous zone texture files.
  3. Extract the zip into your EQ folder, overwriting existing files.
  4. Enjoy EQ Classic Enhanced.


If you have any version other than the latest, download Update 1.05 (56MB) and unzip it into your EQ folder overwriting what's there to bring you up to the latest version.


If you have any feedback for me please post it in this forum thread.

How was this done?

Tools Used

  • EQ-Zip (Free, open-source): a utility for importing/exporting from S3D files. It supports automatically exportingt the EQ classic texture files as PNGs. It does not support textures with transparency, exporting transparent regions of any textures as a solid color, so textures with transparency will need to be handled specially. Set EQ-Zip as the default program for opening S3D files so that when you click on S3D files you’ll be able to quickly open them and import/export files.
  • Topaz Gigapixel AI ($): used to perform the AI image upscaling.
    • An alternative to Gigapixel is ESRGAN (Free). I haven't tried ESRGAN but it's popular for game upscaling.
  • TexConv (Free): Microsoft DirectX texture conversion utility. Put this in your c:\windows\systems32 folder so that you can run it from anywhere.


  1. Extract images from S3D zone file into PNG format using EQ-Zip, processing only one S3D file at a time.
  2. Once the files are extracted delete any files that are not PNG images or files that you do not wish to upscale. Consider deleting files that have transparency if you don’t want to mess around with them. Note that these instructions don't currently explain how to handle images with transparency.
  3. Load the PNG images into Topaz Gigapixel AI, set it 2x resize (that’s 2x2, so 4x as many pixels) and face refinement off (I’ve seen bad results from the face refinement). Set the output folder to a different folder than step 1. Click start.
  4. Now you have a folder of upscaled PNG images that you will convert to DXT1 DDS files using Microsoft’s Textconv utility. Texconv is a command line tool that you will run from the folder where the PNG images are location with the following command. Change ‘outputfoldername’ to the name of the folder that you want the final files to be outputted, which I recommend is a separate folder from step 3 (entire process uses three separate folders).
    texconv -y -srgb -vflip -f DXT1 -o “C:\outputfoldername” -r *.png
  5. Next you’ll need to rename the files so that the extensions are BMP again. From a windows command line in the folder with the PNG images type the following:
    Rename *.png *.bmp
  6. Next you’ll import the texture files back into the S3D file that they came from. EQ-Zip must be set in the preferences to not modify the files when importing.

Process Optimization

The two command line commands listed above can be added to a single batch file so that you just click on it. Another batch file can be created to delete the contents of your three working folders once you're ready to move on to the next S3D file. The batch file to empty the folders would look something like this (note that /q deletes without any prompting so test it without /q to ensure it's doing what you want before adding the /q's:
del /q "C:\export from EQ-Zip\*.*"
del /q "C:\AI Output\*.*"
del /q "C:\converted to dds\*.*"

Wish list

The main thing that would improve this process is a command line utility to import/export textures from S3D files that includes exporting EQ classic BMP textures to PNG with transparency (or for it to at least recognize textures with transparency and optionally skip them all). That combined with switching to AI upscaling software that supports running it through the command line (e.g., ESRGAN) could automate the entire process with the right batch file.

Additional technical information

Zone texture files

The EQ folder has three texture files for each zone. For example, Butcherblock has butcher.s3d, butcher_chr.s3d, and butcher_obj.s3d. ‘Butcher’ is for Butcherblock although not all zone names are obvious. To find the filename for a zone, look up the zone in the wiki and look at the ‘Name in /who:’ field. For example, Surefall Glade is qrg, so the zone files will be qrg.s3d, qrg_chr.s3c, and qrg_obj.s3d.

S3D files

S3D is a container for other files (similar to a zip file). Within the S3D files are the texture files.

EQ classic texture format

EQ classic textures are in a bitmap format with a '.BMP' file extension. However, Everquest Titanium can load other file formats, determining the file format based on the file header and not the extension. The file names and extensions in the S3D file must remain unchanged so that Everquest Titanium recognizes them, but other file formats such as DDS (directdraw surface) may be used. DDS supports multiple forms of texture compression, explained below, allowing for more optimized textures files. When Everquest Titanium loads the DDS texture files it expects them to be vertically flipped, hence the '-vflip' in the steps above. The EQ classic textures will need to be converted to a format supported by AI upscaling software such as PNG. PNG is recommended since it can save files in a lossless format with transparency.

EQ classic textures that use transparency

Some EQ classic textures use an extended bitmap format that includes transparency. I’m not aware of a utility that converts these to a more common format such as PNG (do you?). One way of working with these is to load them into a graphics program, convert to RGB, colour-select the colour that is obviously transparent, cut to make that colour transparent, and then save as a PNG with transparency. The pixels in most of the textures that have transparency are either completely opaque or completely transparent--these work fine with the DXT1 format mentioned below. There are a tiny number of textures, such as the steam in Steamfont that use multiple levels of transparency and will need to be saved in a DXT5 format to maintain the multiple levels of transparency if you choose to modify them. Note that if you’re converting zones you can always just skip converting textures with transparency to make your life easier and just leave the default textures.

DDS (DirectDraw surface) files

The DXT1 DDS file format is a good fit for most of the classic textures since it provides a single, optional bit for alpha (meaning pixels can be either completely opaque or completely transparent but not partially transparent). DXT5 DDS is good for the few textures that need multiple levels of alpha such as the steam in Steamfont. It’s a poor choice for other textures since it wastes space with unused alpha data.
I got the following results with some testing. DXT1 is efficient and the small amount of extra space for the mipmaps is well worth it.
DXT1 without mipmaps: 0.5 bytes/pixel
DXT1 with mipmaps: 0.67 bytes/pixel
DXT5 with mipmaps: 1.33 bytes/pixel