From 5597750c2ce8506648540fd579b270e6f35d67ba Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Sat, 28 Dec 2024 11:20:25 +0100 Subject: [PATCH] Remove abandoned diary code, convert all inventory items to pickups, fix diary savegame --- CHANGELOG.md | 2 + Documentation/doc/4 enums/Objects.ObjID.html | 6 +- TombEngine/Game/GuiObjects.cpp | 4 +- TombEngine/Game/GuiObjects.h | 5 +- TombEngine/Game/Lara/lara_initialise.cpp | 12 ++ TombEngine/Game/Lara/lara_struct.h | 30 +---- TombEngine/Game/control/control.cpp | 4 +- TombEngine/Game/gui.cpp | 58 ++------- TombEngine/Game/gui.h | 5 +- TombEngine/Game/pickup/pickup_misc_items.cpp | 32 ++++- TombEngine/Game/savegame.cpp | 10 ++ TombEngine/Objects/TR5/tr5_objects.cpp | 4 + TombEngine/Objects/game_object_ids.h | 2 +- TombEngine/Renderer/Renderer.h | 1 - TombEngine/Renderer/RendererDrawMenu.cpp | 27 ----- .../Internal/TEN/Objects/ObjectIDs.h | 8 +- .../flatbuffers/ten_savegame_generated.h | 112 +++++++++++++++--- .../Specific/savegame/schema/ten_savegame.fbs | 5 + 18 files changed, 187 insertions(+), 140 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb2c49d1c..377e4171b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,9 +13,11 @@ TombEngine releases are located in this repository (alongside with Tomb Editor): * Fixed occasional crashes with creatures stuck in a sector with no pathfinding set. * Fixed antialiasing quality not changing after changing it in display settings. * Fixed endless explosion effect for Puna. +* Fixed diary pick-up item inventory state not preserved in the savegame. ### New Features * Added realtime shader reloading in debug mode by pressing F9 key. +* Added load, save, stopwatch and compass as a functional pick-up items with ability to add or remove them from inventory. * Increased particle limit from 1024 to 4096. ### Lua API changes diff --git a/Documentation/doc/4 enums/Objects.ObjID.html b/Documentation/doc/4 enums/Objects.ObjID.html index 68fecca95..d4a799292 100644 --- a/Documentation/doc/4 enums/Objects.ObjID.html +++ b/Documentation/doc/4 enums/Objects.ObjID.html @@ -854,7 +854,7 @@ FLARE_ITEM FLARE_INV_ITEM COMPASS_ITEM DIARY_ITEM -TIMEX_ITEM +STOPWATCH_ITEM MEMCARD_LOAD_INV_ITEM MEMCARD_SAVE_INV_ITEM PC_LOAD_INV_ITEM @@ -1325,9 +1325,7 @@ FLARE_ITEM FLARE_INV_ITEM COMPASS_ITEM DIARY_ITEM -TIMEX_ITEM -MEMCARD_LOAD_INV_ITEM -MEMCARD_SAVE_INV_ITEM +STOPWATCH_ITEM PC_LOAD_INV_ITEM PC_SAVE_INV_ITEM diff --git a/TombEngine/Game/GuiObjects.cpp b/TombEngine/Game/GuiObjects.cpp index 0967e3a00..14e07726d 100644 --- a/TombEngine/Game/GuiObjects.cpp +++ b/TombEngine/Game/GuiObjects.cpp @@ -58,12 +58,12 @@ namespace TEN::Gui { ID_SMALLMEDI_ITEM, 0, 0.7f, EulerAngles(ANGLE(112.0f), ANGLE(180.0f), 0), OPT_USE, STRING_SMALL_MEDIPACK, NO_JOINT_BITS, INV_ROT_Y }, { ID_BINOCULARS_ITEM, -1, 0.5f, EulerAngles(ANGLE(10.0f), ANGLE(180.0f), 0), OPT_USE, STRING_BINOCULARS, NO_JOINT_BITS, INV_ROT_Y }, { ID_FLARE_INV_ITEM, 52, 0.8f, EulerAngles::Identity, OPT_USE, STRING_FLARES, NO_JOINT_BITS, INV_ROT_Y }, - { ID_TIMEX_ITEM, 2, 0.4f, EulerAngles::Identity, OPT_STATS, STRING_STATISTICS, NO_JOINT_BITS, INV_ROT_Y }, + { ID_STOPWATCH_ITEM, 2, 0.4f, EulerAngles::Identity, OPT_STATS, STRING_STATISTICS, NO_JOINT_BITS, INV_ROT_Y }, { ID_PC_LOAD_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_LOAD, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PC_SAVE_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_SAVE, STRING_SAVE_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_BURNING_TORCH_ITEM, 14, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_TORCH, NO_JOINT_BITS, INV_ROT_Y }, { ID_CROWBAR_ITEM, 4, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_CROWBAR, NO_JOINT_BITS, INV_ROT_Y }, - { ID_DIARY_ITEM, 0, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_DIARY, STRING_DIARY, NO_JOINT_BITS, INV_ROT_Y }, + { ID_DIARY_ITEM, 0, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_USE, STRING_DIARY, NO_JOINT_BITS, INV_ROT_Y }, { ID_COMPASS_ITEM, -14, 0.5f, EulerAngles(ANGLE(90.0f), ANGLE(180.0f), 0), 0, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_CLOCKWORK_BEETLE, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_MECHANICAL_SCARAB, NO_JOINT_BITS, INV_ROT_Y }, { ID_CLOCKWORK_BEETLE_COMBO1, 18, 0.5f, EulerAngles::Identity, OPT_COMBINABLE, STRING_MECHANICAL_SCARAB_1, NO_JOINT_BITS, INV_ROT_Y }, diff --git a/TombEngine/Game/GuiObjects.h b/TombEngine/Game/GuiObjects.h index fea877182..9075852fa 100644 --- a/TombEngine/Game/GuiObjects.h +++ b/TombEngine/Game/GuiObjects.h @@ -50,7 +50,7 @@ namespace TEN::Gui INV_OBJECT_SMALL_MEDIPACK, INV_OBJECT_BINOCULARS, INV_OBJECT_FLARES, - INV_OBJECT_TIMEX, + INV_OBJECT_STOPWATCH, INV_OBJECT_LOAD_FLOPPY, INV_OBJECT_SAVE_FLOPPY, INV_OBJECT_BURNING_TORCH, @@ -271,8 +271,7 @@ namespace TEN::Gui OPT_CHOOSE_AMMO_HK = (1 << 14), OPT_STATS = (1 << 15), OPT_CHOOSE_AMMO_HARPOON = (1 << 16), - OPT_CHOOSE_AMMO_ROCKET = (1 << 17), - OPT_DIARY = (1 << 18) + OPT_CHOOSE_AMMO_ROCKET = (1 << 17) }; enum RotationFlags diff --git a/TombEngine/Game/Lara/lara_initialise.cpp b/TombEngine/Game/Lara/lara_initialise.cpp index 507491f1e..f39b8ab51 100644 --- a/TombEngine/Game/Lara/lara_initialise.cpp +++ b/TombEngine/Game/Lara/lara_initialise.cpp @@ -321,6 +321,18 @@ void InitializeLaraDefaultInventory(ItemInfo& item) if (Objects[ID_BINOCULARS_ITEM].loaded) player.Inventory.HasBinoculars = true; + if (Objects[ID_STOPWATCH_ITEM].loaded) + player.Inventory.HasStopwatch = true; + + if (Objects[ID_PC_LOAD_INV_ITEM].loaded) + player.Inventory.HasLoad = true; + + if (Objects[ID_PC_SAVE_INV_ITEM].loaded) + player.Inventory.HasSave = true; + + if (Objects[ID_COMPASS_ITEM].loaded) + player.Inventory.HasCompass = true; + player.Inventory.BeetleLife = DEFAULT_BEETLE_LIFE; auto weaponType = LaraWeaponType::None; diff --git a/TombEngine/Game/Lara/lara_struct.h b/TombEngine/Game/Lara/lara_struct.h index 1f1758096..830d9085a 100644 --- a/TombEngine/Game/Lara/lara_struct.h +++ b/TombEngine/Game/Lara/lara_struct.h @@ -1146,29 +1146,6 @@ struct TorchData TorchState State = TorchState::Holding; }; -// TODO: Troye's abandoned dairy feature. -constexpr int MAX_DIARY_PAGES = 64; -constexpr int MAX_DIARY_STRINGS_PER_PAGE = 8; - -struct DiaryString -{ - Vector2i Position = Vector2i::Zero; - int StringID = 0; -}; - -struct DiaryPage -{ - DiaryString Strings[MAX_DIARY_STRINGS_PER_PAGE] = {}; -}; - -struct DiaryInfo -{ - bool Present = false; - DiaryPage Pages[MAX_DIARY_PAGES] = {}; - unsigned int NumPages = 0; - unsigned int CurrentPage = 0; -}; - struct LaraCountData { unsigned int Pose = 0; @@ -1302,8 +1279,6 @@ struct PlayerInventoryData bool IsBusy = false; bool OldBusy = false; - DiaryInfo Diary = {}; - byte BeetleLife; int BeetleComponents; // BeetleComponentFlags enum byte SmallWaterskin; // 1 = has waterskin, 2 = has waterskin with 1 liter, etc. max value is 4 (has skin + 3 = 4) @@ -1315,6 +1290,11 @@ struct PlayerInventoryData int TotalFlares; unsigned int TotalSecrets; + bool HasLoad = false; + bool HasSave = false; + bool HasStopwatch = false; + bool HasCompass = false; + bool HasDiary = false; bool HasBinoculars = false; bool HasCrowbar = false; bool HasTorch = false; diff --git a/TombEngine/Game/control/control.cpp b/TombEngine/Game/control/control.cpp index 1e1933e8b..7738be25b 100644 --- a/TombEngine/Game/control/control.cpp +++ b/TombEngine/Game/control/control.cpp @@ -751,13 +751,13 @@ GameStatus HandleMenuCalls(bool isTitle) bool doInventory = (IsClicked(In::Inventory) || g_Gui.GetEnterInventory() != NO_VALUE) && playerAlive; // Handle inventory. - if (doSave && g_GameFlow->IsLoadSaveEnabled() && g_Gui.GetInventoryMode() != InventoryMode::Save) + if (doSave && g_GameFlow->IsLoadSaveEnabled() && Lara.Inventory.HasSave && g_Gui.GetInventoryMode() != InventoryMode::Save) { SaveGame::LoadHeaders(); g_Gui.SetInventoryMode(InventoryMode::Save); g_Gui.CallInventory(LaraItem, false); } - else if (doLoad && g_GameFlow->IsLoadSaveEnabled() && g_Gui.GetInventoryMode() != InventoryMode::Load) + else if (doLoad && g_GameFlow->IsLoadSaveEnabled() && Lara.Inventory.HasLoad && g_Gui.GetInventoryMode() != InventoryMode::Load) { SaveGame::LoadHeaders(); g_Gui.SetInventoryMode(InventoryMode::Load); diff --git a/TombEngine/Game/gui.cpp b/TombEngine/Game/gui.cpp index 0e2f19231..66ac2e759 100644 --- a/TombEngine/Game/gui.cpp +++ b/TombEngine/Game/gui.cpp @@ -65,7 +65,6 @@ namespace TEN::Gui STRING_VIEW, STRING_CHOOSE_WEAPON, "" - // STRING_READ_DIARY }; std::vector GeneralActionStrings = @@ -1692,7 +1691,8 @@ namespace TEN::Gui if (player.Inventory.TotalFlares) InsertObjectIntoList(INV_OBJECT_FLARES); - InsertObjectIntoList(INV_OBJECT_TIMEX);//every level has the timex? what's a good way to check?! + if (player.Inventory.HasStopwatch) + InsertObjectIntoList(INV_OBJECT_STOPWATCH); if (player.Inventory.TotalSmallMedipacks) InsertObjectIntoList(INV_OBJECT_SMALL_MEDIPACK); @@ -1769,13 +1769,15 @@ namespace TEN::Gui InsertObjectIntoList(INV_OBJECT_EXAMINE1_COMBO1 + i); } - if (player.Inventory.Diary.Present) + if (player.Inventory.HasDiary) InsertObjectIntoList(INV_OBJECT_DIARY); if (g_GameFlow->IsLoadSaveEnabled()) { - InsertObjectIntoList(INV_OBJECT_LOAD_FLOPPY); - InsertObjectIntoList(INV_OBJECT_SAVE_FLOPPY); + if (player.Inventory.HasLoad) + InsertObjectIntoList(INV_OBJECT_LOAD_FLOPPY); + if (player.Inventory.HasSave) + InsertObjectIntoList(INV_OBJECT_SAVE_FLOPPY); } Rings[(int)RingTypes::Inventory].ObjectListMovement = 0; @@ -2438,13 +2440,6 @@ namespace TEN::Gui CurrentOptions[n].Text = g_GameFlow->GetString(OptionStrings[3].c_str()); n++; } - - if (options & OPT_DIARY) - { - CurrentOptions[n].Type = MenuType::Diary; - CurrentOptions[n].Text = g_GameFlow->GetString(OptionStrings[11].c_str()); - n++; - } } else { @@ -2575,11 +2570,6 @@ namespace TEN::Gui MenuActive = false; ItemUsed = true; break; - - case MenuType::Diary: - SetInventoryMode(InventoryMode::Diary); - player.Inventory.Diary.CurrentPage = 1; - break; } } @@ -3318,10 +3308,6 @@ namespace TEN::Gui DoExamineMode(); break; - case InventoryMode::Diary: - DoDiary(item); - break; - case InventoryMode::Load: switch (DoLoad()) { @@ -3432,6 +3418,9 @@ namespace TEN::Gui void GuiController::DrawCompass(ItemInfo* item) { + if (!Lara.Inventory.HasCompass) + return; + constexpr auto POS_2D = Vector2(130.0f, 450.0f); constexpr auto LERP_ALPHA = 0.1f; @@ -3446,33 +3435,6 @@ namespace TEN::Gui g_Renderer.DrawObjectIn2DSpace(ID_COMPASS_ITEM, POS_2D, EulerAngles::Identity, invObject.Scale1 * 1.5f); } - void GuiController::DoDiary(ItemInfo* item) - { - auto& player = GetLaraInfo(*item); - - SetInventoryMode(InventoryMode::Diary); - - if (GuiIsPulsed(In::Right) && - player.Inventory.Diary.CurrentPage < player.Inventory.Diary.NumPages) - { - player.Inventory.Diary.CurrentPage++; - SoundEffect(SFX_TR4_MENU_CHOOSE, nullptr, SoundEnvironment::Always); - } - - if (GuiIsPulsed(In::Left) && - player.Inventory.Diary.CurrentPage > 1) - { - player.Inventory.Diary.CurrentPage--; - SoundEffect(SFX_TR4_MENU_CHOOSE, nullptr, SoundEnvironment::Always); - } - - if (GuiIsDeselected()) - { - SoundEffect(SFX_TR4_MENU_SELECT, nullptr, SoundEnvironment::Always); - SetInventoryMode(InventoryMode::None); - } - } - int GuiController::GetLoadSaveSelection() { return SelectedSaveSlot; diff --git a/TombEngine/Game/gui.h b/TombEngine/Game/gui.h index 3dda2f61c..70b5754d0 100644 --- a/TombEngine/Game/gui.h +++ b/TombEngine/Game/gui.h @@ -20,7 +20,6 @@ namespace TEN::Gui Pause, Statistics, Examine, - Diary, Load, Save }; @@ -59,8 +58,7 @@ namespace TEN::Gui Load, Save, Examine, - Statistics, - Diary + Statistics }; enum class RingTypes @@ -230,7 +228,6 @@ namespace TEN::Gui void UpdateWeaponStatus(ItemInfo* item); void DoStatisticsMode(); void DoExamineMode(); - void DoDiary(ItemInfo* item); LoadResult DoLoad(); bool DoSave(); void DoInventory(ItemInfo* item); diff --git a/TombEngine/Game/pickup/pickup_misc_items.cpp b/TombEngine/Game/pickup/pickup_misc_items.cpp index e145ebcbb..9a08755b3 100644 --- a/TombEngine/Game/pickup/pickup_misc_items.cpp +++ b/TombEngine/Game/pickup/pickup_misc_items.cpp @@ -78,7 +78,23 @@ bool TryModifyMiscCount(LaraInfo & lara, GAME_OBJECT_ID objectID, std::optional< break; case ID_DIARY_ITEM: - lara.Inventory.Diary.Present = add; + lara.Inventory.HasDiary = add; + break; + + case ID_PC_LOAD_INV_ITEM: + lara.Inventory.HasLoad = add; + break; + + case ID_PC_SAVE_INV_ITEM: + lara.Inventory.HasSave = add; + break; + + case ID_STOPWATCH_ITEM: + lara.Inventory.HasStopwatch = add; + break; + + case ID_COMPASS_ITEM: + lara.Inventory.HasCompass = add; break; case ID_WATERSKIN1_EMPTY: @@ -173,7 +189,19 @@ std::optional HasMiscItem(LaraInfo& lara, GAME_OBJECT_ID objectID) return lara.Inventory.HasCrowbar; case ID_DIARY_ITEM: - return lara.Inventory.Diary.Present; + return lara.Inventory.HasDiary; + + case ID_PC_LOAD_INV_ITEM: + return lara.Inventory.HasLoad; + + case ID_PC_SAVE_INV_ITEM: + return lara.Inventory.HasSave; + + case ID_STOPWATCH_ITEM: + return lara.Inventory.HasStopwatch; + + case ID_COMPASS_ITEM: + return lara.Inventory.HasCompass; case ID_WATERSKIN1_EMPTY: return lara.Inventory.SmallWaterskin == 1; diff --git a/TombEngine/Game/savegame.cpp b/TombEngine/Game/savegame.cpp index 10cf61015..d4e855f8a 100644 --- a/TombEngine/Game/savegame.cpp +++ b/TombEngine/Game/savegame.cpp @@ -396,6 +396,11 @@ const std::vector SaveGame::Build() inventory.add_examines_combo(examinesComboOffset); inventory.add_beetle_components(Lara.Inventory.BeetleComponents); inventory.add_has_binoculars(Lara.Inventory.HasBinoculars); + inventory.add_has_diary(Lara.Inventory.HasDiary); + inventory.add_has_load(Lara.Inventory.HasLoad); + inventory.add_has_save(Lara.Inventory.HasSave); + inventory.add_has_compass(Lara.Inventory.HasCompass); + inventory.add_has_stopwatch(Lara.Inventory.HasStopwatch); inventory.add_has_crowbar(Lara.Inventory.HasCrowbar); inventory.add_has_lasersight(Lara.Inventory.HasLasersight); inventory.add_has_silencer(Lara.Inventory.HasSilencer); @@ -1996,6 +2001,11 @@ static void ParsePlayer(const Save::SaveGame* s) Lara.Inventory.BeetleLife = s->lara()->inventory()->beetle_life(); Lara.Inventory.BigWaterskin = s->lara()->inventory()->big_waterskin(); Lara.Inventory.HasBinoculars = s->lara()->inventory()->has_binoculars(); + Lara.Inventory.HasDiary = s->lara()->inventory()->has_diary(); + Lara.Inventory.HasLoad = s->lara()->inventory()->has_load(); + Lara.Inventory.HasSave = s->lara()->inventory()->has_save(); + Lara.Inventory.HasStopwatch = s->lara()->inventory()->has_stopwatch(); + Lara.Inventory.HasCompass = s->lara()->inventory()->has_compass(); Lara.Inventory.HasCrowbar = s->lara()->inventory()->has_crowbar(); Lara.Inventory.HasLasersight = s->lara()->inventory()->has_lasersight(); Lara.Inventory.HasSilencer = s->lara()->inventory()->has_silencer(); diff --git a/TombEngine/Objects/TR5/tr5_objects.cpp b/TombEngine/Objects/TR5/tr5_objects.cpp index 42c6add7c..95b41613d 100644 --- a/TombEngine/Objects/TR5/tr5_objects.cpp +++ b/TombEngine/Objects/TR5/tr5_objects.cpp @@ -1042,6 +1042,10 @@ static void StartPickup(ObjectInfo *obj) InitPickup(obj, ID_WATERSKIN2_EMPTY); InitPickup(obj, ID_GOLDROSE_ITEM); InitPickup(obj, ID_DIARY_ITEM); + InitPickup(obj, ID_PC_LOAD_INV_ITEM); + InitPickup(obj, ID_PC_SAVE_INV_ITEM); + InitPickup(obj, ID_STOPWATCH_ITEM); + InitPickup(obj, ID_COMPASS_ITEM); } void InitializeTR5Objects() diff --git a/TombEngine/Objects/game_object_ids.h b/TombEngine/Objects/game_object_ids.h index cd5b96e2b..7d2cd209a 100644 --- a/TombEngine/Objects/game_object_ids.h +++ b/TombEngine/Objects/game_object_ids.h @@ -730,7 +730,7 @@ enum GAME_OBJECT_ID : short ID_FLARE_INV_ITEM, ID_COMPASS_ITEM, ID_DIARY_ITEM, - ID_TIMEX_ITEM, + ID_STOPWATCH_ITEM, ID_MEMCARD_LOAD_INV_ITEM, ID_MEMCARD_SAVE_INV_ITEM, ID_PC_LOAD_INV_ITEM, diff --git a/TombEngine/Renderer/Renderer.h b/TombEngine/Renderer/Renderer.h index 6f3e5abfd..b966da74e 100644 --- a/TombEngine/Renderer/Renderer.h +++ b/TombEngine/Renderer/Renderer.h @@ -444,7 +444,6 @@ namespace TEN::Renderer void DrawLocusts(RenderView& view, RendererPass rendererPass); void DrawStatistics(); void DrawExamines(); - void DrawDiary(); void DrawDebris(RenderView& view, RendererPass rendererPass); void DrawFullScreenImage(ID3D11ShaderResourceView* texture, float fade, ID3D11RenderTargetView* target, ID3D11DepthStencilView* depthTarget); diff --git a/TombEngine/Renderer/RendererDrawMenu.cpp b/TombEngine/Renderer/RendererDrawMenu.cpp index a3871b8e3..5686cc183 100644 --- a/TombEngine/Renderer/RendererDrawMenu.cpp +++ b/TombEngine/Renderer/RendererDrawMenu.cpp @@ -955,29 +955,6 @@ namespace TEN::Renderer object.Scale1 = savedScale; } - void Renderer::DrawDiary() - { - constexpr auto SCREEN_POS = Vector2(400.0f, 300.0f); - - const auto& object = InventoryObjectTable[INV_OBJECT_OPEN_DIARY]; - unsigned int currentPage = Lara.Inventory.Diary.CurrentPage; - - DrawObjectIn2DSpace(g_Gui.ConvertInventoryItemToObject(INV_OBJECT_OPEN_DIARY), SCREEN_POS, object.Orientation, object.Scale1); - - for (int i = 0; i < MAX_DIARY_STRINGS_PER_PAGE; i++) - { - if (!Lara.Inventory.Diary.Pages[Lara.Inventory.Diary.CurrentPage].Strings[i].Position.x && !Lara.Inventory.Diary.Pages[Lara.Inventory.Diary.CurrentPage]. - Strings[i].Position.y && !Lara.Inventory.Diary.Pages[Lara.Inventory.Diary.CurrentPage].Strings[i].StringID) - { - break; - } - - //AddString(Lara.Diary.Pages[currentPage].Strings[i].x, Lara.Diary.Pages[currentPage].Strings[i].y, g_GameFlow->GetString(Lara.Diary.Pages[currentPage].Strings[i].stringID), PRINTSTRING_COLOR_WHITE, 0); - } - - DrawAllStrings(); - } - void Renderer::RenderInventoryScene(RenderTarget2D* renderTarget, TextureBase* background, float backgroundFade) { // Set basic render states @@ -1070,10 +1047,6 @@ namespace TEN::Renderer case InventoryMode::Pause: RenderPauseMenu(g_Gui.GetMenuToDisplay()); break; - - case InventoryMode::Diary: - DrawDiary(); - break; } } diff --git a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h index 564b99b21..de02ce2cb 100644 --- a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h +++ b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h @@ -729,7 +729,7 @@ The following constants are inside ObjID. FLARE_INV_ITEM COMPASS_ITEM DIARY_ITEM - TIMEX_ITEM + STOPWATCH_ITEM MEMCARD_LOAD_INV_ITEM MEMCARD_SAVE_INV_ITEM PC_LOAD_INV_ITEM @@ -1188,9 +1188,7 @@ The following ObjID members refer to pickups. FLARE_INV_ITEM COMPASS_ITEM DIARY_ITEM - TIMEX_ITEM - MEMCARD_LOAD_INV_ITEM - MEMCARD_SAVE_INV_ITEM + STOPWATCH_ITEM PC_LOAD_INV_ITEM PC_SAVE_INV_ITEM Table of constants. @@ -1910,7 +1908,7 @@ static const std::unordered_map kObjIDs { { "FLARE_INV_ITEM", ID_FLARE_INV_ITEM }, { "COMPASS_ITEM", ID_COMPASS_ITEM }, { "DIARY_ITEM", ID_DIARY_ITEM }, - { "TIMEX_ITEM", ID_TIMEX_ITEM }, + { "STOPWATCH_ITEM", ID_STOPWATCH_ITEM }, { "MEMCARD_LOAD_INV_ITEM", ID_MEMCARD_LOAD_INV_ITEM }, { "MEMCARD_SAVE_INV_ITEM", ID_MEMCARD_SAVE_INV_ITEM }, { "PC_LOAD_INV_ITEM", ID_PC_LOAD_INV_ITEM }, diff --git a/TombEngine/Specific/savegame/flatbuffers/ten_savegame_generated.h b/TombEngine/Specific/savegame/flatbuffers/ten_savegame_generated.h index e3752a4b0..1b5ad3c3f 100644 --- a/TombEngine/Specific/savegame/flatbuffers/ten_savegame_generated.h +++ b/TombEngine/Specific/savegame/flatbuffers/ten_savegame_generated.h @@ -2290,6 +2290,11 @@ struct LaraInventoryDataT : public flatbuffers::NativeTable { int32_t small_waterskin = 0; int32_t big_waterskin = 0; bool has_binoculars = false; + bool has_compass = false; + bool has_stopwatch = false; + bool has_diary = false; + bool has_load = false; + bool has_save = false; bool has_crowbar = false; bool has_torch = false; bool has_lasersight = false; @@ -2320,22 +2325,27 @@ struct LaraInventoryData FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT_SMALL_WATERSKIN = 12, VT_BIG_WATERSKIN = 14, VT_HAS_BINOCULARS = 16, - VT_HAS_CROWBAR = 18, - VT_HAS_TORCH = 20, - VT_HAS_LASERSIGHT = 22, - VT_HAS_SILENCER = 24, - VT_TOTAL_SMALL_MEDIPACKS = 26, - VT_TOTAL_LARGE_MEDIPACKS = 28, - VT_TOTAL_FLARES = 30, - VT_TOTAL_SECRETS = 32, - VT_PUZZLES = 34, - VT_KEYS = 36, - VT_PICKUPS = 38, - VT_EXAMINES = 40, - VT_PUZZLES_COMBO = 42, - VT_KEYS_COMBO = 44, - VT_PICKUPS_COMBO = 46, - VT_EXAMINES_COMBO = 48 + VT_HAS_COMPASS = 18, + VT_HAS_STOPWATCH = 20, + VT_HAS_DIARY = 22, + VT_HAS_LOAD = 24, + VT_HAS_SAVE = 26, + VT_HAS_CROWBAR = 28, + VT_HAS_TORCH = 30, + VT_HAS_LASERSIGHT = 32, + VT_HAS_SILENCER = 34, + VT_TOTAL_SMALL_MEDIPACKS = 36, + VT_TOTAL_LARGE_MEDIPACKS = 38, + VT_TOTAL_FLARES = 40, + VT_TOTAL_SECRETS = 42, + VT_PUZZLES = 44, + VT_KEYS = 46, + VT_PICKUPS = 48, + VT_EXAMINES = 50, + VT_PUZZLES_COMBO = 52, + VT_KEYS_COMBO = 54, + VT_PICKUPS_COMBO = 56, + VT_EXAMINES_COMBO = 58 }; bool is_busy() const { return GetField(VT_IS_BUSY, 0) != 0; @@ -2358,6 +2368,21 @@ struct LaraInventoryData FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { bool has_binoculars() const { return GetField(VT_HAS_BINOCULARS, 0) != 0; } + bool has_compass() const { + return GetField(VT_HAS_COMPASS, 0) != 0; + } + bool has_stopwatch() const { + return GetField(VT_HAS_STOPWATCH, 0) != 0; + } + bool has_diary() const { + return GetField(VT_HAS_DIARY, 0) != 0; + } + bool has_load() const { + return GetField(VT_HAS_LOAD, 0) != 0; + } + bool has_save() const { + return GetField(VT_HAS_SAVE, 0) != 0; + } bool has_crowbar() const { return GetField(VT_HAS_CROWBAR, 0) != 0; } @@ -2415,6 +2440,11 @@ struct LaraInventoryData FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VerifyField(verifier, VT_SMALL_WATERSKIN) && VerifyField(verifier, VT_BIG_WATERSKIN) && VerifyField(verifier, VT_HAS_BINOCULARS) && + VerifyField(verifier, VT_HAS_COMPASS) && + VerifyField(verifier, VT_HAS_STOPWATCH) && + VerifyField(verifier, VT_HAS_DIARY) && + VerifyField(verifier, VT_HAS_LOAD) && + VerifyField(verifier, VT_HAS_SAVE) && VerifyField(verifier, VT_HAS_CROWBAR) && VerifyField(verifier, VT_HAS_TORCH) && VerifyField(verifier, VT_HAS_LASERSIGHT) && @@ -2471,6 +2501,21 @@ struct LaraInventoryDataBuilder { void add_has_binoculars(bool has_binoculars) { fbb_.AddElement(LaraInventoryData::VT_HAS_BINOCULARS, static_cast(has_binoculars), 0); } + void add_has_compass(bool has_compass) { + fbb_.AddElement(LaraInventoryData::VT_HAS_COMPASS, static_cast(has_compass), 0); + } + void add_has_stopwatch(bool has_stopwatch) { + fbb_.AddElement(LaraInventoryData::VT_HAS_STOPWATCH, static_cast(has_stopwatch), 0); + } + void add_has_diary(bool has_diary) { + fbb_.AddElement(LaraInventoryData::VT_HAS_DIARY, static_cast(has_diary), 0); + } + void add_has_load(bool has_load) { + fbb_.AddElement(LaraInventoryData::VT_HAS_LOAD, static_cast(has_load), 0); + } + void add_has_save(bool has_save) { + fbb_.AddElement(LaraInventoryData::VT_HAS_SAVE, static_cast(has_save), 0); + } void add_has_crowbar(bool has_crowbar) { fbb_.AddElement(LaraInventoryData::VT_HAS_CROWBAR, static_cast(has_crowbar), 0); } @@ -2539,6 +2584,11 @@ inline flatbuffers::Offset CreateLaraInventoryData( int32_t small_waterskin = 0, int32_t big_waterskin = 0, bool has_binoculars = false, + bool has_compass = false, + bool has_stopwatch = false, + bool has_diary = false, + bool has_load = false, + bool has_save = false, bool has_crowbar = false, bool has_torch = false, bool has_lasersight = false, @@ -2576,6 +2626,11 @@ inline flatbuffers::Offset CreateLaraInventoryData( builder_.add_has_lasersight(has_lasersight); builder_.add_has_torch(has_torch); builder_.add_has_crowbar(has_crowbar); + builder_.add_has_save(has_save); + builder_.add_has_load(has_load); + builder_.add_has_diary(has_diary); + builder_.add_has_stopwatch(has_stopwatch); + builder_.add_has_compass(has_compass); builder_.add_has_binoculars(has_binoculars); builder_.add_old_busy(old_busy); builder_.add_is_busy(is_busy); @@ -2596,6 +2651,11 @@ inline flatbuffers::Offset CreateLaraInventoryDataDirect( int32_t small_waterskin = 0, int32_t big_waterskin = 0, bool has_binoculars = false, + bool has_compass = false, + bool has_stopwatch = false, + bool has_diary = false, + bool has_load = false, + bool has_save = false, bool has_crowbar = false, bool has_torch = false, bool has_lasersight = false, @@ -2629,6 +2689,11 @@ inline flatbuffers::Offset CreateLaraInventoryDataDirect( small_waterskin, big_waterskin, has_binoculars, + has_compass, + has_stopwatch, + has_diary, + has_load, + has_save, has_crowbar, has_torch, has_lasersight, @@ -8839,6 +8904,11 @@ inline void LaraInventoryData::UnPackTo(LaraInventoryDataT *_o, const flatbuffer { auto _e = small_waterskin(); _o->small_waterskin = _e; } { auto _e = big_waterskin(); _o->big_waterskin = _e; } { auto _e = has_binoculars(); _o->has_binoculars = _e; } + { auto _e = has_compass(); _o->has_compass = _e; } + { auto _e = has_stopwatch(); _o->has_stopwatch = _e; } + { auto _e = has_diary(); _o->has_diary = _e; } + { auto _e = has_load(); _o->has_load = _e; } + { auto _e = has_save(); _o->has_save = _e; } { auto _e = has_crowbar(); _o->has_crowbar = _e; } { auto _e = has_torch(); _o->has_torch = _e; } { auto _e = has_lasersight(); _o->has_lasersight = _e; } @@ -8872,6 +8942,11 @@ inline flatbuffers::Offset CreateLaraInventoryData(flatbuffer auto _small_waterskin = _o->small_waterskin; auto _big_waterskin = _o->big_waterskin; auto _has_binoculars = _o->has_binoculars; + auto _has_compass = _o->has_compass; + auto _has_stopwatch = _o->has_stopwatch; + auto _has_diary = _o->has_diary; + auto _has_load = _o->has_load; + auto _has_save = _o->has_save; auto _has_crowbar = _o->has_crowbar; auto _has_torch = _o->has_torch; auto _has_lasersight = _o->has_lasersight; @@ -8897,6 +8972,11 @@ inline flatbuffers::Offset CreateLaraInventoryData(flatbuffer _small_waterskin, _big_waterskin, _has_binoculars, + _has_compass, + _has_stopwatch, + _has_diary, + _has_load, + _has_save, _has_crowbar, _has_torch, _has_lasersight, diff --git a/TombEngine/Specific/savegame/schema/ten_savegame.fbs b/TombEngine/Specific/savegame/schema/ten_savegame.fbs index 78d518fa0..e43cf4f71 100644 --- a/TombEngine/Specific/savegame/schema/ten_savegame.fbs +++ b/TombEngine/Specific/savegame/schema/ten_savegame.fbs @@ -143,6 +143,11 @@ table LaraInventoryData { small_waterskin: int32; big_waterskin: int32; has_binoculars: bool; + has_compass: bool; + has_stopwatch: bool; + has_diary: bool; + has_load: bool; + has_save: bool; has_crowbar: bool; has_torch: bool; has_lasersight: bool;