#454 PGR compatiblity

Aperto
aperto 1 anno fa da Yukimana · 9 commenti
Yukimana commented 1 anno fa

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 commented 1 anno fa
Proprietario

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 commented 1 anno fa

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 commented 1 anno fa
Autore

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 commented 1 anno fa

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 commented 1 anno fa
Autore

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.
Krock commented 1 anno fa
Proprietario

@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 commented 1 anno fa

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 commented 1 anno fa
Proprietario

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 commented 6 mesi fa

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)
Sign in to join this conversation.
Nessuna milestone
Nessun assegnatario
5 Partecipanti
Caricamento...
Annulla
Salva
Non ci sono ancora contenuti.