AsherGlick / Burrito

An overlay tool for Guild Wars 2 that works on linux
GNU General Public License v2.0
81 stars 19 forks source link

Zero Config Burrito Link #92

Closed AsherGlick closed 1 year ago

AsherGlick commented 2 years ago

Burrito Link is the system that allows us to read memory from the mumble API. It is quite fast even with the additional communication it needs to do to the point where there are instances where Burrito will render and updated visual before GW2 does (which ironically causes a similar "laggy" feeling). This means that there is no need to increase the performance of the communication method at this time to something like a data pipe or IPC.

What is annoying about Burrito Link however is that it is required to be setup in the same wine environment as the Guild Wars 2 exe itself. Otherwise burrito link cannot access the memory map that Guild Wars 2 writes to for the Mumble API. This has been a major pain point for many users, and currently the only documentation we have is how to support users who use Lutris. With the steam launch there are going to be an increasing number of users who just use Steam Proton to launch their game instead.

There are already third party programs plugins that can be launched when Guild Wars 2 starts, such as ArcDPS. These programs will be inside the correct wine environment already and do not need any configuration by the user beyond installation. This is a great option to avoid additional configuration. As such I am hoping to create four versions of burrito link that can be run in different scenarios depending on what other plugins or preferences the user has.

All of these versions will use the same basic source code to communicate but have different entry points into the code. It may be possible to combine multiple of these together, so if any are technically possible to combine they will be combined in order to reduce the complexity of installation.

There will not be a version that replaces the GW2 binary in order to call both GW2 and Burrito Link.

yFkC1gTR59txdch2dGWT commented 2 years ago

While not zero config and not exactly what this issue is about I think its worth mentioning in the meantime that there is an "easy" way to configure burrito_link.exe on Steam with using Steam Tinker Launch (https://github.com/frostworx/steamtinkerlaunch/wiki/Installation)

Once its installed and configured as per their documentation you can start the game and a new splash screen will appear, where you can click "main menu", and once that is up you can click "game menu" and you get to the settings you see below image these settings will spawn burrito_link.exe separately from GW2 and after GW2 have started.

If you have installed Steam through Flatpak then installing STL will be very easy

AsherGlick commented 2 years ago

That is incredibly useful to know in the time being. At this point I am not planning on deprecating the standalone executable, even after getting the dlls squared away, so this info should stay useful for a good while.

AsherGlick commented 2 years ago

89bc9b6be1a85f7be22e0143ba5948cc350c83ca introduces a d3d11.dll burrito link file that can be placed into the gw2 directory and automatically launched when gw2 launches.

BrntGrbl commented 1 year ago

I'm about 48 hours into switching over to Linux Mint for my gaming and really want to get this addon working with the Steam version. I was able to compile via the makefile (I had to move deffile.def into the parent directory and install the ming32 compiler, then it was smooth sailing). I put d3d11.dll in the main gw2 directory. The collective wisdom of the internet suggested adding WINEDLLOVERRIDES="d3d11=n,b" %command% to the launch options, but that stops Steam from being able to launch the game at all. Are there any steps I'm missing?

STL was also being disagreeable, but I didn't spend too much time with it before moving on to try out the dll route.

AsherGlick commented 1 year ago

@BrntGrbl I have not tried this on steam yet, if I can find a good controller setup for gw2 on my steam deck I will probably do more with steam. I'm going to guess at the problem with my experience with the lutris launcher. WINEDLLOVERRIDES might be overwritten by your command here. If I inspect my running game I see that WINEDLLOVERRIDES is set to a much longer value: d3d10core,d3d11,d3d12,d3d9,d3dcompiler_33,d3dcompiler_34,d3dcompiler_35,d3dcompiler_36,d3dcompiler_37,d3dcompiler_38,d3dcompiler_39,d3dcompiler_40,d3dcompiler_41,d3dcompiler_42,d3dcompiler_43,d3dcompiler_46,d3dcompiler_47,d3dx10,d3dx10_33,d3dx10_34,d3dx10_35,d3dx10_36,d3dx10_37,d3dx10_38,d3dx10_39,d3dx10_40,d3dx10_41,d3dx10_42,d3dx10_43,d3dx11_42,d3dx11_43,d3dx9_24,d3dx9_25,d3dx9_26,d3dx9_27,d3dx9_28,d3dx9_29,d3dx9_30,d3dx9_31,d3dx9_32,d3dx9_33,d3dx9_34,d3dx9_35,d3dx9_36,d3dx9_37,d3dx9_38,d3dx9_39,d3dx9_40,d3dx9_41,d3dx9_42,d3dx9_43,dxgi,nvapi,nvapi64,nvml=n;winemenubuilder= maybe something is already present in that variable when you are setting it to just d3d11=n,b

Can you get any other addons working in gw2? Arcdps is launched via a d3d11.dll file too so any info related to getting that working on steam on linux should also apply to burrito link.

BrntGrbl commented 1 year ago

It turns out I’m just a moron who was trying to run the .x86_64 file wrong, it’s working now! And yeah, I nixed that WINEDLLOVERRIDES command. I’m having a couple of quirks where the game and Burrito don’t want to share mouse and keyboard input, but I’m able to work around that by dropping the game out of full screen, loading a file in Burrito, and then maximizing again. Thanks!

Technetium1 commented 1 year ago

@AsherGlick

if I can find a good controller setup for gw2 on my steam deck I will probably do more with steam

A comprehensive Steam Deck Configuration for Guild Wars 2 (including all combat bindings, a mount radial menu, touch menus for UI, mastery/novelty skills, and squad markers)

SchoolGuy commented 1 year ago

So I got arcdps running on the side with the trick to rename it to dxgi.dll. Burrito logs look like this:

┬─[enno@tower:~/D/Burrito_Linux]─[21:55:27]
╰─>$ ./burrito.x86_64
Godot Engine v3.3.2.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: AMD Radeon RX 6900 XT (navi21, LLVM 15.0.6, DRM 3.48, 6.0.12-1-default)
OpenGL ES Batching: ON

ERROR: get_as_text: Condition "!f" is true. Returned: String()
   At: core/bind/core_bind.cpp:2126.
ERROR: parse: Error parsing JSON at line 0: 
   At: core/bind/core_bind.cpp:3292.
ERROR: parse: Error parsing JSON at line 0: 
   At: core/bind/core_bind.cpp:3292.
accepted peer: 127.0.0.1:50170
Setting transient for
Successfully set transient property!
New Map
Saving Old Map
Loading New Map

I see an empty window on my task list but nothing else is happening. Any ideas?

AsherGlick commented 1 year ago

@SchoolGuy This looks like burrito link is working properly. This might be a display issue in which case you should open a new issue. Check to make sure that burrito's icon is not hiding underneath your window manager's task bar.

SchoolGuy commented 1 year ago

@AsherGlick Will try my luck tomorrow. Is there an FAQ with known leads for this?

AsherGlick commented 1 year ago

This work is pretty much completed as of fc7bdc1bdba9204a2b2b6429132261ae3297dc47, I believe it will work as-is with the addon manager or addon loader but I have not tested it myself because I have not used them before. If anyone wants to test that it does work that would be great, otherwise I am going to close this issue when the PR is merged and wait for someone to complain about the addon manager/loader not working before I investigate it further.