Add more anims to NewAnims; Fix lean

This commit is contained in:
Troye 2021-07-09 19:41:56 -05:00
parent 8dc41f1f0f
commit f5ec4695ef
8 changed files with 174 additions and 184 deletions

View file

@ -196,12 +196,12 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] = {
lara_as_null,//137
lara_as_null,//138
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_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_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_void_func,//lara_col_hang_feet,
lara_void_func,//lara_col_hang_feet_shimmyr,
lara_void_func,//lara_col_hang_feet_shimmyl,
lara_col_hang_feet,
lara_col_hang_feet_shimmyr,
lara_col_hang_feet_shimmyl,
lara_default_col,
lara_default_col,
lara_default_col,

View file

@ -230,6 +230,12 @@ void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot < -LARA_LEAN_MAX)
item->pos.zRot = -LARA_LEAN_MAX;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)//gives best results
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
{
@ -243,6 +249,12 @@ void lara_as_run(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot > LARA_LEAN_MAX)
item->pos.zRot = LARA_LEAN_MAX;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)//gives best results
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
if (item->animNumber == LA_STAND_TO_RUN)
@ -1066,39 +1078,39 @@ void lara_col_reach(ITEM_INFO* item, COLL_INFO* coll)
{
if (TestHangSwingIn(item, angle))
{
/* if (TR12_OSCILLATE_HANG == true)
{
Lara.headYrot = 0;
Lara.headXrot = 0;
Lara.torsoYrot = 0;
Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_HANG_OSCILLATE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG;
}
else
{ */
Lara.headYrot = 0;
Lara.headXrot = 0;
Lara.torsoYrot = 0;
Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_MONKEYSWING;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_MONKEYSWING_IDLE;
item->goalAnimState = LS_MONKEYSWING_IDLE;
// }
if (Lara.NewAnims.OscillateHanging)
{
Lara.headYrot = 0;
Lara.headXrot = 0;
Lara.torsoYrot = 0;
Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_HANG_OSCILLATE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG;
}
else
{
Lara.headYrot = 0;
Lara.headXrot = 0;
Lara.torsoYrot = 0;
Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_MONKEYSWING;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_MONKEYSWING_IDLE;
item->goalAnimState = LS_MONKEYSWING_IDLE;
}
}
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 +1695,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;
@ -1840,7 +1852,10 @@ void lara_col_roll(ITEM_INFO* item, COLL_INFO* coll)
if (LaraFallen(item, coll))
return;
if (TrInput & IN_FORWARD && item->animNumber == LA_SWANDIVE_ROLL)
//##LUA debug etc.
Lara.NewAnims.SwandiveRollRun = 1;
if (TrInput & IN_FORWARD && item->animNumber == LA_SWANDIVE_ROLL && Lara.NewAnims.SwandiveRollRun)
{
item->goalAnimState = LS_RUN_FORWARD;
}
@ -1957,8 +1972,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll))
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -(LARA_LEAN_MAX / 2))
item->pos.zRot = -(LARA_LEAN_MAX / 2);
if (item->pos.zRot < -LARA_LEAN_MAX / 2)
item->pos.zRot = -LARA_LEAN_MAX / 2;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
@ -1970,8 +1991,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll))
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > (LARA_LEAN_MAX / 2))
item->pos.zRot = (LARA_LEAN_MAX / 2);
if (item->pos.zRot > LARA_LEAN_MAX / 2)
item->pos.zRot = LARA_LEAN_MAX / 2;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
@ -1994,6 +2021,12 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot < -LARA_LEAN_MAX)
item->pos.zRot = -LARA_LEAN_MAX;
}
else
{
item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = -LARA_LEAN_MAX * 3 / 5;
}
}
else if (TrInput & IN_RIGHT)
{
@ -2007,6 +2040,12 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (item->pos.zRot > LARA_LEAN_MAX)
item->pos.zRot = LARA_LEAN_MAX;
}
else
{
item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > LARA_LEAN_MAX * 3 / 5)
item->pos.zRot = LARA_LEAN_MAX * 3 / 5;
}
}
if (TrInput & IN_FORWARD)

View file

@ -189,14 +189,14 @@ void lara_as_all4s(ITEM_INFO* item, COLL_INFO* coll)
}
// FOR DEBUG PURPOSES UNTIL SCRIPTING IS FINISHED
Lara.NewAnims.Crawl1clickdown = 1;
Lara.NewAnims.Crawl1clickup = 1;
Lara.NewAnims.CrawlExit1click = 1;
Lara.NewAnims.CrawlExit2click = 1;
Lara.NewAnims.CrawlExit3click = 1;
// Lara.NewAnims.Crawl1clickdown = 1;
// Lara.NewAnims.Crawl1clickup = 1;
// Lara.NewAnims.CrawlExit1click = 1;
// Lara.NewAnims.CrawlExit2click = 1;
// Lara.NewAnims.CrawlExit3click = 1;
Lara.NewAnims.CrawlExitJump = 1;
if (TrInput & IN_JUMP)
if (TrInput & IN_JUMP && Lara.NewAnims.CrawlExitJump)
{
GAME_VECTOR s, d;
MESH_INFO* StaticMesh;
@ -512,7 +512,7 @@ void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)
{
/*state 81*/
/*collision: lara_col_crawl*/
if (item->hitPoints <= 0 || TrInput & IN_JUMP)
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_CRAWL_IDLE;
return;
@ -853,14 +853,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_intcornerr(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;
@ -395,35 +395,35 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
}
}
}
/*
if (Lara.climbStatus != 0 &&
coll->midCeiling <= -256 &&
abs(coll->leftCeiling2 - coll->rightCeiling2) < 60)
if (Lara.climbStatus != 0 &&
coll->midCeiling <= -256 &&
abs(coll->leftCeiling2 - coll->rightCeiling2) < 60)
{
if (LaraTestClimbStance(item, coll))
{
if (LaraTestClimbStance(item, coll))
{
item->goalAnimState = LS_LADDER_IDLE;
}
else
{
item->animNumber = LA_LADDER_UP_HANDS;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->goalAnimState = LS_HANG;
item->currentAnimState = LS_HANG;
}
item->goalAnimState = LS_LADDER_IDLE;
}
return;
}
else
{
item->animNumber = LA_LADDER_SHIMMY_UP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->goalAnimState = LS_HANG;
item->currentAnimState = LS_HANG;
}
}
return;
}
Lara.moveAngle = item->pos.yRot;
LaraHangTest(item, 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,55 +458,51 @@ 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?
SetCornerAnimFeet(item, coll, ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_INNER);
SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
}
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)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_LEFT_CORNER_INNER);
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
}
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)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f),
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_OUTER);
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
}
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);
}*/
SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
}

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

@ -472,10 +472,10 @@ enum LARA_ANIM
LA_CRAWL_IDLE = 263, // Crwal idle
LA_CROUCH_TO_CRAWL_END = 264, // Crawl > crouch (2/2)
LA_CRAWL_TO_CROUCH_END_UNUSED = 265, // Crouch > crawl (3/3)
LA_CRAWL_TO_IDLE_END_RIGHT_POINTLESS = 266, // TODO: remove.
LA_CRAWL_TO_IDLE_END_RIGHT_POINTLESS = 266, // TODO: remove.//no dont remove thanks
LA_CRAWL_TO_IDLE_RIGHT = 267, // Crawl forward > crawl idle, right leg first
// TODO: in WAD, link next to 263
LA_CRAWL_TO_IDLE_END_LEFT_POINTLESS = 268, // TODO: remove.
LA_CRAWL_TO_IDLE_END_LEFT_POINTLESS = 268, // TODO: remove. //no dont remove thanks
LA_CRAWL_TURN_LEFT = 269, // Crawl rotate left (looped)
LA_CRAWL_TURN_RIGHT = 270, // Crawl rotate right (looped)
LA_MONKEYSWING_TURN_LEFT = 271, // Monkey swing rotate left
@ -974,6 +974,10 @@ struct AnimsNew
bool CrawlVault2click; //vault into crawlspace at 2 clicks
bool CrawlVault3click; //vault into crawlspace at 3 clicks
bool MonkeyVault; //vault up to monkeybars when pressing up + action underneath them. super annoying :)
bool CrawlExitJump; //TR5 crawlspace exit with jump!
bool SwandiveRollRun; //the transition from swandive roll to run
bool OscillateHanging; //the thin ledge grab animation from TR1 and 2
bool FeetHanging; //Daniel's super awesome feet hanging
};
typedef struct LaraInfo

View file

@ -18,9 +18,6 @@ static short RightClimbTab[4] = // offset 0xA0640
0x0800, 0x0100, 0x0200, 0x0400
};
//bool EnableCrawlFlex1click, EnableCrawlFlex2click, EnableCrawlFlex3click, EnableMonkeyVault;
//bool TR12_OSCILLATE_HANG, EnableFeetHang;
/*this file has all the generic test functions called in lara's state code*/
int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
@ -28,10 +25,11 @@ int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS)
return 0;
Lara.NewAnims.CrawlVault1click = 1;
Lara.NewAnims.CrawlVault2click = 1;
Lara.NewAnims.CrawlVault3click = 1;
Lara.NewAnims.MonkeyVault = 1;
//##LUA debug etc.
// Lara.NewAnims.CrawlVault1click = 1;
// Lara.NewAnims.CrawlVault2click = 1;
// Lara.NewAnims.CrawlVault3click = 1;
// Lara.NewAnims.MonkeyVault = 1;
if (coll->collType == CT_FRONT)
{
@ -427,13 +425,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;
}
}
@ -458,7 +456,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)
@ -613,7 +611,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)
@ -933,24 +931,7 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
int h, c;
//debug till scripting be ready
// TR12_OSCILLATE_HANG = true;
/*if (angle == ANGLE(180.0f))
{
z -= 256;
}
else if (angle == -ANGLE(90))
{
x -= 256;
}
else if (angle == ANGLE(90))
{
x += 256;
}
else if (angle == ANGLE(0))
{
z += 256;
}*/
Lara.NewAnims.OscillateHanging = 0;
z += phd_cos(angle) * STEP_SIZE;
x += phd_sin(angle) * STEP_SIZE;
@ -961,35 +942,29 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
if (h != NO_HEIGHT)
{
/* if (TR12_OSCILLATE_HANG == true)
if (Lara.NewAnims.OscillateHanging)
{
if (((h - y) > 0)
&& ((c - y) < -400))
return(1);
if (h - y > 0 && c - y < -400)
return 1;
}
else
{*/
if (((h - y) > 0)
&& ((c - y) < -400)
&& ((y - 819 - c) > -72))
return(1);
// }
{
if (h - y > 0 && c - y < -400 && (y - 819 - c > -72))
return 1;
}
}
return(0);
return 0;
}
/*int TestHangFeet(ITEM_INFO* item, short angle)
bool TestHangFeet(ITEM_INFO* item, short angle)
{
return 0;
if (Lara.climbStatus)
//##LUA debug etc.
Lara.NewAnims.FeetHanging = 0;
if (Lara.climbStatus || !Lara.NewAnims.FeetHanging)
return 0;
// EnableFeetHang = true;
// if (!EnableFeetHang)
// return 0;
int x = item->pos.xPos;
int y = item->pos.yPos;
int z = item->pos.zPos;
@ -997,22 +972,8 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
FLOOR_INFO* floor;
int h, c, g, m, j;
if (angle == ANGLE(180.0f))
{
z -= 256;
}
else if (angle == -ANGLE(90.0f))
{
x -= 256;
}
else if (angle == ANGLE(90.0f))
{
x += 256;
}
else if (angle == ANGLE(0.0f))
{
z += 256;
}
z += phd_cos(angle) * STEP_SIZE;
x += phd_sin(angle) * STEP_SIZE;
floor = GetFloor(x, y, z, &roomNum);
h = GetFloorHeight(floor, x, y, z);
@ -1021,29 +982,12 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
m = c - y;
j = y - 128 - c;
if (item->currentAnimState == LS_CRAWL_TO_HANG)
if (h != NO_HEIGHT)
{
if (h != NO_HEIGHT)
{
if (((g) > 0)
&& ((m) < -128)
&& ((j) > -72))
return(1);
}
return(0);
if (g > 0 && m < -128 && j > -72)
return 1;
}
else
{
if (h != NO_HEIGHT)
{
if (((g) > 0)
&& ((m) < -128)
&& ((j) > -72))
return(0);
}
return(1);
}
}*/
}
int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle)
{
@ -1131,7 +1075,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)
{
@ -1165,7 +1109,7 @@ void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
item->pos.yRot += rot;
}
}*/
}
int LaraFloorFront(ITEM_INFO* item, short ang, int dist)
{
@ -1252,6 +1196,7 @@ void GetTighRopeFallOff(int regularity)
bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
{
#if 0
// TODO: make it more fine-tuned when new collision is done.
switch (coll->collType)
{
@ -1263,4 +1208,10 @@ bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
return false;
}
return true;
#else
if (coll->collType == CT_RIGHT || coll->collType == CT_LEFT)
return 0;
return 1;
#endif
}

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);
bool 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);