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.
Edit: Does it require the CS:GO Windows version in order to work?
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.
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
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.
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.
@ericek111 So, as of right now, are the steps something like...
list_linuxnative.txt
while native linux version is installed.list_windowscompat.txt
, this time capturing all library files while CSGO steam play compatibility is turned on.windowsfiles.tar
directory. diff --changed-group-format='%>' --unchanged-group-format='' list_linuxnative.txt list_windowscompat.txt | tar -cvf windowsfiles.tar
windowsfiles.tar
file which will restore all the windows-specific files. 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.
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?
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"
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.
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.
To avoid this, you may want to disable $phong lighting until final compile.
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.
Most helpful comment
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):After that, just copy the files over to your Linux CS:GO installation:
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: