Crashes en juegos de hace varios años con el motor de Unreal

Pues hace poco adquirí unas Meta Quest 3, y ando jugando a muchos juegos de VR últimamente, y he estado viendo que muchos que están hechos con el motor del Unreal (anteriores al 4 supongo), crashean al inciarse, cuando no me pasaba en mi anterior PC con esos mismos juegos. Investigando, bueno, no he entendido las cuestiones técnicas, pero básicamente es un problema con el motor y las CPU Intel a partir de la 10th generación. Supongo que muchos juegos normales los estarán parcheando, pero los juegos de VR caen en el olvido incluso por parte de sus creadores. Encontré varias soluciones, una implicaba hacer algo en Windows 11 que me niego a hacer porque no sé que efectos puede tener. Otra es poner lo siguiente en parámetros de lanzamiento del juego en los juegos que están en Steam y que no hace ningún cambio en el SO, al menos no permanente (creo):

cmd /c "set OPENSSL_ia32cap=~0x200000200000000 && %command%"

Funciona, los juegos se incian sin problemas. Ejemplos: Trover Saves the Universe, The Invisible Hours, Obduction, etc.

¿Pero cómo lo hago si el juego no lo tengo en Steam, sino en GOG, Oculus, etc? ¿Alguien sabe cómo pongo eso pero en un archivo .bat o en un acceso directo? Porque ya he intentado poner eso mismo, y no funciona.
En un archivo .bat debes poner lo que está entre comillas seguido del comando para ejecutar el juego, lo que hace el "cmd" en los parámetros es invocar al interprete de comandos desde Steam y el "/c" le indica al interprete que debe ejecutar el comando que está entre comillas. La parte "%command%" también se elimina en el .bat ya que dentro de los parámetros de lanzamiento de Steam solo se usa para ejecutar el juego.

Por ejemplo, para ejecutar el Trover Saves the Universe, el archivo .bat debe contener lo siguiente:

@echo off
set OPENSSL_ia32cap=~0x200000200000000
"C:\Program Files (x86)\Steam\steam.exe" steam://rungameid/1051200

El 1051200 corresponde al id del juego en Steam, se puede obtener en las propiedades del juego.

Para ejecutar un juego que no es de Steam solo cambia la la última línea por la ruta completa del juego o si usa un launcher, por el comando que ejecutaría el juego con el launcher.

No estoy seguro de que funcione, pero es la forma en que se ejecuta el comando definido en los parámetros de lanzamiento de Steam en un archivo .bat.
jajaja
@GordonFreeman si, me ganaron al responder, pero si asi seria el *.bat que requieres.

Lo que si puedo agregar es que,

OK, por mucho tecnisismo es mejor dar la mayor informacion que tengas. y de eso OpenSSL se encarga de la validacion de archivos y mensajes transmitidos para comprobar que no han sido modificados. En especial OpenSSL en el Unreal Engine se encarga de las comunicaciones de red. Y el problema concreto que tiene con Unreal es que la version 1.2 de OpenSSL que se uso en la porgramacion del motor tiene un error con el sistema de verificacion SHA [es un sistema muy usado en la autentificacion de los archivos ISO de sistema operativos y otros archivos importantes] en esos procesadores de generacion 10 en adelante de intel, y es realmente de risa, que un sistema de verificacion tenga un bug de funcionamiento con los circuitos que hacen el procesamiento SHA [uno de los varios sistemas de verificacion que puede usar openssl]. Los procesadores de antes tenian que hacer 'a mano' los calculos del sistema SHA, pero desde hace tiempo los procesadores ya cuentan con circuitos dedicados a estas tareas y con ello instrucciones especificas para que el programador pueda hacer uso de tales circuitos, y OpenSSL precisamente tiene estas instrucciones para facilitar que las utilize el programador

El comando de openssl 'set OPENSSL_ia32cap' lo que hace es deshabilitar las funciones mas avanzadas [las instrucciones mas especializadas de los circuitos que procesan el sistema SHA en el procesador] y el argumento '0x200000200000000' le indica que solo use las funciones para un procesador intel de ID [identificacion del procesador] '0x200000200000000', osea, este comando de openssl le esta diciendo a openssl que ignore la ID del procesador que le envia windows [que seria el modelo del procesador en tu pc] y en su lugar 'lo vea' como el procesador que le estamos indicando que por obviedad sera un procesador intel de generacion 9, y asi no se provoque el error. Este comando solo afecta a la APi OpenSSL y no afecta al resto del sistema

Entonces en el bat lo primero es hacer esto de que openssl 'vea' al procesador 0x200000200000000 y completado esto lo segundo es arrancar elprograma del juego.

Otra forma seria editar las variables de entorno de windows para agregar ese comando 'set OPENSSL_ia32cap=~0x200000200000000' y entonces cada que arranques windows se ejecute, y esto no tendria repercusiones desfavorables

Otra forma tambien es esta que ponen en el foro de steam, es similar a la que dije antes solo que esta se activara cada que un porograma use OpenSSL
-->>steamcommunity.com/sharedfiles/filedetails/?id=2764710147
The workaround fix
Below are steps for a workaround that should let the users affected play the game. You can find it below.

Step 1. Open "Control Panel" by searching for it in Windows search bar, by pressing the Windows button or key.
Step 2. Go to "System & Security"
Step 3. Go to "System"
Step 4. Press "Advanced system settings"
Step 5. Press "Environmental Variables"
Step 6. Create a new "System Variable" (NOT USER VARIABLE)
Step 7. Enter the following into the Variable name box: OPENSSL_ia32cap
Step 8. Enter the following into the Variable value box: ~0x20000000
Step 9. Now press OK.
Step 10. Restart PC. For changes to take effect.


