diff --git a/TR5Main/Game/Lara/lara_objects.cpp b/TR5Main/Game/Lara/lara_objects.cpp index 752c7428e..8b5745d14 100644 --- a/TR5Main/Game/Lara/lara_objects.cpp +++ b/TR5Main/Game/Lara/lara_objects.cpp @@ -168,14 +168,14 @@ void lara_as_pulley(ITEM_INFO* item, COLL_INFO* coll) { /*state 104*/ /*collision: lara_default_col*/ - ITEM_INFO* p = (ITEM_INFO*)Lara.generalPtr; + ITEM_INFO* pulley = (ITEM_INFO*)Lara.generalPtr; Lara.look = false; coll->enableSpaz = false; coll->enableBaddiePush = false; - if (TrInput & IN_ACTION && p->triggerFlags) + if (TrInput & IN_ACTION && pulley->triggerFlags) { item->goalAnimState = LS_PULLEY; } @@ -184,36 +184,41 @@ void lara_as_pulley(ITEM_INFO* item, COLL_INFO* coll) item->goalAnimState = LS_STOP; } - if (item->animNumber == LA_PULLEY_PULL && item->frameNumber == g_Level.Anims[LA_PULLEY_PULL].frameBase + 44) + if (item->animNumber == LA_PULLEY_PULL + && item->frameNumber == g_Level.Anims[item->animNumber].frameBase + 44) { - if (p->triggerFlags) + if (pulley->triggerFlags) { - p->triggerFlags--; - - if (p->triggerFlags) + if (!pulley->itemFlags[1]) { - if (p->itemFlags[2]) + pulley->triggerFlags--; + if (pulley->triggerFlags) { - p->itemFlags[2] = 0; - p->status = ITEM_DEACTIVATED; + if (pulley->itemFlags[2]) + { + pulley->itemFlags[2] = 0; + pulley->status = ITEM_DEACTIVATED; + } } - } - else - { - if (!p->itemFlags[1]) - p->status = ITEM_DEACTIVATED; - - p->itemFlags[2] = 1; - - if (p->itemFlags[3] >= 0) - p->triggerFlags = abs(p->itemFlags[3]); else - p->itemFlags[0] = 1; + { + pulley->status = ITEM_DEACTIVATED; + pulley->itemFlags[2] = 1; + if (pulley->itemFlags[3] >= 0) + { + pulley->triggerFlags = abs(pulley->itemFlags[3]); + } + else + { + pulley->itemFlags[0] = 1; + } + } } } } - if (item->animNumber == LA_PULLEY_RELEASE && item->frameNumber == g_Level.Anims[item->animNumber].frameEnd - 1) + if (item->animNumber == LA_PULLEY_RELEASE + && item->frameNumber == g_Level.Anims[item->animNumber].frameEnd - 1) Lara.gunStatus = LG_NO_ARMS; } /*end pulley*/ diff --git a/TR5Main/Game/switch.cpp b/TR5Main/Game/switch.cpp index d0ac6c793..4f5c74be8 100644 --- a/TR5Main/Game/switch.cpp +++ b/TR5Main/Game/switch.cpp @@ -808,9 +808,13 @@ void PulleyCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll) ITEM_INFO* item = &g_Level.Items[itemNum]; if (item->flags & 0x100 - || (!(TrInput & IN_ACTION) || Lara.gunStatus || l->currentAnimState != LS_STOP || l->animNumber != LA_STAND_IDLE || - item->status || item->gravityStatus) - && (!Lara.isMoving || Lara.generalPtr != (void*)itemNum)) + || (!(TrInput & IN_ACTION) + || Lara.gunStatus + || l->currentAnimState != LS_STOP + || l->animNumber != LA_STAND_IDLE + || item->gravityStatus) + && (!Lara.isMoving + || Lara.generalPtr != (void*)itemNum)) { if (l->currentAnimState != LS_PULLEY) ObjectCollision(itemNum, l, coll); @@ -821,7 +825,17 @@ void PulleyCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll) item->pos.yRot = l->pos.yRot; if (TestLaraPosition(&PulleyBounds, item, l)) { - if (MoveLaraPosition(&PulleyPos, item, l)) + if (item->itemFlags[1]) + { + if (OldPickupPos.x != l->pos.xPos || OldPickupPos.y != l->pos.yPos || OldPickupPos.z != l->pos.zPos) + { + OldPickupPos.x = l->pos.xPos; + OldPickupPos.y = l->pos.yPos; + OldPickupPos.z = l->pos.zPos; + SayNo(); + } + } + else if (MoveLaraPosition(&PulleyPos, item, l)) { l->animNumber = LA_PULLEY_GRAB; l->currentAnimState = LS_PULLEY; @@ -1133,10 +1147,12 @@ void SwitchControl(short itemNumber) item->goalAnimState = 0; item->timer = 0; AnimateItem(item); - return; } - item->goalAnimState = 1; - item->timer = 0; + else + { + item->goalAnimState = 1; + item->timer = 0; + } } } else @@ -1297,8 +1313,11 @@ void InitialisePulleySwitch(short itemNumber) item->itemFlags[3] = item->triggerFlags; item->triggerFlags = abs(item->triggerFlags); - if (itemNumber == PulleyItemNumber) + if (item->status == ITEM_INVISIBLE) + { item->itemFlags[1] = 1; + item->status = ITEM_NOT_ACTIVE; + } } void InitialiseCrowDoveSwitch(short itemNumber)