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,//137
lara_as_null,//138 lara_as_null,//138
lara_as_null,//ara_as_hang_feet,//139 lara_as_null,//ara_as_hang_feet,//139
lara_as_null,//lara_as_hang_feet_shimmyr,//140 lara_as_hang_feet_shimmyr,//140
lara_as_null,//lara_as_hang_feet_shimmyl,//141 lara_as_hang_feet_shimmyl,//141
lara_as_null,//lara_as_hang_feet_inRcorner,//142 lara_as_hang_feet_inRcorner,//142
lara_as_null,//lara_as_hang_feet_inLcorner,//143 lara_as_hang_feet_inLcorner,//143
lara_as_null,//lara_as_hang_feet_outRcorner,//144 lara_as_hang_feet_outRcorner,//144
lara_as_null,//lara_as_hang_feet_outLcorner,//145 lara_as_hang_feet_outLcorner,//145
lara_as_controlledl, lara_as_controlledl,
lara_as_null, lara_as_null,
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_void_func, lara_void_func,
lara_void_func,//lara_col_hang_feet, lara_col_hang_feet,
lara_void_func,//lara_col_hang_feet_shimmyr, lara_col_hang_feet_shimmyr,
lara_void_func,//lara_col_hang_feet_shimmyl, lara_col_hang_feet_shimmyl,
lara_default_col, lara_default_col,
lara_default_col, 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) if (item->pos.zRot < -LARA_LEAN_MAX)
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) 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) if (item->pos.zRot > LARA_LEAN_MAX)
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) 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 (TestHangSwingIn(item, angle))
{ {
/* if (TR12_OSCILLATE_HANG == true) if (Lara.NewAnims.OscillateHanging)
{ {
Lara.headYrot = 0; Lara.headYrot = 0;
Lara.headXrot = 0; Lara.headXrot = 0;
Lara.torsoYrot = 0; Lara.torsoYrot = 0;
Lara.torsoXrot = 0; Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_HANG_OSCILLATE; item->animNumber = LA_REACH_TO_HANG_OSCILLATE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG; item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG; item->goalAnimState = LS_HANG;
} }
else else
{ */ {
Lara.headYrot = 0; Lara.headYrot = 0;
Lara.headXrot = 0; Lara.headXrot = 0;
Lara.torsoYrot = 0; Lara.torsoYrot = 0;
Lara.torsoXrot = 0; Lara.torsoXrot = 0;
item->animNumber = LA_REACH_TO_MONKEYSWING; item->animNumber = LA_REACH_TO_MONKEYSWING;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_MONKEYSWING_IDLE; item->currentAnimState = LS_MONKEYSWING_IDLE;
item->goalAnimState = LS_MONKEYSWING_IDLE; item->goalAnimState = LS_MONKEYSWING_IDLE;
// } }
} }
else else
{ {
/* if (TestHangFeet(item, angle)) if (TestHangFeet(item, angle))
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG; item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET; item->goalAnimState = LS_HANG_FEET;
} }
else*/ else
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
@ -1683,14 +1695,14 @@ void lara_col_upjump(ITEM_INFO* item, COLL_INFO* coll)
} }
else else
{ {
/* if (TestHangFeet(item, angle)) if (TestHangFeet(item, angle))
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12; item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12;
item->currentAnimState = LS_HANG; item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET; item->goalAnimState = LS_HANG_FEET;
} }
else*/ else
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 12; 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)) if (LaraFallen(item, coll))
return; 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; item->goalAnimState = LS_RUN_FORWARD;
} }
@ -1957,8 +1972,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll)) if (TestLaraLean(item, coll))
{ {
item->pos.zRot -= LARA_LEAN_RATE; item->pos.zRot -= LARA_LEAN_RATE;
if (item->pos.zRot < -(LARA_LEAN_MAX / 2)) if (item->pos.zRot < -LARA_LEAN_MAX / 2)
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) else if (TrInput & IN_RIGHT)
@ -1970,8 +1991,14 @@ void lara_as_wade(ITEM_INFO* item, COLL_INFO* coll)
if (TestLaraLean(item, coll)) if (TestLaraLean(item, coll))
{ {
item->pos.zRot += LARA_LEAN_RATE; item->pos.zRot += LARA_LEAN_RATE;
if (item->pos.zRot > (LARA_LEAN_MAX / 2)) if (item->pos.zRot > LARA_LEAN_MAX / 2)
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) if (item->pos.zRot < -LARA_LEAN_MAX)
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) 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) if (item->pos.zRot > LARA_LEAN_MAX)
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) 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 // FOR DEBUG PURPOSES UNTIL SCRIPTING IS FINISHED
Lara.NewAnims.Crawl1clickdown = 1; // Lara.NewAnims.Crawl1clickdown = 1;
Lara.NewAnims.Crawl1clickup = 1; // Lara.NewAnims.Crawl1clickup = 1;
Lara.NewAnims.CrawlExit1click = 1; // Lara.NewAnims.CrawlExit1click = 1;
Lara.NewAnims.CrawlExit2click = 1; // Lara.NewAnims.CrawlExit2click = 1;
Lara.NewAnims.CrawlExit3click = 1; // Lara.NewAnims.CrawlExit3click = 1;
Lara.NewAnims.CrawlExitJump = 1;
if (TrInput & IN_JUMP && Lara.NewAnims.CrawlExitJump)
if (TrInput & IN_JUMP)
{ {
GAME_VECTOR s, d; GAME_VECTOR s, d;
MESH_INFO* StaticMesh; MESH_INFO* StaticMesh;
@ -512,7 +512,7 @@ void lara_as_crawl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 81*/ /*state 81*/
/*collision: lara_col_crawl*/ /*collision: lara_col_crawl*/
if (item->hitPoints <= 0 || TrInput & IN_JUMP) if (item->hitPoints <= 0)
{ {
item->goalAnimState = LS_CRAWL_IDLE; item->goalAnimState = LS_CRAWL_IDLE;
return; return;
@ -853,14 +853,14 @@ void lara_col_crawl2hang(ITEM_INFO* item, COLL_INFO* coll)
} }
else else
{ {
/* if (TestHangFeet(item, angle)) if (TestHangFeet(item, angle))
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
item->currentAnimState = LS_HANG; item->currentAnimState = LS_HANG;
item->goalAnimState = LS_HANG_FEET; item->goalAnimState = LS_HANG_FEET;
} }
else*/ else
{ {
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; 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) -corner anims(works well, tested with placeholder anims)
-handstand(not tested)*/ -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*/ /*state 139*/
/*collision: lara_col_hang_feet //collision: lara_col_hang_feet
Lara.isClimbing = false; Lara.isClimbing = false;
if (item->hitPoints <= 0) 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) void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 139*/ /*state 139*/
/*state code: lara_as_hang_feet //state code: lara_as_hang_feet
item->fallspeed = 0; item->fallspeed = 0;
item->gravityStatus = false; item->gravityStatus = false;
@ -395,35 +395,35 @@ void lara_col_hang_feet(ITEM_INFO* item, COLL_INFO* coll)
} }
} }
} }
/*
if (Lara.climbStatus != 0 && if (Lara.climbStatus != 0 &&
coll->midCeiling <= -256 && coll->midCeiling <= -256 &&
abs(coll->leftCeiling2 - coll->rightCeiling2) < 60) abs(coll->leftCeiling2 - coll->rightCeiling2) < 60)
{
if (LaraTestClimbStance(item, coll))
{ {
if (LaraTestClimbStance(item, coll)) item->goalAnimState = LS_LADDER_IDLE;
{
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;
}
} }
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; Lara.moveAngle = item->pos.yRot;
LaraHangTest(item, coll); LaraHangTest(item, coll);
}
} }
void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll) void lara_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 140*/ /*state 140*/
/*collision: lara_col_hang_feet_shimmyr //collision: lara_col_hang_feet_shimmyr
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
Camera.targetAngle = 0; 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) void lara_col_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 140*/ /*state 140*/
/*state code: lara_as_hang_feet_shimmyr //state code: lara_as_hang_feet_shimmyr
Lara.moveAngle = item->pos.yRot + ANGLE(90); Lara.moveAngle = item->pos.yRot + ANGLE(90);
coll->radius = LARA_RAD; coll->radius = LARA_RAD;
LaraHangTest(item, coll); 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) void lara_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 141*/ /*state 141*/
/*collision: lara_col_hang_feet_shimmyl //collision: lara_col_hang_feet_shimmyl
coll->enableBaddiePush = false; coll->enableBaddiePush = false;
coll->enableSpaz = false; coll->enableSpaz = false;
Camera.targetAngle = 0; 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) void lara_col_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 141*/ /*state 141*/
/*state code: lara_as_hang_feet_shimmyl //state code: lara_as_hang_feet_shimmyl
Lara.moveAngle = item->pos.yRot - ANGLE(90); Lara.moveAngle = item->pos.yRot - ANGLE(90);
coll->radius = LARA_RAD; coll->radius = LARA_RAD;
LaraHangTest(item, coll); LaraHangTest(item, coll);
Lara.moveAngle = item->pos.yRot - ANGLE(90); 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) void lara_as_hang_feet_inRcorner(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 142*/ /*state 142*/
/*collision: lara_default_col //collision: lara_default_col
Camera.laraNode = 8; Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f); 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? 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), SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_INNER);
} }
void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll) void lara_as_hang_feet_inLcorner(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 143*/ /*state 143*/
/*collision: lara_default_col //collision: lara_default_col
Camera.laraNode = 8; Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f); Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_INNER].frameEnd) if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_INNER].frameEnd)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
item->animNumber = LA_SHIMMY_FEET_LEFT_CORNER_INNER);
} }
void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll) void lara_as_hang_feet_outRcorner(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 144*/ /*state 144*/
/*collision: lara_default_col //collision: lara_default_col
Camera.laraNode = 8; Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f); Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_OUTER].frameEnd) if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_RIGHT_CORNER_OUTER].frameEnd)
SetCornerAnimFeet(item, coll, -ANGLE(90.0f), SetCornerAnimFeet(item, coll, -ANGLE(90.0f), 1);
item->animNumber = LA_SHIMMY_FEET_RIGHT_CORNER_OUTER);
} }
void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll) void lara_as_hang_feet_outLcorner(ITEM_INFO* item, COLL_INFO* coll)
{ {
/*state 145*/ /*state 145*/
/*collision: lara_default_col //collision: lara_default_col
Camera.laraNode = 8; Camera.laraNode = 8;
Camera.targetElevation = ANGLE(33.0f); Camera.targetElevation = ANGLE(33.0f);
if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_OUTER].frameEnd) if (item->frameNumber == g_Level.Anims[LA_SHIMMY_FEET_LEFT_CORNER_OUTER].frameEnd)
SetCornerAnimFeet(item, coll, ANGLE(90.0f), SetCornerAnimFeet(item, coll, ANGLE(90.0f), 1);
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_extcornerr(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_intcornerl(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); 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_as_hang_feet(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_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_as_hang_feet_shimmyr(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_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_as_hang_feet_shimmyl(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_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_inRcorner(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_hang_feet_inLcorner(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_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_CRAWL_IDLE = 263, // Crwal idle
LA_CROUCH_TO_CRAWL_END = 264, // Crawl > crouch (2/2) LA_CROUCH_TO_CRAWL_END = 264, // Crawl > crouch (2/2)
LA_CRAWL_TO_CROUCH_END_UNUSED = 265, // Crouch > crawl (3/3) 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 LA_CRAWL_TO_IDLE_RIGHT = 267, // Crawl forward > crawl idle, right leg first
// TODO: in WAD, link next to 263 // 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_LEFT = 269, // Crawl rotate left (looped)
LA_CRAWL_TURN_RIGHT = 270, // Crawl rotate right (looped) LA_CRAWL_TURN_RIGHT = 270, // Crawl rotate right (looped)
LA_MONKEYSWING_TURN_LEFT = 271, // Monkey swing rotate left LA_MONKEYSWING_TURN_LEFT = 271, // Monkey swing rotate left
@ -974,6 +974,10 @@ struct AnimsNew
bool CrawlVault2click; //vault into crawlspace at 2 clicks bool CrawlVault2click; //vault into crawlspace at 2 clicks
bool CrawlVault3click; //vault into crawlspace at 3 clicks bool CrawlVault3click; //vault into crawlspace at 3 clicks
bool MonkeyVault; //vault up to monkeybars when pressing up + action underneath them. super annoying :) 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 typedef struct LaraInfo

View file

@ -18,9 +18,6 @@ static short RightClimbTab[4] = // offset 0xA0640
0x0800, 0x0100, 0x0200, 0x0400 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*/ /*this file has all the generic test functions called in lara's state code*/
int TestLaraVault(ITEM_INFO* item, COLL_INFO* coll) 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) if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS)
return 0; return 0;
Lara.NewAnims.CrawlVault1click = 1; //##LUA debug etc.
Lara.NewAnims.CrawlVault2click = 1; // Lara.NewAnims.CrawlVault1click = 1;
Lara.NewAnims.CrawlVault3click = 1; // Lara.NewAnims.CrawlVault2click = 1;
Lara.NewAnims.MonkeyVault = 1; // Lara.NewAnims.CrawlVault3click = 1;
// Lara.NewAnims.MonkeyVault = 1;
if (coll->collType == CT_FRONT) if (coll->collType == CT_FRONT)
{ {
@ -427,13 +425,13 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
item->animNumber = LA_REACH_TO_HANG; item->animNumber = LA_REACH_TO_HANG;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase + 21; 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->currentAnimState = LS_HANG_FEET;
item->goalAnimState = LS_HANG_FEET; item->goalAnimState = LS_HANG_FEET;
item->animNumber = LA_HANG_FEET_IDLE; item->animNumber = LA_HANG_FEET_IDLE;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase; item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
}*/ }
result = 1; result = 1;
} }
} }
@ -458,7 +456,7 @@ int LaraHangTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangLeftCornerTest(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; return 0;
if (coll->hitStatic) if (coll->hitStatic)
@ -613,7 +611,7 @@ int LaraHangLeftCornerTest(ITEM_INFO* item, COLL_INFO* coll)
int LaraHangRightCornerTest(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; return 0;
if (coll->hitStatic) if (coll->hitStatic)
@ -933,24 +931,7 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
int h, c; int h, c;
//debug till scripting be ready //debug till scripting be ready
// TR12_OSCILLATE_HANG = true; Lara.NewAnims.OscillateHanging = 0;
/*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;
}*/
z += phd_cos(angle) * STEP_SIZE; z += phd_cos(angle) * STEP_SIZE;
x += phd_sin(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 (h != NO_HEIGHT)
{ {
/* if (TR12_OSCILLATE_HANG == true) if (Lara.NewAnims.OscillateHanging)
{ {
if (((h - y) > 0) if (h - y > 0 && c - y < -400)
&& ((c - y) < -400)) return 1;
return(1);
} }
else else
{*/ {
if (((h - y) > 0) if (h - y > 0 && c - y < -400 && (y - 819 - c > -72))
&& ((c - y) < -400) return 1;
&& ((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; //##LUA debug etc.
if (Lara.climbStatus) Lara.NewAnims.FeetHanging = 0;
if (Lara.climbStatus || !Lara.NewAnims.FeetHanging)
return 0; return 0;
// EnableFeetHang = true;
// if (!EnableFeetHang)
// return 0;
int x = item->pos.xPos; int x = item->pos.xPos;
int y = item->pos.yPos; int y = item->pos.yPos;
int z = item->pos.zPos; int z = item->pos.zPos;
@ -997,22 +972,8 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
FLOOR_INFO* floor; FLOOR_INFO* floor;
int h, c, g, m, j; int h, c, g, m, j;
if (angle == ANGLE(180.0f)) z += phd_cos(angle) * STEP_SIZE;
{ x += phd_sin(angle) * STEP_SIZE;
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;
}
floor = GetFloor(x, y, z, &roomNum); floor = GetFloor(x, y, z, &roomNum);
h = GetFloorHeight(floor, x, y, z); h = GetFloorHeight(floor, x, y, z);
@ -1021,29 +982,12 @@ int TestHangSwingIn(ITEM_INFO* item, short angle)
m = c - y; m = c - y;
j = y - 128 - c; 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;
if (((g) > 0)
&& ((m) < -128)
&& ((j) > -72))
return(1);
}
return(0);
} }
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) 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) if (item->hitPoints <= 0)
{ {
@ -1165,7 +1109,7 @@ void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip)
item->pos.yRot += rot; item->pos.yRot += rot;
} }
}*/ }
int LaraFloorFront(ITEM_INFO* item, short ang, int dist) 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) bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
{ {
#if 0
// TODO: make it more fine-tuned when new collision is done. // TODO: make it more fine-tuned when new collision is done.
switch (coll->collType) switch (coll->collType)
{ {
@ -1263,4 +1208,10 @@ bool TestLaraLean(ITEM_INFO* item, COLL_INFO* coll)
return false; return false;
} }
return true; 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 LaraTestEdgeCatch(ITEM_INFO* item, COLL_INFO* coll, int* edge);
int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll); int IsValidHangPos(ITEM_INFO* item, COLL_INFO* coll);
int TestHangSwingIn(ITEM_INFO* item, short angle); 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); int CanLaraHangSideways(ITEM_INFO* item, COLL_INFO* coll, short angle);
void SetCornerAnim(ITEM_INFO* item, COLL_INFO* coll, short rot, short flip); 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 LaraFloorFront(ITEM_INFO* item, short ang, int dist);
int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h); int LaraCeilingFront(ITEM_INFO* item, short ang, int dist, int h);
int LaraFallen(ITEM_INFO* item, COLL_INFO* coll); int LaraFallen(ITEM_INFO* item, COLL_INFO* coll);