For Phantasy Star Online: Blue Burst versions 1.25.10-1.25.13 and the Wine 1.7/1.8 series.
PSOBB tries to write all mipmaps at once on a single LockRect on mip level 0. This is undocumented behavior in Direct3D and PSOBB will clobber the implementation structs if this is not accounted for.
These patches, based on the PlayOnLinux League of Legends patch, do two things:
- Allocates extra memory on every surface in wined3d (prevents clobbering)
- Copies mip data outside the level 0 buffer into the actual mip surfaces for the texture, every time texture UnlockRect is called.
The game will use considerably more memory for textures. Since PSOBB is so old, this is probably not a problem for most people. VRAM usage is not increased, only system memory for the intermediate maps.
There may be a performance hit for the additional memcpys every time a texture is loaded. My Macbook Air does not seem to have any problems.
Grab the wine source and set up your build environment (I use a vagrant container of i386 Arch Linux for Linux builds), you only need the bare minimum necessary to compile the d3d8 and wined3d libraries, which I don't think is much (not even X11 deps).
Configure and make dlls/d3d8 dlls/wined3d
. Copy the generated
d3d8.dll.so
and wined3d.dll.so
without the .so
suffix into your
PSOBB directory.
Make sure you are using the wine source that matches with your wine distribution. I'm lazy and just pulled the master branch, but YMMV.
Turn off Advanced Effects to improve performance dramatically.
Launchers that hack in extra resolutions should work.
Furyhunter, thanks for your work on this patch. I was using your patch for wine series 1.9 and it was working up until 1.9.4 but now i keep getting errors when compiling D3D8, I was wondering if you could point me what should I learn in order to be able to fix these thing in he future by myself, C? Direct3d api? Thanks Again