Y la ultima, la de recompilar la parte del motor unreal que utiliza OpenSSL, es recompilar pero usando las versiones mas recientes de openssl que ya no tiene el bug, y la misma empresa desarrolladora del motor da acceso a la informacion y herramientas para hacerlo, pero eso es algo que ya reqwuiere conocimientos de programacion algo mas que basicos, aunque seria la solucion ideal
fonm699 escribió:En un archivo .bat debes poner lo que está entre comillas seguido del comando para ejecutar el juego, lo que hace el "cmd" en los parámetros es invocar al interprete de comandos desde Steam y el "/c" le indica al interprete que debe ejecutar el comando que está entre comillas. La parte "%command%" también se elimina en el .bat ya que dentro de los parámetros de lanzamiento de Steam solo se usa para ejecutar el juego.

Por ejemplo, para ejecutar el Trover Saves the Universe, el archivo .bat debe contener lo siguiente:

@echo off
set OPENSSL_ia32cap=~0x200000200000000
"C:\Program Files (x86)\Steam\steam.exe" steam://rungameid/1051200

El 1051200 corresponde al id del juego en Steam, se puede obtener en las propiedades del juego.

Para ejecutar un juego que no es de Steam solo cambia la la última línea por la ruta completa del juego o si usa un launcher, por el comando que ejecutaría el juego con el launcher.

No estoy seguro de que funcione, pero es la forma en que se ejecuta el comando definido en los parámetros de lanzamiento de Steam en un archivo .bat.

Gracias, era justo lo que quería saber. Funciona.

TRASTARO escribió:jajaja
@GordonFreeman si, me ganaron al responder, pero si asi seria el *.bat que requieres.

Lo que si puedo agregar es que,

OK, por mucho tecnisismo es mejor dar la mayor informacion que tengas. y de eso OpenSSL se encarga de la validacion de archivos y mensajes transmitidos para comprobar que no han sido modificados. En especial OpenSSL en el Unreal Engine se encarga de las comunicaciones de red. Y el problema concreto que tiene con Unreal es que la version 1.2 de OpenSSL que se uso en la porgramacion del motor tiene un error con el sistema de verificacion SHA [es un sistema muy usado en la autentificacion de los archivos ISO de sistema operativos y otros archivos importantes] en esos procesadores de generacion 10 en adelante de intel, y es realmente de risa, que un sistema de verificacion tenga un bug de funcionamiento con los circuitos que hacen el procesamiento SHA [uno de los varios sistemas de verificacion que puede usar openssl]. Los procesadores de antes tenian que hacer 'a mano' los calculos del sistema SHA, pero desde hace tiempo los procesadores ya cuentan con circuitos dedicados a estas tareas y con ello instrucciones especificas para que el programador pueda hacer uso de tales circuitos, y OpenSSL precisamente tiene estas instrucciones para facilitar que las utilize el programador

El comando de openssl 'set OPENSSL_ia32cap' lo que hace es deshabilitar las funciones mas avanzadas [las instrucciones mas especializadas de los circuitos que procesan el sistema SHA en el procesador] y el argumento '0x200000200000000' le indica que solo use las funciones para un procesador intel de ID [identificacion del procesador] '0x200000200000000', osea, este comando de openssl le esta diciendo a openssl que ignore la ID del procesador que le envia windows [que seria el modelo del procesador en tu pc] y en su lugar 'lo vea' como el procesador que le estamos indicando que por obviedad sera un procesador intel de generacion 9, y asi no se provoque el error. Este comando solo afecta a la APi OpenSSL y no afecta al resto del sistema

Entonces en el bat lo primero es hacer esto de que openssl 'vea' al procesador 0x200000200000000 y completado esto lo segundo es arrancar elprograma del juego.

Otra forma seria editar las variables de entorno de windows para agregar ese comando 'set OPENSSL_ia32cap=~0x200000200000000' y entonces cada que arranques windows se ejecute, y esto no tendria repercusiones desfavorables

Otra forma tambien es esta que ponen en el foro de steam, es similar a la que dije antes solo que esta se activara cada que un porograma use OpenSSL
-->>steamcommunity.com/sharedfiles/filedetails/?id=2764710147
The workaround fix
Below are steps for a workaround that should let the users affected play the game. You can find it below.

Step 1. Open "Control Panel" by searching for it in Windows search bar, by pressing the Windows button or key.
Step 2. Go to "System & Security"
Step 3. Go to "System"
Step 4. Press "Advanced system settings"
Step 5. Press "Environmental Variables"
Step 6. Create a new "System Variable" (NOT USER VARIABLE)
Step 7. Enter the following into the Variable name box: OPENSSL_ia32cap
Step 8. Enter the following into the Variable value box: ~0x20000000
Step 9. Now press OK.
Step 10. Restart PC. For changes to take effect.


Y la ultima, la de recompilar la parte del motor unreal que utiliza OpenSSL, es recompilar pero usando las versiones mas recientes de openssl que ya no tiene el bug, y la misma empresa desarrolladora del motor da acceso a la informacion y herramientas para hacerlo, pero eso es algo que ya reqwuiere conocimientos de programacion algo mas que basicos, aunque seria la solucion ideal

Gracias, perfectamente explicado :)
Excelente
Bueno @GordonFreeman ya sabes como es la mecanica en esto del foro ;-): Ya que el foro respopndio a tu llamado, resuelta el dilema y pra darle algo al foro sera que edites el titulo del hilo agregando la etiqueta [SOLUCIONADO] para que otros con el mismo problema le den prioridad al hilo y encuentren su posible solucion.
4 respuestas