Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
SRB2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
STJr
SRB2
Commits
f7357a02
Commit
f7357a02
authored
5 years ago
by
SteelT
Browse files
Options
Downloads
Plain Diff
Merge branch 'pk3-folders-are-not-textures-backport' into 'next'
Pk3 folders are not textures! See merge request
!502
parents
c9456e14
826e8e1a
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!502
Pk3 folders are not textures!
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/r_data.c
+39
-16
39 additions, 16 deletions
src/r_data.c
src/w_wad.c
+16
-0
16 additions, 0 deletions
src/w_wad.c
src/w_wad.h
+1
-0
1 addition, 0 deletions
src/w_wad.h
with
56 additions
and
16 deletions
src/r_data.c
+
39
−
16
View file @
f7357a02
...
@@ -404,6 +404,17 @@ void R_LoadTextures(void)
...
@@ -404,6 +404,17 @@ void R_LoadTextures(void)
// but the alternative is to spend a ton of time checking and re-checking all previous entries just to skip any potentially patched textures.
// but the alternative is to spend a ton of time checking and re-checking all previous entries just to skip any potentially patched textures.
for
(
w
=
0
,
numtextures
=
0
;
w
<
numwadfiles
;
w
++
)
for
(
w
=
0
,
numtextures
=
0
;
w
<
numwadfiles
;
w
++
)
{
{
// Count the textures from TEXTURES lumps
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
0
);
while
(
texturesLumpPos
!=
INT16_MAX
)
{
numtextures
+=
R_CountTexturesInTEXTURESLump
((
UINT16
)
w
,
(
UINT16
)
texturesLumpPos
);
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
texturesLumpPos
+
1
);
}
// Count single-patch textures
if
(
wadfiles
[
w
]
->
type
==
RET_PK3
)
if
(
wadfiles
[
w
]
->
type
==
RET_PK3
)
{
{
texstart
=
W_CheckNumForFolderStartPK3
(
"textures/"
,
(
UINT16
)
w
,
0
);
texstart
=
W_CheckNumForFolderStartPK3
(
"textures/"
,
(
UINT16
)
w
,
0
);
...
@@ -411,30 +422,34 @@ void R_LoadTextures(void)
...
@@ -411,30 +422,34 @@ void R_LoadTextures(void)
}
}
else
else
{
{
texstart
=
W_CheckNumForNamePwad
(
TX_START
,
(
UINT16
)
w
,
0
)
+
1
;
texstart
=
W_CheckNumForNamePwad
(
TX_START
,
(
UINT16
)
w
,
0
);
texend
=
W_CheckNumForNamePwad
(
TX_END
,
(
UINT16
)
w
,
0
);
texend
=
W_CheckNumForNamePwad
(
TX_END
,
(
UINT16
)
w
,
0
);
}
}
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
0
);
if
(
texstart
==
INT16_MAX
||
texend
==
INT16_MAX
)
while
(
texturesLumpPos
!=
INT16_MAX
)
continue
;
{
numtextures
+=
R_CountTexturesInTEXTURESLump
((
UINT16
)
w
,
(
UINT16
)
texturesLumpPos
);
texstart
++
;
// Do not count the first marker
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
texturesLumpPos
+
1
);
}
//
Add all the textures between TX_START and TX_END
//
PK3s have subfolders, so we can't just make a simple sum
if
(
texstart
!=
INT16_MAX
&&
texend
!=
INT16_MAX
)
if
(
wadfiles
[
w
]
->
type
==
RET_PK3
)
{
{
numtextures
+=
(
UINT32
)(
texend
-
texstart
);
for
(
j
=
texstart
;
j
<
texend
;
j
++
)
{
if
(
!
W_IsLumpFolder
((
UINT16
)
w
,
j
))
// Check if lump is a folder; if not, then count it
numtextures
++
;
}
}
}
else
// Add all the textures between TX_START and TX_END
// If no textures found by this point, bomb out
if
(
!
numtextures
&&
w
==
(
numwadfiles
-
1
))
{
{
I_Error
(
"No textures detected in any WADs!
\n
"
);
numtextures
+=
(
UINT32
)(
texend
-
texstart
);
}
}
}
}
// If no textures found by this point, bomb out
if
(
!
numtextures
)
I_Error
(
"No textures detected in any WADs!
\n
"
);
// Allocate memory and initialize to 0 for all the textures we are initialising.
// Allocate memory and initialize to 0 for all the textures we are initialising.
// There are actually 5 buffers allocated in one for convenience.
// There are actually 5 buffers allocated in one for convenience.
textures
=
Z_Calloc
((
numtextures
*
sizeof
(
void
*
))
*
5
,
PU_STATIC
,
NULL
);
textures
=
Z_Calloc
((
numtextures
*
sizeof
(
void
*
))
*
5
,
PU_STATIC
,
NULL
);
...
@@ -469,7 +484,7 @@ void R_LoadTextures(void)
...
@@ -469,7 +484,7 @@ void R_LoadTextures(void)
}
}
else
else
{
{
texstart
=
W_CheckNumForNamePwad
(
TX_START
,
(
UINT16
)
w
,
0
)
+
1
;
texstart
=
W_CheckNumForNamePwad
(
TX_START
,
(
UINT16
)
w
,
0
);
texend
=
W_CheckNumForNamePwad
(
TX_END
,
(
UINT16
)
w
,
0
);
texend
=
W_CheckNumForNamePwad
(
TX_END
,
(
UINT16
)
w
,
0
);
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
0
);
texturesLumpPos
=
W_CheckNumForNamePwad
(
"TEXTURES"
,
(
UINT16
)
w
,
0
);
if
(
texturesLumpPos
!=
INT16_MAX
)
if
(
texturesLumpPos
!=
INT16_MAX
)
...
@@ -479,9 +494,16 @@ void R_LoadTextures(void)
...
@@ -479,9 +494,16 @@ void R_LoadTextures(void)
if
(
texstart
==
INT16_MAX
||
texend
==
INT16_MAX
)
if
(
texstart
==
INT16_MAX
||
texend
==
INT16_MAX
)
continue
;
continue
;
texstart
++
;
// Do not count the first marker
// Work through each lump between the markers in the WAD.
// Work through each lump between the markers in the WAD.
for
(
j
=
0
;
j
<
(
texend
-
texstart
);
i
++
,
j
++
)
for
(
j
=
0
;
j
<
(
texend
-
texstart
);
j
++
)
{
{
if
(
wadfiles
[
w
]
->
type
==
RET_PK3
)
{
if
(
W_IsLumpFolder
((
UINT16
)
w
,
texstart
+
j
))
// Check if lump is a folder
continue
;
// If it is then SKIP IT
}
patchlump
=
W_CacheLumpNumPwad
((
UINT16
)
w
,
texstart
+
j
,
PU_CACHE
);
patchlump
=
W_CacheLumpNumPwad
((
UINT16
)
w
,
texstart
+
j
,
PU_CACHE
);
// Then, check the lump directly to see if it's a texture SOC,
// Then, check the lump directly to see if it's a texture SOC,
...
@@ -520,6 +542,7 @@ void R_LoadTextures(void)
...
@@ -520,6 +542,7 @@ void R_LoadTextures(void)
texturewidthmask
[
i
]
=
k
-
1
;
texturewidthmask
[
i
]
=
k
-
1
;
textureheight
[
i
]
=
texture
->
height
<<
FRACBITS
;
textureheight
[
i
]
=
texture
->
height
<<
FRACBITS
;
}
}
i
++
;
}
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
src/w_wad.c
+
16
−
0
View file @
f7357a02
...
@@ -1153,6 +1153,22 @@ boolean W_IsLumpWad(lumpnum_t lumpnum)
...
@@ -1153,6 +1153,22 @@ boolean W_IsLumpWad(lumpnum_t lumpnum)
return
false
;
// WADs should never be inside non-PK3s as far as SRB2 is concerned
return
false
;
// WADs should never be inside non-PK3s as far as SRB2 is concerned
}
}
//
// W_IsLumpFolder
// Is the lump a folder? (in a PK3 obviously)
//
boolean
W_IsLumpFolder
(
UINT16
wad
,
UINT16
lump
)
{
if
(
wadfiles
[
wad
]
->
type
==
RET_PK3
)
{
const
char
*
name
=
wadfiles
[
wad
]
->
lumpinfo
[
lump
].
name2
;
return
(
name
[
strlen
(
name
)
-
1
]
==
'/'
);
// folders end in '/'
}
return
false
;
// non-PK3s don't have folders
}
#ifdef HAVE_ZLIB
#ifdef HAVE_ZLIB
/* report a zlib or i/o error */
/* report a zlib or i/o error */
void
zerr
(
int
ret
)
void
zerr
(
int
ret
)
...
...
This diff is collapsed.
Click to expand it.
src/w_wad.h
+
1
−
0
View file @
f7357a02
...
@@ -154,6 +154,7 @@ size_t W_LumpLengthPwad(UINT16 wad, UINT16 lump);
...
@@ -154,6 +154,7 @@ size_t W_LumpLengthPwad(UINT16 wad, UINT16 lump);
size_t
W_LumpLength
(
lumpnum_t
lumpnum
);
size_t
W_LumpLength
(
lumpnum_t
lumpnum
);
boolean
W_IsLumpWad
(
lumpnum_t
lumpnum
);
// for loading maps from WADs in PK3s
boolean
W_IsLumpWad
(
lumpnum_t
lumpnum
);
// for loading maps from WADs in PK3s
boolean
W_IsLumpFolder
(
UINT16
wad
,
UINT16
lump
);
// for detecting folder "lumps"
#ifdef HAVE_ZLIB
#ifdef HAVE_ZLIB
void
zerr
(
int
ret
);
// zlib error checking
void
zerr
(
int
ret
);
// zlib error checking
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment