#454 PGR compatiblity

开启中
Yukimana1 年之前创建 · 9 条评论
Yukimana 评论于 1 年之前

Well, shit, it seems like Punishing: Gray Raven is going to be another game where you'll need to add (Broken: Anticheat) to. All these companies really love that Tencent anti-cheat.

Well, shit, it seems like Punishing: Gray Raven is going to be another game where you'll need to add (Broken: Anticheat) to. All these companies really love that Tencent anti-cheat.
Krock 评论于 1 年之前
所有者

Is there yet any definitive (i.e. confirmed) information about this matter? To my knowledge, the necessary setup and workaround steps are implemented in the Borb Launcher to get the game running.

Is there yet any definitive (i.e. confirmed) information about this matter? To my knowledge, the necessary setup and workaround steps are implemented in the [Borb Launcher](https://github.com/an-anime-team/an-anime-borb-launcher/issues) to get the game running.
demicorn 评论于 1 年之前

Borb is not being updated. Just use the official launcher

winetricks corefonts vcrun2022

This game does not require any patch to work in linux

Borb is not being updated. Just use the official launcher ``` winetricks corefonts vcrun2022 ``` This game does not require any patch to work in linux
Yukimana 评论于 1 年之前
发布者

They seem to have implemented an anti-cheat in this update. The game just refuses to start, even Windows users are getting crashes with false warnings like this now. I have had the game runnning pefectly for months now.

They seem to have implemented an anti-cheat in this update. The game just refuses to start, even Windows users are getting crashes with false warnings like this now. I have had the game runnning pefectly for months now.
mkrsym1 评论于 1 年之前

Looks like it's the same amazing ACE implementation as #451 , unfortunately the two-line workaround will not work, because the string UnityPlayer.dll is longer than PGRBase.dll and won't fit. Patching it would be a little more involved, but still absolutely trivial. I'm not interested in this game either though.

Edit: yes, you can just take the patched exe from Reverse 1999 and rename it to PGR.exe, it will probably work.

Note: I did not verify any of this (except the fact that it's the same great implementation), merely a guess.

Looks like it's the same amazing ACE implementation as #451 , unfortunately the two-line workaround will not work, because the string `UnityPlayer.dll` is longer than `PGRBase.dll` and won't fit. Patching it would be a little more involved, but still absolutely trivial. I'm not interested in this game either though. Edit: yes, you can just take the patched exe from Reverse 1999 and rename it to PGR.exe, it will probably work. Note: I did not verify any of this (except the fact that it's the same great implementation), merely a guess.
Yukimana 评论于 1 年之前
发布者

I hope it doesn't have a way to detect that it's a different exe. It'd be great if it's dumb in that as well. Using the patched Reverse1999.exe as PGR.exe works perfectly for now.

I hope it doesn't have a way to detect that it's a different exe. It'd be great if it's dumb in that as well. Using the patched Reverse1999.exe as PGR.exe works perfectly for now.
Yukimana1 年之前 重新开启
Krock 评论于 1 年之前
所有者

@mkrsym1 Might it also work to copy or rename UnityPlayer.dll and do the binary patch in reverse?


Is there any official direct link to the Reverse1999 executable for those who would only like to play PGR?

@mkrsym1 Might it also work to copy or rename UnityPlayer.dll and do the binary patch in reverse? --- Is there any official direct link to the Reverse1999 executable for those who would only like to play PGR?
mkrsym1 评论于 1 年之前

The only thing you have to do for the game to start is to somehow call UnityMain. You can do that, for example, with this piece of C code:

void *GetProcAddress(void *module, char *name);
void *LoadLibraryA(char *name);

int wWinMain(void *instance, void *prevInstance, void *cmdLine, int showCmd) {
  return ((int (*)())GetProcAddress(LoadLibraryA("UnityPlayer.dll"), "UnityMain"))(instance, prevInstance, cmdLine, showCmd);
}

You can use any cross-compiler of your liking, e.g. MinGW:

x86_64-w64-mingw32-gcc the_file.c -municode -Wl,--subsystem,windows -o PGR.exe

The compiled binary should then be able to launch both of the games (this might even be more stable than the two-line workaround I provided in #451 ).

Don't bother trying to use this on HI3/HSR/most other ACE games. Most likely they will either crash or exit immediately, or crash at some later point when something will call into the TVM section (which is missing from both PGR and R1999).

The only thing you have to do for the game to start is to somehow call UnityMain. You can do that, for example, with this piece of C code: ```c void *GetProcAddress(void *module, char *name); void *LoadLibraryA(char *name); int wWinMain(void *instance, void *prevInstance, void *cmdLine, int showCmd) { return ((int (*)())GetProcAddress(LoadLibraryA("UnityPlayer.dll"), "UnityMain"))(instance, prevInstance, cmdLine, showCmd); } ``` You can use any cross-compiler of your liking, e.g. MinGW: ``` x86_64-w64-mingw32-gcc the_file.c -municode -Wl,--subsystem,windows -o PGR.exe ``` The compiled binary should then be able to launch both of the games (this might even be more stable than the two-line workaround I provided in #451 ). Don't bother trying to use this on HI3/HSR/most other ACE games. Most likely they will either crash or exit immediately, or crash at some later point when something will call into the TVM section (which is missing from both PGR and R1999).
Krock 评论于 1 年之前
所有者

Thank you very much for this code. For convenience, I compiled your code with the Tiny C Compiler 0.9.27. Use at your own risk.

md5sum:  cd39b70d27f06a9cdec40ba099bca297
sha1sum: 30664fadb9707e9d43a2b92465a86b39c47b03af

Download link: https://drive.google.com/file/d/1NBUOXD3UMGI66GLq_Of0_XsiBGUHXEEO/view?usp=drive_link

Source code for completeness' sake (by mkrsym1):

void *GetProcAddress(void *module, char *name);
void *LoadLibraryA(char *name);

int wWinMain(void *instance, void *prevInstance, void *cmdLine, int showCmd) {
  return ((int (*)())GetProcAddress(LoadLibraryA("UnityPlayer.dll"), "UnityMain"))(instance, prevInstance, cmdLine, showCmd);
}
Thank you very much for this code. For convenience, I compiled your code with the Tiny C Compiler 0.9.27. **Use at your own risk.** ``` md5sum: cd39b70d27f06a9cdec40ba099bca297 sha1sum: 30664fadb9707e9d43a2b92465a86b39c47b03af ``` Download link: https://drive.google.com/file/d/1NBUOXD3UMGI66GLq_Of0_XsiBGUHXEEO/view?usp=drive_link Source code for completeness' sake (by mkrsym1): ```C++ void *GetProcAddress(void *module, char *name); void *LoadLibraryA(char *name); int wWinMain(void *instance, void *prevInstance, void *cmdLine, int showCmd) { return ((int (*)())GetProcAddress(LoadLibraryA("UnityPlayer.dll"), "UnityMain"))(instance, prevInstance, cmdLine, showCmd); } ```
ALEZ-DEV 评论于 6 月之前

For people who are passing by, the anime borb launcher is no longer maintained, so I made one from scratch for people who don't want to pass through the all process of configuring and patching the game, there is the link

For people who are passing by, the anime borb launcher is no longer maintained, so I made one from scratch for people who don't want to pass through the all process of configuring and patching the game, [there is the link](https://github.com/ALEZ-DEV/Babylonia-terminal)
登录 并参与到对话中。
未选择里程碑
未指派成员
5 名参与者
正在加载...
取消
保存
这个人很懒,什么都没留下。