vQuake resolution change works correctly now with the right mode numbers:
https://nirvtek.com/downloads/RReady.Alpha.20240709.001.zip
MD5: 42db63f2135949b047d86ba1703e1ab3
- vQuake mode selection should work correctly with the right mode numbers and through the menu with the right resolutions.
- vQuake at low resolutions the "LOADING" logo might have some corruption. Actual gameplay/HUD should be fine.
- Anyone running "Sub Culture ," "Interstate '76, or "Interstate Nitro" on fully patched Windows 11 with the June updates will need to
disable Windows virtualisation support and reboot (virtual machine/hyper-v support). This is thorugh add remove Windows components and not the BIOS. The BIOS setting can be left enabled. Not disabling this will cause extremely laggy keyboard input and in the case of i76 jittery AI cars and player camera.[EDIT] Not necessary after the July 2024 updates. June 2024 is broken.
This was a bit weird. The game queries VESA mode numbers in the a pattern 0xXXA, 0xXX0, 0x13X, 0x12X and finally in sequence from the smallest to the largest. These are hexadecimal mode numbers and 0xXXA is modes like 0x10A, 0x12A and so on.
And out of these modes it's only interested in 16 bit modes with a resolution lower than 1024x768. With the V2000 mode list 768x576/16 appears in 0xXXA list and 720x480/16 appears in the 0x13X list. For the V1000 list 512x384/16 appears in one of these lists.
The problems appears to be that modes in these lists are queried again when the sequential query comes along. So using the V2000 list 768x576/16 and 720x480/16 are queried twice. These appear to fill phantom slots at the beginning of the list (vid_modes 0 and 1). Using the V1000 list 512x384/16 appers in one of the earlier lists and again when queried sequentially. Making all modes 0xXXA modes causes a segfault., so the game only allocates a small amount of Ram for special lists; it expects a small number of these modes.
My solution was to reassign these mode numbers with values that took them off the special lists so that they only ever appear in the sequential list. The highest res modes (720x576) cannot appear at the end of the list or it will disappear altogether.
This isn't a clean solution, the internal VESA mode numbers aren't the same as a V1000 or a V2000. But it does work. In fact all the DOS games work and the Windows ones shouldn't be affected. Looking at the F1 code leak for help won't work as the resolution setter is in Verite.DLL and there's no source for that, only redline.dll and the core Windows driver components. Having said that VESA mode numbers are designed to be opaque, the actual values aren't supposed to matter. A list of available modes is queried and iterated through until one matching the res/bit depth is found and then that mode number is passed to the VESA mode set call.
There's still a slight problem. Some display elements like the "LOADING" logo experiences corruption. A few stray horizontal lines appear across the screen. This happens irrespective of whether the modified modes are used or not. So It's an unrelated issue, but becomes relevant as the game now starts up at 320x200/16.
I have a question. Is anyone having stability issues with vQuake with DMA mode enabled. I don't seem to. It seems like a very well behaved game, just like vQuake 2.
The random audio static and slowdown is dosbox related; not having enough CPU grunt. Maybe if I port this to dosbox-staging it'll run better.@Raven-05 did mention the CPU emulation is a lot better with staging.
Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda