Quail is a command line EverQuest archive manager.
You can use it to extract content from EQG, S3D, and other pfs-based files.
You can also use it with WCEmu to modify content.
For a more user-friendly approach, I suggest quail-addon.
You can find the latest download of quail in releases
Status
Quail currently in an early preview status. While many functionality goals have even reached, they are buggy and not supporting every use case.
Usage
Quail has a number of commands that are displayed when the program is ran on it's own with no arguments:
Available Commands:
completion Generate the autocompletion script for the specified shell
compress Compress an eqg/s3d/pfs/pak folder named _file.ext/ to a pfs archive
convert Take one file, convert to another
extract Extract an pfs (eqg/s3d/pak/pfs) archive to a _file.ext/ folder
extract-mod ExtractMod an pfs archive to a _file.ext/ folder
help Help about any command
hybrid Hybrid merge geometry with existing bone data
inspect Inspect an EverQuest asset
EverQuest File Overview
Pfs
Pfs represents packaged files, you can think of them as zip compressed archives but has a special format
Extension |
Notes |
eqg |
EverQuest Game Asset Pfs Archive |
s3d |
EverQuest Game Asset Pfs Archive (Legacy) |
pak |
EverQuest Game Asset Pfs Archive (Legacy) |
pfs |
EverQuest Game Asset Pfs Archive (Legacy) |
Model/Mesh
Model meshes represents geometry data, and some times metadata
Extension |
Notes |
dat |
zone model for version 4 zones |
mds |
npc, object and item model information |
mod |
npc, object and item model information |
ter |
zone model data for version 1 to 3, similar to mod/mds just without bone data |
wld |
megapack of model metadata and model information for s3d legacy pfs archives |
Model Metadata gives additional information about a mesh
Extension |
Notes |
ani |
Animation data, frame by frame based on bone locations |
edd |
Emitter definition data, aligns with prt to give details about how particles and emitters work |
lay |
Layered texture data (Used for texture swaps/variations in a single model) |
lit |
Light baking data, has same count as vertices |
lod |
Level of Detail related information, usually refs to additional meshes to render based on distance |
prt |
Particle Rendering Transformations, |
pts |
Particle Transformation Statements, |
tog |
Toggle data |
zon |
Zone placement data, gives information about the zone terrain and object placements. Version 3 and below this is a binary file, Version 4+ it is raw text in a 3DsMax format |
eco |
Ecology metadata, used for randomizing and blending maps in Version 4 Zones |
rfd |
Radial Flora Data, grass, rocks,and other placable greenery metadata |
Special Files
Name |
Notes |
floraexclusion.dat |
Flora exclusion areas, Versin 4 zones use this to create ignores on RFD files |
prj |
3DS Max Project files, this is used by internal team for opening a pfs mesh, doesn't appear to have any use for EverQuest. |
dbg.txt |
Debug log, shows the last export attempt internally, doesn't appear to have any use for EverQuest. |
Progress Checklist
- Import Support
- Bugs EQG with V4 and zone files
- Bugs S3D (not supported currently)
- Export Support
- Bone/Animations
- Image Sequence support (animated textures)
- MOD support
- S3D/WLD support
- V4 Zone support
Running Tests and Setting Up a Development Environment
At the root of the repo, you'll see a file called .env_default
. Copy it to the file .env
, and edit the EQ_PATH variable inside to point to your EQ directory. NOTE that this EQ directory will get folders made like _gequip.s3d/, or _test_data/, so you may want to consider pointing to a unused EQ path if you don't like the clutter of folders on top.
References
- Frozen Crusader Ornament, item id 81466, is it13926
External resources
gltf writer for wld fragments in lantern
fragment overview ref
eq-sage ref
polyhedron none
ambientlight none
blitspritedef none
dmrgbtrack none
--skipped
compositesprite
dmspritedef 0x01 0x02 0x800 0x1000
Flag 6146 found in global_chr.s3d/global_chr.wld/IVM_DMSPRITEDEF fragID 558 Flag 6146 (0x1802) -- 0x02 0x800 0x1000
Flag 6147 found in erudsxing_chr2.s3d/erudsxing_chr2.wld/HULL_DMSPRITEDEF fragID 74 Flag 6147 (0x1803) -- 0x02 0x800 0x1000
actordef 0x80 abysmal_obj.s3d/abysmal_obj.wld/ARMSHPSIGN301_ACTORDEF fragID 2046 Flag 128
polyhedrondef 0x01
actor
Flag 46 found in abysmal.s3d/abysmal.wld/ fragID 11861 Flag 46 (0x2e) -- 0x02 0x04 0x08 0x20
Flag 558 found in timorous_lit.s3d/timorous_lit.wld/ fragID 13349 Flag 558 (0x22e) -- 0x02 0x04 0x08 0x20 0x200
Flag 814 found in timorous_lit.s3d/timorous_lit.wld/ fragID 13192 Flag 814 (0x32e) -- 0x02 0x04 0x08 0x20 0x100 0x200
Max flag found: 2 0x02