Redguard: Elder Scrolls Adventures GXT
Contents: GRAFs page - All - 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - Edit
Format Type: Archive
Extensions: gxa
Platforms: unknown
Endian Order: Little Endian
Format Specifications
Still trying to work out the RLE encoding!!!
Image or Animation
BIG ENDIAN FORMAT (except for a few fields)
FILE HEADER
uint32 {4} - Header (BMHD)
uint32 {4} - Color Palette Offset (34) (relative to the end of this field)
byte {32} - Description (GXlib image conversion )
uint16 {2} - Number of Animation Frames (LITTLE ENDIAN)
COLOR PALETTE (256 Colors)
uint32 {4} - Header (BPAL)
uint32 {4} - Color Palette Length (768)
for each color
byte {1} - Red
byte {1} - Green
byte {1} - Blue
IMAGE DATA
uint32 {4} - Header (BBMP)
uint32 {4} - Pixel Data Length (relative to the end of this field)
for each animation frame...
uint16 {2} - Unknown (256)
uint16 {2} - Image Width (LITTLE ENDIAN)
uint16 {2} - Image Height (LITTLE ENDIAN)
uint32 {4} - null
uint32 {4} - RLE Encoding? (0=no encoding, 1=encoding)
uint32 {4} - null
NO ENCODING
for each pixel
byte {1} - Palette Index
RLE ENCODING
uint32 {4} - Length of Encoded Data (LITTLE)
THE BELOW IS NOT RIGHT, AND NOT COMPLETE.
Note: the first 16 palette indexes are junk data, so maybe 4 bits are used as the indicator field?
eg bit 1 might mean "repeat the next X pixels", bit 2 might mean "no repeat", bit 3 might mean "go back and copy X pixels" etc.
for each row of the image
Read 2 bytes
if (byte[2] == 0 && byte[1]&128 == 1) {
byte[1]&127 = Number of Repeats
Read 1 byte - this is the pixel to repeat
now continue reading bytes, which are real pixels, until you reach the next null
byte {1} - null end of block terminator
}
else {
byte[1] is a real pixel
go back to the start, using byte[2] as the first of the 2 bytes you read
}
FILE FOOTER
uint32 {4} - Header (END )
MultiEx BMS Script
No BMS script
Supported Programs
Notes
No additional notes
Games
- Redguard: Elder Scrolls Adventures