These contain texture information for Elements that require such.
Zeroing an egfx file will cause graphical corruption while the corresponding Element is executing, but has no other effect on the game. Zeroing the corresponding drp will cause no visible effects to take place at all, but the Element is still executed (it damages/heals/etc.) normally.
It has been claimed that the first texture in each file is a normal tim, whereas the textures that follow consist of tim images with the CLUT preceding the file rather than embedded inside it...but ~PSicture doesn't detect any tims when scanning these files, so something more may be going on.
An egfx file is divided into sections. Each section starts with a 1-sector header (note that all multi-byte values are little-endian):
4 bytes section_type(?) 2 bytes num1 2 bytes num2 2 bytes num3 (Add to num1; sum is VRAM X-coordinate) 2 bytes num4 (Add to num2; sum is VRAM Y-coordinate) 2 bytes width (Like other texture data, this is "half-width") 2 bytes unused1? 2 bytes unused2? 2 bytes unused3? 4 bytes sections_in_file 4 bytes section_sector_count (Not counting the header) 2 bytes rows_in_sector[sector_count]
Add up all the entries in rows_in_sector to get the height.
IMPORTANT: A row cannot start in one sector and then end in the next. If there isn't enough room left in the sector for another row, then the remaining space is left blank and the data continues in the next sector. Each entry in what I'm calling rows_in_sector specifies how many rows of data are in that sector.