https://bugs.winehq.org/show_bug.cgi?id=57300
Bug ID: 57300 Summary: KnightOfKnights crashes once entering the game Product: Wine Version: 9.19 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: d3d Assignee: wine-bugs@winehq.org Reporter: dark.shadow4@web.de Distribution: ---
Since wine-9.12 the game crashes with an assert as soon as you enter the 3d area:
0024:err:msvcrt:_wassert (L"list_empty(&stateblock->changed.changed_lights)",L"../wine-git/dlls/wined3d/stateblock.c",3319) Assertion failed: list_empty(&stateblock->changed.changed_lights), file ../wine-git/dlls/wined3d/stateblock.c, line 3319
To test you need to work around a few other issues: winetricks -q directmusic d3drm d3dxof gmdls
When testing the game, it's advised to check "emulate a virtual desktop" in winecfg, since it only supports low-resolution fullscreen mode. Also, when you have a gamepad plugged in it might not accept keyboard input, keep that in mind when testing.
How to test: To select an option, press z. Just click through your way through. When in "Stage Select", move left with the arrow keys, then press z. Press z again to start the game.
Z might be Y for different keyboards, not sure.
Reverting on current HEAD is not possible due to various merge conflicts.
https://bugs.winehq.org/show_bug.cgi?id=57300
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- URL| |http://ftp.vector.co.jp/34/ | |19/1946/Knight050.lzh Keywords| |download, regression Regression SHA1| |aeb68e5df4b340d75366bb19d55 | |75a70a121e3cb
--- Comment #1 from Fabian Maurer dark.shadow4@web.de --- Bisected to commit aeb68e5df4b340d75366bb19d5575a70a121e3cb Author: Elizabeth Figura zfigura@codeweavers.com Date: Wed Nov 15 11:14:22 2023 -0600
wined3d: Feed WINED3D_TSS_CONSTANT through a push constant buffer.
The issue is caused by moving "struct list changed_lights;" to the top of the struct. Moving it back down makes it work again.
The issue is an overflow inside d3d_device2_SwapTextureHandles
device->handle_table.entries[h2].object = surf1;
This writes a value into changed_lights, which it shouldn't.
The entry table has size 64:
if (!ddraw_handle_table_init(&device->handle_table, 64))
The surf1 value is 68 though, so it is out of bounds. Not quite sure how to best fix. Is it allowed to have more than 64 values?
https://bugs.winehq.org/show_bug.cgi?id=57300
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=57300
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED Fixed by SHA1| |6c157696e747a3d44aaa548b5d0 | |6f27854df9efd
--- Comment #2 from Fabian Maurer dark.shadow4@web.de --- Fixed by https://gitlab.winehq.org/wine/wine/-/commit/6c157696e747a3d44aaa548b5d06f27...
https://bugs.winehq.org/show_bug.cgi?id=57300
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #3 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 9.20.