Skip to content

Commit 23ccbb3

Browse files
authored
Merge pull request #7 from SpeedrunTooling/develop
1.2.0.1: Added new checksum. Moved two variables to the GameMemory cl…
2 parents 9302a5d + 31965a8 commit 23ccbb3

7 files changed

Lines changed: 32 additions & 11 deletions

File tree

SRTPluginProviderRE8/GameHashes.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ public static class GameHashes
3434
//private static readonly byte[] re8ceroD_20210810_3 = new byte[32] { 248, 18, 212, 128, 184, 219, 12, 144, 5, 248, 18, 119, 67, 167, 153, 209, 150, 26, 72, 170, 14, 208, 57, 29, 8, 208, 168, 231, 124, 196, 77, 49 };
3535
//private static readonly byte[] re8ceroZ_20210810_3 = new byte[32] { 0x8A, 0x92, 0x8C, 0x97, 0xEC, 0xF0, 0x40, 0x88, 0xE8, 0x2A, 0x24, 0x19, 0x93, 0x1E, 0x59, 0x26, 0x9A, 0x8B, 0x56, 0xD6, 0x2C, 0x72, 0x22, 0xE9, 0xE2, 0xB4, 0x04, 0xF7, 0x68, 0x96, 0x72, 0x2F };
3636

37+
// PATCH 1.03
38+
private static readonly byte[] re8WW_20210824_4 = new byte[32] { 0x31, 0x63, 0xAE, 0xD5, 0x4F, 0x11, 0x11, 0xD4, 0x03, 0x59, 0x84, 0x37, 0x6E, 0x5C, 0x91, 0xEA, 0x79, 0x0C, 0x8A, 0x72, 0x43, 0x6F, 0x83, 0xD9, 0xB5, 0x4D, 0xEA, 0x2E, 0x16, 0x61, 0x78, 0x7F };
39+
3740
public static GameVersion DetectVersion(string filePath)
3841
{
3942
byte[] checksum;
@@ -59,6 +62,12 @@ public static GameVersion DetectVersion(string filePath)
5962
return GameVersion.RE8_WW_20210810_3;
6063
}
6164

65+
else if (checksum.SequenceEqual(re8WW_20210824_4))
66+
{
67+
Console.WriteLine("Steam v1.03 Detected.");
68+
return GameVersion.RE8_WW_20210824_4;
69+
}
70+
6271
else if (checksum.SequenceEqual(re8promo01_20210426_1))
6372
{
6473
Console.WriteLine("Steam Promo v1.00 Detected.");

SRTPluginProviderRE8/GameMemoryRE8.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,15 @@ public class GameMemoryRE8 : IGameMemoryRE8
3232
public int Lei { get => _lei; set => _lei = value; }
3333
internal int _lei;
3434

35+
public int EnemyTableCount { get => _enemyTableCount; set => _enemyTableCount = value; }
36+
internal int _enemyTableCount;
37+
3538
public EnemyHP[] EnemyHealth { get => _enemyHealth; set => _enemyHealth = value; }
3639
internal EnemyHP[] _enemyHealth;
3740

41+
public int PlayerInventoryCount { get => _playerInventoryCount; set => _playerInventoryCount = value; }
42+
internal int _playerInventoryCount;
43+
3844
public InventoryEntry LastKeyItem { get => _lastKeyItem; set => _lastKeyItem = value; }
3945
internal InventoryEntry _lastKeyItem;
4046

SRTPluginProviderRE8/GameMemoryRE8Scanner.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ internal class GameMemoryRE8Scanner : IDisposable
1919
public bool HasScanned;
2020
public bool ProcessRunning => memoryAccess != null && memoryAccess.ProcessRunning;
2121
public int ProcessExitCode => (memoryAccess != null) ? memoryAccess.ProcessExitCode : 0;
22-
private int EnemyTableCount;
23-
private int InventoryTableCount;
2422

2523
// Pointer Address Variables
2624
private int pointerPropsManager;
@@ -237,6 +235,7 @@ private bool SelectPointerAddresses(GameVersion version)
237235
switch (version)
238236
{
239237
case GameVersion.RE8_WW_20210810_3:
238+
case GameVersion.RE8_WW_20210824_4:
240239
{
241240
pointerInventory = 0x0A06B7F0; // app_InventoryManager
242241
pointerPropsManager = 0x0A06B900; // app_PropsManager
@@ -330,7 +329,7 @@ private bool SelectPointerAddresses(GameVersion version)
330329
private unsafe void GenerateEnemyEntries()
331330
{
332331
bool success;
333-
fixed (int* p = &EnemyTableCount)
332+
fixed (int* p = &gameMemoryValues._enemyTableCount)
334333
success = PointerEnemyEntryList.TryDerefInt(0x1C, p);
335334

336335
PointerEnemyEntries = new MultilevelPointer[MAX_ENTITIES]; // Create a new enemy pointer table array with the detected size.
@@ -353,7 +352,7 @@ private unsafe void GenerateEnemyEntries()
353352
private unsafe void GenerateItemEntries()
354353
{
355354
bool success;
356-
fixed (int* p = &InventoryTableCount)
355+
fixed (int* p = &gameMemoryValues._playerInventoryCount)
357356
success = PointerInventoryEntryList.TryDerefInt(0x1C, p);
358357

359358
PointerInventoryEntries = new MultilevelPointer[MAX_ITEMS];
@@ -417,7 +416,7 @@ internal unsafe IGameMemoryRE8 Refresh()
417416
try
418417
{
419418
// Check to see if the pointer is currently valid. It can become invalid when rooms are changed.
420-
if (PointerEnemyEntries[i].Address != IntPtr.Zero && i < EnemyTableCount && SafeReadByteArray(PointerEnemyEntries[i].Address, sizeof(GamePlayerHP), out byte[] enemyHpBytes))
419+
if (PointerEnemyEntries[i].Address != IntPtr.Zero && i < gameMemoryValues.EnemyTableCount && SafeReadByteArray(PointerEnemyEntries[i].Address, sizeof(GamePlayerHP), out byte[] enemyHpBytes))
421420
{
422421
// Note, this is using the same structure as the player HP.
423422
// This may not always be the case, but the structures match for now.
@@ -449,7 +448,7 @@ internal unsafe IGameMemoryRE8 Refresh()
449448
try
450449
{
451450
// Check to see if the pointer is currently valid. It can become invalid when rooms are changed.
452-
if (PointerInventoryEntries[i].Address != IntPtr.Zero && i < InventoryTableCount && SafeReadByteArray(PointerInventoryEntries[i].Address, sizeof(GameInventoryItem), out byte[] inventoryItemBytes))
451+
if (PointerInventoryEntries[i].Address != IntPtr.Zero && i < gameMemoryValues.PlayerInventoryCount && SafeReadByteArray(PointerInventoryEntries[i].Address, sizeof(GameInventoryItem), out byte[] inventoryItemBytes))
453452
{
454453
var inventoryItem = GameInventoryItem.AsStruct(inventoryItemBytes);
455454

SRTPluginProviderRE8/GameVersion.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33
public enum GameVersion : int
44
{
55
Unknown,
6+
67
RE8_WW_20210506_1,
78
RE8_CEROD_20210506_1,
89
RE8_CEROZ_20210508_1,
910
RE8_PROMO_01_20210426_1,
1011
RE8_UNK_20210710_1,
1112
RE8_UNK_20210714_1,
13+
1214
RE8_WW_20210719_2,
1315
RE8_CEROD_20210719_2,
1416
RE8_CEROZ_20210719_2,
17+
1518
RE8_WW_20210810_3,
1619
RE8_CEROD_20210810_3,
17-
RE8_CEROZ_20210810_3
20+
RE8_CEROZ_20210810_3,
21+
22+
RE8_WW_20210824_4,
1823
}
1924
}

SRTPluginProviderRE8/IGameMemoryRE8.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ public interface IGameMemoryRE8
1515
int RankScore { get; set; }
1616
int Rank { get; set; }
1717
int Lei { get; set; }
18+
int PlayerInventoryCount { get; set; }
1819
InventoryEntry[] PlayerInventory { get; set; }
20+
int EnemyTableCount { get; set; }
1921
EnemyHP[] EnemyHealth { get; set; }
2022
InventoryEntry LastKeyItem { get; set; }
21-
23+
2224
}
2325
}

SRTPluginProviderRE8/SRTPluginProviderRE8.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<Copyright>Copyright © 2020 Christopher Couture</Copyright>
1111
<Product>Resident Evil 8 (2021) Memory Provider Plugin</Product>
1212
<Description>A provider plugin for the SRT Host to provide memory values to other plugins.</Description>
13-
<Version>1.2.0.0</Version>
14-
<FileVersion>1.2.0.0</FileVersion>
13+
<Version>1.2.0.1</Version>
14+
<FileVersion>1.2.0.1</FileVersion>
1515
<AssemblyVersion>3.0.0.0</AssemblyVersion>
1616
<DebugType>embedded</DebugType>
1717
<!-- netcoreapp3.1 had to be hardcoded here because this project reports $(TargetFramework) as netstandard2.0 (rightfully so) and I am not sure how this project's csproj can auto-detect another project's framework version to copy it to the appropriate folder so we're just... hardcoding this. -->

SRTPluginProviderRE8/Structs/InventoryEntry.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public string _DebuggerDisplay
3232
else if (IsMap)
3333
return string.Format("Map {0}", (CraftableEnumeration)ItemID);
3434
else if (ItemID > 0)
35-
return string.Format("Uknown Item 0x{0}", ItemID.ToString("X4"));
35+
return string.Format("Unknown Item 0x{0}", ItemID.ToString("X4"));
3636
else
3737
return string.Format("Empty Slot");
3838
}

0 commit comments

Comments
 (0)