Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

bugfixes:anomaly_warzone_earth [2017/11/28 22:13] (atual)
aracnus criada
Linha 1: Linha 1:
 +====== Anomaly Warzone Earth ======
  
 +O jogo abre, mas trava logo depois do vídeo de apresentação. É um bug conhecido (que afeta também o jogo //The War of Mine//. A solução foi apresentada [[http://​steamcommunity.com/​app/​282070/​discussions/​0/​610573751159186268/?​ctp=4#​c530647080133257413|nessa discussão]]. Basicamente deve-se salvar o código abaixo com o nome de bugfix.c no diretório onde está o Anomaly:
 +
 +<file c bugfix.c>​
 +#define _GNU_SOURCE
 +#include <​dlfcn.h>​
 +#include <​semaphore.h>​
 +#include <​stdio.h>​
 +#include <​time.h>​
 +#include <​unistd.h>​
 +
 +static int (*_realSemTimedWait)(sem_t *, const struct timespec *) = NULL;
 +
 +int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout)
 +{
 +   if (abs_timeout->​tv_nsec >= 1000000000)
 +   {
 +      //​fprintf(stderr,​ "to: %lu:​%lu\n",​ abs_timeout->​tv_sec,​ abs_timeout->​tv_nsec);​
 +      ((struct timespec *)abs_timeout)->​tv_nsec -= 1000000000;
 +      ((struct timespec *)abs_timeout)->​tv_sec++;​
 +   }
 +   ​return _realSemTimedWait(sem,​ abs_timeout);​
 +
 +}
 +
 +__attribute__((constructor)) void init(void)
 +{
 +   ​_realSemTimedWait = dlsym(RTLD_NEXT,​ "​sem_timedwait"​);​
 +}
 +</​file>​
 +
 +e, dentro desse diretório, compilá-lo com o seguinte comando:
 +
 +  gcc -m32 -o bugfix.so bugfix.c -ldl -shared -fPIC -Wall -Wextra
 +
 +Podem ser necessárias dependências extras, entre elas //​libc6-dev-i386//​.
 +
 +Ao final da compilação,​ deve-se acrescentar o seguinte parâmetro nas opções de abertura do jogo (//Set launch options//):
 +
 +  env LD_PRELOAD=./​bugfix.so %command%
 +
 +E pronto.