ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
23.86k stars 1.04k forks source link

Counter-Strike: Global Offensive - SDK (745) #851

Open ghost opened 6 years ago

ghost commented 6 years ago

It's not starting at all. I've successfully used the SDK via Wine in the past. Adding PROTON_LOG %command% to launch options produces no logs.

System information

Edit: Does it require the CS:GO Windows version in order to work?

ericek111 commented 6 years ago

I managed to get the launcher running by copying over CS:GO files from Windows version (installed in a separate wineprefix) that were not present in the Linux installation.

cp -R -u -p "/your/win-steam/wineprefix/drive_c/Program Files (x86)/Steam/steamapps/common/Counter-Strike Global Offensive" "~/.local/share/Steam/steamapps/common/Counter-Strike Global Offensive/"

or maybe your file manager will do.

However, then you run into "NVAPI error" when you try to launch Hammer Editor. Running with Wine-Staging 3.14 (my wine command) from console works, since there are NVAPI patches present in Staging:

WINEPREFIX=~/.local/share/Steam/steamapps/compatdata/745/pfx wine "~/.local/share/Steam/steamapps/common/Counter-Strike Global Offensive/bin/SDKLauncher.exe"

I believe this is a Proton thing.

EDIT: It seems that you have to append ".vmf" to every $file variable in Hammer's "Run..." dialog, otherwise the tools will crash. On top of this, you cannot use Windows CS:GO, because that requires Steam to be running. To work that around, you can run your normal CS:GO and simply type "map your_map" whenever you want to reload it.

If you don't like the buggy behaviour of Hammer Editor and you'd rather work on a remote computer or a VM, you can change the copy command to something that synchronizes the finished BSP to your Linux workstation.

ericek111 commented 5 years ago

Okay, Hammer seems to be working fine with latest Proton (3.16-8 Beta) out-of-the-box. You need to launch CS:GO with "Force the use of a specific Steam Play compatibility tool" enabled (Library > left click CS:GO > Properties). Downloading CS:GO SDK and running Hammer afterwards works great.

There's one catch to this method. You can only have Windows CS:GO installed (by checking the option mentioned above) to be able to run SDK Launcher and Hammer. However, Windows files get deleted when you disable Steam Play and install Linux version instead and vice versa. You can back the Windows files up and use them afterwards.

cd ~/.steam/steam
# with disabled Steam Play for CS:GO - using native
find . > list2.txt
# enable Steam Play
find . > list1.txt

diff --changed-group-format='%>' --unchanged-group-format='' list2.txt list1.txt | tar -cvf windowsfiles.tar -T  -
tar xf windowsfiles.tar
# disable Steam Play for CS:GO

EDIT: Check my answer below for a lot easier way.

ghost commented 5 years ago

I'm getting a Failed to initialize NVAPI with error(0xFFFFFFFE), which is required when running on NVIDIA hardware. Your drivers may be corrupt or out of date. error when opening Hammer from the SDK. :confused: Also CS:GO says it's running but it doesn't show up on the screen. I tried launching it with -novid -window/-full params, but to no avail.

ericek111 commented 5 years ago

Right, I forgot... :D I now have an AMD card, everything works fine. CS:GO for Windows doesn't launch, though.

Try launching Hammer with wine-staging, as described in my first comment. The "force Steam Play" option wasn't a thing back then and you had to install Steam and CS:GO into your own wineprefix and copy the files over.

Eoin-ONeill-Yokai commented 5 years ago

@ericek111 So, as of right now, are the steps something like...

I can give this a try sometime soon and see how it goes. I obviously just tried to run the SDK as is and it didn't work, so I'll be interested to see how this process goes.

For the record, when you say cd ~/.steam/steam, that is basically your steam library root directory, correct? Or are there also files within the user-specific steam configuration that need to be maintained in order for this to work? Currently, I have many of my games installed on /mnt/drive_a/Games/SteamLibrary so I figure that's where I'd want to do this windows-files backup strategy?

edit: As an update, the above instructions seem to work. Like mentioned above, you'll want to use wine staging to actually be able to run hammer properly. Perhaps valve could try to automate some of this process but honestly they're probably better off thinking about how to get a native port as it simply adds to the complexity.

I haven't tried compiling or any complicated work yet. Will update in the future. Yes, some of the behavior is a bit buggy, but most of it hinges on what seems to be unimplemented event handling on whatever libraries the Source SDK version of hammer is using. (0077:fixme:ntdll:EtwEventUnregister (deadbeef) stub. might be related? There seems to be a lot of those fixmes printing out...) Because of this, it will often look like objects are selected when they shouldn't be.

I have some old CS:Source maps I've always been meaning to port over to CS:GO, which will probably be a good test case for extended use. I'm also curious to know how things like studiomdl and vtex will work via wine through the command line.

Eoin-ONeill-Yokai commented 4 years ago

So, since this kind of works, is there a way valve could have a flag for linux installs that allows the downloading of windows files as well?

It would be super useful in this specific circumstance... It could even be a command line only install feature?

ericek111 commented 4 years ago

