This commit is contained in:
MontyTRC89 2021-06-05 05:27:34 +02:00
commit dd33113dd5
10 changed files with 59 additions and 48 deletions

View file

@ -195,13 +195,13 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] = {
lara_as_null,//136
lara_as_null,//137
lara_as_null,//138
lara_as_hang_feet,//139
lara_as_hang_feet_shimmyr,//140
lara_as_hang_feet_shimmyl,//141
lara_as_hang_feet_inRcorner,//142
lara_as_hang_feet_inLcorner,//143
lara_as_hang_feet_outRcorner,//144
lara_as_hang_feet_outLcorner,//145
lara_as_null,//ara_as_hang_feet,//139
lara_as_null,//lara_as_hang_feet_shimmyr,//140
lara_as_null,//lara_as_hang_feet_shimmyl,//141
lara_as_null,//lara_as_hang_feet_inRcorner,//142
lara_as_null,//lara_as_hang_feet_inLcorner,//143
lara_as_null,//lara_as_hang_feet_outRcorner,//144
lara_as_null,//lara_as_hang_feet_outLcorner,//145
lara_as_controlledl,
lara_as_null,
lara_as_null,
@ -349,9 +349,9 @@ function<LaraRoutineFunction> lara_collision_routines[NUM_LARA_STATES + 1] = {
lara_void_func,
lara_void_func,
lara_void_func,
lara_col_hang_feet,
lara_col_hang_feet_shimmyr,
lara_col_hang_feet_shimmyl,
lara_void_func,//lara_col_hang_feet,
lara_void_func,//lara_col_hang_feet_shimmyr,
lara_void_func,//lara_col_hang_feet_shimmyl,
lara_default_col,
lara_default_col,
lara_default_col,

View file

@ -1091,14 +1091,14 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
if (TestHangFeet(item, angle))
/* if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else
else*/
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -1683,14 +1683,14 @@ void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
if (TestHangFeet(item, angle))
/* if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else
else*/
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12;

View file

@ -152,7 +152,7 @@ void lara_col_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
coll->badCeiling = 0;
coll->slopesAreWalls = true;
coll->facing = Lara.moveAngle;
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, LARA_HITE);
GetCollisionInfo(coll, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber, -400);
ShiftItem(item, coll);
if (coll->midFloor != NO_HEIGHT)
@ -839,14 +839,14 @@ void lara_col_crawl2hang(ITEM_INFO* item, COLL_INFO* coll)
}
else
{
if (TestHangFeet(item, angle))
/* if (TestHangFeet(item, angle))
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET;
}
else
else*/
{
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;

View file

@ -274,10 +274,10 @@ void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll)
-corner anims(works well, tested with placeholder anims)
-handstand(not tested)*/
void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
/*void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 139*/
/*collision: lara_col_hang_feet*/
/*collision: lara_col_hang_feet
Lara.isClimbing = false;
if (item->hitPoints <= 0)
@ -298,7 +298,7 @@ void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 139*/
/*state code: lara_as_hang_feet*/
/*state code: lara_as_hang_feet
item->fallspeed = 0;
item->gravityStatus = false;
@ -413,7 +413,7 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
}
}
return;
}*///commenting till daniel makes anims
}
Lara.moveAngle = item->pos.yRot;
LaraHangTest(item, coll);
@ -423,7 +423,7 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 140*/
/*collision: lara_col_hang_feet_shimmyr*/
/*collision: lara_col_hang_feet_shimmyr
coll->enableBaddiePush = false;
coll->enableSpaz = false;
Camera.targetAngle = 0;
@ -436,7 +436,7 @@ void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 140*/
/*state code: lara_as_hang_feet_shimmyr*/
/*state code: lara_as_hang_feet_shimmyr
Lara.moveAngle = item->pos.yRot + ANGLE(90);
coll->radius = LARA_RAD;
LaraHangTest(item, coll);
@ -446,7 +446,7 @@ void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 141*/
/*collision: lara_col_hang_feet_shimmyl*/
/*collision: lara_col_hang_feet_shimmyl
coll->enableBaddiePush = false;
coll->enableSpaz = false;
Camera.targetAngle = 0;
@ -458,19 +458,19 @@ void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
void lara_col_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 141*/
/*state code: lara_as_hang_feet_shimmyl*/
/*state code: lara_as_hang_feet_shimmyl
Lara.moveAngle = item->pos.yRot - ANGLE(90);
coll->radius = LARA_RAD;
LaraHangTest(item, coll);
Lara.moveAngle = item->pos.yRot - ANGLE(90);
}
/*go around corners feet*/
/*go around corners feet
void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 142*/
/*collision: lara_default_col*/
/*collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_INNER].frameEnd) // I don't like this either but it's better than adding 4 new 1 frame anims?
@ -481,7 +481,7 @@ void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 143*/
/*collision: lara_default_col*/
/*collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_INNER].frameEnd)
@ -492,7 +492,7 @@ void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 144*/
/*collision: lara_default_col*/
/*collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_OUTER].frameEnd)
@ -503,10 +503,10 @@ void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll)
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 145*/
/*collision: lara_default_col*/
/*collision: lara_default_col
Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_OUTER].frameEnd)
SetCornerAnimFeet(item, coll, ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_LEFT_CORNER_OUTER);
}
}*/

View file

