From b484b26700757b56e884defd1c4813dde4bddf51 Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 18 Nov 2018 08:51:26 +0300 Subject: [PATCH] add jump and underwater rolls --- src/controller.h | 2 +- src/lara.h | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/controller.h b/src/controller.h index ba55854..43823ac 100644 --- a/src/controller.h +++ b/src/controller.h @@ -1081,7 +1081,7 @@ struct Controller { if (animation.isFrameActive(frame)) { if (cmd == TR::ANIM_CMD_EFFECT) { switch (fx) { - case TR::Effect::ROTATE_180 : angle.y = angle.y + PI; break; + case TR::Effect::ROTATE_180 : angle.x = -angle.x; angle.y = angle.y + PI; break; case TR::Effect::FLOOR_SHAKE : game->setEffect(this, TR::Effect::Type(fx)); break; case TR::Effect::FINISH_LEVEL : game->loadNextLevel(); break; case TR::Effect::FLIP_MAP : game->flipMap(); break; diff --git a/src/lara.h b/src/lara.h index be420a6..873728c 100644 --- a/src/lara.h +++ b/src/lara.h @@ -144,6 +144,8 @@ struct Lara : Character { ANIM_SWITCH_BIG_DOWN = 195, ANIM_SWITCH_BIG_UP = 196, ANIM_PUSH_BUTTON = 197, + + ANIM_ROLL_WATER = 203, }; // http://www.tombraiderforums.com/showthread.php?t=211681 @@ -216,7 +218,7 @@ struct Lara : Character { STATE_WADE, STATE_ROLL_WATER, STATE_PICKUP_FLARE, - STATE_UNUSED_4, + STATE_ROLL_AIR, STATE_UNUSED_5, STATE_DEATH_SLIDE, @@ -2341,6 +2343,15 @@ struct Lara : Character { } } + if ((level->version & TR::VER_VERSION) > TR::VER_TR1) { + bool roll = (input & (FORTH | BACK)) == (FORTH | BACK); + + if ((state == STATE_FORWARD_JUMP && (roll || (input & BACK) )) || + (state == STATE_BACK_JUMP && (roll || (input & FORTH) )) || + (state == STATE_FAST_DIVE && roll)) + return STATE_ROLL_AIR; + } + if (state == STATE_FORWARD_JUMP || state == STATE_FALL_BACK) { if (emptyHands()) { if (input & ACTION) return STATE_REACH; @@ -2602,6 +2613,11 @@ struct Lara : Character { return animation.setAnim(ANIM_WATER_FALL); // TODO: wronng animation } + if ((level->version & TR::VER_VERSION) > TR::VER_TR1 && state != STATE_ROLL_WATER) { + if ((input & (FORTH | BACK)) == (FORTH | BACK)) + return animation.setAnim(ANIM_ROLL_WATER); + } + if (state == STATE_SWAN_DIVE || state == STATE_FAST_DIVE) { angle.x = (state == STATE_SWAN_DIVE ? -45.0f : 85.0f) * DEG2RAD; pos.y += 100.0f;