From a256869495185d5fb7674f118b71f7aa48b35b67 Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Thu, 5 Sep 2024 17:06:32 +0200 Subject: [PATCH] port Inv_Ring_MotionItemDeselect --- docs/progress.svg | 16 ++++++++-------- docs/progress.txt | 2 +- src/game/inventory/ring.c | 15 +++++++++++++++ src/game/inventory/ring.h | 2 ++ src/global/funcs.h | 1 - src/inject_exec.c | 1 + 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/docs/progress.svg b/docs/progress.svg index 62890d7..364b7c3 100644 --- a/docs/progress.svg +++ b/docs/progress.svg @@ -69,10 +69,10 @@ Tomb2.exe progress according to the physical function order: -60.18% (733) · 37.36% (455) · 0% (0) · 2.46% (30) +60.26% (734) · 37.27% (454) · 0% (0) · 2.46% (30) - - + + @@ -436,7 +436,7 @@ void __cdecl Inv_Ring_MotionCameraPos(RING_INFO *ring, int16_t target); void __cdecl Inv_Ring_MotionCameraPitch(RING_INFO *ring, int16_t target); void __cdecl Inv_Ring_MotionItemSelect(RING_INFO *ring, INVENTORY_ITEM *inv_item); -void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); +void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); void __cdecl Requester_Init(REQUEST_INFO *req); void __cdecl Requester_Shutdown(REQUEST_INFO *req); void __cdecl Requester_Item_CenterAlign(REQUEST_INFO *req, TEXTSTRING *txt); @@ -1298,10 +1298,10 @@ Tomb2.exe progress according to the function sizes: -64.13% · 35.54% · 0% · 0.33% +64.16% · 35.51% · 0% · 0.33% - - + + @@ -2021,7 +2021,7 @@ void __cdecl swap_meshes_with_meshswap1(ITEM_INFO *item); void __cdecl swap_meshes_with_meshswap2(ITEM_INFO *item); void __cdecl Inv_Ring_MotionInit(RING_INFO *ring, int16_t frames, int16_t status, int16_t status_target); -void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); +void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); void __cdecl InitialiseStartInfo(void); void __cdecl IncreaseScreenSize(void); void __cdecl DecreaseScreenSize(void); diff --git a/docs/progress.txt b/docs/progress.txt index 3cfc0b5..6ba99d5 100644 --- a/docs/progress.txt +++ b/docs/progress.txt @@ -3234,7 +3234,7 @@ typedef enum { 0x00425480 0x0025 + void __cdecl Inv_Ring_MotionCameraPos(RING_INFO *ring, int16_t target); 0x004254B0 0x0020 + void __cdecl Inv_Ring_MotionCameraPitch(RING_INFO *ring, int16_t target); 0x004254D0 0x005D + void __cdecl Inv_Ring_MotionItemSelect(RING_INFO *ring, INVENTORY_ITEM *inv_item); -0x00425530 0x0063 - void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); +0x00425530 0x0063 + void __cdecl Inv_Ring_MotionItemDeselect(RING_INFO *ring, INVENTORY_ITEM *inv_item); # game/invtext.c 0x004255A0 0x0082 + void __cdecl Requester_Init(REQUEST_INFO *req); diff --git a/src/game/inventory/ring.c b/src/game/inventory/ring.c index 0edb249..a5136d9 100644 --- a/src/game/inventory/ring.c +++ b/src/game/inventory/ring.c @@ -275,3 +275,18 @@ void __cdecl Inv_Ring_MotionItemSelect( imo->item_z_trans_target = inv_item->z_trans_sel; imo->item_z_trans_rate = inv_item->z_trans_sel / imo->count; } + +void __cdecl Inv_Ring_MotionItemDeselect( + RING_INFO *const ring, const INVENTORY_ITEM *const inv_item) +{ + IMOTION_INFO *const imo = ring->imo; + imo->item_pt_x_rot_target = 0; + imo->item_pt_x_rot_rate = -(inv_item->x_rot_pt_sel / imo->count); + imo->item_x_rot_target = inv_item->x_rot_nosel; + imo->item_x_rot_rate = + (inv_item->x_rot_nosel - inv_item->x_rot_sel) / imo->count; + imo->item_y_trans_target = 0; + imo->item_y_trans_rate = -(inv_item->y_trans_sel / imo->count); + imo->item_z_trans_target = 0; + imo->item_z_trans_rate = -(inv_item->z_trans_sel / imo->count); +} diff --git a/src/game/inventory/ring.h b/src/game/inventory/ring.h index 6ad0607..c2ba630 100644 --- a/src/game/inventory/ring.h +++ b/src/game/inventory/ring.h @@ -24,3 +24,5 @@ void __cdecl Inv_Ring_MotionCameraPos(RING_INFO *ring, int16_t target); void __cdecl Inv_Ring_MotionCameraPitch(RING_INFO *ring, int16_t target); void __cdecl Inv_Ring_MotionItemSelect( RING_INFO *ring, const INVENTORY_ITEM *inv_item); +void __cdecl Inv_Ring_MotionItemDeselect( + RING_INFO *ring, const INVENTORY_ITEM *inv_item); diff --git a/src/global/funcs.h b/src/global/funcs.h index dd34ea4..2a6799d 100644 --- a/src/global/funcs.h +++ b/src/global/funcs.h @@ -105,7 +105,6 @@ #define Inv_RemoveAllItems ((void __cdecl (*)(void))0x00424CB0) #define Inv_RemoveItem ((int32_t __cdecl (*)(GAME_OBJECT_ID object_num))0x00424CD0) #define RemoveInventoryText ((void __cdecl (*)(void))0x00424FD0) -#define Inv_Ring_MotionItemDeselect ((void __cdecl (*)(RING_INFO *ring, INVENTORY_ITEM *inv_item))0x00425530) #define HarpoonBolt_Control ((void __cdecl (*)(int16_t item_num))0x0042C0F0) #define Rocket_Control ((void __cdecl (*)(int16_t item_num))0x0042C530) #define Flare_DoLight ((int32_t __cdecl (*)(XYZ_32 *pos, int32_t flare_age))0x0042F7A0) diff --git a/src/inject_exec.c b/src/inject_exec.c index 4f12a96..e06bfe5 100644 --- a/src/inject_exec.c +++ b/src/inject_exec.c @@ -636,6 +636,7 @@ static void Inject_Inventory(const bool enable) INJECT(enable, 0x00425480, Inv_Ring_MotionCameraPos); INJECT(enable, 0x004254B0, Inv_Ring_MotionCameraPitch); INJECT(enable, 0x004254D0, Inv_Ring_MotionItemSelect); + INJECT(enable, 0x00425530, Inv_Ring_MotionItemDeselect); } static void Inject_Lara_Control(const bool enable)