Modificar la velocidad a la que se ejecuta un proceso (alternativa de Cheat Engine como Flash Game Speed ​​Hack)

20

En Windows, hay una herramienta para juegos Flash llamada Cheat Engine que puede acelerar / reducir un proceso en una cantidad X, haciendo que el tiempo necesario para que una tarea en un juego vaya más rápido o más lento que en el mundo real. Esto es especialmente útil para los juegos basados ​​en el tiempo que te hacen esperar una X cantidad de tiempo para que se termine un edificio, se complete una cosecha, etc. Esto también se aplica a los juegos en los que necesitas que sean más lentos para que puedas defenderse de varios enemigos (juegos de zombis, etc.) o juegos que su dificultad radica en la rapidez con que uno puede completar algo.

Pero esto no se limita a los juegos Flash basados ​​en la web. Cheat Engine también puede acelerar / disminuir otros juegos (Half-Life, Quake 3, etc.).

¿Hay alguna manera de hacer esto en Ubuntu?

Aquí está la opción SPEED HACK a la que me refiero usando la herramienta "Cheat Engine" en Windows y en realidad es la opción que el 99.99% de los usuarios de Cheat Engine usan Cheat Engine para:

ingrese la descripción de la imagen aquí

Debo mencionar que no estoy buscando un método para detener el proceso cada milisegundos (como ralentizar Firefox o Chrome en lugar de ralentizar el juego Flash). Por ejemplo, ralentizar Firefox no funcionaría, ya que también ralentiza todo lo demás, por lo que no sería un truco de Speed ​​tanto como ralentizar el proceso en general, incluidas todas las acciones del usuario. Básicamente todo sería igual, solo que más lento. Lo mismo se aplica para acelerar el proceso.

Estoy buscando una manera de hacer esto con los juegos Flash basados ​​en la web y / o los juegos Wine emulados.

Luis Alvarado
fuente
1
Creo que este problema será experiencia hasta que salga algún "Cheat Engine for Linux".
Luis Alvarado
unos seis meses después, ¿hay alguna respuesta a esta pregunta (no estoy contando la prioridad del proceso como una respuesta ... ya que de todos modos no funciona)?
Yanick Rochon
No sé nada de esto, pero después de leerlo, se me ocurrió la idea de por qué no emular el flash y agregar algo de automatización, tal vez incluso algo de inteligencia artificial para anticipar los cambios. No me pregunte 'cómo' porque, como dije, no tengo idea de cómo hacer sucede

Respuestas:

3

Respuesta corta, no. No hay un botón 2x ​​para la programación del proceso. Lo mejor que puede hacer es usar cgroups para lo que le interesa para obtener más tiempo de CPU, a expensas de otro proceso. Si tuviera que adivinar, la razón por la que Speedhack incluso funciona es porque está haciendo negocios manipulando el tiempo de ejecución de flash, o simplemente llamándolo una máquina virtual. No es que esté acelerando el programa, ha cambiado los parámetros fundamentales en los que se basa toda la VM. Supongo que lo mismo sería posible con algo como Java o Python.

Bueno, supongo que tendrás que seguir haciendo trampa en farmville en Windows. Vergüenza.

ppetraki
fuente
3

Estos pueden ayudar a ralentizar los procesos, pero no a acelerarlos ...

1) SIGSTOP y SIGCONT:

El killcomando puede emitir una STOPy unas CONTseñales a un proceso con un pid. Lo he usado para 'pausar' y 'estrangular' scripts de Python antes, y funciona bien para ese propósito.

Aquí hay un ejemplo en un script bash (pase el PID del proceso relevante como parámetro de línea de comando):

PID=$1
while true; do 
    sleep 0.5
    kill -s STOP $PID
    sleep 0.5
    kill -s CONT $PID
done

Esos sueños (en segundos) tendrían que reducirse a una cantidad mucho menor para reducir las sacudidas, pero el intervalo más grande lo hace más obvio para las pruebas.

Una vez que esté satisfecho con un intervalo particular, puede hacer que la proporción de duermas sea ajustable con una variable.

2) Otra posibilidad, para el estrangulamiento, es 'cpulimit':

sudo apt-get install cpulimit

Para limitar Firefox al 30% de CPU:

cpulimit -e firefox -l 30
laher
fuente
¿No sería esto realmente lo contrario de lo que está preguntando?
Uri Herrera
1
Estaba respondiendo la parte sobre "juegos en los que necesitas hacerlos más lentos para que puedas completar un nivel difícil"
laher
1

Sugeriría un par de cosas. Si de hecho es farmville / algo jugado en la red (como sugirió ppetraki), creo que una vía es ir por la ruta greasemonkey (es una plataforma que permite ejecutar todos los scripts basados ​​en JavaScript para permitir ajustes más avanzados en todos los niveles del navegador / representación de página). No menos, leí todas las demás respuestas muy rápidamente, y sorprendentemente no vi a nadie mencionar Wine http://www.winehq.org/documentation .

Más específicamente, si el vino normal no funciona (lo que pude hacer que funcione, lo mejor fue probar 32 bits), no se pierde toda esperanza, ya que esto suena como un candidato perfecto para la extensión / complemento Wine 'esque programa', Wine-Hacks, 'le indica al usuario un recorrido para instalar varias piezas de software que cumplen con requisitos particulares / etc ... (esta es una vía muy fácil, si la configuración tradicional del vino no funciona ) Esta es una situación interesante, y es importante recordar que Linux en general le brinda al usuario una plataforma mucho mayor para personalizar y ajustar los diversos procesos / hilos / etc. en todos los niveles ... Sin embargo, una gran cantidad de lectura generalmente proviene de eso. En una perspectiva de nivel inferior, uno podría, si el juego está utilizando comunicación entre procesos, ajustar las velocidades en los sockets ('vmstat' / '

Pero al mirar su imagen y haber descargado la aplicación yo mismo, entendiendo cómo funciona la aplicación, y el hecho de que está leyendo fragmentos de memoria y escaneando direcciones de memoria / etc ... elude que está haciendo exactamente esto , ajustando la comunicación de memoria / interproceso en un nivel bajo (sin embargo, siguiendo esta ruta, estaría creando su propia versión hack del 'Cheat-Engine') podría hacerse fácilmente con un gdb (gcc-debugger, un desarrollador / herramienta de seguridad, ya que hacer este tipo de tareas es una parte común del trabajo de un desarrollador para evaluar mejor cómo funciona la aplicación / su rendimiento general., actúa de manera similar en un ámbito más limitado). Simplemente estaría usando una herramienta diferente para controlar la memoria / secuencia de la comunicación a nivel de socket. No menos, el escenario Wine funcionará, y lo probé brevemente (sin embargo, no lo hago 'No sé cuál es el juego objetivo que estás jugando, ¡jaja!).

Para concluir, para que quede claro, una forma sería reajustar los procesos / subprocesos de proceso (tareas) en Linux / y ubicar las diversas direcciones de memoria y bits utilizados en la comunicación entre procesos / sockets utilizando utilidades / depurador ( ya mencionado). Luego, otra forma más básica que utilizaría la lógica del 'Cheat-engine' en sí mismo en un entorno que no sea Windows, a través de la instalación con Wine, ya que Wine ejecuta la aplicación y la administra en procesos / subprocesos dentro de modo que sea si el programa se ejecuta en Windows mismo. El programa Wine está en todas las distribuciones específicas de Ubuntu que he visto, "'apt-get' / 'aptitude'" para instalar Wine). Además, otra herramienta para depurar / ajustar juegos basados ​​en flash / etc ... es la de Flashbug (una variante de Firebug, al igual que Greasemonkey se usa en Mozilla) ¡Buena suerte y saludos!

William Franklin
fuente
Necesitaría instalar toda la pila con WINE, un navegador que se ejecuta en WINE (a menos que el juego pueda ejecutarse fuera), Flash Player para Windows y el truco Flash Speed ​​(más el archivo SWF obviamente) En cuanto a GreaseMonkey, eso no funcionará trabajo. JS y Flash son tecnologías completamente diferentes.
Piskvor
Es una buena idea que sean tecnologías totalmente diferentes, pero no estaba haciendo esa distinción, flash (de hecho, un complemento propietario) se muestra al estar incrustado en el DOM, y naturalmente, para algunas cosas, uno puede usar esos eventos con los que javascript completamente interactúa como un medio para que los fines influyan en el flash, ya que a veces incluso el flash está incrustado en JavaScript. A menos que hayan eliminado w3 / whatwg todas las interacciones de la página, es el resultado de una ejecución basada en eventos. La ejecución basada en eventos es la razón de ser de javascript (ECMA en los viejos tiempos de la escuela), FYI: 80% + los scripts de greasemonkey son trucos para los juegos.
William Franklin
Tienes razón en lo que es JS, de dónde vino y cómo funciona; pero a menos que el blob Flash realmente exponga una interfaz para cambiar la velocidad del juego (extremadamente improbable), simplemente no puede usar JS para esto: no hay control "incorporado" para dicha interacción. Soy consciente de los guiones de trucos de GM; tenga en cuenta que todos se dirigen a la parte JS / DOM y / o la interacción de Flash con JS, no al funcionamiento del blob de Flash en sí.
Piskvor