From 935b26bd669088d2bd3dd809ac25752f5e7cf18c Mon Sep 17 00:00:00 2001
From: Lwmte <3331699+Lwmte@users.noreply.github.com>
Date: Tue, 11 Mar 2025 23:31:57 +0100
Subject: [PATCH] Use script to generate object list, also migrate flatbuffer
to powershell script
---
.../doc/2 classes/View.DisplaySprite.html | 8 +-
Documentation/doc/4 enums/Objects.ObjID.html | 130 +++++++++++----
Documentation/generate_objectlist.ps1 | 148 ++++++++++++++++++
TombEngine/Game/Hud/Speedometer.cpp | 4 +-
TombEngine/Game/Hud/TargetHighlighter.cpp | 2 +-
.../Objects/Generic/generic_objects.cpp | 4 +-
TombEngine/Objects/game_object_ids.h | 39 ++---
TombEngine/Renderer/RendererCompatibility.cpp | 2 +-
TombEngine/Renderer/RendererDraw.cpp | 4 +-
TombEngine/Renderer/RendererDraw2D.cpp | 8 +-
.../Internal/TEN/Objects/ObjectIDs.h | 130 +++++++--------
.../savegame/schema/generate_code.ps1 | 61 ++++++++
TombEngine/TombEngine.vcxproj | 64 ++------
13 files changed, 417 insertions(+), 187 deletions(-)
create mode 100644 Documentation/generate_objectlist.ps1
create mode 100644 TombEngine/Specific/savegame/schema/generate_code.ps1
diff --git a/Documentation/doc/2 classes/View.DisplaySprite.html b/Documentation/doc/2 classes/View.DisplaySprite.html
index 6f559f0ae..096ff8c6a 100644
--- a/Documentation/doc/2 classes/View.DisplaySprite.html
+++ b/Documentation/doc/2 classes/View.DisplaySprite.html
@@ -192,7 +192,7 @@
Parameters:
- ID
- ObjID
+ SpriteConstants
of the sprite sequence object.
- int
@@ -242,7 +242,7 @@
Returns:
- ObjID
+ SpriteConstants
Sprite sequence object ID.
@@ -360,14 +360,14 @@
DisplaySprite:SetObjectID(New)
-
- Set the sprite sequence object ID used by the display sprite. (Objects.ObjID)
+ Set the sprite sequence object ID used by the display sprite. (Objects.ObjID.SpriteConstants)
Parameters:
diff --git a/Documentation/doc/4 enums/Objects.ObjID.html b/Documentation/doc/4 enums/Objects.ObjID.html
index d4a799292..027ec4eec 100644
--- a/Documentation/doc/4 enums/Objects.ObjID.html
+++ b/Documentation/doc/4 enums/Objects.ObjID.html
@@ -123,6 +123,10 @@
PickupConstants |
Objects.ObjID pickup constants. |
+
+ SpriteConstants |
+ Objects.ObjID sprite constants. |
+
@@ -137,7 +141,8 @@
Members
-
- Objects.ObjID constants.
+
+
Objects.ObjID constants.
The following constants are inside ObjID.
@@ -290,6 +295,7 @@ GLADIATOR
CYBORG
SNIPER
CHEF
+KOLD
WINGED_MUMMY
CENTAUR_MUTANT
DOPPELGANGER
@@ -314,14 +320,14 @@ SWORD_GUARDIAN
SWORD_GUARDIAN_STATUE
SHIVA
SHIVA_STATUE
-TRIBEBOSS
+WILLARD
CIVVY
MUTANT2
LIZARD
TONY_BOSS
TONY_BOSS_FLAME
PUNA_BOSS
-SOPHIA_LEE_BOSS
+SOPHIA_LEIGH_BOSS
LASER_BOLT
SKELETON
MUMMY
@@ -353,7 +359,7 @@ ATTACK_SUB
IMP
IMP_ROCK
GUNSHIP
-AUTOGUN
+AUTO_GUN_VCI
ROMAN_GOD1
ROMAN_GOD2
LAGOON_WITCH
@@ -362,6 +368,7 @@ BOSS_EXPLOSION_SHOCKWAVE
BOSS_EXPLOSION_RING
CLAW_MUTANT
WASP_MUTANT
+TWIN_AUTO_GUN
SKATEBOARD
SKATEBOARD_KID
WINSTON
@@ -729,7 +736,6 @@ BURNING_TORCH_ITEM
CLOCKWORK_BEETLE
CLOCKWORK_BEETLE_COMBO1
CLOCKWORK_BEETLE_COMBO2
-
SWITCH_TYPE1
SWITCH_TYPE2
SWITCH_TYPE3
@@ -751,10 +757,10 @@ SHOOT_SWITCH2
SHOOT_SWITCH3
SHOOT_SWITCH4
AIRLOCK_SWITCH
-ID_UNDERWATER_WALL_SWITCH_1
-ID_UNDERWATER_WALL_SWITCH_2
-ID_UNDERWATER_CEILING_SWITCH_1
-ID_UNDERWATER_CEILING_SWITCH_2
+UNDERWATER_WALL_SWITCH1
+UNDERWATER_WALL_SWITCH2
+UNDERWATER_CEILING_SWITCH1
+UNDERWATER_CEILING_SWITCH2
TURN_SWITCH
COG_SWITCH
LEVER_SWITCH
@@ -901,7 +907,7 @@ FLOOR_LASERS
KILL_ALL_TRIGGERS
TRIGGER_TRIGGERER
HIGH_OBJECT1
-HIGH_OBJECT2
+EMBER_EMITTER
SMASH_OBJECT1
SMASH_OBJECT2
SMASH_OBJECT3
@@ -1089,8 +1095,6 @@ BRIDGE_TILT3
BRIDGE_TILT4
BRIDGE_CUSTOM
HORIZON
-BINOCULAR_GRAPHICS
-TARGET_GRAPHICS
SKY_GRAPHICS
DEFAULT_SPRITES
MISC_SPRITES
@@ -1105,28 +1109,20 @@ RUBBER_BOAT_WAVE_SPRITES
SKIDOO_SNOW_TRAIL_SPRITES
KAYAK_PADDLE_TRAIL_SPRITE
KAYAK_WAKE_SPRTIES
-BINOCULAR_GRAPHIC
-LASER_SIGHT_GRAPHIC
-CAUSTICS_TEXTURES
-BAR_BORDER_GRAPHIC
+BINOCULAR_GRAPHICS
+LASERSIGHT_GRAPHICS
+CAUSTIC_TEXTURES
+BAR_BORDER_GRAPHICS
HEALTH_BAR_TEXTURE
AIR_BAR_TEXTURE
DASH_BAR_TEXTURE
SFX_BAR_TEXTURE
-SPEEDOMETER
-CUSTOM_BAR_GRAPHIC
-CUSTOM_AMMO_GRAPHIC
-
-PANEL_BORDER
-PANEL_MIDDLE
-PANEL_CORNER
-PANEL_DIAGONAL
-PANEL_STRIP
-PANEL_HALF_BORDER1
-PANEL_HALF_BORDER2
-PANEL_MIDDLE_CORNER
+CROSSHAIR_GRAPHICS
+SPEEDOMETER_GRAPHICS
+CUSTOM_BAR_GRAPHICS
+CUSTOM_AMMO_GRAPHICS
-Table of constants.
+
@@ -1141,7 +1137,8 @@ PANEL_MIDDLE_CORNER
PickupConstants
-
- Objects.ObjID pickup constants.
+
+
Objects.ObjID pickup constants.
The following ObjID members refer to pickups.
@@ -1289,6 +1286,30 @@ PICKUP_ITEM15_COMBO1
PICKUP_ITEM15_COMBO2
PICKUP_ITEM16_COMBO1
PICKUP_ITEM16_COMBO2
+EXAMINE1
+EXAMINE2
+EXAMINE3
+EXAMINE4
+EXAMINE5
+EXAMINE6
+EXAMINE7
+EXAMINE8
+EXAMINE1_COMBO1
+EXAMINE1_COMBO2
+EXAMINE2_COMBO1
+EXAMINE2_COMBO2
+EXAMINE3_COMBO1
+EXAMINE3_COMBO2
+EXAMINE4_COMBO1
+EXAMINE4_COMBO2
+EXAMINE5_COMBO1
+EXAMINE5_COMBO2
+EXAMINE6_COMBO1
+EXAMINE6_COMBO2
+EXAMINE7_COMBO1
+EXAMINE7_COMBO2
+EXAMINE8_COMBO1
+EXAMINE8_COMBO2
HAMMER_ITEM
CROWBAR_ITEM
BURNING_TORCH_ITEM
@@ -1326,10 +1347,57 @@ FLARE_INV_ITEM
COMPASS_ITEM
DIARY_ITEM
STOPWATCH_ITEM
+MEMCARD_LOAD_INV_ITEM
+MEMCARD_SAVE_INV_ITEM
PC_LOAD_INV_ITEM
PC_SAVE_INV_ITEM
-Table of constants.
+
+
+
+
+
+
+
+
+
+
+ -
+
+ SpriteConstants
+
+ -
+
+
Objects.ObjID sprite constants.
+
+The following ObjID members refer to sprites.
+
+SKY_GRAPHICS
+DEFAULT_SPRITES
+MISC_SPRITES
+CUSTOM_SPRITES
+FIRE_SPRITES
+SMOKE_SPRITES
+SPARK_SPRITE
+DRIP_SPRITE
+EXPLOSION_SPRITES
+MOTORBOAT_FOAM_SPRITES
+RUBBER_BOAT_WAVE_SPRITES
+SKIDOO_SNOW_TRAIL_SPRITES
+KAYAK_PADDLE_TRAIL_SPRITE
+LASERSIGHT_GRAPHICS
+CAUSTIC_TEXTURES
+BAR_BORDER_GRAPHICS
+HEALTH_BAR_TEXTURE
+AIR_BAR_TEXTURE
+DASH_BAR_TEXTURE
+SFX_BAR_TEXTURE
+CROSSHAIR_GRAPHICS
+SPEEDOMETER_GRAPHICS
+CUSTOM_BAR_GRAPHICS
+CUSTOM_AMMO_GRAPHICS
+
+
diff --git a/Documentation/generate_objectlist.ps1 b/Documentation/generate_objectlist.ps1
new file mode 100644
index 000000000..c1c45b354
--- /dev/null
+++ b/Documentation/generate_objectlist.ps1
@@ -0,0 +1,148 @@
+# PowerShell script to generate ObjectIDs.h from game_object_ids.h
+
+$inputFile = "../TombEngine/Objects/game_object_ids.h" # Adjust path if necessary.
+$tempOutputFile = "../TombEngine/Scripting/Internal/TEN/Objects/temp.h"
+$outputFile = "../TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h"
+
+# Read the input file
+if (-Not (Test-Path $inputFile))
+{
+ Write-Host "Error: File '$inputFile' not found."
+ exit 1
+}
+
+# Get the last modified times for both files.
+$inputFileLastModified = (Get-Item $inputFile).LastWriteTime
+if (Test-Path $outputFile) {
+ $outputFileLastModified = (Get-Item $outputFile).LastWriteTime
+} else {
+ $outputFileLastModified = [datetime]::MinValue # If output file doesn't exist, treat it as very old.
+}
+
+# Exit early if the output file is newer than the input file.
+if ($outputFileLastModified -ge $inputFileLastModified) {
+ Write-Host "$outputFile is up to date. No changes made."
+ exit 0
+}
+
+$content = Get-Content $inputFile
+
+# Extract enum values and categorize them.
+$enumValues = @()
+$pickupConstants = @()
+$spriteConstants = @()
+
+$inPickupSection = $false
+$inSpriteSection = $false
+
+foreach ($line in $content)
+{
+ if ($line -match "^\s*ID_([A-Za-z0-9_]+)")
+ {
+ $enumName = $matches[1]
+ $enumValues += $enumName
+
+ if ($enumName -match "_ITEM|EXAMINE")
+ {
+ $pickupConstants += $enumName
+ }
+ elseif ($enumName -match "_SPRITE|_GRAPHIC|TEXTURE")
+ {
+ # These two object IDs are deprecated 3D objects, not sprites.
+ if ($enumName -in @("BINOCULAR_GRAPHICS", "TARGET_GRAPHICS"))
+ {
+ continue
+ }
+
+ $spriteConstants += $enumName
+ }
+
+ }
+}
+
+if ($enumValues.Count -gt 0) { $enumValues = $enumValues[1..($enumValues.Count - 2)] }
+
+# Generate ObjectIDs.h content.
+$header = @"
+#pragma once
+
+// Last generated on $(Get-Date -Format "dd/MM/yyyy")
+
+#include
+#include
+#include "Objects/game_object_ids.h"
+
+/***
+Constants for object IDs.
+@enum Objects.ObjID
+@pragma nostrip
+*/
+
+/*** Objects.ObjID constants.
+
+The following constants are inside ObjID.
+
+"@
+
+$body = $enumValues | ForEach-Object { "`t$_" }
+$footer = @"
+@table Members
+*/
+"@
+
+# Pickup Constants Section.
+$pickupHeader = @"
+
+/*** Objects.ObjID pickup constants.
+
+The following ObjID members refer to pickups.
+
+"@
+
+$pickupBody = $pickupConstants | ForEach-Object { "`t$_" }
+$pickupFooter = @"
+@table PickupConstants
+*/
+"@
+
+# Sprite Constants Section.
+$spriteHeader = @"
+
+/*** Objects.ObjID sprite constants.
+
+The following ObjID members refer to sprites.
+
+"@
+
+$spriteBody = $spriteConstants | ForEach-Object { "`t$_" }
+$spriteFooter = @"
+@table SpriteConstants
+*/
+"@
+
+# Map definition.
+$mapHeader = "static const std::unordered_map kObjIDs {"
+$mapBody = ($enumValues | ForEach-Object { "`t" + '{ "' + "$_" + '", ID_' + "$_" + ' }' }) -join ",`r`n"
+$mapFooter = "};"
+
+# Write to output file
+$header | Set-Content $tempOutputFile
+$body | Add-Content $tempOutputFile
+$footer | Add-Content $tempOutputFile
+$pickupHeader | Add-Content $tempOutputFile
+$pickupBody | Add-Content $tempOutputFile
+$pickupFooter | Add-Content $tempOutputFile
+$spriteHeader | Add-Content $tempOutputFile
+$spriteBody | Add-Content $tempOutputFile
+$spriteFooter | Add-Content $tempOutputFile
+$mapHeader | Add-Content $tempOutputFile
+$mapBody | ForEach-Object { Add-Content $tempOutputFile $_ }
+$mapFooter | Add-Content $tempOutputFile
+
+# Rename the temporary file to the final name.
+if (Test-Path $outputFile) {
+ Remove-Item $outputFile -Force
+}
+Move-Item -Path $tempOutputFile -Destination $outputFile -Force
+
+Write-Host "Generated $outputFile successfully."
\ No newline at end of file
diff --git a/TombEngine/Game/Hud/Speedometer.cpp b/TombEngine/Game/Hud/Speedometer.cpp
index 6253fc6ac..6167b203c 100644
--- a/TombEngine/Game/Hud/Speedometer.cpp
+++ b/TombEngine/Game/Hud/Speedometer.cpp
@@ -70,14 +70,14 @@ namespace TEN::Hud
// Draw dial.
AddDisplaySprite(
- ID_SPEEDOMETER, DIAL_ELEMENT_SPRITE_ID,
+ ID_SPEEDOMETER_GRAPHICS, DIAL_ELEMENT_SPRITE_ID,
POS, 0, SCALE, color,
DIAL_PRIORITY, DisplaySpriteAlignMode::Center, DisplaySpriteScaleMode::Fit, BlendMode::AlphaBlend,
DisplaySpritePhase::Draw);
// Draw pointer.
AddDisplaySprite(
- ID_SPEEDOMETER, POINTER_ELEMENT_SPRITE_ID,
+ ID_SPEEDOMETER_GRAPHICS, POINTER_ELEMENT_SPRITE_ID,
POS, pointerAngle + POINTER_ANGLE_OFFSET, SCALE, color,
POINTER_PRIORITY, DisplaySpriteAlignMode::Center, DisplaySpriteScaleMode::Fit, BlendMode::AlphaBlend,
DisplaySpritePhase::Draw);
diff --git a/TombEngine/Game/Hud/TargetHighlighter.cpp b/TombEngine/Game/Hud/TargetHighlighter.cpp
index a1d895216..fc30b0714 100644
--- a/TombEngine/Game/Hud/TargetHighlighter.cpp
+++ b/TombEngine/Game/Hud/TargetHighlighter.cpp
@@ -132,7 +132,7 @@ namespace TEN::Hud
void CrosshairData::Draw() const
{
- constexpr auto SPRITE_SEQUENCE_OBJECT_ID = ID_CROSSHAIR;
+ constexpr auto SPRITE_SEQUENCE_OBJECT_ID = ID_CROSSHAIR_GRAPHICS;
constexpr auto STATIC_ELEMENT_SPRITE_ID = 0;
constexpr auto SEGMENT_ELEMENT_SPRITE_ID = 1;
constexpr auto PRIORITY = 0; // TODO: Check later. May interfere with Lua display sprites. -- Sezz 2023.10.06
diff --git a/TombEngine/Objects/Generic/generic_objects.cpp b/TombEngine/Objects/Generic/generic_objects.cpp
index 5e09d44ba..8f10a3420 100644
--- a/TombEngine/Objects/Generic/generic_objects.cpp
+++ b/TombEngine/Objects/Generic/generic_objects.cpp
@@ -176,7 +176,7 @@ void StartSwitches(ObjectInfo* object)
object->shadowType = ShadowMode::All;
}
- for (int objectID = ID_UNDERWATER_WALL_SWITCH_1; objectID <= ID_UNDERWATER_WALL_SWITCH_2; objectID++)
+ for (int objectID = ID_UNDERWATER_WALL_SWITCH1; objectID <= ID_UNDERWATER_WALL_SWITCH2; objectID++)
{
object = &Objects[objectID];
if (object->loaded)
@@ -186,7 +186,7 @@ void StartSwitches(ObjectInfo* object)
}
}
- for (int objectID = ID_UNDERWATER_CEILING_SWITCH_1; objectID <= ID_UNDERWATER_CEILING_SWITCH_2; objectID++)
+ for (int objectID = ID_UNDERWATER_CEILING_SWITCH1; objectID <= ID_UNDERWATER_CEILING_SWITCH2; objectID++)
{
object = &Objects[objectID];
if (object->loaded)
diff --git a/TombEngine/Objects/game_object_ids.h b/TombEngine/Objects/game_object_ids.h
index 7d2cd209a..ac1629d80 100644
--- a/TombEngine/Objects/game_object_ids.h
+++ b/TombEngine/Objects/game_object_ids.h
@@ -625,10 +625,10 @@ enum GAME_OBJECT_ID : short
ID_SHOOT_SWITCH3,
ID_SHOOT_SWITCH4,
ID_AIRLOCK_SWITCH,
- ID_UNDERWATER_WALL_SWITCH_1,
- ID_UNDERWATER_WALL_SWITCH_2,
- ID_UNDERWATER_CEILING_SWITCH_1,
- ID_UNDERWATER_CEILING_SWITCH_2,
+ ID_UNDERWATER_WALL_SWITCH1,
+ ID_UNDERWATER_WALL_SWITCH2,
+ ID_UNDERWATER_CEILING_SWITCH1,
+ ID_UNDERWATER_CEILING_SWITCH2,
ID_TURN_SWITCH,
ID_COG_SWITCH,
ID_LEVER_SWITCH,
@@ -973,9 +973,10 @@ enum GAME_OBJECT_ID : short
ID_BRIDGE_CUSTOM,
ID_HORIZON = 1350,
- ID_BINOCULAR_GRAPHICS,
- ID_TARGET_GRAPHICS,
- ID_SKY_GRAPHICS,
+
+ // Sprite sequences.
+
+ ID_SKY_GRAPHICS = 1353,
ID_DEFAULT_SPRITES,
ID_MISC_SPRITES,
ID_CUSTOM_SPRITES,
@@ -990,27 +991,19 @@ enum GAME_OBJECT_ID : short
ID_SKIDOO_SNOW_TRAIL_SPRITES,
ID_KAYAK_PADDLE_TRAIL_SPRITE,
ID_KAYAK_WAKE_SPRTIES,
- ID_BINOCULAR_GRAPHIC,
- ID_LASER_SIGHT_GRAPHIC,
- ID_CAUSTICS_TEXTURES,
- ID_BAR_BORDER_GRAPHIC,
+ ID_BINOCULAR_GRAPHICS,
+ ID_LASERSIGHT_GRAPHICS,
+ ID_CAUSTIC_TEXTURES,
+ ID_BAR_BORDER_GRAPHICS,
ID_HEALTH_BAR_TEXTURE,
ID_AIR_BAR_TEXTURE,
ID_DASH_BAR_TEXTURE,
ID_SFX_BAR_TEXTURE,
// NOTE: 1378 - 1379 reserved for blood effects. -- Sezz 2023.05.29
- ID_CROSSHAIR = 1380,
- ID_SPEEDOMETER,
- ID_CUSTOM_BAR_GRAPHIC,
- ID_CUSTOM_AMMO_GRAPHIC,
+ ID_CROSSHAIR_GRAPHICS = 1380,
+ ID_SPEEDOMETER_GRAPHICS,
+ ID_CUSTOM_BAR_GRAPHICS,
+ ID_CUSTOM_AMMO_GRAPHICS,
- ID_PANEL_BORDER = 1400,
- ID_PANEL_MIDDLE,
- ID_PANEL_CORNER,
- ID_PANEL_DIAGONAL,
- ID_PANEL_STRIP,
- ID_PANEL_HALF_BORDER1,
- ID_PANEL_HALF_BORDER2,
- ID_PANEL_MIDDLE_CORNER,
ID_NUMBER_OBJECTS
};
diff --git a/TombEngine/Renderer/RendererCompatibility.cpp b/TombEngine/Renderer/RendererCompatibility.cpp
index e8cc46136..7ae2ef7d5 100644
--- a/TombEngine/Renderer/RendererCompatibility.cpp
+++ b/TombEngine/Renderer/RendererCompatibility.cpp
@@ -883,7 +883,7 @@ namespace TEN::Renderer
_spriteSequences[SpriteSequencesIds[i]] = sequence;
- if (SpriteSequencesIds[i] == ID_CAUSTICS_TEXTURES)
+ if (SpriteSequencesIds[i] == ID_CAUSTIC_TEXTURES)
{
_causticTextures.clear();
for (int j = 0; j < sequence.SpritesList.size(); j++)
diff --git a/TombEngine/Renderer/RendererDraw.cpp b/TombEngine/Renderer/RendererDraw.cpp
index 662ad0b7e..38a2feeaa 100644
--- a/TombEngine/Renderer/RendererDraw.cpp
+++ b/TombEngine/Renderer/RendererDraw.cpp
@@ -2695,8 +2695,8 @@ namespace TEN::Renderer
// Bind caustics texture.
if (_causticTextures.size() > 0)
{
- int nmeshes = -Objects[ID_CAUSTICS_TEXTURES].nmeshes;
- int meshIndex = Objects[ID_CAUSTICS_TEXTURES].meshIndex;
+ int nmeshes = -Objects[ID_CAUSTIC_TEXTURES].nmeshes;
+ int meshIndex = Objects[ID_CAUSTIC_TEXTURES].meshIndex;
int causticsFrame = GlobalCounter % _causticTextures.size();
BindTexture(TextureRegister::CausticsMap, &_causticTextures[causticsFrame], SamplerStateRegister::AnisotropicClamp);
}
diff --git a/TombEngine/Renderer/RendererDraw2D.cpp b/TombEngine/Renderer/RendererDraw2D.cpp
index 8dd4434a8..cf5648e3f 100644
--- a/TombEngine/Renderer/RendererDraw2D.cpp
+++ b/TombEngine/Renderer/RendererDraw2D.cpp
@@ -119,7 +119,7 @@ namespace TEN::Renderer
void Renderer::DrawBar(float percent, const RendererHudBar& bar, GAME_OBJECT_ID textureSlot, int frame, bool isPoisoned)
{
- if (!CheckIfSlotExists(ID_BAR_BORDER_GRAPHIC, "Bar rendering"))
+ if (!CheckIfSlotExists(ID_BAR_BORDER_GRAPHICS, "Bar rendering"))
return;
unsigned int strides = sizeof(Vertex);
@@ -141,7 +141,7 @@ namespace TEN::Renderer
BindConstantBufferVS(ConstantBufferRegister::Hud, _cbHUD.get());
- RendererSprite* borderSprite = &_sprites[Objects[ID_BAR_BORDER_GRAPHIC].meshIndex];
+ RendererSprite* borderSprite = &_sprites[Objects[ID_BAR_BORDER_GRAPHICS].meshIndex];
_stHUDBar.BarStartUV = borderSprite->UV[0];
_stHUDBar.BarScale = Vector2(borderSprite->Width / (float)borderSprite->Texture->Width, borderSprite->Height / (float)borderSprite->Texture->Height);
_cbHUDBar.UpdateData(_stHUDBar, _context.Get());
@@ -266,11 +266,11 @@ namespace TEN::Renderer
if (Lara.Control.Look.OpticRange != 0 && !Lara.Control.Look.IsUsingLasersight)
{
- DrawFullScreenSprite(&_sprites[Objects[ID_BINOCULAR_GRAPHIC].meshIndex], Vector3::One, false);
+ DrawFullScreenSprite(&_sprites[Objects[ID_BINOCULAR_GRAPHICS].meshIndex], Vector3::One, false);
}
else if (Lara.Control.Look.OpticRange != 0 && Lara.Control.Look.IsUsingLasersight)
{
- DrawFullScreenSprite(&_sprites[Objects[ID_LASER_SIGHT_GRAPHIC].meshIndex], Vector3::One);
+ DrawFullScreenSprite(&_sprites[Objects[ID_LASERSIGHT_GRAPHICS].meshIndex], Vector3::One);
SetBlendMode(BlendMode::Opaque);
diff --git a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h
index 15eafe9a8..7bd795d75 100644
--- a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h
+++ b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h
@@ -1,6 +1,6 @@
#pragma once
-// Last generated on 18/11/2022
+// Last generated on 11/03/2025
#include
#include
@@ -165,6 +165,7 @@ The following constants are inside ObjID.
CYBORG
SNIPER
CHEF
+ KOLD
WINGED_MUMMY
CENTAUR_MUTANT
DOPPELGANGER
@@ -189,14 +190,14 @@ The following constants are inside ObjID.
SWORD_GUARDIAN_STATUE
SHIVA
SHIVA_STATUE
- TRIBEBOSS
+ WILLARD
CIVVY
MUTANT2
LIZARD
TONY_BOSS
TONY_BOSS_FLAME
PUNA_BOSS
- SOPHIA_LEE_BOSS
+ SOPHIA_LEIGH_BOSS
LASER_BOLT
SKELETON
MUMMY
@@ -228,7 +229,7 @@ The following constants are inside ObjID.
IMP
IMP_ROCK
GUNSHIP
- AUTOGUN
+ AUTO_GUN_VCI
ROMAN_GOD1
ROMAN_GOD2
LAGOON_WITCH
@@ -237,6 +238,7 @@ The following constants are inside ObjID.
BOSS_EXPLOSION_RING
CLAW_MUTANT
WASP_MUTANT
+ TWIN_AUTO_GUN
SKATEBOARD
SKATEBOARD_KID
WINSTON
@@ -604,7 +606,6 @@ The following constants are inside ObjID.
CLOCKWORK_BEETLE
CLOCKWORK_BEETLE_COMBO1
CLOCKWORK_BEETLE_COMBO2
-
SWITCH_TYPE1
SWITCH_TYPE2
SWITCH_TYPE3
@@ -626,10 +627,10 @@ The following constants are inside ObjID.
SHOOT_SWITCH3
SHOOT_SWITCH4
AIRLOCK_SWITCH
- ID_UNDERWATER_WALL_SWITCH_1
- ID_UNDERWATER_WALL_SWITCH_2
- ID_UNDERWATER_CEILING_SWITCH_1
- ID_UNDERWATER_CEILING_SWITCH_2
+ UNDERWATER_WALL_SWITCH1
+ UNDERWATER_WALL_SWITCH2
+ UNDERWATER_CEILING_SWITCH1
+ UNDERWATER_CEILING_SWITCH2
TURN_SWITCH
COG_SWITCH
LEVER_SWITCH
@@ -776,7 +777,7 @@ The following constants are inside ObjID.
KILL_ALL_TRIGGERS
TRIGGER_TRIGGERER
HIGH_OBJECT1
- HIGH_OBJECT2
+ EMBER_EMITTER
SMASH_OBJECT1
SMASH_OBJECT2
SMASH_OBJECT3
@@ -964,8 +965,6 @@ The following constants are inside ObjID.
BRIDGE_TILT4
BRIDGE_CUSTOM
HORIZON
- BINOCULAR_GRAPHICS
- TARGET_GRAPHICS
SKY_GRAPHICS
DEFAULT_SPRITES
MISC_SPRITES
@@ -980,27 +979,18 @@ The following constants are inside ObjID.
SKIDOO_SNOW_TRAIL_SPRITES
KAYAK_PADDLE_TRAIL_SPRITE
KAYAK_WAKE_SPRTIES
- BINOCULAR_GRAPHIC
- LASER_SIGHT_GRAPHIC
- CAUSTICS_TEXTURES
- BAR_BORDER_GRAPHIC
+ BINOCULAR_GRAPHICS
+ LASERSIGHT_GRAPHICS
+ CAUSTIC_TEXTURES
+ BAR_BORDER_GRAPHICS
HEALTH_BAR_TEXTURE
AIR_BAR_TEXTURE
DASH_BAR_TEXTURE
SFX_BAR_TEXTURE
- SPEEDOMETER
- CUSTOM_BAR_GRAPHIC
- CUSTOM_AMMO_GRAPHIC
-
- PANEL_BORDER
- PANEL_MIDDLE
- PANEL_CORNER
- PANEL_DIAGONAL
- PANEL_STRIP
- PANEL_HALF_BORDER1
- PANEL_HALF_BORDER2
- PANEL_MIDDLE_CORNER
-Table of constants.
+ CROSSHAIR_GRAPHICS
+ SPEEDOMETER_GRAPHICS
+ CUSTOM_BAR_GRAPHICS
+ CUSTOM_AMMO_GRAPHICS
@table Members
*/
@@ -1152,6 +1142,30 @@ The following ObjID members refer to pickups.
PICKUP_ITEM15_COMBO2
PICKUP_ITEM16_COMBO1
PICKUP_ITEM16_COMBO2
+ EXAMINE1
+ EXAMINE2
+ EXAMINE3
+ EXAMINE4
+ EXAMINE5
+ EXAMINE6
+ EXAMINE7
+ EXAMINE8
+ EXAMINE1_COMBO1
+ EXAMINE1_COMBO2
+ EXAMINE2_COMBO1
+ EXAMINE2_COMBO2
+ EXAMINE3_COMBO1
+ EXAMINE3_COMBO2
+ EXAMINE4_COMBO1
+ EXAMINE4_COMBO2
+ EXAMINE5_COMBO1
+ EXAMINE5_COMBO2
+ EXAMINE6_COMBO1
+ EXAMINE6_COMBO2
+ EXAMINE7_COMBO1
+ EXAMINE7_COMBO2
+ EXAMINE8_COMBO1
+ EXAMINE8_COMBO2
HAMMER_ITEM
CROWBAR_ITEM
BURNING_TORCH_ITEM
@@ -1189,9 +1203,10 @@ The following ObjID members refer to pickups.
COMPASS_ITEM
DIARY_ITEM
STOPWATCH_ITEM
+ MEMCARD_LOAD_INV_ITEM
+ MEMCARD_SAVE_INV_ITEM
PC_LOAD_INV_ITEM
PC_SAVE_INV_ITEM
-Table of constants.
@table PickupConstants
*/
@@ -1199,8 +1214,6 @@ Table of constants.
The following ObjID members refer to sprites.
-Table of constants:
-
SKY_GRAPHICS
DEFAULT_SPRITES
MISC_SPRITES
@@ -1214,18 +1227,17 @@ Table of constants:
RUBBER_BOAT_WAVE_SPRITES
SKIDOO_SNOW_TRAIL_SPRITES
KAYAK_PADDLE_TRAIL_SPRITE
- KAYAK_WAKE_SPRTIES
- BINOCULAR_GRAPHIC
- LASER_SIGHT_GRAPHIC
- CAUSTICS_TEXTURES
- BAR_BORDER_GRAPHIC
+ LASERSIGHT_GRAPHICS
+ CAUSTIC_TEXTURES
+ BAR_BORDER_GRAPHICS
HEALTH_BAR_TEXTURE
AIR_BAR_TEXTURE
DASH_BAR_TEXTURE
SFX_BAR_TEXTURE
- SPEEDOMETER
- CUSTOM_BAR_GRAPHIC
- CUSTOM_AMMO_GRAPHIC
+ CROSSHAIR_GRAPHICS
+ SPEEDOMETER_GRAPHICS
+ CUSTOM_BAR_GRAPHICS
+ CUSTOM_AMMO_GRAPHICS
@table SpriteConstants
*/
static const std::unordered_map kObjIDs {
@@ -1378,6 +1390,7 @@ static const std::unordered_map kObjIDs {
{ "CYBORG", ID_CYBORG },
{ "SNIPER", ID_SNIPER },
{ "CHEF", ID_CHEF },
+ { "KOLD", ID_KOLD },
{ "WINGED_MUMMY", ID_WINGED_MUMMY },
{ "CENTAUR_MUTANT", ID_CENTAUR_MUTANT },
{ "DOPPELGANGER", ID_DOPPELGANGER },
@@ -1441,7 +1454,7 @@ static const std::unordered_map kObjIDs {
{ "IMP", ID_IMP },
{ "IMP_ROCK", ID_IMP_ROCK },
{ "GUNSHIP", ID_GUNSHIP },
- { "AUTOGUN", ID_AUTO_GUN_VCI },
+ { "AUTO_GUN_VCI", ID_AUTO_GUN_VCI },
{ "ROMAN_GOD1", ID_ROMAN_GOD1 },
{ "ROMAN_GOD2", ID_ROMAN_GOD2 },
{ "LAGOON_WITCH", ID_LAGOON_WITCH },
@@ -1450,6 +1463,7 @@ static const std::unordered_map kObjIDs {
{ "BOSS_EXPLOSION_RING", ID_BOSS_EXPLOSION_RING },
{ "CLAW_MUTANT", ID_CLAW_MUTANT },
{ "WASP_MUTANT", ID_WASP_MUTANT },
+ { "TWIN_AUTO_GUN", ID_TWIN_AUTO_GUN },
{ "SKATEBOARD", ID_SKATEBOARD },
{ "SKATEBOARD_KID", ID_SKATEBOARD_KID },
{ "WINSTON", ID_WINSTON },
@@ -1838,10 +1852,10 @@ static const std::unordered_map kObjIDs {
{ "SHOOT_SWITCH3", ID_SHOOT_SWITCH3 },
{ "SHOOT_SWITCH4", ID_SHOOT_SWITCH4 },
{ "AIRLOCK_SWITCH", ID_AIRLOCK_SWITCH },
- { "UNDERWATER_WALL_SWITCH_1", ID_UNDERWATER_WALL_SWITCH_1 },
- { "UNDERWATER_WALL_SWITCH_2", ID_UNDERWATER_WALL_SWITCH_2 },
- { "UNDERWATER_CEILING_SWITCH_1", ID_UNDERWATER_CEILING_SWITCH_1 },
- { "UNDERWATER_CEILING_SWITCH_2", ID_UNDERWATER_CEILING_SWITCH_2 },
+ { "UNDERWATER_WALL_SWITCH1", ID_UNDERWATER_WALL_SWITCH1 },
+ { "UNDERWATER_WALL_SWITCH2", ID_UNDERWATER_WALL_SWITCH2 },
+ { "UNDERWATER_CEILING_SWITCH1", ID_UNDERWATER_CEILING_SWITCH1 },
+ { "UNDERWATER_CEILING_SWITCH2", ID_UNDERWATER_CEILING_SWITCH2 },
{ "TURN_SWITCH", ID_TURN_SWITCH },
{ "COG_SWITCH", ID_COG_SWITCH },
{ "LEVER_SWITCH", ID_LEVER_SWITCH },
@@ -2176,8 +2190,6 @@ static const std::unordered_map kObjIDs {
{ "BRIDGE_TILT4", ID_BRIDGE_TILT4 },
{ "BRIDGE_CUSTOM", ID_BRIDGE_CUSTOM },
{ "HORIZON", ID_HORIZON },
- { "BINOCULAR_GRAPHICS", ID_BINOCULAR_GRAPHICS },
- { "TARGET_GRAPHICS", ID_TARGET_GRAPHICS },
{ "SKY_GRAPHICS", ID_SKY_GRAPHICS },
{ "DEFAULT_SPRITES", ID_DEFAULT_SPRITES },
{ "MISC_SPRITES", ID_MISC_SPRITES },
@@ -2192,24 +2204,16 @@ static const std::unordered_map kObjIDs {
{ "SKIDOO_SNOW_TRAIL_SPRITES", ID_SKIDOO_SNOW_TRAIL_SPRITES },
{ "KAYAK_PADDLE_TRAIL_SPRITE", ID_KAYAK_PADDLE_TRAIL_SPRITE },
{ "KAYAK_WAKE_SPRTIES", ID_KAYAK_WAKE_SPRTIES },
- { "BINOCULAR_GRAPHIC", ID_BINOCULAR_GRAPHIC },
- { "LASER_SIGHT_GRAPHIC", ID_LASER_SIGHT_GRAPHIC },
- { "CAUSTICS_TEXTURES", ID_CAUSTICS_TEXTURES },
- { "BAR_BORDER_GRAPHIC", ID_BAR_BORDER_GRAPHIC },
+ { "BINOCULAR_GRAPHICS", ID_BINOCULAR_GRAPHICS },
+ { "LASERSIGHT_GRAPHICS", ID_LASERSIGHT_GRAPHICS },
+ { "CAUSTIC_TEXTURES", ID_CAUSTIC_TEXTURES },
+ { "BAR_BORDER_GRAPHICS", ID_BAR_BORDER_GRAPHICS },
{ "HEALTH_BAR_TEXTURE", ID_HEALTH_BAR_TEXTURE },
{ "AIR_BAR_TEXTURE", ID_AIR_BAR_TEXTURE },
{ "DASH_BAR_TEXTURE", ID_DASH_BAR_TEXTURE },
{ "SFX_BAR_TEXTURE", ID_SFX_BAR_TEXTURE },
- { "CROSSHAIR", ID_CROSSHAIR },
- { "SPEEDOMETER", ID_SPEEDOMETER },
- { "CUSTOM_BAR_GRAPHIC", ID_CUSTOM_BAR_GRAPHIC },
- { "CUSTOM_AMMO_GRAPHIC",ID_CUSTOM_AMMO_GRAPHIC },
- { "PANEL_BORDER", ID_PANEL_BORDER },
- { "PANEL_MIDDLE", ID_PANEL_MIDDLE },
- { "PANEL_CORNER", ID_PANEL_CORNER },
- { "PANEL_DIAGONAL", ID_PANEL_DIAGONAL },
- { "PANEL_STRIP", ID_PANEL_STRIP },
- { "PANEL_HALF_BORDER1", ID_PANEL_HALF_BORDER1 },
- { "PANEL_HALF_BORDER2", ID_PANEL_HALF_BORDER2 },
- { "PANEL_MIDDLE_CORNER", ID_PANEL_MIDDLE_CORNER }
+ { "CROSSHAIR_GRAPHICS", ID_CROSSHAIR_GRAPHICS },
+ { "SPEEDOMETER_GRAPHICS", ID_SPEEDOMETER_GRAPHICS },
+ { "CUSTOM_BAR_GRAPHICS", ID_CUSTOM_BAR_GRAPHICS },
+ { "CUSTOM_AMMO_GRAPHICS", ID_CUSTOM_AMMO_GRAPHICS }
};
diff --git a/TombEngine/Specific/savegame/schema/generate_code.ps1 b/TombEngine/Specific/savegame/schema/generate_code.ps1
new file mode 100644
index 000000000..7f2923f2a
--- /dev/null
+++ b/TombEngine/Specific/savegame/schema/generate_code.ps1
@@ -0,0 +1,61 @@
+# Paths to the .fbs and corresponding generated .h files.
+$fbsFiles = @(
+ @{ fbs = "$PSScriptRoot/ten_itemdata.fbs"; h = "$PSScriptRoot/../flatbuffers/ten_itemdata_generated.h" },
+ @{ fbs = "$PSScriptRoot/ten_savegame.fbs"; h = "$PSScriptRoot/../flatbuffers/ten_savegame_generated.h" })
+
+# Function to check if the .fbs file is newer than the .h file.
+function IsFbsNewerThanH ($fbs, $h)
+{
+ if (Test-Path $h)
+ {
+ $fbsLastWrite = (Get-Item $fbs).LastWriteTime
+ $hLastWrite = (Get-Item $h).LastWriteTime
+ return $fbsLastWrite -gt $hLastWrite
+ }
+ else
+ {
+ # If the .h file does not exist, treat the .fbs as newer.
+ return $true
+ }
+}
+
+# Check if any .fbs file is newer than its corresponding .h file.
+$shouldGenerate = $false
+
+foreach ($file in $fbsFiles)
+{
+ if (IsFbsNewerThanH $file.fbs $file.h)
+ {
+ $shouldGenerate = $true
+ break
+ }
+}
+
+# If any .fbs file is newer, run the generation process.
+if ($shouldGenerate)
+{
+ Write-Host "Generating savegame code from flatbuffer schema..."
+
+ # Run flatc commands.
+ & "$PSScriptRoot\flatc.exe" --cpp --strict-json --unknown-json --gen-object-api --force-empty --force-empty-vectors --cpp-std c++17 --scoped-enums $fbsFiles[0].fbs
+ & "$PSScriptRoot\flatc.exe" --cpp --strict-json --unknown-json --gen-object-api --force-empty --force-empty-vectors --cpp-std c++17 --scoped-enums $fbsFiles[1].fbs
+
+ # Move generated header files.
+ Move-Item -Force "ten_itemdata_generated.h" $fbsFiles[0].h
+ Move-Item -Force "ten_savegame_generated.h" $fbsFiles[1].h
+
+ # Check for errors and output result.
+ if ($LASTEXITCODE -eq 0)
+ {
+ Write-Host "Savegame code generation completed successfully."
+ }
+ else
+ {
+ Write-Host "Error occurred during savegame code generation."
+ exit $LASTEXITCODE
+ }
+}
+else
+{
+ Write-Host "Savegame schema files are unchanged. Skipping code generation."
+}
\ No newline at end of file
diff --git a/TombEngine/TombEngine.vcxproj b/TombEngine/TombEngine.vcxproj
index 97a2d7462..b0eae3acd 100644
--- a/TombEngine/TombEngine.vcxproj
+++ b/TombEngine/TombEngine.vcxproj
@@ -139,32 +139,8 @@
- SETLOCAL EnableDelayedExpansion
-
-SET SchemaDir=$(ProjectDir)Specific\savegame\schema
-SET TimestampFile=$(TargetDir)flatbuffers.timestamp
-
-FOR %%F IN ("%SchemaDir%\ten_itemdata.fbs" "%SchemaDir%\ten_savegame.fbs") DO (
- SET "CurrentTimestamp=!CurrentTimestamp! %%~tF"
-)
-
-IF EXIST "%TimestampFile%" (
- SET /P LastTimestamp=<"%TimestampFile%"
-)
-
-SET CurrentTimestamp=%CurrentTimestamp: =%
-SET LastTimestamp=%LastTimestamp: =%
-
-IF "%CurrentTimestamp%" == "%LastTimestamp%" (
- ECHO Skipping gen.bat, schema files are unchanged
-) ELSE (
- ECHO Generating savegame code from flatbuffer schema...
- CD "%SchemaDir%"
- CALL gen.bat
- ECHO !CurrentTimestamp! > "%TimestampFile%"
-)
-
-ENDLOCAL
+ powershell -ExecutionPolicy Bypass -File "$(SolutionDir)\Documentation\generate_objectlist.ps1"
+powershell -ExecutionPolicy Bypass -File "$(ProjectDir)Specific\savegame\schema\generate_code.ps1"
CD "$(ProjectDir)..\Documentation\"
CALL compile.bat .
@@ -228,32 +204,8 @@ if not exist "%ScriptsDir%\Strings.lua" xcopy /Y "$(SolutionDir)Scripts\Strings.
- SETLOCAL EnableDelayedExpansion
-
-SET SchemaDir=$(ProjectDir)Specific\savegame\schema
-SET TimestampFile=$(TargetDir)flatbuffers.timestamp
-
-FOR %%F IN ("%SchemaDir%\ten_itemdata.fbs" "%SchemaDir%\ten_savegame.fbs") DO (
- SET "CurrentTimestamp=!CurrentTimestamp! %%~tF"
-)
-
-IF EXIST "%TimestampFile%" (
- SET /P LastTimestamp=<"%TimestampFile%"
-)
-
-SET CurrentTimestamp=%CurrentTimestamp: =%
-SET LastTimestamp=%LastTimestamp: =%
-
-IF "%CurrentTimestamp%" == "%LastTimestamp%" (
- ECHO Skipping gen.bat, schema files are unchanged
-) ELSE (
- ECHO Generating savegame code from flatbuffer schema...
- CD "%SchemaDir%"
- CALL gen.bat
- ECHO !CurrentTimestamp! > "%TimestampFile%"
-)
-
-ENDLOCAL
+ powershell -ExecutionPolicy Bypass -File "$(SolutionDir)\Documentation\generate_objectlist.ps1"
+powershell -ExecutionPolicy Bypass -File "$(ProjectDir)Specific\savegame\schema\generate_code.ps1"
CD "$(ProjectDir)..\Documentation\"
CALL compile.bat .
@@ -330,7 +282,9 @@ del "$(TargetDir)*.exp" /q
del "$(TargetDir)OIS_d.dll" /q
- CD "$(ProjectDir)..\Documentation\"
+ powershell -ExecutionPolicy Bypass -File "$(SolutionDir)\Documentation\generate_objectlist.ps1"
+
+CD "$(ProjectDir)..\Documentation\"
CALL compile.bat .
CD "$(ProjectDir)Specific\savegame\schema\"
@@ -409,7 +363,9 @@ del "$(TargetDir)*.exp" /q
del "$(TargetDir)OIS_d.dll" /q
- CD "$(ProjectDir)..\Documentation\"
+ powershell -ExecutionPolicy Bypass -File "$(SolutionDir)\Documentation\generate_objectlist.ps1"
+
+CD "$(ProjectDir)..\Documentation\"
CALL compile.bat .
CD "$(ProjectDir)Specific\savegame\schema\"