Aquí hay mucha tela que cortar.
Primero, el tema del orden de los octetos (
bytes), que puede que tú estés usando little-endian pero el juego use big-endian (por ejemplo, juego en red con clientes x86 pero servidores 68K, PowerPC o SPARK).
Segundo, que el propio juego deshaga los cambios silenciosamente o ignore los cambios que hagas mediante un patrón de "código crítico", "
sand-box" u otras técnicas anti-
cheating. Un ejemplo muy simple y no infalible pero que haría rascarse la cabeza a más de dos:
Código Delphi
[-]
IF Assigned (ProcedimientoEnDLL) THEN
TRY
Balas := EstadoJugador AND $000000FF;
ProcedimientoEnDLL (@EstadoJugador)
FINALLY
EstadoJugador := (EstadoJugador AND $FFFFFF00) OR Balas
END;
Con el código anterior da igual que cambies el número de balas en el procedimiento DLL, porque siempre recuperará el valor anterior, incluso aunque cambies el valor directamente en memoria RAM. Claro que ahora me puedes venir con que puedes hacer el cambio en "Balas" y blablablabla... pero no vamos a ponernos aquí a discutir técnicas
anti-cheating porque no es el sitio adecuado.
Tercero, he visto que no es ninguna de las dos cosas anteriores, sino un fallo muy tonto que no voy a decirte más que nada porque me molesta mucho que la gente haga trampas cuando juega, a videojuegos o a lo que sea.
Un saludo.