inv: fix regression in Inv_Construct

Partially resolves #69
This commit is contained in:
Marcin Kurczewski 2024-04-27 20:51:30 +02:00
parent be1b2a362f
commit 0a865c2f64
No known key found for this signature in database
GPG Key ID: CC65E6FD28CAE42A
4 changed files with 20 additions and 19 deletions

View File

@ -2,6 +2,7 @@
- fixed Lara's shadow with z-buffer option on (#64, regression from 0.1)
- fixed rare camera issues (#65, regression from 0.1)
- fixed flat rectangle colors (#70, regression from 0.1)
- fixed medpacks staying open after use in Lara's inventory (#69, regression from 0.1)
## [0.1](https://github.com/rr-/TR2X/compare/...0.1) - 2024-04-26
- added version string to the inventory

View File

@ -3622,8 +3622,8 @@ typedef struct __unaligned {
00525BEC - int32_t g_DynamicLightCount;
004D7784 - int32_t g_CineTickCount;
004D7788 - int32_t g_OriginalRoom;
00465518 - INVENTORY_ITEM *g_Inv_MainList;
00465608 - INVENTORY_ITEM *g_Inv_OptionList;
004655A8 - INVENTORY_ITEM *g_Inv_KeysList;
00465518 - INVENTORY_ITEM *g_Inv_MainList[];
00465608 - INVENTORY_ITEM *g_Inv_OptionList[];
004655A8 - INVENTORY_ITEM *g_Inv_KeysList[];
004644F8 - int32_t g_Inv_NFrames;
00525C00 - STATIC_INFO g_StaticObjects[256];

View File

@ -54,7 +54,7 @@ void __cdecl Inv_Construct(void)
}
for (int32_t i = 0; i < g_Inv_MainObjectsCount; i++) {
INVENTORY_ITEM *const inv_item = &g_Inv_MainList[i];
INVENTORY_ITEM *const inv_item = g_Inv_MainList[i];
inv_item->meshes_drawn = inv_item->meshes_sel;
inv_item->current_frame = 0;
inv_item->goal_frame = 0;
@ -63,7 +63,7 @@ void __cdecl Inv_Construct(void)
}
for (int32_t i = 0; i < g_Inv_OptionObjectsCount; i++) {
INVENTORY_ITEM *const inv_item = &g_Inv_OptionList[i];
INVENTORY_ITEM *const inv_item = g_Inv_OptionList[i];
inv_item->current_frame = 0;
inv_item->goal_frame = 0;
inv_item->anim_count = 0;
@ -120,24 +120,24 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
case INV_LOAD_MODE:
case INV_DEATH_MODE:
Inv_Ring_Init(
&ring, 1, &g_Inv_OptionList, g_Inv_OptionObjectsCount,
&ring, 1, g_Inv_OptionList, g_Inv_OptionObjectsCount,
g_Inv_OptionCurrent, &imo);
break;
case INV_KEYS_MODE:
Inv_Ring_Init(
&ring, 2, &g_Inv_KeysList, g_Inv_KeyObjectsCount, g_Inv_MainCurrent,
&ring, 2, g_Inv_KeysList, g_Inv_KeyObjectsCount, g_Inv_MainCurrent,
&imo);
break;
default:
if (g_Inv_MainObjectsCount) {
Inv_Ring_Init(
&ring, 0, &g_Inv_MainList, g_Inv_MainObjectsCount,
&ring, 0, g_Inv_MainList, g_Inv_MainObjectsCount,
g_Inv_MainCurrent, &imo);
} else {
Inv_Ring_Init(
&ring, 1, &g_Inv_OptionList, g_Inv_OptionObjectsCount,
&ring, 1, g_Inv_OptionList, g_Inv_OptionObjectsCount,
g_Inv_OptionCurrent, &imo);
}
break;
@ -366,13 +366,13 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
INVENTORY_ITEM *inv_item;
if (ring.type == RT_MAIN) {
g_Inv_MainCurrent = ring.current_object;
inv_item = *(&g_Inv_MainList + ring.current_object);
inv_item = g_Inv_MainList[ring.current_object];
} else if (ring.type == RT_OPTION) {
g_Inv_OptionCurrent = ring.current_object;
inv_item = *(&g_Inv_OptionList + ring.current_object);
inv_item = g_Inv_OptionList[ring.current_object];
} else {
g_Inv_KeysCurrent = ring.current_object;
inv_item = *(&g_Inv_KeysList + ring.current_object);
inv_item = g_Inv_KeysList[ring.current_object];
}
inv_item->goal_frame = inv_item->open_frame;
@ -476,7 +476,7 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
ring.camera_pitch = -(int16_t)(imo.misc);
imo.camera_pitch_rate = imo.misc / 24;
imo.camera_pitch_target = 0;
ring.list = &g_Inv_OptionList;
ring.list = g_Inv_OptionList;
ring.type = RT_OPTION;
g_Inv_MainCurrent = ring.current_object;
g_Inv_MainObjectsCount = ring.number_of_objects;
@ -497,7 +497,7 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
imo.camera_pitch_rate = imo.misc / 24;
g_Inv_MainCurrent = ring.current_object;
g_Inv_MainObjectsCount = ring.number_of_objects;
ring.list = &g_Inv_KeysList;
ring.list = g_Inv_KeysList;
ring.type = RT_KEYS;
ring.number_of_objects = g_Inv_KeyObjectsCount;
ring.current_object = g_Inv_KeysCurrent;
@ -514,7 +514,7 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
ring.camera_pitch = -(int16_t)(imo.misc);
imo.camera_pitch_rate = imo.misc / 24;
imo.camera_pitch_target = 0;
ring.list = &g_Inv_MainList;
ring.list = g_Inv_MainList;
ring.type = RT_MAIN;
g_Inv_KeysCurrent = ring.current_object;
ring.number_of_objects = g_Inv_MainObjectsCount;
@ -534,7 +534,7 @@ int32_t __cdecl Inv_Display(int32_t inventory_mode)
g_Inv_OptionCurrent = ring.current_object;
g_Inv_OptionObjectsCount = ring.number_of_objects;
imo.camera_pitch_target = 0;
ring.list = &g_Inv_MainList;
ring.list = g_Inv_MainList;
ring.type = RT_MAIN;
ring.number_of_objects = g_Inv_MainObjectsCount;
ring.current_object = g_Inv_MainCurrent;

View File

@ -22,10 +22,10 @@ extern const char *g_TR2XVersion;
#define g_OverlayStatus (*(int32_t*)0x004644E0) // = 1
#define g_Inv_NFrames (*(int32_t*)0x004644F8)
#define g_Inv_MainObjectsCount (*(int16_t*)0x004654E0) // = 8
#define g_Inv_MainList (*(INVENTORY_ITEM **)0x00465518)
#define g_Inv_KeysList (*(INVENTORY_ITEM **)0x004655A8)
#define g_Inv_MainList (*(INVENTORY_ITEM *(*)[])0x00465518)
#define g_Inv_KeysList (*(INVENTORY_ITEM *(*)[])0x004655A8)
#define g_Inv_OptionObjectsCount (*(int16_t*)0x00465604) // = 4
#define g_Inv_OptionList (*(INVENTORY_ITEM **)0x00465608)
#define g_Inv_OptionList (*(INVENTORY_ITEM *(*)[])0x00465608)
#define g_GymInvOpenEnabled (*(BOOL*)0x00465618) // = TRUE
#define g_Inv_Chosen (*(int16_t*)0x00465A50) // = -1
#define g_Inv_Mode (*(INVENTORY_MODE*)0x00465A54) // = INV_TITLE_MODE