Merge remote-tracking branch 'nami/next' into namirays
This commit is contained in:
commit
23bd91fcd5
|
@ -681,6 +681,17 @@ static int lib_pSpawnPlayerMissile(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pRailThinker(lua_State *L)
|
||||||
|
{
|
||||||
|
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!mobj)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
lua_pushboolean(L, P_RailThinker(mobj));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pMobjFlip(lua_State *L)
|
static int lib_pMobjFlip(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
@ -1406,6 +1417,19 @@ static int lib_pTeleportMove(lua_State *L)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pCheckMoveBlocked(lua_State *L)
|
||||||
|
{
|
||||||
|
line_t *li = luaL_checkudata(L, 1, META_LINE);
|
||||||
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||||
|
INLEVEL
|
||||||
|
if (!li)
|
||||||
|
return LUA_ErrInvalid(L, "line_t");
|
||||||
|
if (!mo)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
lua_pushboolean(L, P_CheckMoveBlocked(li, mo));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pSlideMove(lua_State *L)
|
static int lib_pSlideMove(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
@ -3003,6 +3027,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_ColorTeamMissile",lib_pColorTeamMissile},
|
{"P_ColorTeamMissile",lib_pColorTeamMissile},
|
||||||
{"P_SPMAngle",lib_pSPMAngle},
|
{"P_SPMAngle",lib_pSPMAngle},
|
||||||
{"P_SpawnPlayerMissile",lib_pSpawnPlayerMissile},
|
{"P_SpawnPlayerMissile",lib_pSpawnPlayerMissile},
|
||||||
|
{"P_RailThinker",lib_pRailThinker},
|
||||||
{"P_MobjFlip",lib_pMobjFlip},
|
{"P_MobjFlip",lib_pMobjFlip},
|
||||||
{"P_GetMobjGravity",lib_pGetMobjGravity},
|
{"P_GetMobjGravity",lib_pGetMobjGravity},
|
||||||
{"P_WeaponOrPanel",lib_pWeaponOrPanel},
|
{"P_WeaponOrPanel",lib_pWeaponOrPanel},
|
||||||
|
@ -3065,6 +3090,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_TryMove",lib_pTryMove},
|
{"P_TryMove",lib_pTryMove},
|
||||||
{"P_Move",lib_pMove},
|
{"P_Move",lib_pMove},
|
||||||
{"P_TeleportMove",lib_pTeleportMove},
|
{"P_TeleportMove",lib_pTeleportMove},
|
||||||
|
{"P_CheckMoveBlocked",lib_pCheckMoveBlocked},
|
||||||
{"P_SlideMove",lib_pSlideMove},
|
{"P_SlideMove",lib_pSlideMove},
|
||||||
{"P_BounceMove",lib_pBounceMove},
|
{"P_BounceMove",lib_pBounceMove},
|
||||||
{"P_CheckSight", lib_pCheckSight},
|
{"P_CheckSight", lib_pCheckSight},
|
||||||
|
|
|
@ -405,6 +405,7 @@ boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam);
|
||||||
boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff);
|
boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff);
|
||||||
boolean P_Move(mobj_t *actor, fixed_t speed);
|
boolean P_Move(mobj_t *actor, fixed_t speed);
|
||||||
boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z);
|
boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z);
|
||||||
|
boolean P_CheckMoveBlocked(line_t *li, mobj_t *mo);
|
||||||
void P_SlideMove(mobj_t *mo);
|
void P_SlideMove(mobj_t *mo);
|
||||||
void P_BounceMove(mobj_t *mo);
|
void P_BounceMove(mobj_t *mo);
|
||||||
boolean P_CheckSight(mobj_t *t1, mobj_t *t2);
|
boolean P_CheckSight(mobj_t *t1, mobj_t *t2);
|
||||||
|
|
106
src/p_map.c
106
src/p_map.c
|
@ -3385,6 +3385,70 @@ static boolean P_IsClimbingValid(player_t *player, angle_t angle)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//P_CheckMoveBlocked
|
||||||
|
//
|
||||||
|
boolean P_CheckMoveBlocked(line_t *li, mobj_t *mo)
|
||||||
|
{
|
||||||
|
// one-sided linedefs are always solid to sliding movement.
|
||||||
|
// one-sided linedef
|
||||||
|
if (!li->backsector)
|
||||||
|
{
|
||||||
|
if (P_PointOnLineSide(mo->x, mo->y, li))
|
||||||
|
return true; // don't hit the back side
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(mo->flags & MF_MISSILE))
|
||||||
|
{
|
||||||
|
if (li->flags & ML_IMPASSIBLE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((mo->flags & (MF_ENEMY|MF_BOSS)) && li->flags & ML_BLOCKMONSTERS)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set openrange, opentop, openbottom
|
||||||
|
P_LineOpening(li, mo);
|
||||||
|
|
||||||
|
if (openrange < mo->height)
|
||||||
|
return false; // doesn't fit
|
||||||
|
|
||||||
|
if (opentop - mo->z < mo->height)
|
||||||
|
return false; // mobj is too high
|
||||||
|
|
||||||
|
if (openbottom - mo->z > FixedMul(MAXSTEPMOVE, mo->scale))
|
||||||
|
return false; // too big a step up
|
||||||
|
|
||||||
|
// this line doesn't block movement
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(mo->flags & MF_MISSILE))
|
||||||
|
{
|
||||||
|
if (li->flags & ML_IMPASSIBLE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((mo->flags & (MF_ENEMY|MF_BOSS)) && li->flags & ML_BLOCKMONSTERS)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set openrange, opentop, openbottom
|
||||||
|
P_LineOpening(li, mo);
|
||||||
|
|
||||||
|
if (openrange < mo->height)
|
||||||
|
return false; // doesn't fit
|
||||||
|
|
||||||
|
if (opentop - mo->z < mo->height)
|
||||||
|
return false; // mobj is too high
|
||||||
|
|
||||||
|
if (openbottom - mo->z > FixedMul(MAXSTEPMOVE, mo->scale))
|
||||||
|
return false; // too big a step up
|
||||||
|
|
||||||
|
// this line doesn't block movement
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PTR_SlideTraverse
|
// PTR_SlideTraverse
|
||||||
//
|
//
|
||||||
|
@ -3396,42 +3460,10 @@ static boolean PTR_SlideTraverse(intercept_t *in)
|
||||||
|
|
||||||
li = in->d.line;
|
li = in->d.line;
|
||||||
|
|
||||||
// one-sided linedefs are always solid to sliding movement.
|
if (!P_CheckMoveBlocked(li, slidemo))
|
||||||
// one-sided linedef
|
|
||||||
if (!li->backsector)
|
|
||||||
{
|
{
|
||||||
if (P_PointOnLineSide(slidemo->x, slidemo->y, li))
|
|
||||||
return true; // don't hit the back side
|
|
||||||
goto isblocking;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(slidemo->flags & MF_MISSILE))
|
|
||||||
{
|
|
||||||
if (li->flags & ML_IMPASSIBLE)
|
|
||||||
goto isblocking;
|
|
||||||
|
|
||||||
if ((slidemo->flags & (MF_ENEMY|MF_BOSS)) && li->flags & ML_BLOCKMONSTERS)
|
|
||||||
goto isblocking;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set openrange, opentop, openbottom
|
|
||||||
P_LineOpening(li, slidemo);
|
|
||||||
|
|
||||||
if (openrange < slidemo->height)
|
|
||||||
goto isblocking; // doesn't fit
|
|
||||||
|
|
||||||
if (opentop - slidemo->z < slidemo->height)
|
|
||||||
goto isblocking; // mobj is too high
|
|
||||||
|
|
||||||
if (openbottom - slidemo->z > FixedMul(MAXSTEPMOVE, slidemo->scale))
|
|
||||||
goto isblocking; // too big a step up
|
|
||||||
|
|
||||||
// this line doesn't block movement
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// the line does block movement,
|
// the line does block movement,
|
||||||
// see if it is closer than best so far
|
// see if it is closer than best so far
|
||||||
isblocking:
|
|
||||||
if (li->polyobj && slidemo->player)
|
if (li->polyobj && slidemo->player)
|
||||||
{
|
{
|
||||||
if ((li->polyobj->lines[0]->backsector->flags & SF_TRIGGERSPECIAL_TOUCH) && !(li->polyobj->flags & POF_NOSPECIALS))
|
if ((li->polyobj->lines[0]->backsector->flags & SF_TRIGGERSPECIAL_TOUCH) && !(li->polyobj->flags & POF_NOSPECIALS))
|
||||||
|
@ -3463,12 +3495,12 @@ isblocking:
|
||||||
topheight = *rover->topheight;
|
topheight = *rover->topheight;
|
||||||
bottomheight = *rover->bottomheight;
|
bottomheight = *rover->bottomheight;
|
||||||
|
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
if (*rover->t_slope)
|
if (*rover->t_slope)
|
||||||
topheight = P_GetZAt(*rover->t_slope, slidemo->x, slidemo->y);
|
topheight = P_GetZAt(*rover->t_slope, slidemo->x, slidemo->y);
|
||||||
if (*rover->b_slope)
|
if (*rover->b_slope)
|
||||||
bottomheight = P_GetZAt(*rover->b_slope, slidemo->x, slidemo->y);
|
bottomheight = P_GetZAt(*rover->b_slope, slidemo->x, slidemo->y);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (topheight < slidemo->z)
|
if (topheight < slidemo->z)
|
||||||
continue;
|
continue;
|
||||||
|
@ -3509,7 +3541,7 @@ isblocking:
|
||||||
&& canclimb)
|
&& canclimb)
|
||||||
{
|
{
|
||||||
slidemo->angle = climbangle;
|
slidemo->angle = climbangle;
|
||||||
/*if (!demoplayback || P_ControlStyle(slidemo->player) == CS_LMAOGALOG)
|
/*if (!demoplayback || P_AnalogMove(slidemo->player))
|
||||||
{
|
{
|
||||||
if (slidemo->player == &players[consoleplayer])
|
if (slidemo->player == &players[consoleplayer])
|
||||||
localangle = slidemo->angle;
|
localangle = slidemo->angle;
|
||||||
|
@ -3553,6 +3585,8 @@ isblocking:
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // stop
|
return false; // stop
|
||||||
|
}
|
||||||
|
return true; // keep going!
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue