Age of Empires II can not change Resolution

Questions about Wine on Linux
Locked
t0mM3k
Newbie
Newbie
Posts: 2
Joined: Tue Mar 16, 2021 2:24 pm

Age of Empires II can not change Resolution

Post by t0mM3k »

Hi everyone,
I finally gave my computer the first try to completely get rid of Windows :) But for my inner child I need the possibility to run some of my good old games :wink:
So I gave wine a shot and I love it. So many games are working just out of the box (and many even with Multiplayer ... amazing).
But unfortunately one of my favorites: Age of Empires II - The Conquerors does not work. I mean, it does work, but I can not change the resolution. 800x600 works just fine, but as soon as I change it to 1280x1024 the game crashes. I have absolutely no idea how to tackle it, so I hope some of the experts here might have an idea.
I found the exact same problem by someone on reddit: https://www.reddit.com/r/wine_gaming/co ... etting_any
He was able to solve it by using wine-staging (what I already do).

I have a Manjaro-Arch Linux with KDE running. I'm using wine-staging v6.3 with a 32bit wineprefix.
I have a GTX1070 with package "core/mhwd-nvidia 460.56-1" installed.
I tried to figure some things out with `winedbg` or `strace wine`. Here is what I have so far:

Code: Select all

X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  12 (X_ConfigureWindow)
  Resource id in failed request:  0x640005a
  Serial number of failed request:  6088
  Current serial number in output stream:  6092
What I find most confusing is, that when I start a game with 800x600 and just quit the game (simply via the games menu -> end game -> main menu -> exit game), the same error occurs
In consequence the game does not save my settings (p.e. the new profile I just created in-game)

Before that error I have several

Code: Select all

0024:err:dplay:DirectPlayCreate Failed to Initialize SP: DPERR_UNAVAILABLE
, but I think they are related to the missing Videos (I renamed the movie-directory), but I'm not really sure.

With strace I figured out the following:

Code: Select all

...
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0\230\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="R\0\0\0f\0\0\0\0\0\0\0\34\0\0\0\31\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="S\0y\0s\0t\0e\0m\0\\\0C\0u\0r\0r\0e\0n\0t\0C\0o\0"..., iov_len=102}], 2) = 166
read(5, "4\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="Q\0\0\0\\\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="\34\0\0\0\0\0\0\0\0\0\0\0L\0\0\0S\0y\0s\0t\0e\0m\0\\\0C\0"..., iov_len=92}], 2) = 156
read(5, "\0\0\0\0\0\0\0\0|\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="W\0\0\0\f\0\0\0d\0\0\0\234\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="D\0r\0i\0v\0e\0r\0", iov_len=12}], 2) = 76
read(5, "\0\0\0\0X\0\0\0\1\0\0\0X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "{\0004\0D\0003\0006\0E\09\0006\0E\0-\0E\0003\0002\0005\0-\0001\0"..., 88) = 88
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="R\0\0\0V\0\0\0\0\0\0\0|\1\0\0\31\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="{\0004\0D\0003\0006\0E\09\0006\0E\0-\0E\0003\0002\0005\0-\0001\0"..., iov_len=86}], 2) = 150
read(5, "\0\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0|\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="W\0\0\0\34\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="C\0o\0I\0n\0s\0t\0a\0l\0l\0e\0r\0s\0003\0002\0", iov_len=28}], 2) = 92
read(5, "4\0\0\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="R\0\0\0L\0\0\0\0\0\0\0\34\0\0\0\31\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="S\0y\0s\0t\0e\0m\0\\\0C\0u\0r\0r\0e\0n\0t\0C\0o\0"..., iov_len=76}], 2) = 140
read(5, "\0\0\0\0\0\0\0\0|\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="R\0\0\0L\0\0\0\0\0\0\0|\1\0\0\31\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="{\0004\0D\0003\0006\0E\09\0006\0E\0-\0E\0003\0002\0005\0-\0001\0"..., iov_len=76}], 2) = 140
read(5, "\0\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0|\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
writev(3, [{iov_base="W\0\0\0\26\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=64}, {iov_base="I\0n\0s\0t\0a\0l\0l\0e\0r\0003\0002\0", iov_len=22}], 2) = 86
read(5, "4\0\0\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0\210\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0\234\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "$\0\0\0\0\0\0\0\0\0\0\0x\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\26\0\0\0\0\0\0\0\0\0\0\0x\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\217\0\0\0\0\0\0\0\0\0\0\0\22\20\2\0T\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\10\226\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0x\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0x\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
recvmsg(12, {msg_namelen=0}, 0)         = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(12, {msg_namelen=0}, 0)         = -1 EAGAIN (Resource temporarily unavailable)
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0x\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0x\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "\216\0\0\0\0\0\0\0\0\0\0\0T\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0 \0\1\0\0\0\0\0j\0\1\0\0\0\0\0T\0\1\0004\0\1\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0|\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0|\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0
write(3, "U\0\0\0\0\0\0\0\324\0\0\0|\0\0\0\377\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0"..., 64) = 64
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\312\0\0\0"..., 64) = 64
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
poll([{fd=16, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=16, revents=POLLOUT}])
writev(16, [{iov_base="\f\0\5\0Z\0 \5\f\0\0\0\0\5\0\0\0\4\0\0\22\0\30\0\1\0@\5(\0\0\0"..., iov_len=416}, {iov_base=NULL, iov_len=0}, {iov_base="", iov_len=0}], 3) = 416
poll([{fd=16, events=POLLIN}], 1, -1)   = 1 ([{fd=16, revents=POLLIN}])
recvmsg(16, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\0\3g\1Z\0 \5\0\0\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
poll([{fd=16, events=POLLIN}], 1, -1)   = 1 ([{fd=16, revents=POLLIN}])
recvmsg(16, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\34\0i\1\1\0@\0057\1\0\0\244p6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
openat(AT_FDCWD, "/usr/share/X11/XErrorDB", O_RDONLY|O_LARGEFILE) = 77
fstat64(77, {st_mode=S_IFREG|0644, st_size=42077, ...}) = 0
read(77, "!\n! Copyright 1993, 1995, 1998  "..., 42077) = 42077
close(77)                               = 0
write(2, "X Error of failed request:  BadW"..., 67X Error of failed request:  BadWindow (invalid Window parameter)
  ) = 67
write(2, "Major opcode of failed request: "..., 35Major opcode of failed request:  12) = 35
write(2, " (X_ConfigureWindow)\n", 21 (X_ConfigureWindow)
)  = 21
write(2, "  ", 2  )                       = 2
write(2, "Resource id in failed request:  "..., 41Resource id in failed request:  0x520005a) = 41
write(2, "\n", 1
)                       = 1
write(2, "  ", 2  )                       = 2
write(2, "Serial number of failed request:"..., 37Serial number of failed request:  359) = 37
write(2, "\n  ", 3
  )                     = 3
write(2, "Current serial number in output "..., 44Current serial number in output stream:  368) = 44
write(2, "\n", 1
)                       = 1
getpid()                                = 30920
mprotect(0x7de97000, 241664, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x7d828000, 245760)              = 0
mprotect(0x7de97000, 241664, PROT_READ|PROT_EXEC) = 0
getpid()                                = 30920
close(45)                               = 0
poll([{fd=42, events=0}], 1, 0)         = 0 (Timeout)
poll([{fd=42, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=42, revents=POLLOUT}])
writev(42, [{iov_base="<2\2\0\0\0`\5+\0\1\0", iov_len=12}, {iov_base=NULL, iov_len=0}, {iov_base="", iov_len=0}], 3) = 12
poll([{fd=42, events=POLLIN}], 1, -1)   = 1 ([{fd=42, revents=POLLIN}])
recvmsg(42, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\1\2\32\0\0\0\0\0\1\0@\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 32
close(43)                               = 0
close(44)                               = 0
getpid()                                = 30920
getpid()                                = 30920
poll([{fd=42, events=0}], 1, 0)         = 0 (Timeout)
shutdown(42, SHUT_RDWR)                 = 0
close(42)                               = 0
close(18)                               = 0
_llseek(31, -3214, [4978], SEEK_CUR)    = 0
exit_group(1)                           = ?
I find it interesting, that the program accesses '/usr/share/X11/XErrorDB', but I can not figure out why the error occurs. Some other games had problems with sound or some missing dlls, but I was always able to investigate, which library was missing (and installing the correct 32bit pendant).

Anyways I hope somebody here might have a clue for me, and I thank you guys very much in advance for your help and your amazing work.
Best

t0mM3k
jkfloris
Level 12
Level 12
Posts: 3141
Joined: Thu Aug 14, 2014 10:10 am

Re: Age of Empires II can not change Resolution

Post by jkfloris »

Sounds like https://bugs.winehq.org/show_bug.cgi?id=49649
You could try

Code: Select all

winetricks renderer=gdi
t0mM3k
Newbie
Newbie
Posts: 2
Joined: Tue Mar 16, 2021 2:24 pm

Re: Age of Empires II can not change Resolution

Post by t0mM3k »

Thank you for the bugtracker-link. The suggested fix/workaround is, to change the registry-key to "gdi". The thing is, in my Setup it aleady is set to gdi. So that didn't help.
I now downgraded to wine 4.3-staging for this particular game and that works. The confusing thing is, in the Link that I provided (reddit) the user wrote, that upgrading to 5.7-staging helped for him. I downgraded from 6.3-staging to 5.7-staging and it didn't work. No I downgraded even further and it works for me. Strange.

Thank you anyway for pushing me into the right direction. The pure existence of a known-bug made me experiment with wine-versions.
Locked