21 Commits

Author SHA1 Message Date
ea1d2f91f2 v3.0.9 2023-10-11 00:14:36 +03:00
f0ed718cf3 Document HSR 1.4.0 support 2023-10-09 19:27:24 +03:00
bc09349b8e Update checksums for HSR 1.4.0 2023-10-09 19:22:07 +03:00
66e51c6d9a Mark HI3 cn v7.0.0 verified 2023-10-01 11:04:01 +03:00
bc7b24f4d9 v3.0.8 2023-09-26 12:06:52 +03:00
9b55d4f160 Document HI3 forward compatibility 2023-09-26 12:06:24 +03:00
57b2423a8a Implement a better workaround for different HI3 editions having different section names 2023-09-26 12:05:53 +03:00
e96bf23a30 Document unexpected lack of change in HI3 v6.9.0 2023-09-15 23:18:02 +03:00
9296e00edd Document mfplat fix being unavailable 2023-09-11 19:30:52 +00:00
d22ded3d27 v3.0.7 2023-08-30 01:06:26 +03:00
15c403b0d1 Improve invalid checksum error message 2023-08-30 01:05:53 +03:00
1cc16ecbd9 Document HSR 1.3.0 support 2023-08-28 18:21:13 +03:00
ffe75e9de7 Update checksums to HSR 1.3.0 2023-08-28 18:19:36 +03:00
243e39d04b Optimized memory allocation in core 2023-08-26 21:24:56 +03:00
daa5585527 Update game version list in the readme 2023-08-17 23:11:46 +03:00
8bf5aac0ec v3.0.6 2023-08-17 22:57:32 +03:00
4c7dd302d5 Merged workaround for 3rd 2023-08-17 22:55:26 +03:00
63eed9d796 Handle missing txs section 2023-08-17 22:53:12 +03:00
671f9ba246 Add temporary workaround for 3rd 6.9.0 2023-08-17 22:51:43 +03:00
868b4e27be Reference 6.9.0 issue in readme 2023-08-17 18:23:54 +00:00
56eefd83d7 Mark 3rd cn 6.9.0 as broken 2023-08-17 19:10:52 +03:00
7 changed files with 45 additions and 20 deletions

View File

@ -1,8 +1,8 @@
### Games and regions ### Games and regions
- **3rd**: glb/sea/cn/tw/kr/jp **v6.8.0+** - **3rd**: glb/sea/tw/kr/jp **v6.9.0+**, cn **v7.0.0+**
- **SR**: os/cn **v1.2.0** (potentially unsafe, but no bans were reported since v1.1.0) - **SR**: os/cn **v1.4.0** (potentially unsafe, but no bans were reported since v1.1.0)
**You can expect newer versions of 3rd to work immediately after release with the same jadeite binary.** However, that is not the case for SR: you will have to update your jadeite binary to run newer versions. You can expect newer versions to work immediately after release with the same jadeite binary if the version is specified with a + above (currently none).
### Information ### Information
The anticheat the games use is fundamentally incompatible with Wine in multiple ways. This tool launches the game without it (`injector`) and imitates it's behaviour (`game_payload`). The anticheat the games use is fundamentally incompatible with Wine in multiple ways. This tool launches the game without it (`injector`) and imitates it's behaviour (`game_payload`).
@ -18,7 +18,9 @@ The anticheat the games use is fundamentally incompatible with Wine in multiple
**Wine 8.0+ is recommended**, as lower versions leak "The Wine project" as the device identifier. Not critical, but taking a precaution never hurt anyone. **DXVK is strongly recommended.** **Wine 8.0+ is recommended**, as lower versions leak "The Wine project" as the device identifier. Not critical, but taking a precaution never hurt anyone. **DXVK is strongly recommended.**
**3rd-specific**: In some cases, and if you're not using Proton GE, **a fix for Media Foundation may be required to play videos. The Game may crash without it.** You can download it from [here](https://github.com/z0z0z/mf-install). You might need to [limit the number of cores available to the game](https://github.com/z0z0z/mf-install/issues/44) if your CPU has more than 8. **IMPORTANT: do not run the mfplat fix under Proton GE. Doing so may irreparably damage your game installation!** **3rd-specific**:
- ~~In some cases, and if you're not using Proton GE, a fix for Media Foundation may be required to play videos. The Game may crash without it. You can download it from [here](https://github.com/z0z0z/mf-install).~~ **Unfortunately, it appears like the fix is no longer available, please use [Wine-GE-Proton](https://github.com/GloriousEggroll/wine-ge-custom) instead.**
- You might need to [limit the number of cores available to the game](https://github.com/z0z0z/mf-install/issues/44) if your CPU has more than 8.
Manual usage instructions: Manual usage instructions:
- Download the game you want to run - Download the game you want to run

Binary file not shown.

View File

@ -1,18 +1,35 @@
#include <utils.h> #include <utils.h>
#include <msg.h> #include <msg.h>
#include <pe.h>
#include <main.h>
#include <game.h> #include <game.h>
const char *HI3_TXS_SECTION_NAME_OLD = ".bh3";
const char *HI3_TXS_SECTION_NAME_NEW = ".ace";
const char *HI3_BASE_MODULE_NAME = "BH3Base.dll"; const char *HI3_BASE_MODULE_NAME = "BH3Base.dll";
const char *HI3_ASSEMBLY_PATH = "BH3_Data\\Native\\UserAssembly.dll"; const char *HI3_ASSEMBLY_PATH = "BH3_Data\\Native\\UserAssembly.dll";
const char *HI3_TXS_SECTION_NAME = ".bh3";
const char *HI3_TVM_SECTION_NAME = ".tvm0"; const char *HI3_TVM_SECTION_NAME = ".tvm0";
void hi3_fill_data(struct game_data *buf) { void hi3_fill_data(struct game_data *buf) {
// !!! TEMPORARY WORKAROUND
// Name in exe matches name in base module
HMODULE exe = GetModuleHandleA(NULL);
if (pe_find_section(exe, HI3_TXS_SECTION_NAME_OLD)) {
// Old name
buf->txs_section_name = HI3_TXS_SECTION_NAME_OLD;
} else if (pe_find_section(exe, HI3_TXS_SECTION_NAME_NEW)) {
// New name
buf->txs_section_name = HI3_TXS_SECTION_NAME_NEW;
} else {
// This should not happen
msg_err_a("Could not determine region-specific section name. " ISSUE_SUFFIX);
}
buf->base_module_name = HI3_BASE_MODULE_NAME; buf->base_module_name = HI3_BASE_MODULE_NAME;
buf->assembly_path = HI3_ASSEMBLY_PATH; buf->assembly_path = HI3_ASSEMBLY_PATH;
buf->txs_section_name = HI3_TXS_SECTION_NAME;
buf->tvm_section_name = HI3_TVM_SECTION_NAME; buf->tvm_section_name = HI3_TVM_SECTION_NAME;
buf->unityplayer_callback = NULL; buf->unityplayer_callback = NULL;

View File

@ -9,6 +9,8 @@ const char *HSR_ASSEMBLY_PATH = "GameAssembly.dll";
const char *HSR_TXS_SECTION_NAME = ".ace"; const char *HSR_TXS_SECTION_NAME = ".ace";
const char *HSR_TVM_SECTION_NAME = ".tvm0"; const char *HSR_TVM_SECTION_NAME = ".tvm0";
#define HSR_VERSION "1.4.0"
enum hsr_region { enum hsr_region {
HSR_INVALID, HSR_INVALID,
HSR_OS, HSR_OS,
@ -21,14 +23,14 @@ struct crc_region_pair {
}; };
const struct crc_region_pair HSR_REGIONS[] = { const struct crc_region_pair HSR_REGIONS[] = {
{ 0x9eb3084e, HSR_OS }, // os v1.2.0 { 0xbae3646f, HSR_OS }, // os v1.4.0
{ 0x14be07e9, HSR_CN } // cn v1.2.0 { 0x9e5c2f80, HSR_CN } // cn v1.4.0
}; };
#define JUMP_SIZE (6 + sizeof(void*)) #define JUMP_SIZE (6 + sizeof(void*))
// Temporarily hardcoded offset // Temporarily hardcoded offset
// v1.2.0, same for os and cn // v1.4.0, same for os and cn
#define WTSUD_PATCH_OFFSET 0x16430 #define WTSUD_PATCH_OFFSET 0x16430
char wtsud_original_bytes[JUMP_SIZE]; char wtsud_original_bytes[JUMP_SIZE];
@ -86,7 +88,7 @@ void hsr_fill_data(struct game_data *buf) {
} }
if (id == HSR_INVALID) { if (id == HSR_INVALID) {
msg_err_a("Invalid UnityPlayer.dll checksum: 0x%08x. This usually happens when the patch is outdated", crc); msg_err_a("Invalid UnityPlayer.dll checksum: 0x%08x. This patch is intended to be used with HSR v" HSR_VERSION, crc);
} }
buf->base_module_name = HSR_BASE_MODULE_NAME; buf->base_module_name = HSR_BASE_MODULE_NAME;

View File

@ -28,6 +28,10 @@ void tx_table_file(struct game_data *game, wchar_t *buf) {
// Checksum the TXS section // Checksum the TXS section
IMAGE_SECTION_HEADER *txsSection = pe_find_section(baseMap, game->txs_section_name); IMAGE_SECTION_HEADER *txsSection = pe_find_section(baseMap, game->txs_section_name);
if (!txsSection) {
msg_err_a("Could not find %s in %s. " ISSUE_SUFFIX, game->txs_section_name, game->base_module_name);
}
uint32_t txsChecksum = crc32c(0, baseMap + txsSection->PointerToRawData, txsSection->SizeOfRawData); uint32_t txsChecksum = crc32c(0, baseMap + txsSection->PointerToRawData, txsSection->SizeOfRawData);
// Format the path // Format the path

View File

@ -1,4 +1,4 @@
project('jadeite', 'c', version: '3.0.5') project('jadeite', 'c', version: '3.0.9')
nasm = find_program('nasm') nasm = find_program('nasm')
gen_res = find_program('gen_resources.sh') gen_res = find_program('gen_resources.sh')

View File

@ -1,42 +1,42 @@
{ {
"jadeite": { "jadeite": {
"version": "3.0.5" "version": "3.0.8"
}, },
"games": { "games": {
"hi3rd": { "hi3rd": {
"global": { "global": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "6.9.0"
}, },
"sea": { "sea": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "6.9.0"
}, },
"china": { "china": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "7.0.0"
}, },
"taiwan": { "taiwan": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "6.9.0"
}, },
"korea": { "korea": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "6.9.0"
}, },
"japan": { "japan": {
"status": "verified", "status": "verified",
"version": "6.8.0" "version": "6.9.0"
} }
}, },
"hsr": { "hsr": {
"global": { "global": {
"status": "verified", "status": "verified",
"version": "1.2.0" "version": "1.3.0"
}, },
"china": { "china": {
"status": "verified", "status": "verified",
"version": "1.2.0" "version": "1.3.0"
} }
} }
} }