Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
SRB2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
262
Issues
262
List
Board
Labels
Milestones
Merge Requests
74
Merge Requests
74
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
STJr
SRB2
Commits
6f9422d3
Commit
6f9422d3
authored
Mar 22, 2020
by
LJ Sonic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Encapsulate plane height checks
parent
077543f2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
237 additions
and
388 deletions
+237
-388
am_map.c
src/am_map.c
+2
-5
hw_main.c
src/hardware/hw_main.c
+48
-98
m_cheat.c
src/m_cheat.c
+6
-6
p_map.c
src/p_map.c
+13
-38
p_maputl.c
src/p_maputl.c
+13
-25
p_mobj.c
src/p_mobj.c
+23
-74
p_sight.c
src/p_sight.c
+16
-27
p_slopes.c
src/p_slopes.c
+40
-8
p_slopes.h
src/p_slopes.h
+15
-1
p_spec.c
src/p_spec.c
+3
-8
p_user.c
src/p_user.c
+24
-34
r_bsp.c
src/r_bsp.c
+17
-33
r_segs.c
src/r_segs.c
+0
-0
r_things.c
src/r_things.c
+17
-31
No files found.
src/am_map.c
View file @
6f9422d3
...
...
@@ -931,11 +931,8 @@ static inline void AM_drawWalls(void)
l
.
b
.
y
=
lines
[
i
].
v2
->
y
>>
FRACTOMAPBITS
;
#define SLOPEPARAMS(slope, end1, end2, normalheight) \
if (slope) { \
end1 = P_GetZAt(slope, lines[i].v1->x, lines[i].v1->y); \
end2 = P_GetZAt(slope, lines[i].v2->x, lines[i].v2->y); \
} else \
end1 = end2 = normalheight;
end1 = P_GetZAt2(slope, lines[i].v1->x, lines[i].v1->y, normalheight); \
end2 = P_GetZAt2(slope, lines[i].v2->x, lines[i].v2->y, normalheight);
SLOPEPARAMS
(
lines
[
i
].
frontsector
->
f_slope
,
frontf1
,
frontf2
,
lines
[
i
].
frontsector
->
floorheight
)
SLOPEPARAMS
(
lines
[
i
].
frontsector
->
c_slope
,
frontc1
,
frontc2
,
lines
[
i
].
frontsector
->
ceilingheight
)
...
...
src/hardware/hw_main.c
View file @
6f9422d3
This diff is collapsed.
Click to expand it.
src/m_cheat.c
View file @
6f9422d3
...
...
@@ -1027,7 +1027,7 @@ static boolean OP_HeightOkay(player_t *player, UINT8 ceiling)
{
// Truncate position to match where mapthing would be when spawned
// (this applies to every further P_GetZAt call as well)
fixed_t
cheight
=
sec
->
c_slope
?
P_GetZAt
(
sec
->
c_slope
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
:
sec
->
ceilingheight
;
fixed_t
cheight
=
P_GetSectorCeilingZAt
(
sec
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
;
if
(((
cheight
-
player
->
mo
->
z
-
player
->
mo
->
height
)
>>
FRACBITS
)
>=
(
1
<<
(
16
-
ZSHIFT
)))
{
...
...
@@ -1038,7 +1038,7 @@ static boolean OP_HeightOkay(player_t *player, UINT8 ceiling)
}
else
{
fixed_t
fheight
=
sec
->
f_slope
?
P_GetZAt
(
sec
->
f_slope
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
:
sec
->
floorheight
;
fixed_t
fheight
=
P_GetSectorFloorZAt
(
sec
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
;
if
(((
player
->
mo
->
z
-
fheight
)
>>
FRACBITS
)
>=
(
1
<<
(
16
-
ZSHIFT
)))
{
CONS_Printf
(
M_GetText
(
"Sorry, you're too %s to place this object (max: %d %s).
\n
"
),
M_GetText
(
"high"
),
...
...
@@ -1085,12 +1085,12 @@ static mapthing_t *OP_CreateNewMapThing(player_t *player, UINT16 type, boolean c
mt
->
y
=
(
INT16
)(
player
->
mo
->
y
>>
FRACBITS
);
if
(
ceiling
)
{
fixed_t
cheight
=
sec
->
c_slope
?
P_GetZAt
(
sec
->
c_slope
,
mt
->
x
<<
FRACBITS
,
mt
->
y
<<
FRACBITS
)
:
sec
->
ceilingheight
;
fixed_t
cheight
=
P_GetSectorCeilingZAt
(
sec
,
mt
->
x
<<
FRACBITS
,
mt
->
y
<<
FRACBITS
)
;
mt
->
z
=
(
UINT16
)((
cheight
-
player
->
mo
->
z
-
player
->
mo
->
height
)
>>
FRACBITS
);
}
else
{
fixed_t
fheight
=
sec
->
f_slope
?
P_GetZAt
(
sec
->
f_slope
,
mt
->
x
<<
FRACBITS
,
mt
->
y
<<
FRACBITS
)
:
sec
->
floorheight
;
fixed_t
fheight
=
P_GetSectorFloorZAt
(
sec
,
mt
->
x
<<
FRACBITS
,
mt
->
y
<<
FRACBITS
)
;
mt
->
z
=
(
UINT16
)((
player
->
mo
->
z
-
fheight
)
>>
FRACBITS
);
}
mt
->
angle
=
(
INT16
)(
FixedInt
(
AngleFixed
(
player
->
mo
->
angle
)));
...
...
@@ -1336,12 +1336,12 @@ void OP_ObjectplaceMovement(player_t *player)
if
(
!!
(
mobjinfo
[
op_currentthing
].
flags
&
MF_SPAWNCEILING
)
^
!!
(
cv_opflags
.
value
&
MTF_OBJECTFLIP
))
{
fixed_t
cheight
=
sec
->
c_slope
?
P_GetZAt
(
sec
->
c_slope
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
:
sec
->
ceilingheight
;
fixed_t
cheight
=
P_GetSectorCeilingZAt
(
sec
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
;
op_displayflags
=
(
UINT16
)((
cheight
-
player
->
mo
->
z
-
mobjinfo
[
op_currentthing
].
height
)
>>
FRACBITS
);
}
else
{
fixed_t
fheight
=
sec
->
f_slope
?
P_GetZAt
(
sec
->
f_slope
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
:
sec
->
floorheight
;
fixed_t
fheight
=
P_GetSectorFloorZAt
(
sec
,
player
->
mo
->
x
&
0xFFFF0000
,
player
->
mo
->
y
&
0xFFFF0000
)
;
op_displayflags
=
(
UINT16
)((
player
->
mo
->
z
-
fheight
)
>>
FRACBITS
);
}
op_displayflags
<<=
ZSHIFT
;
...
...
src/p_map.c
View file @
6f9422d3
...
...
@@ -3214,8 +3214,8 @@ static boolean P_IsClimbingValid(player_t *player, angle_t angle)
glidesector
=
R_PointInSubsector
(
player
->
mo
->
x
+
platx
,
player
->
mo
->
y
+
platy
);
floorz
=
glidesector
->
sector
->
f_slope
?
P_GetZAt
(
glidesector
->
sector
->
f_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
glidesector
->
sector
->
floorheight
;
ceilingz
=
glidesector
->
sector
->
c_slope
?
P_GetZAt
(
glidesector
->
sector
->
c_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
glidesector
->
sector
->
ceilingheight
;
floorz
=
P_GetSectorFloorZAt
(
glidesector
->
sector
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
ceilingz
=
P_GetSectorCeilingZAt
(
glidesector
->
sector
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
if
(
glidesector
->
sector
!=
player
->
mo
->
subsector
->
sector
)
{
...
...
@@ -3230,13 +3230,8 @@ static boolean P_IsClimbingValid(player_t *player, angle_t angle)
if
(
!
(
rover
->
flags
&
FF_EXISTS
)
||
!
(
rover
->
flags
&
FF_BLOCKPLAYER
))
continue
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
);
floorclimb
=
true
;
...
...
@@ -3389,13 +3384,8 @@ isblocking:
if
(
!
(
rover
->
flags
&
FF_EXISTS
)
||
!
(
rover
->
flags
&
FF_BLOCKPLAYER
)
||
(
rover
->
flags
&
FF_BUSTUP
))
continue
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
slidemo
->
x
,
slidemo
->
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
slidemo
->
x
,
slidemo
->
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
slidemo
->
x
,
slidemo
->
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
slidemo
->
x
,
slidemo
->
y
);
if
(
topheight
<
slidemo
->
z
)
continue
;
...
...
@@ -3600,9 +3590,7 @@ static void P_CheckLavaWall(mobj_t *mo, sector_t *sec)
if
(
rover
->
master
->
flags
&
ML_BLOCKMONSTERS
)
continue
;
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
topheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
mo
->
x
,
mo
->
y
);
if
(
mo
->
eflags
&
MFE_VERTICALFLIP
)
{
...
...
@@ -3615,9 +3603,7 @@ static void P_CheckLavaWall(mobj_t *mo, sector_t *sec)
continue
;
}
bottomheight
=
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
bottomheight
;
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mo
->
x
,
mo
->
y
);
if
(
mo
->
eflags
&
MFE_VERTICALFLIP
)
{
...
...
@@ -4203,11 +4189,8 @@ static boolean PIT_ChangeSector(mobj_t *thing, boolean realcrush)
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
/*if (rover->t_slope)
topheight = P_GetZAt(rover->t_slope, thing->x, thing->y);
if (rover->b_slope)
bottomheight = P_GetZAt(rover->b_slope, thing->x, thing->y);*/
//topheight = P_GetFFloorTopZAt (rover, thing->x, thing->y);
//bottomheight = P_GetFFloorBottomZAt(rover, thing->x, thing->y);
delta1
=
thing
->
z
-
(
bottomheight
+
topheight
)
/
2
;
delta2
=
thingtop
-
(
bottomheight
+
topheight
)
/
2
;
...
...
@@ -4986,10 +4969,7 @@ void P_MapEnd(void)
fixed_t
P_FloorzAtPos
(
fixed_t
x
,
fixed_t
y
,
fixed_t
z
,
fixed_t
height
)
{
sector_t
*
sec
=
R_PointInSubsector
(
x
,
y
)
->
sector
;
fixed_t
floorz
=
sec
->
floorheight
;
if
(
sec
->
f_slope
)
floorz
=
P_GetZAt
(
sec
->
f_slope
,
x
,
y
);
fixed_t
floorz
=
P_GetSectorFloorZAt
(
sec
,
x
,
y
);
// Intercept the stupid 'fall through 3dfloors' bug Tails 03-17-2002
if
(
sec
->
ffloors
)
...
...
@@ -5006,13 +4986,8 @@ fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height)
if
((
!
(
rover
->
flags
&
FF_SOLID
||
rover
->
flags
&
FF_QUICKSAND
)
||
(
rover
->
flags
&
FF_SWIMMABLE
)))
continue
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
x
,
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
x
,
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
x
,
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
x
,
y
);
if
(
rover
->
flags
&
FF_QUICKSAND
)
{
...
...
src/p_maputl.c
View file @
6f9422d3
...
...
@@ -303,45 +303,33 @@ void P_CameraLineOpening(line_t *linedef)
// If you can see through it, why not move the camera through it too?
if
(
front
->
camsec
>=
0
)
{
frontfloor
=
sectors
[
front
->
camsec
].
floorheight
;
frontceiling
=
sectors
[
front
->
camsec
].
ceilingheight
;
if
(
sectors
[
front
->
camsec
].
f_slope
)
// SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope)
frontfloor
=
P_GetZAt
(
sectors
[
front
->
camsec
].
f_slope
,
camera
.
x
,
camera
.
y
);
if
(
sectors
[
front
->
camsec
].
c_slope
)
frontceiling
=
P_GetZAt
(
sectors
[
front
->
camsec
].
c_slope
,
camera
.
x
,
camera
.
y
);
// SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope)
frontfloor
=
P_GetSectorFloorZAt
(
&
sectors
[
front
->
camsec
],
camera
.
x
,
camera
.
y
);
frontceiling
=
P_GetSectorCeilingZAt
(
&
sectors
[
front
->
camsec
],
camera
.
x
,
camera
.
y
);
}
else
if
(
front
->
heightsec
>=
0
)
{
frontfloor
=
sectors
[
front
->
heightsec
].
floorheight
;
frontceiling
=
sectors
[
front
->
heightsec
].
ceilingheight
;
if
(
sectors
[
front
->
heightsec
].
f_slope
)
// SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope)
frontfloor
=
P_GetZAt
(
sectors
[
front
->
heightsec
].
f_slope
,
camera
.
x
,
camera
.
y
);
if
(
sectors
[
front
->
heightsec
].
c_slope
)
frontceiling
=
P_GetZAt
(
sectors
[
front
->
heightsec
].
c_slope
,
camera
.
x
,
camera
.
y
);
// SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope)
frontfloor
=
P_GetSectorFloorZAt
(
&
sectors
[
front
->
heightsec
],
camera
.
x
,
camera
.
y
);
frontceiling
=
P_GetSectorCeilingZAt
(
&
sectors
[
front
->
heightsec
],
camera
.
x
,
camera
.
y
);
}
else
{
frontfloor
=
P_CameraGetFloorZ
(
mapcampointer
,
front
,
tmx
,
tmy
,
linedef
);
frontfloor
=
P_CameraGetFloorZ
(
mapcampointer
,
front
,
tmx
,
tmy
,
linedef
);
frontceiling
=
P_CameraGetCeilingZ
(
mapcampointer
,
front
,
tmx
,
tmy
,
linedef
);
}
if
(
back
->
camsec
>=
0
)
{
backfloor
=
sectors
[
back
->
camsec
].
floorheight
;
backceiling
=
sectors
[
back
->
camsec
].
ceilingheight
;
if
(
sectors
[
back
->
camsec
].
f_slope
)
// SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope)
backfloor
=
P_GetZAt
(
sectors
[
back
->
camsec
].
f_slope
,
camera
.
x
,
camera
.
y
);
if
(
sectors
[
back
->
camsec
].
c_slope
)
backceiling
=
P_GetZAt
(
sectors
[
back
->
camsec
].
c_slope
,
camera
.
x
,
camera
.
y
);
// SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope)
backfloor
=
P_GetSectorFloorZAt
(
&
sectors
[
back
->
camsec
],
camera
.
x
,
camera
.
y
);
backceiling
=
P_GetSectorCeilingZAt
(
&
sectors
[
back
->
camsec
],
camera
.
x
,
camera
.
y
);
}
else
if
(
back
->
heightsec
>=
0
)
{
backfloor
=
sectors
[
back
->
heightsec
].
floorheight
;
backceiling
=
sectors
[
back
->
heightsec
].
ceilingheight
;
if
(
sectors
[
back
->
heightsec
].
f_slope
)
// SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope)
backfloor
=
P_GetZAt
(
sectors
[
back
->
heightsec
].
f_slope
,
camera
.
x
,
camera
.
y
);
if
(
sectors
[
back
->
heightsec
].
c_slope
)
backceiling
=
P_GetZAt
(
sectors
[
back
->
heightsec
].
c_slope
,
camera
.
x
,
camera
.
y
);
// SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope)
backfloor
=
P_GetSectorFloorZAt
(
&
sectors
[
back
->
heightsec
],
camera
.
x
,
camera
.
y
);
backceiling
=
P_GetSectorCeilingZAt
(
&
sectors
[
back
->
heightsec
],
camera
.
x
,
camera
.
y
);
}
else
{
...
...
src/p_mobj.c
View file @
6f9422d3
...
...
@@ -926,13 +926,8 @@ boolean P_InsideANonSolidFFloor(mobj_t *mobj, ffloor_t *rover)
||
((
rover
->
flags
&
FF_BLOCKOTHERS
)
&&
!
mobj
->
player
)))
return
false
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
mobj
->
x
,
mobj
->
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
mobj
->
x
,
mobj
->
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
if
(
mobj
->
z
>
topheight
)
return
false
;
...
...
@@ -3213,9 +3208,7 @@ static boolean P_SceneryZMovement(mobj_t *mo)
//
boolean
P_CanRunOnWater
(
player_t
*
player
,
ffloor_t
*
rover
)
{
fixed_t
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
rover
->
topheight
;
fixed_t
topheight
=
P_GetFFloorTopZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
);
if
(
!
player
->
powers
[
pw_carry
]
&&
!
player
->
homing
&&
((
player
->
powers
[
pw_super
]
||
player
->
charflags
&
SF_RUNONWATER
||
player
->
dashmode
>=
DASHMODE_THRESHOLD
)
&&
player
->
mo
->
ceilingz
-
topheight
>=
player
->
mo
->
height
)
...
...
@@ -3258,14 +3251,8 @@ void P_MobjCheckWater(mobj_t *mobj)
||
((
rover
->
flags
&
FF_BLOCKOTHERS
)
&&
!
mobj
->
player
)))
continue
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
mobj
->
x
,
mobj
->
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
mobj
->
x
,
mobj
->
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
if
(
mobj
->
eflags
&
MFE_VERTICALFLIP
)
{
...
...
@@ -3512,14 +3499,8 @@ static void P_SceneryCheckWater(mobj_t *mobj)
if
(
!
(
rover
->
flags
&
FF_EXISTS
)
||
!
(
rover
->
flags
&
FF_SWIMMABLE
)
||
rover
->
flags
&
FF_BLOCKOTHERS
)
continue
;
topheight
=
*
rover
->
topheight
;
bottomheight
=
*
rover
->
bottomheight
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
mobj
->
x
,
mobj
->
y
);
if
(
*
rover
->
b_slope
)
bottomheight
=
P_GetZAt
(
*
rover
->
b_slope
,
mobj
->
x
,
mobj
->
y
);
topheight
=
P_GetFFloorTopZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
if
(
topheight
<=
mobj
->
z
||
bottomheight
>
(
mobj
->
z
+
(
mobj
->
height
>>
1
)))
...
...
@@ -3564,13 +3545,9 @@ static boolean P_CameraCheckHeat(camera_t *thiscam)
if
(
!
(
rover
->
flags
&
FF_EXISTS
))
continue
;
if
(
halfheight
>=
(
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
thiscam
->
x
,
thiscam
->
y
)
:
*
rover
->
topheight
))
if
(
halfheight
>=
P_GetFFloorTopZAt
(
rover
,
thiscam
->
x
,
thiscam
->
y
))
continue
;
if
(
halfheight
<=
(
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
thiscam
->
x
,
thiscam
->
y
)
:
*
rover
->
bottomheight
))
if
(
halfheight
<=
P_GetFFloorBottomZAt
(
rover
,
thiscam
->
x
,
thiscam
->
y
))
continue
;
if
(
P_FindSpecialLineFromTag
(
13
,
rover
->
master
->
frontsector
->
tag
,
-
1
)
!=
-
1
)
...
...
@@ -3598,13 +3575,9 @@ static boolean P_CameraCheckWater(camera_t *thiscam)
if
(
!
(
rover
->
flags
&
FF_EXISTS
)
||
!
(
rover
->
flags
&
FF_SWIMMABLE
)
||
rover
->
flags
&
FF_BLOCKOTHERS
)
continue
;
if
(
halfheight
>=
(
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
thiscam
->
x
,
thiscam
->
y
)
:
*
rover
->
topheight
))
if
(
halfheight
>=
P_GetFFloorTopZAt
(
rover
,
thiscam
->
x
,
thiscam
->
y
))
continue
;
if
(
halfheight
<=
(
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
thiscam
->
x
,
thiscam
->
y
)
:
*
rover
->
bottomheight
))
if
(
halfheight
<=
P_GetFFloorBottomZAt
(
rover
,
thiscam
->
x
,
thiscam
->
y
))
continue
;
return
true
;
...
...
@@ -3952,9 +3925,7 @@ static void CalculatePrecipFloor(precipmobj_t *mobj)
mobjsecsubsec
=
mobj
->
subsector
->
sector
;
else
return
;
mobj
->
floorz
=
mobjsecsubsec
->
f_slope
?
P_GetZAt
(
mobjsecsubsec
->
f_slope
,
mobj
->
x
,
mobj
->
y
)
:
mobjsecsubsec
->
floorheight
;
mobj
->
floorz
=
P_GetSectorFloorZAt
(
mobjsecsubsec
,
mobj
->
x
,
mobj
->
y
);
if
(
mobjsecsubsec
->
ffloors
)
{
ffloor_t
*
rover
;
...
...
@@ -3969,11 +3940,7 @@ static void CalculatePrecipFloor(precipmobj_t *mobj)
if
(
!
(
rover
->
flags
&
FF_BLOCKOTHERS
)
&&
!
(
rover
->
flags
&
FF_SWIMMABLE
))
continue
;
if
(
*
rover
->
t_slope
)
topheight
=
P_GetZAt
(
*
rover
->
t_slope
,
mobj
->
x
,
mobj
->
y
);
else
topheight
=
*
rover
->
topheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
mobj
->
x
,
mobj
->
y
);
if
(
topheight
>
mobj
->
floorz
)
mobj
->
floorz
=
topheight
;
}
...
...
@@ -10496,12 +10463,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
// Make sure scale matches destscale immediately when spawned
P_SetScale
(
mobj
,
mobj
->
destscale
);
mobj
->
floorz
=
mobj
->
subsector
->
sector
->
f_slope
?
P_GetZAt
(
mobj
->
subsector
->
sector
->
f_slope
,
x
,
y
)
:
mobj
->
subsector
->
sector
->
floorheight
;
mobj
->
ceilingz
=
mobj
->
subsector
->
sector
->
c_slope
?
P_GetZAt
(
mobj
->
subsector
->
sector
->
c_slope
,
x
,
y
)
:
mobj
->
subsector
->
sector
->
ceilingheight
;
mobj
->
floorz
=
P_GetSectorFloorZAt
(
mobj
->
subsector
->
sector
,
x
,
y
);
mobj
->
ceilingz
=
P_GetSectorCeilingZAt
(
mobj
->
subsector
->
sector
,
x
,
y
);
mobj
->
floorrover
=
NULL
;
mobj
->
ceilingrover
=
NULL
;
...
...
@@ -10854,12 +10817,8 @@ static precipmobj_t *P_SpawnPrecipMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype
// set subsector and/or block links
P_SetPrecipitationThingPosition
(
mobj
);
mobj
->
floorz
=
starting_floorz
=
mobj
->
subsector
->
sector
->
f_slope
?
P_GetZAt
(
mobj
->
subsector
->
sector
->
f_slope
,
x
,
y
)
:
mobj
->
subsector
->
sector
->
floorheight
;
mobj
->
ceilingz
=
mobj
->
subsector
->
sector
->
c_slope
?
P_GetZAt
(
mobj
->
subsector
->
sector
->
c_slope
,
x
,
y
)
:
mobj
->
subsector
->
sector
->
ceilingheight
;
mobj
->
floorz
=
starting_floorz
=
P_GetSectorFloorZAt
(
mobj
->
subsector
->
sector
,
x
,
y
);
mobj
->
ceilingz
=
P_GetSectorCeilingZAt
(
mobj
->
subsector
->
sector
,
x
,
y
);
mobj
->
floorrover
=
NULL
;
mobj
->
ceilingrover
=
NULL
;
...
...
@@ -11494,12 +11453,8 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing)
// set Z height
sector
=
R_PointInSubsector
(
x
,
y
)
->
sector
;
floor
=
sector
->
f_slope
?
P_GetZAt
(
sector
->
f_slope
,
x
,
y
)
:
sector
->
floorheight
;
ceiling
=
sector
->
c_slope
?
P_GetZAt
(
sector
->
c_slope
,
x
,
y
)
:
sector
->
ceilingheight
;
floor
=
P_GetSectorFloorZAt
(
sector
,
x
,
y
);
ceiling
=
P_GetSectorCeilingZAt
(
sector
,
x
,
y
);
ceilingspawn
=
ceiling
-
mobjinfo
[
MT_PLAYER
].
height
;
if
(
mthing
)
...
...
@@ -11569,12 +11524,8 @@ void P_MovePlayerToStarpost(INT32 playernum)
P_SetThingPosition
(
mobj
);
sector
=
R_PointInSubsector
(
mobj
->
x
,
mobj
->
y
)
->
sector
;
floor
=
sector
->
f_slope
?
P_GetZAt
(
sector
->
f_slope
,
mobj
->
x
,
mobj
->
y
)
:
sector
->
floorheight
;
ceiling
=
sector
->
c_slope
?
P_GetZAt
(
sector
->
c_slope
,
mobj
->
x
,
mobj
->
y
)
:
sector
->
ceilingheight
;
floor
=
P_GetSectorFloorZAt
(
sector
,
mobj
->
x
,
mobj
->
y
);
ceiling
=
P_GetSectorCeilingZAt
(
sector
,
mobj
->
x
,
mobj
->
y
);
z
=
p
->
starpostz
<<
FRACBITS
;
...
...
@@ -11623,11 +11574,9 @@ static fixed_t P_GetMobjSpawnHeight(const mobjtype_t mobjtype, const fixed_t x,
// Establish height.
if
(
flip
)
return
(
ss
->
sector
->
c_slope
?
P_GetZAt
(
ss
->
sector
->
c_slope
,
x
,
y
)
:
ss
->
sector
->
ceilingheight
)
-
offset
-
mobjinfo
[
mobjtype
].
height
;
return
P_GetSectorCeilingZAt
(
ss
->
sector
,
x
,
y
)
-
offset
-
mobjinfo
[
mobjtype
].
height
;
else
return
(
ss
->
sector
->
f_slope
?
P_GetZAt
(
ss
->
sector
->
f_slope
,
x
,
y
)
:
ss
->
sector
->
floorheight
)
+
offset
;
return
P_GetSectorFloorZAt
(
ss
->
sector
,
x
,
y
)
+
offset
;
}
static
fixed_t
P_GetMapThingSpawnHeight
(
const
mobjtype_t
mobjtype
,
const
mapthing_t
*
mthing
,
const
fixed_t
x
,
const
fixed_t
y
)
...
...
src/p_sight.c
View file @
6f9422d3
...
...
@@ -265,10 +265,10 @@ static boolean P_CrossSubsector(size_t num, register los_t *los)
fracx
=
los
->
strace
.
x
+
FixedMul
(
los
->
strace
.
dx
,
frac
);
fracy
=
los
->
strace
.
y
+
FixedMul
(
los
->
strace
.
dy
,
frac
);
// calculate sector heights
frontf
=
(
front
->
f_slope
)
?
P_GetZAt
(
front
->
f_slope
,
fracx
,
fracy
)
:
front
->
floorheight
;
frontc
=
(
front
->
c_slope
)
?
P_GetZAt
(
front
->
c_slope
,
fracx
,
fracy
)
:
front
->
ceilingheight
;
backf
=
(
back
->
f_slope
)
?
P_GetZAt
(
back
->
f_slope
,
fracx
,
fracy
)
:
back
->
floorheight
;
backc
=
(
back
->
c_slope
)
?
P_GetZAt
(
back
->
c_slope
,
fracx
,
fracy
)
:
back
->
ceilingheight
;
frontf
=
P_GetSectorFloorZAt
(
front
,
fracx
,
fracy
)
;
frontc
=
P_GetSectorCeilingZAt
(
front
,
fracx
,
fracy
)
;
backf
=
P_GetSectorFloorZAt
(
back
,
fracx
,
fracy
)
;
backc
=
P_GetSectorCeilingZAt
(
back
,
fracx
,
fracy
)
;
// crosses a two sided line
// no wall to block sight with?
if
(
frontf
==
backf
&&
frontc
==
backc
...
...
@@ -318,10 +318,10 @@ static boolean P_CrossSubsector(size_t num, register los_t *los)
continue
;
}
topz
=
(
*
rover
->
t_slope
)
?
P_GetZAt
(
*
rover
->
t_slope
,
fracx
,
fracy
)
:
*
rover
->
topheight
;
bottomz
=
(
*
rover
->
b_slope
)
?
P_GetZAt
(
*
rover
->
b_slope
,
fracx
,
fracy
)
:
*
rover
->
bottomheight
;
topslope
=
FixedDiv
(
topz
-
los
->
sightzstart
,
frac
);
bottomslope
=
FixedDiv
(
bottomz
-
los
->
sightzstart
,
frac
);
topz
=
P_GetFFloorTopZAt
(
rover
,
fracx
,
fracy
)
;
bottomz
=
P_GetFFloorBottomZAt
(
rover
,
fracx
,
fracy
)
;
topslope
=
FixedDiv
(
topz
-
los
->
sightzstart
,
frac
);
bottomslope
=
FixedDiv
(
bottomz
-
los
->
sightzstart
,
frac
);
if
(
topslope
>=
los
->
topslope
&&
bottomslope
<=
los
->
bottomslope
)
return
false
;
// view completely blocked
}
...
...
@@ -334,10 +334,10 @@ static boolean P_CrossSubsector(size_t num, register los_t *los)
continue
;
}
topz
=
(
*
rover
->
t_slope
)
?
P_GetZAt
(
*
rover
->
t_slope
,
fracx
,
fracy
)
:
*
rover
->
topheight
;
bottomz
=
(
*
rover
->
b_slope
)
?
P_GetZAt
(
*
rover
->
b_slope
,
fracx
,
fracy
)
:
*
rover
->
bottomheight
;
topslope
=
FixedDiv
(
topz
-
los
->
sightzstart
,
frac
);
bottomslope
=
FixedDiv
(
bottomz
-
los
->
sightzstart
,
frac
);
topz
=
P_GetFFloorTopZAt
(
rover
,
fracx
,
fracy
)
;
bottomz
=
P_GetFFloorBottomZAt
(
rover
,
fracx
,
fracy
)
;
topslope
=
FixedDiv
(
topz
-
los
->
sightzstart
,
frac
);
bottomslope
=
FixedDiv
(
bottomz
-
los
->
sightzstart
,
frac
);
if
(
topslope
>=
los
->
topslope
&&
bottomslope
<=
los
->
bottomslope
)
return
false
;
// view completely blocked
}
...
...
@@ -468,21 +468,10 @@ boolean P_CheckSight(mobj_t *t1, mobj_t *t2)
continue
;
}
if
(
*
rover
->
t_slope
)
{
topz1
=
P_GetZAt
(
*
rover
->
t_slope
,
t1
->
x
,
t1
->
y
);
topz2
=
P_GetZAt
(
*
rover
->
t_slope
,
t2
->
x
,
t2
->
y
);
}
else
topz1
=
topz2
=
*
rover
->
topheight
;
if
(
*
rover
->
b_slope
)
{
bottomz1
=
P_GetZAt
(
*
rover
->
b_slope
,
t1
->
x
,
t1
->
y
);
bottomz2
=
P_GetZAt
(
*
rover
->
b_slope
,
t2
->
x
,
t2
->
y
);
}
else
bottomz1
=
bottomz2
=
*
rover
->
bottomheight
;
topz1
=
P_GetFFloorTopZAt
(
rover
,
t1
->
x
,
t1
->
y
);
topz2
=
P_GetFFloorTopZAt
(
rover
,
t2
->
x
,
t2
->
y
);
bottomz1
=
P_GetFFloorBottomZAt
(
rover
,
t1
->
x
,
t1
->
y
);
bottomz2
=
P_GetFFloorBottomZAt
(
rover
,
t2
->
x
,
t2
->
y
);
// Check for blocking floors here.
if
((
los
.
sightzstart
<
bottomz1
&&
t2
->
z
>=
topz2
)
...
...
src/p_slopes.c
View file @
6f9422d3
...
...
@@ -655,17 +655,49 @@ void P_SpawnSlopes(const boolean fromsave) {
// Various utilities related to slopes
//
//
// P_GetZAt
//
// Returns the height of the sloped plane at (x, y) as a fixed_t
//
fixed_t
P_GetZAt
(
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
)
fixed_t
P_GetZAt
(
const
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
)
{
fixed_t
dist
=
FixedMul
(
x
-
slope
->
o
.
x
,
slope
->
d
.
x
)
+
FixedMul
(
y
-
slope
->
o
.
y
,
slope
->
d
.
y
);
fixed_t
dist
=
FixedMul
(
x
-
slope
->
o
.
x
,
slope
->
d
.
x
)
+
FixedMul
(
y
-
slope
->
o
.
y
,
slope
->
d
.
y
);
return
slope
->
o
.
z
+
FixedMul
(
dist
,
slope
->
zdelta
);
}
// Like P_GetZAt but falls back to z if slope is NULL
fixed_t
P_GetZAt2
(
const
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
,
fixed_t
z
)
{
return
slope
?
P_GetZAt
(
slope
,
x
,
y
)
:
z
;
}
// Returns the height of the sector floor at (x, y)
fixed_t
P_GetSectorFloorZAt
(
const
sector_t
*
sector
,
fixed_t
x
,
fixed_t
y
)
{
return
sector
->
f_slope
?
P_GetZAt
(
sector
->
f_slope
,
x
,
y
)
:
sector
->
floorheight
;
}
return
slope
->
o
.
z
+
FixedMul
(
dist
,
slope
->
zdelta
);
// Returns the height of the sector ceiling at (x, y)
fixed_t
P_GetSectorCeilingZAt
(
const
sector_t
*
sector
,
fixed_t
x
,
fixed_t
y
)
{
return
sector
->
c_slope
?
P_GetZAt
(
sector
->
c_slope
,
x
,
y
)
:
sector
->
ceilingheight
;
}
// Returns the height of the FOF top at (x, y)
fixed_t
P_GetFFloorTopZAt
(
const
ffloor_t
*
ffloor
,
fixed_t
x
,
fixed_t
y
)
{
return
*
ffloor
->
t_slope
?
P_GetZAt
(
*
ffloor
->
t_slope
,
x
,
y
)
:
*
ffloor
->
topheight
;
}
// Returns the height of the FOF bottom at (x, y)
fixed_t
P_GetFFloorBottomZAt
(
const
ffloor_t
*
ffloor
,
fixed_t
x
,
fixed_t
y
)
{
return
*
ffloor
->
b_slope
?
P_GetZAt
(
*
ffloor
->
b_slope
,
x
,
y
)
:
*
ffloor
->
bottomheight
;
}
// Returns the height of the light list at (x, y)
fixed_t
P_GetLightZAt
(
const
lightlist_t
*
light
,
fixed_t
x
,
fixed_t
y
)
{
return
light
->
slope
?
P_GetZAt
(
light
->
slope
,
x
,
y
)
:
light
->
height
;
}
...
...
src/p_slopes.h
View file @
6f9422d3
...
...
@@ -33,7 +33,21 @@ void P_CopySectorSlope(line_t *line);
pslope_t
*
P_SlopeById
(
UINT16
id
);
// Returns the height of the sloped plane at (x, y) as a fixed_t
fixed_t
P_GetZAt
(
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
);
fixed_t
P_GetZAt
(
const
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
);
// Like P_GetZAt but falls back to z if slope is NULL
fixed_t
P_GetZAt2
(
const
pslope_t
*
slope
,
fixed_t
x
,
fixed_t
y
,
fixed_t
z
);
// Returns the height of the sector at (x, y)
fixed_t
P_GetSectorFloorZAt
(
const
sector_t
*
sector
,
fixed_t
x
,
fixed_t
y
);
fixed_t
P_GetSectorCeilingZAt
(
const
sector_t
*
sector
,
fixed_t
x
,
fixed_t
y
);
// Returns the height of the FOF at (x, y)
fixed_t
P_GetFFloorTopZAt
(
const
ffloor_t
*
ffloor
,
fixed_t
x
,
fixed_t
y
);
fixed_t
P_GetFFloorBottomZAt
(
const
ffloor_t
*
ffloor
,
fixed_t
x
,
fixed_t
y
);
// Returns the height of the light list at (x, y)
fixed_t
P_GetLightZAt
(
const
lightlist_t
*
light
,
fixed_t
x
,
fixed_t
y
);
// Lots of physics-based bullshit
void
P_QuantizeMomentumToSlope
(
vector3_t
*
momentum
,
pslope_t
*
slope
);
...
...
src/p_spec.c
View file @
6f9422d3
...
...
@@ -6272,10 +6272,8 @@ void T_LaserFlash(laserthink_t *flash)
sourcesec
=
fflr
->
master
->
frontsector
;
// Less to type!
top
=
(
*
fflr
->
t_slope
)
?
P_GetZAt
(
*
fflr
->
t_slope
,
sector
->
soundorg
.
x
,
sector
->
soundorg
.
y
)
:
*
fflr
->
topheight
;
bottom
=
(
*
fflr
->
b_slope
)
?
P_GetZAt
(
*
fflr
->
b_slope
,
sector
->
soundorg
.
x
,
sector
->
soundorg
.
y
)
:
*
fflr
->
bottomheight
;
top
=
P_GetFFloorTopZAt
(
fflr
,
sector
->
soundorg
.
x
,
sector
->
soundorg
.
y
);
bottom
=
P_GetFFloorBottomZAt
(
fflr
,
sector
->
soundorg
.
x
,
sector
->
soundorg
.
y
);
sector
->
soundorg
.
z
=
(
top
+
bottom
)
/
2
;
S_StartSound
(
&
sector
->
soundorg
,
sfx_laser
);
...
...
@@ -7921,10 +7919,7 @@ void T_Disappear(disappear_t *d)
if
(
!
(
lines
[
d
->
sourceline
].
flags
&
ML_NOCLIMB
))
{
if
(
*
rover
->
t_slope
)
sectors
[
s
].
soundorg
.
z
=
P_GetZAt
(
*
rover
->
t_slope
,
sectors
[
s
].
soundorg
.
x
,
sectors
[
s
].
soundorg
.
y
);
else
sectors
[
s
].
soundorg
.
z
=
*
rover
->
topheight
;
sectors
[
s
].
soundorg
.
z
=
P_GetFFloorTopZAt
(
rover
,
sectors
[
s
].
soundorg
.
x
,
sectors
[
s
].
soundorg
.
y
);
S_StartSound
(
&
sectors
[
s
].
soundorg
,
sfx_appear
);
}
}
...
...
src/p_user.c
View file @
6f9422d3
...
...
@@ -2274,8 +2274,8 @@ boolean P_InSpaceSector(mobj_t *mo) // Returns true if you are in space
if
(
GETSECSPECIAL
(
rover
->
master
->
frontsector
->
special
,
1
)
!=
SPACESPECIAL
)
continue
;
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
topheight
;
bottomheight
=
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
bottomheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
mo
->
x
,
mo
->
y
)
;
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mo
->
x
,
mo
->
y
)
;
if
(
mo
->
z
+
(
mo
->
height
/
2
)
>
topheight
)
continue
;
...
...
@@ -2512,8 +2512,8 @@ boolean P_InQuicksand(mobj_t *mo) // Returns true if you are in quicksand
if
(
!
(
rover
->
flags
&
FF_QUICKSAND
))
continue
;
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
topheight
;
bottomheight
=
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
mo
->
x
,
mo
->
y
)
:
*
rover
->
bottomheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
mo
->
x
,
mo
->
y
)
;
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
mo
->
x
,
mo
->
y
)
;
if
(
mo
->
z
+
flipoffset
>
topheight
)
continue
;
...
...
@@ -2839,8 +2839,8 @@ static void P_CheckQuicksand(player_t *player)
if
(
!
(
rover
->
flags
&
FF_QUICKSAND
))
continue
;
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
rover
->
topheight
;
bottomheight
=
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
rover
->
bottomheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
if
(
topheight
>=
player
->
mo
->
z
&&
bottomheight
<
player
->
mo
->
z
+
player
->
mo
->
height
)
{
...
...
@@ -3180,10 +3180,8 @@ static void P_DoClimbing(player_t *player)
floorclimb
=
true
;
else
{
floorheight
=
glidesector
->
sector
->
f_slope
?
P_GetZAt
(
glidesector
->
sector
->
f_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
glidesector
->
sector
->
floorheight
;
ceilingheight
=
glidesector
->
sector
->
c_slope
?
P_GetZAt
(
glidesector
->
sector
->
c_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
glidesector
->
sector
->
ceilingheight
;
floorheight
=
P_GetSectorFloorZAt
(
glidesector
->
sector
,
player
->
mo
->
x
,
player
->
mo
->
y
);
ceilingheight
=
P_GetSectorCeilingZAt
(
glidesector
->
sector
,
player
->
mo
->
x
,
player
->
mo
->
y
);
if
(
glidesector
->
sector
->
ffloors
)
{
...
...
@@ -3197,8 +3195,8 @@ static void P_DoClimbing(player_t *player)
floorclimb
=
true
;
topheight
=
*
rover
->
t_slope
?
P_GetZAt
(
*
rover
->
t_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
rover
->
topheight
;
bottomheight
=
*
rover
->
b_slope
?
P_GetZAt
(
*
rover
->
b_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
rover
->
bottomheight
;
topheight
=
P_GetFFloorTopZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
bottomheight
=
P_GetFFloorBottomZAt
(
rover
,
player
->
mo
->
x
,
player
->
mo
->
y
)
;
// Only supports rovers that are moving like an 'elevator', not just the top or bottom.
if
(
rover
->
master
->
frontsector
->
floorspeed
&&
rover
->
master
->
frontsector
->
ceilspeed
==
42
)
...
...
@@ -3239,8 +3237,7 @@ static void P_DoClimbing(player_t *player)
if
(
roverbelow
==
rover
)
continue
;
bottomheight2
=
*
roverbelow
->
b_slope
?
P_GetZAt
(
*
roverbelow
->
b_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
roverbelow
->
bottomheight
;
bottomheight2
=
P_GetFFloorBottomZAt
(
roverbelow
,
player
->
mo
->
x
,
player
->
mo
->
y
);
if
(
bottomheight2
<
topheight
+
FixedMul
(
16
*
FRACUNIT
,
player
->
mo
->
scale
))
foundfof
=
true
;
}
...
...
@@ -3285,8 +3282,7 @@ static void P_DoClimbing(player_t *player)
if
(
roverbelow
==
rover
)
continue
;
topheight2
=
*
roverbelow
->
t_slope
?
P_GetZAt
(
*
roverbelow
->
t_slope
,
player
->
mo
->
x
,
player
->
mo
->
y
)
:
*
roverbelow
->
topheight
;
topheight2
=
P_GetFFloorTopZAt
(
roverbelow
,
player
->
mo
->
x
,
player
->
mo
->
y
);