Skip to content

Commit dc2ce21

Browse files
authored
HL2: endianness pass and other improvements (#337)
1 parent cbba8fb commit dc2ce21

4 files changed

Lines changed: 42 additions & 23 deletions

File tree

plugins/hl2/fs_gma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ static searchpathfuncs_t *QDECL FSGMA_LoadArchive(vfsfile_t *file, searchpathfun
321321
VFS_READ(file, &len, sizeof(len));
322322
VFS_READ(file, &crc, sizeof(crc));
323323

324-
pak->files[pak->num_files].len = len;
324+
pak->files[pak->num_files].len = LittleI64(len);
325325
pak->files[pak->num_files].ofs = ofs;
326326
ofs += len;
327327

plugins/hl2/fs_vpk_vtmb.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -254,13 +254,16 @@ searchpathfuncs_t *QDECL FSVVPK_LoadArchive(vfsfile_t *file, searchpathfuncs_t *
254254
fsize = VFS_GETLEN(file);
255255
if (fsize < 9)
256256
return NULL;
257-
VFS_SEEK(file, fsize - 9);
258-
VFS_READ(file, &num_files, 4);
259-
VFS_READ(file, &ofs_files, 4);
260-
VFS_READ(file, &sentinel, 1);
257+
VFS_SEEK(file, fsize - ((sizeof(uint32_t) * 2) + sizeof(uint8_t)));
258+
VFS_READ(file, &num_files, sizeof(num_files));
259+
VFS_READ(file, &ofs_files, sizeof(ofs_files));
260+
VFS_READ(file, &sentinel, sizeof(sentinel));
261261
if (sentinel != 0)
262262
return NULL;
263263

264+
num_files = LittleLong(num_files);
265+
ofs_files = LittleLong(ofs_files);
266+
264267
// alloc
265268
pak = plugfuncs->Malloc(sizeof(*pak));
266269
pak->files = plugfuncs->Malloc(sizeof(*pak->files) * num_files);
@@ -272,19 +275,20 @@ searchpathfuncs_t *QDECL FSVVPK_LoadArchive(vfsfile_t *file, searchpathfuncs_t *
272275
uint32_t len_name;
273276
uint32_t ofs_data;
274277
uint32_t len_data;
275-
VFS_READ(file, &len_name, 4);
278+
VFS_READ(file, &len_name, sizeof(len_name));
279+
len_name = LittleLong(len_name);
276280
if (len_name > MAX_QPATH - 1)
277281
{
278-
Con_Printf("ERROR: filename in vpk is too long\n");
282+
Con_Printf("%s: filename in vpk is too long\n", filename);
279283
return NULL;
280284
}
281285

282286
VFS_READ(file, pak->files[i].name, len_name);
283-
VFS_READ(file, &ofs_data, 4);
284-
VFS_READ(file, &len_data, 4);
287+
VFS_READ(file, &ofs_data, sizeof(ofs_data));
288+
VFS_READ(file, &len_data, sizeof(len_data));
285289

286-
pak->files[i].ofs = ofs_data;
287-
pak->files[i].len = len_data;
290+
pak->files[i].ofs = LittleLong(ofs_data);
291+
pak->files[i].len = LittleLong(len_data);
288292
}
289293

290294
// setup info

plugins/hl2/img_tth.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ qboolean COM_RequireExtension(char *path, const char *extension, int maxlen)
4040
static struct pendingtextureinfo *Image_ReadTTHFile(unsigned int flags, const char *fname, qbyte *filedata, size_t filesize)
4141
{
4242
uint8_t num_mipmaps; // number of mipmaps in this texture
43-
int32_t len_vtf_chunk; // size of uncompressed vtf chunk in header
44-
int32_t len_vtf_file; // total size of uncompressed vtf file
45-
int32_t len_ttz_tail; // compressed size of accompanying ttz file
43+
uint32_t len_vtf_chunk; // size of uncompressed vtf chunk in header
44+
uint32_t len_vtf_file; // total size of uncompressed vtf file
45+
uint32_t len_ttz_tail; // compressed size of accompanying ttz file
4646
qbyte *vtf;
4747
qbyte *tail = NULL;
4848
size_t tailsize = 0;
@@ -58,11 +58,11 @@ static struct pendingtextureinfo *Image_ReadTTHFile(unsigned int flags, const ch
5858
// grab other data
5959
num_mipmaps = filedata[6];
6060
// aspect_flag skipped
61-
len_vtf_chunk = *(int32_t *)&filedata[8];
61+
len_vtf_chunk = LittleLong(*(uint32_t *)&filedata[8]);
6262

6363
// skip past mipmap flags to grab other other data
64-
len_vtf_file = *(int32_t *)(filedata + 12 + (num_mipmaps * sizeof(uint64_t)));
65-
len_ttz_tail = *(int32_t *)(filedata + 12 + (num_mipmaps * sizeof(uint64_t)) + 4);
64+
len_vtf_file = LittleLong(*(uint32_t *)(filedata + 12 + (num_mipmaps * sizeof(uint64_t))));
65+
len_ttz_tail = LittleLong(*(uint32_t *)(filedata + 12 + (num_mipmaps * sizeof(uint64_t)) + 4));
6666

6767
// load tail if it exists
6868
if (len_ttz_tail > 0)

plugins/hl2/img_vtf.c

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ static uploadfmt_t ImageVTF_VtfToFTE(fmtfmt_t f)
7373
}
7474
struct pendingtextureinfo *Image_ReadVTFFile(unsigned int flags, const char *fname, qbyte *filedata, size_t filesize)
7575
{
76-
//FIXME: cba with endian.
7776
struct vtf_s
7877
{
7978
char magic[4];
@@ -116,15 +115,31 @@ struct pendingtextureinfo *Image_ReadVTFFile(unsigned int flags, const char *fna
116115
if (memcmp(vtf->magic, "VTF\0", 4))
117116
return NULL;
118117

118+
// erysdren: do endian swapping
119+
vtf->major = LittleLong(vtf->major);
120+
vtf->minor = LittleLong(vtf->minor);
121+
vtf->headersize = LittleLong(vtf->headersize);
122+
vtf->width = LittleShort(vtf->width);
123+
vtf->height = LittleShort(vtf->height);
124+
vtf->flags = LittleLong(vtf->flags);
125+
vtf->numframes = LittleShort(vtf->numframes);
126+
vtf->firstframe = LittleShort(vtf->firstframe);
127+
vtf->pad1 = LittleLong(vtf->pad1);
128+
vtf->reflectivity[0] = LittleFloat(vtf->reflectivity[0]);
129+
vtf->reflectivity[1] = LittleFloat(vtf->reflectivity[1]);
130+
vtf->reflectivity[2] = LittleFloat(vtf->reflectivity[2]);
131+
vtf->pad2 = LittleFloat(vtf->pad2);
132+
vtf->bumpmapscale = LittleFloat(vtf->bumpmapscale);
133+
119134
version = (vtf->major<<16)|vtf->minor;
120135
if (version > 0x00070005)
121136
{
122137
Con_Printf("%s: VTF version %i.%i is not supported\n", fname, vtf->major, vtf->minor);
123138
return NULL;
124139
}
125140

126-
lrfmt = (vtf->lowresfmt_misaligned[0]<<0)|(vtf->lowresfmt_misaligned[1]<<16)|(vtf->lowresfmt_misaligned[2]<<16)|(vtf->lowresfmt_misaligned[3]<<24);
127-
vmffmt = vtf->imgformat;
141+
lrfmt = LittleLong((vtf->lowresfmt_misaligned[0]<<0)|(vtf->lowresfmt_misaligned[1]<<16)|(vtf->lowresfmt_misaligned[2]<<16)|(vtf->lowresfmt_misaligned[3]<<24));
142+
vmffmt = LittleLong(vtf->imgformat);
128143

129144
mips = NULL;
130145
if (version >= 0x00070003)
@@ -135,13 +150,13 @@ struct pendingtextureinfo *Image_ReadVTFFile(unsigned int flags, const char *fna
135150
unsigned int rtype;
136151
unsigned int rdata; //usually an offset.
137152
} *restable = (void*)(filedata+sizeof(*vtf));
138-
for (i = 0; i < vtf->numresources; i++, restable++)
153+
for (i = 0; i < LittleLong(vtf->numresources); i++, restable++)
139154
{
140-
if ((restable->rtype & 0x00ffffff) == 0x30)
155+
if ((LittleLong(restable->rtype) & 0x00ffffff) == 0x30)
141156
{
142157
mips = plugfuncs->Malloc(sizeof(*mips));
143158
mips->extrafree = filedata;
144-
filedata += restable->rdata;
159+
filedata += LittleLong(restable->rdata);
145160
break;
146161
}
147162
//other unknown resource types.

0 commit comments

Comments
 (0)