You can download Windows files without the aforementioned hassle by executing this command in the Steam console (type steam://open/console into your web browser):

download_depot 730 732

After that, just copy the files over to your Linux CS:GO installation:

cd ~/.steam/steam && cp -r ubuntu12_32/steamapps/content/app_730/depot_732/* "steamapps/common/Counter-Strike Global Offensive"

If you have an nVidia GPU, sadly, due to a NVAPI error preventing you from entering the editor, it's still necessary to launch it with your local wine-staging:

wine "$HOME/.steam/steam/steamapps/common/Counter-Strike Global Offensive/bin/SDKLauncher.exe"
Eoin-ONeill-Yokai commented 4 years ago

One last comment, latest versions of proton seem to work almost as well as native with some minor drawbacks for cursor behavior when switching between 2d / 3d modes. You still have to do the work arounds mentioned above, but that solution is much better than the laborious ones described earlier. :)

Also, while not directly related to CS GO SDK, it's worth noting that StudioMDL and VTex work pretty well through wine. Compiling all of your models can be as simple as this excerpt of a script I've made:

find ./modelsrc \( -name "*.qc" \) -type f -execdir wine /mnt/path/to/steamapps/common/Counter-Strike\ Global\ Offensive/bin/studiomdl.exe -game 'Z:\mnt\path\to\steamapps\common\Counter-Strike Global Offensive\csgo\' {} +

This will simply go through every qc file and recompile / update the settings. VTex is a similar process with different arguments, ofcourse. If you want to get majorly fancy, I suggest combining the above with something like entr or a cron job.

One last thing I want to try is calling shell commands through Valve Hammer's advanced build settings. In theory, it should be possible to do so by running /bin/sh as an executable and providing the desired shell script.

Eoin-ONeill-Yokai commented 4 years ago

Quick update, there is one major drawback right now to be aware of:

Custom LightMappedGeneric using $phong shading model will fail to render / render as black.

Screenshot from 2019-10-11 20-06-12

To avoid this, you may want to disable $phong lighting until final compile.

ghost commented 3 years ago

This no longer works with wine-staging and Nvidia for me, not even with awful performance as before.

I can open Hammer, but in the Messages windows, it says Invalid game "Z:\home\.....\Counter-Strike Global Offensive\csgo" found in VPROJECT enviroment variable, ignoring., along with a few more errors and warnings, which are there when running on Windows as well. But when I try to edit a map file (even a new one) it just renders artifacts. Some logs from the shell:

01d8:fixme:nvapi:unimplemented_stub function 0x694d52e is unimplemented!
01d8:fixme:nvapi:unimplemented_stub function 0xdad9cff8 is unimplemented!
0230:fixme:d3d:state_linepattern_w Setting line patterns is not supported in OpenGL core contexts.
0230:fixme:d3d_shader:print_glsl_info_log Info log received from GLSL shader #3:
0230:fixme:d3d_shader:print_glsl_info_log     Vertex info
0230:fixme:d3d_shader:print_glsl_info_log     -----------
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[9]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[10]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[11]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log Info log received from GLSL shader #7:
0230:fixme:d3d_shader:print_glsl_info_log     Vertex info
0230:fixme:d3d_shader:print_glsl_info_log     -----------
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[9]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[10]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[11]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log Info log received from GLSL shader #11:
0230:fixme:d3d_shader:print_glsl_info_log     Vertex info
0230:fixme:d3d_shader:print_glsl_info_log     -----------
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[0].zw" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[1]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[2]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[3]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[4]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[5]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[6]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[7]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[8]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[9]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[11]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log Info log received from GLSL shader #15:
0230:fixme:d3d_shader:print_glsl_info_log     Vertex info
0230:fixme:d3d_shader:print_glsl_info_log     -----------
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[0].zw" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[1]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[3]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[4]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[5]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[6]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[8]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[9]" might be used before being initialized
0230:fixme:d3d_shader:print_glsl_info_log     0(27) : warning C7050: "vs_out[11].yzw" might be used before being initialized

Textures are displayed if I open the texture browser, so I think it's just some rendering issue.

kisak-valve commented 2 years ago

CSGO SDK NVIDIA ERROR

Issue transferred from https://github.com/ValveSoftware/Proton/issues/5589. @dev-original posted on 2022-02-18T21:01:14:

Compatibility Report

System Information

I confirm:

(could not get PROTON_LOG=1 %command% to work) ## Symptoms

I start the sdk, and get the selection between the map editor, the model viewer and the face poser. When i select hammer editor, a box pops up with an nvidia error

Reproduction

Open csgo sdk, and choose hammer. Use any of the named proton versions except version 4.11-13.

Eoin-ONeill-Yokai commented 11 months ago

With CSGO replaced with CS2, I think some of this is out of date.

However, I'm still interested in being able to run the CS2 tools on linux. Maybe it's worth updating the title here to reflect a change to CS2 SDK tools?

kisak-valve commented 11 months ago

Hello @Eoin-ONeill-Yokai, in general, feedback on the Proton issue tracker is oriented by game title. No, this compatibility report (appid 745) should not be reused for pondering issues with CS2 tools since the game devs have chosen not to reuse/replace that appid.

Eoin-ONeill-Yokai commented 11 months ago

Ah my mistake, I thought that the appid was the same. Thanks for the quick reply!