Jump to content
LaunchBox Community Forums

GameLaunchProxy Version 0.0.3.0 (Steam launch proxy, temporary font loading, and more)


Recommended Posts

Incredible and thanks for your work. Really looking forward to it and I know that there is a lot of interest in this through reddit, etc that I seen in the past. 

Would REALLY be nice to have that all in one frontend for the HTpc.

I'll be excitedly awaiting the new alpha even though I'm trying to get the house ready to sell and may not be able to get to it immediately. 

Link to comment
Share on other sites

Alright, I think I got this GitHub thing figured out. I've got the modified code and fresh release posted. Give it a shot and if you run into any problems, let me know. 

https://github.com/lahma69/GameLaunchProxy/releases

P.S. Since I know very little about any other communities (such as on Reddit as you stated) that might have used this app when it was working previously, feel free to notify whatever parties might find it useful. I'm happy to do whatever I can to keep Nielk1's project working until he has time to replace it with his new application.

Edited by Lahma
Link to comment
Share on other sites

Yeah, sorry I haven't gotten back to you, had to take my wife to the ER so that was a good 8 hours of my day gone in an instant... She is fine now BTW. :D

Is the scraper working for you too? I'll give this a try tomorrow morning sometime and report back. There may be a few little things that you could sort out here too that have broken over time. After I put it through its paces, I will report back and let you know what is and what is not working and maybe we can get an idea on priority here too. If you don't mind, I would love to have you as one of my friends on Steam. Nielk1 and I have collaborated a lot on this thing for a long time so if anyone can help with testing and figuring out what needs to be done first, it would be me. My Steam name is just plain old cammelspit, so shoot me a line! :) 

Link to comment
Share on other sites

Wow, that sounds terrible. I'm glad your wife is ok though. I hate having to go to the ER. I will do just about anything to avoid it unless I'm missing an arm or something. 

The LaunchBox scraper is working perfectly in my testing. Your plan sounds great. When you get some time, put it through its paces and take notes of any problems you come across. Since you have extensive experience testing the app already and collaborating with Nielk1, I will follow your lead. Let me know what you think should be priority, and we will tackle those issues first.

I was actually thinking it might be advantageous to create a branch of the application with only the Steam proxy/shortcut and Launchbox scraping components. It would definitely significantly simplify the code, and more importantly, at least in my opinion, really simplify the description of the application. As it is now, if I was looking for an app to do what it is that we use GameLaunchProxy for, and I came across the GitHub page, I really don't think I would have any idea that the app was what I was looking for (based on the current description). Anyways, this probably isn't priority, and we can discuss it later if we think its important. Just an idea.

I added you on Steam, so hit me up. I'm going to bed! Talk to you tomorrow.

Link to comment
Share on other sites

Branching sounds great, easier to explain and promote as well as the bonus of making code simplified makes it seem like a no Brainer. I'm hoping to get some projects done today and check this out in the evening. 

You can hit me up on steam as well, username being Percybuttkins! 

Edited by percybuttkins
Link to comment
Share on other sites

The program is rather old vs LaunchBox so some stuff is done in it in an odd way.  The logic was supposed to do the following:

  1. Attempt to find an existing shortcut, use it if it exists (such as from ICE)
  2. Attempt to find and rename the SteamProxy shortcut, if it works, use it
  3. Attempt to find the platform shortcut and use it
  4. Attempt to find the SteamProxy shortcut and use it without renaming it

All of this assumed that an address offset error would be catch-able, but it was not, so it basically failed hard when step 2 failed.  I have an entirely new design I want to use (a new program from scratch) but I've not had time.  There is this amazing function that doesn't make much sense for existing that adds a shortcut to Steam that disappears after Steam is closed and cannot be edited by the user in the Steam client which is a great candidate.  I am also still looking for a good way to catch these errors.  One way a LB plugin I made called SteamTools survives is the fact its Steam4NET is wrapped in a proxy application because of the 32bit interface, but even then it doesn't respond very kindly because the 32bit proxy application can't properly report an error back along the loopback it uses for IPC.  The fact functions could move also makes things a bit rough since if someone is on the Steam beta client they could have crashing while someone not does not, so an address fix would have to be released at just the right time and people grab it.  I was thinking about maybe an automated method of correction but the software would have to detect that it has the wrong version of Steam4NET for the Steam instance that is running and grab a new one.

Edit: For note, the original proxy's entire purpose was to load fonts temporarily into Windows in such a way they would not stay loaded and even if everything crashed they'd be done after a system reboot.  All the Steam stuff was an afterthought.

Edited by Nielk1
Link to comment
Share on other sites

Nielk1, its great to hear from the creator himself! I really appreciate you taking some time to explain in detail the workflow of the application and how it evolved into what it is now. I actually came across the "temporary shortcut" functionality you described, but I have not looked into it too deeply yet. 

Looking back through the different version of the Steam4Net library and seeing how the Steam client library has changed over time, I noticed that the AddShortcut function has always required the AppName, the ExePath, and the StartDir as the 1st 3 arguments, and always in that order. I was thinking about using dynamic objects (reflection could be used as well) to get the Steam client libraries exported functions, and use those 3 strings as the first 3 arguments to the AddShortcut function. For the remaining arguments of the AddShortcut function, I think we could just use null objects, and then use the single-purpose functions (also gotten using dynamic objects) to set the shortcut icon, set it hidden, etc. It seems like this should resolve the problem of the Steam client library functions changing offsets between releases and the problem of the AddShortcut function changing the number of arguments required. I may be way off here, but at first glance, this seems doable without a ton of work. Do you see any glaring problems with this implementation? Perhaps I will play around with it tonight and see if its possible.

Anyhow, thanks again for your input, and all of the hard work you've put into this application.

Edit: It would appear that I oversimplified things after looking at the steam client dll in IDA. These functions apparently are not exported (unless they actually aren't in the steam client dll), so that makes things a lot more difficult.

Edited by Lahma
Link to comment
Share on other sites

15 hours ago, Lahma said:

Edit: It would appear that I oversimplified things after looking at the steam client dll in IDA. These functions apparently are not exported (unless they actually aren't in the steam client dll), so that makes things a lot more difficult.

Yea it's a virtual function table that's a real pita.  I often dig around and find someone else's vftable dump but sometimes I have to use IDA myself.  I wish I could avoid all these "unsafe" functions.

Link to comment
Share on other sites

Ya, I really wish Valve would just add these basic client functions into their publicly available API/SDK. I'm not sure why they are so opposed to such a thing. I guess when you're essentially the only kid on the block, there's not a lot of incentive to make your application flexible for other developers to integrate with. 

Hey Nielk1, if you happen to look at this thread again any time soon, I got a quick question for you. Actually, camelspit could probably answer this as well. How many times over the course of developing your app did Steam updates break the shortcut functionality (like how many times over how long) by either changing function offsets or the number/type/order of function arguments? I'm just wondering how common the problem is to judge how much work is warranted in trying to find a better way to do it.

Link to comment
Share on other sites

Since Nielk1 first got the Steam launching working, this would make the second time. This has been a little over a year I would say.

I also haven't had a chance to play emulators much so I haven't gotten round to testing your version yet! Sorry... :) 

Edited by cammelspit
Link to comment
Share on other sites

@Lahma Rarely, maybe twice.  That specific vftable doesn't change often.  Other ones change a lot more often that I use for other things, but this one's pretty stable.  You'll also note I wrote a custom parser for the binary VTF formatted file that holds the shortcuts to get around using the unsafe functions whenever possible.

These functions are the functions the Steam client itself uses to talk to the Steam libraries, hence why they change randomly.

Link to comment
Share on other sites

Just thought I would update you guys and let you know that the new Steam beta broke GameLaunchProxy again. It appears that the either the SteamClient interface offset or signature has changed, so its going to require a bit of reversing in IDA to figure out what is going on to update the Steam4Net dll. In the meantime I would suggest using the non-beta client as it is still working fine.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...