@ -13,15 +13,15 @@ void lara_as_extcornerl(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_extcornerr(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_intcornerl(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_intcornerr(ITEM_INFO* item, COLL_INFO* coll);
/*feet hanging and shimmying*/
/*feet hanging and shimmying
void lara_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll);
/*go around corners feet*/
/*go around corners feet
void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll);*/

View file

@ -439,13 +439,13 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 21;
}
else if (item->currentAnimState == LS_SHIMMY_FEET_LEFT || item->currentAnimState == LS_SHIMMY_FEET_RIGHT)
/* else if (item->currentAnimState == LS_SHIMMY_FEET_LEFT || item->currentAnimState == LS_SHIMMY_FEET_RIGHT)
{
item->currentAnimState = LS_HANG_FEET;
item->goalAnimState = LS_HANG_FEET;
item->animNumber = LA_HANG_FEET_IDLE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
}
}*/
result = 1;
}
}
@ -470,7 +470,7 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{
if (item->animNumber != LA_REACH_TO_HANG && item->animNumber != LA_HANG_FEET_IDLE)
if (item->animNumber != LA_REACH_TO_HANG)// && item->animNumber != LA_HANG_FEET_IDLE)
return 0;
if (coll->hitStatic)
@ -625,7 +625,7 @@ int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangRightCornerTest(ITEM_INFO* item, COLL_INFO* coll)
{
if (item->animNumber != LA_REACH_TO_HANG && item->animNumber != LA_HANG_FEET_IDLE)
if (item->animNumber != LA_REACH_TO_HANG)// && item->animNumber != LA_HANG_FEET_IDLE)
return 0;
if (coll->hitStatic)
@ -990,7 +990,7 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
return(0);
}
int TestHangFeet(ITEM_INFO* item, short angle)
/*int TestHangFeet(ITEM_INFO* item, short angle)
{
return 0;
if (Lara.climbStatus)
@ -1055,7 +1055,7 @@ int TestHangFeet(ITEM_INFO* item, short angle)
}
return(1);
}
}
}*/
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)
{
@ -1143,7 +1143,7 @@ void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
}
}
void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
/*void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
{
if (item->hitPoints <= 0)
{
@ -1177,7 +1177,7 @@ void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
item->pos.yRot += rot;
}
}
}*/
int LaraFloorFront(ITEM_INFO* item, short ang, int dist)
{

View file

@ -11,10 +11,10 @@ int LaraTestHangOnClimbWall(ITEM_INFO* item, COLL_INFO* coll);
int LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge);
int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll);
int TestHangSwingIn(ITEM_INFO* item, short angle);
int TestHangFeet(ITEM_INFO* item, short angle);
//int TestHangFeet(ITEM_INFO* item, short angle);
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle);
void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
//void SetCornerAnimFeet(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip);
int LaraFloorFront(ITEM_INFO* item, short ang, int dist);
int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h);
int LaraFallen(ITEM_INFO* item, COLL_INFO* coll);

View file

@ -17,6 +17,16 @@ int FLOOR_INFO::SectorPlane(int x, int z) const
return vector.x < 0 ? 0 : 1;
}
int FLOOR_INFO::SectorPlaneCeiling(int x, int z) const
{
const auto point = GetSectorPoint(x, z);
auto vector = Vector2(point.x, point.y);
const auto matrix = Matrix::CreateRotationZ(CeilingCollision.SplitAngle);
Vector2::Transform(vector, matrix, vector);
return vector.x < 0 ? 0 : 1;
}
std::optional<int> FLOOR_INFO::RoomBelow(int plane) const
{
const auto room = FloorCollision.Portals[plane];
@ -52,7 +62,7 @@ std::optional<int> FLOOR_INFO::RoomAbove(int plane) const
std::optional<int> FLOOR_INFO::RoomAbove(int x, int z) const
{
return RoomAbove(SectorPlane(x, z));
return RoomAbove(SectorPlaneCeiling(x, z));
}
std::optional<int> FLOOR_INFO::RoomAbove(int x, int z, int y) const
@ -116,7 +126,7 @@ int FLOOR_INFO::BridgeFloorHeight(int x, int z, int y) const
int FLOOR_INFO::CeilingHeight(int x, int z) const
{
const auto plane = SectorPlane(x, z);
const auto plane = SectorPlaneCeiling(x, z);
const auto vector = GetSectorPoint(x, z);
return CeilingCollision.Planes[plane].x * vector.x + CeilingCollision.Planes[plane].y * vector.y + CeilingCollision.Planes[plane].z;
@ -169,7 +179,7 @@ Vector2 FLOOR_INFO::CeilingSlope(int plane) const
Vector2 FLOOR_INFO::CeilingSlope(int x, int z) const
{
return CeilingSlope(SectorPlane(x, z));
return CeilingSlope(SectorPlaneCeiling(x, z));
}
bool FLOOR_INFO::IsWall(int plane) const

View file

@ -27,6 +27,7 @@ public:
int Room;
int SectorPlane(int x, int z) const;
int SectorPlaneCeiling(int x, int z) const;
std::optional<int> RoomBelow(int plane) const;
std::optional<int> RoomBelow(int x, int z) const;
std::optional<int> RoomBelow(int x, int z, int y) const;

View file

@ -947,7 +947,7 @@ void handle_control_settings_input()
}
}
if (KeyMap[DIK_RETURN])
if (KeyMap[DIK_RETURN] && !(title_selected_option & (1 << 18)) && !(title_selected_option & (1 << 19)))
{
SoundEffect(SFX_TR4_MENU_SELECT, NULL, 0);
CurrentSettings.waitingForkey = 1;