ugtrain / ugtrain

The Universal Elite Game Trainer for CLI (Linux game trainer research project)
https://github.com/ugtrain/ugtrain
GNU General Public License v3.0
142 stars 10 forks source link

game_path can't handle spaces #4

Closed qwc closed 9 years ago

qwc commented 9 years ago

Hi, I stumbled upon ugtrain just yesterday and I'm playing around a bit with it, because I am already quite familiar with scanmem, but I'm missing the features from cheat-engine.

So I have a game I wanted to try with ugtrain but the path contains a space character and I have no possibility to tell ugtrain to recognize it as a part of the game path. '/path with spaces' and "/path with spaces" do not work and give back some parse errors...

Here a example:

ugtrain -P -S torchlight.conf                
Loading config file "torchlight.conf".
Error while parsing config (line 2)!
game_path /home/qwc/media/data/SteamGames/SteamApps/common/Torchlight <--

The correct path is: /home/qwc/media/data/SteamGames/SteamApps/common/Torchlight II/Torchlight2.bin.x86_64

Of course I found out, that it's not possible to launch Torchlight2 like this, It has to be launched by the Steam Lib but that's an other issue I'm currently solving. At least I'm trying to... :)

Got the same problem with Metro: Last Light, which also has got spaces in the path. But this game I can start directly without steam.

sriemer commented 9 years ago

Hi Marcel,

thanks for getting in touch and trying ugtrain! How did you notice the tool? I always ask that to improve promotion.

The spaces problem is known. I'll fix it and provide the usual "quoted string" and '\ ' syntax. Thanks for reminding me!

I'm not sure if you've noticed the following drawing: https://github.com/sriemer/ugtrain/blob/master/drawings/dont_cheat_at_steam_inkscape.svg

Or the legal warning in the README. The thing is that ugtrain is developed as a public FOSS project with my real name as a game cheating research and education project and not by your favourite cracking group. So I can't afford getting trouble with commercial game publishers, steam or who ever is making money with games. There may be no public relation between my tool and them. If you do that, then you turn my tool into a cracker tool. I can only discourage doing so and of cause ugtrain is not tested against steam. I stick to the copyright law and only provide example configs for FOSS games as these allow cheating.

I've added the drawing last time I've heard of abuse of ugtrain against steam. The config looked like this:

dota_linux

game_call steam
game_params steam://rungameid/570

So there were definitely no spaces. But the problem is that I had an issue in the discovery library and a crash report with my discovery library visible has been sent to them. So if you make them aware that somebody uses my tool against them, then I really dislike that. I don't want to get to know their lawyers. Please block at least the following domain http://crash.steampowered.com if I can't discourage you from using my tool like that.

What about trying the included examples first?

I'm working with Live USBs now to test adaption for them a bit more and I'm planning to provide an Ubuntu 14.04 amd64 live image with ugtrain, scanmem, objdump, vbindiff and the example games so that they can be run right away as a first try.

Thanks for your proposal to use yaml as the config language. I'm always open for improvement suggenstions and I'll look at it. As I said: Ugtrain is an education and research project. So I was surprised myself being so successful with my game cheating research. The idea was avoiding dependencies as much as possible so that ugtrain is really easy to compile and I haven't had much experience with writing user-space tools in GNU C/C++ when I started development. I'm a Senior Linux Kernel Developer at work. So I'm more familiar with kernel code.

Cheers, Sebastian

qwc commented 9 years ago

Ugh, sorry, that was my fault. I've read your README, but did not think about it when posting the steam game call. Anyways I was just curious about testing a game I've got installed, and the steam lib is a wonderful target for 'playing around'.

I made a little hack in your code to get it working with spaces for MetroLL, but I weren't very successful, because of other errors/problems after that with steam (hope it did not send anything home...).

So, ahm. regarding your questions:

Of course I like C/C++ code too, so I could make out the location of the path problem within a minute but my hack was a fast, not a beautiful solution. You're a lucky guy, you got the job I would define as a favorite/dream job for myself. ;)

Well, I'll keep my fingers off steam-games with ugtrain now officially. :) Regards, Marcel

sriemer commented 9 years ago

The following works now:

game_path /your path with spaces/game_call
game_binpath /your path with spaces/proc_name

Ugtrain adds backslashes in front of the spaces then and always runs the game with a shell now. For "adapt_script" I've decided to enforce that there are no spaces as the path is relative to the config file and I don't want to change using execvp() there.

Patches:

$ git log --oneline --reverse HEAD~4..HEAD
c1e6edac12d1 cfgparser: allow spaces in paths
e7720058bc7c ugtrain: support spaces in the game path
eccb0efdba3e ugtrain: always run the game in a shell
7afc53988db9 cfgparser: enforce no spaces in 'adapt_script' path
qwc commented 9 years ago

Perfect. :)