From f5ec4695efaedff7ef3d58567ecbf22f411ac52d Mon Sep 17 00:00:00 2001 From: Troye Date: Fri, 9 Jul 2021 19:41:56 -0500 Subject: [PATCH] Add more anims to NewAnims; Fix lean --- TR5Main/Game/Lara/lara.cpp | 18 ++--- TR5Main/Game/Lara/lara_basic.cpp | 101 ++++++++++++++++-------- TR5Main/Game/Lara/lara_crawl.cpp | 20 ++--- TR5Main/Game/Lara/lara_hang.cpp | 74 +++++++++--------- TR5Main/Game/Lara/lara_hang.h | 6 +- TR5Main/Game/Lara/lara_struct.h | 8 +- TR5Main/Game/Lara/lara_tests.cpp | 127 ++++++++++--------------------- TR5Main/Game/Lara/lara_tests.h | 4 +- 8 files changed, 174 insertions(+), 184 deletions(-) diff --git a/TR5Main/Game/Lara/lara.cpp b/TR5Main/Game/Lara/lara.cpp index 3c15dd747..2ee217854 100644 --- a/TR5Main/Game/Lara/lara.cpp +++ b/TR5Main/Game/Lara/lara.cpp @@ -196,12 +196,12 @@ function 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 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, diff --git a/TR5Main/Game/Lara/lara_basic.cpp b/TR5Main/Game/Lara/lara_basic.cpp index 0a5408ea6..a220c29e3 100644 --- a/TR5Main/Game/Lara/lara_basic.cpp +++ b/TR5Main/Game/Lara/lara_basic.cpp @@ -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) diff --git a/TR5Main/Game/Lara/lara_crawl.cpp b/TR5Main/Game/Lara/lara_crawl.cpp index a829d852f..fdbd640a0 100644 --- a/TR5Main/Game/Lara/lara_crawl.cpp +++ b/TR5Main/Game/Lara/lara_crawl.cpp @@ -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; diff --git a/TR5Main/Game/Lara/lara_hang.cpp b/TR5Main/Game/Lara/lara_hang.cpp index 10d1001e3..8f1a38705 100644 --- a/TR5Main/Game/Lara/lara_hang.cpp +++ b/TR5Main/Game/Lara/lara_hang.cpp @@ -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); +} diff --git a/TR5Main/Game/Lara/lara_hang.h b/TR5Main/Game/Lara/lara_hang.h index 13b3e9bd4..1e110039e 100644 --- a/TR5Main/Game/Lara/lara_hang.h +++ b/TR5Main/Game/Lara/lara_hang.h @@ -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); diff --git a/TR5Main/Game/Lara/lara_struct.h b/TR5Main/Game/Lara/lara_struct.h index 90edd354c..8a193edcc 100644 --- a/TR5Main/Game/Lara/lara_struct.h +++ b/TR5Main/Game/Lara/lara_struct.h @@ -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 diff --git a/TR5Main/Game/Lara/lara_tests.cpp b/TR5Main/Game/Lara/lara_tests.cpp index 16a58a102..4599fcb3e 100644 --- a/TR5Main/Game/Lara/lara_tests.cpp +++ b/TR5Main/Game/Lara/lara_tests.cpp @@ -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 } diff --git a/TR5Main/Game/Lara/lara_tests.h b/TR5Main/Game/Lara/lara_tests.h index daf462bd3..a87e2277f 100644 --- a/TR5Main/Game/Lara/lara_tests.h +++ b/TR5Main/Game/Lara/lara_tests.h @@ -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);