Comments (27)
Images are retrieved asynchronously, they do not impact parsing performance aside from local images. I might add that option later on. By the way, timeout is not an error. SRM continues to retrieve images after timeout.
from steam-rom-manager.
SRM can have only 1 shortcut per app id. There can be many apps with the same name, but app id is what matters. Grid images are named after app ids. For example, we have app id 21354894132115
. SRM will create grid image 21354894132115.png
. Now, what about the other apps that have 21354894132115
as their id? I can't just somehow make multiple 21354894132115.png
files in the same directory.
What about desktop shortcut? Multiple generated entries will share steam://rungameid/21354894132115
. What app should be lauched if some of them have the same id?
Those are 2 reasons I don't allow multiple entries with same app id.
from steam-rom-manager.
In Reference to post by @FrogTheFrog "Check out the latest push. It has a new option to append arguments to executable instead of adding them to specific field in steam file. Appended arguments change file executable string, therefore changing the app id. Any feedback would be welcome as I don't have many games to test it with."
I turned this option on for all my emulators that use the same EXE but have a different .DLL file for the "core". It works perfectly. Steam cant tell the difference between having the exe argument in the "Target" line or the "Launch Options" section. Thank you for adding this enhancement. Now I can have all of my games correctly named, even if they have the same title name but on different consoles.
from steam-rom-manager.
@HEspoke These roms have the same executable?
from steam-rom-manager.
Yes, actually because they both use retroarch to emulate but a unique executable line argument for each console (they have different .dll files that distinguish them with the retroarch.exe)
If they had different executables then there wouldn't be a problem and there would be two identical named roms in the "App List"? @FrogTheFrog
from steam-rom-manager.
@HEspoke The problem is that Steam uses a hash from executable and app name to generate app id. For some reason Steam allows to add multiple game entries that have same app id, but they share the same grid image and the same shortcut for launching an app (1 shortcut for multiple apps, like WTF?). For that reason I allow only one app entry to have the same app id.
However, by changing app title, you automatically change app id. This can be done by editing title modifier
field to, for example, ${title} (SNES)
. Now all games, generated from current parser configuration will have (SNES)
appended to them.
from steam-rom-manager.
I see, I know its your prerogative but it would be good for SRM to have a 1:1 creation of shortcut with the exe even if there are duplicate. Reason is my N64, SNES, NES, Sega CD, Genesis, and PS1 all use retroarch.exe and their distinction is in the executable argument for the different .dll files. That is how retroarch launches each one of its "cores" is with the different .dll files in the argument. This is a common method of emulation using the ICE program and if SRM is going to be a replacement, it would be nice to bring this over.
I totally get why you made SRM to make only 1 shortcut per app name but if the only reason for doing that is to avoid having the same Steam Grid icon, I would its worth having duplicate images and then just customize them to be different in the App List.
from steam-rom-manager.
@HEspoke Can I close this issue? I kinda answered what's the problem and how to solve it using title modifier
. Dunno what else I can do.
from steam-rom-manager.
OK, if we can figure something out in the future I will reopen it. Thanks
from steam-rom-manager.
@FrogTheFrog I was looking through an old VDF file and I remembered that I had two games that were identical in name [Duck Tales] but steam made two separate IDs for them. You mentioned in a previous post that steam will make the same ID if the game shares the same name. This is partially true, I think that steam will make two different IDs if the name is the same but the filetype is different. So, if you allowed SRM to make multiple instances of the same game name and they have different file types (they would have different files types if they are from two different systems) then they should generate two separate steam IDs. Take a look at my example below from these two different games that share the same title but are from different systems. So they have different Steam IDs.
http://consolegrid.com/games/6740
http://consolegrid.com/games/7183
Can you also integrate consolegrid when the program builds a app list. The more Steam grid image finder sites that are available, the better. You could also have a list of the different ways that SRM retreives the images and have a toggle for each one.
X consolegrid
X retrogaming.cloud
X local images
X steamgriddb
from steam-rom-manager.
Regarding ids:
- Steam games have their own unique ids, whereas non-steam do not. They have to be generated using this "formula", function or whatever you call it:
function generateAppId(quotedExecutableLocation: string, title: string) {
let crcValue = crc.crc32(quotedExecutableLocation + title);
let longValue = new long(crcValue, crcValue, true);
longValue = longValue.or(0x80000000);
longValue = longValue.shl(32);
longValue = longValue.or(0x02000000);
return longValue.toString();
}
As you can see only quotedExecutableLocation
and title
make up app id. Steam won't show grid image if app id is incorrect, thus preventing me from modifying id to solve your problem.
6740
and7183
are not valid ids. Console grid just made them up for indexing or something.
Finally, ConsoleGrid was supported before, but it looked like it was dead so I removed it. I could add it, but I can only retrieve top rated image from it :/
from steam-rom-manager.
@HEspoke Check out the latest push. It has a new option to append arguments to executable instead of adding them to specific field in steam file. Appended arguments change file executable string, therefore changing the app id. Any feedback would be welcome as I don't have many games to test it with.
from steam-rom-manager.
@FrogTheFrog Sure thing, I will definitely check it out later tonight. I have a question for ya, How does SRM find images through the retrocloud API? Does it use the steam app ID to find the image or does it use the title of the game? I ask this because if it uses the Steam App ID, how do we know that the ID matches the generated one from SRM and the app ID that is on retroclouds website?
from steam-rom-manager.
All images from all providers are retrieved using title as request parameter. Only Steam games can be retrieved via unique app id. Non-steam games by design have dinamic 64bit app ids that are not used anywhere else besides user's pc.
from steam-rom-manager.
@FrogTheFrog I am currently working with the guy who runs retrogaming cloud and having him look into why we arent getting reliable population when SRM runs http://retrogaming.cloud/api/v1/game/${game}/media
I know when ICE, if you didnt have the config file set up properly then ICE could not find the images from consolegrid.com. Example, If you used Nintendo64 as your emulator name instead of N64 it would not have any images because N64 was the "key" that the website recognized for its directory structure. If you go to http://retrogaming.cloud/ you will notice on the site that there are Platform Keys also. That leads me to think that when a user makes a new entry in your program, the Title of the system needs to match these platform keys.
from steam-rom-manager.
@HEspoke Sorry, didn't quite get what you're talking about? It's very abstract, could you give a few examples regarding retrogaming
? As for consolegrid
I simply searched for a title in all consoles. Anyway, as I mentioned before, I can only get one image from consolegrid
. I took a look into consolegrid's
github yesterdays and found plans for v2 API which would allow me to get all images, but those plans ended somewhere in 2015 when the owner just stopped communicating.
from steam-rom-manager.
@FrogTheFrog
I think you are using the highlighted link in your code. Could you just explain to me how that {gameiD} is being generated by SRM so that it is inserted into the highlighted link for retrogaming to serve back the media request? Thank you for helping me understand this stuff
from steam-rom-manager.
@HEspoke I get all ids using http://retrogaming.cloud/api/v1/game?name=. Then, for each id, I use http://retrogaming.cloud/api/v1/game/${game}/media to retrieve images. This process consumes quite a lot of resources which might lead to interface stutter and a lot of request timeouts. I might do something to prevent this stutter, but first I'll wait for new API he said he might make to reduce timeouts. New API should return all images without the need to retrieve ids for a game.
from steam-rom-manager.
@FrogTheFrog Ok, I understand now. Hopefully you can find a work around. Its odd to me that even with the amount of resources consumed that there would be so many time outs from the server. I think once you add in the ability to Globally turn on local images when building a App List it will make my OCD of having so many blank Steam Grid images go away. =)
from steam-rom-manager.
@HEspoke Why can't you enable them locally right now? I should be just a simple copy-paste. Also, if you want to help, it would be great if you could upload your images to SteamGridDB
.
from steam-rom-manager.
@FrogTheFrog Do I just paste the images into my steam folder where the grid images are already stored? If thats all I need to do then what does the "Local Images" slider do in your program? And yes, I will start uploading to SteamGridDB, do you think that is a better option then Retrogamingcloud?
from steam-rom-manager.
@HEspoke You need to provide a path to local images. See some examples on the left on how it works. Also, yes, so far I prefer SteamGridDB as it is need and tidy and has no timeouts. Btw, how many images do you have?
from steam-rom-manager.
@FrogTheFrog I remember seeing the option to add a path for local images but it was a bit off putting because that path is there for every emulator I created. It would be easier for the user to understand if there was only one global section for local images. That way the user doesnt have to enter in a file path leading to the same directory for each emulator. Not a big deal, I can just copy and paste the path in each emulator.
I have quite a bit of images but I am not able to use my computer at the moment that has all emulation files on it so I cant tell you exactly right now. I will get started on adding in the more obscure titles, such as Wii U games
from steam-rom-manager.
@HEspoke We could split images to upload, if you give them to me via dropbox, google drive or somehow else.
from steam-rom-manager.
@FrogTheFrog Is it possible to integrate a toggle to turn off or turn on the different Steam Grid sources that you implemented? Consolegrid.com , retrogamingcloud, SteamGridDB, local. That way if one of them acts funky or is down then it will speed up the parsing process tremendously. For example. If i only had SteamGridDB and Consolegrid turned on right now then I would not receive any errors when parsing.
from steam-rom-manager.
@FrogTheFrog You might want to consider renaming the Timeouts something else if they aren't really Errors. In the Log you might want to change the button name at the bottom to something else other then Error. Otherwise all of your users will call the timeouts errors since they are in the error section of the Log.
I tried using my local folder for the Steam Grid images but it is not working correctly. I think it has to do with the name of the images. Do the name of the images have to be matched to the name of the ROM title? I guess that would be the only logic you could use. If that's the case then I will go through and start renaming them in order to start uploading them to SteamGridDB and just abandon a local image library that is stored locally.
from steam-rom-manager.
These timeouts are not what I meant :D They are actually errors. I'll try to look int them tommorow. You were right regarding local images, I might also try to do something about it in the future. Also, don't rename images as it is useless try uploading at least one first. You'll understand what I mean when you do that.
from steam-rom-manager.
Related Issues (20)
- [REQUEST] Add support for Dualsense Edge in Steam ROM Manager HOT 2
- [REQUEST] Reword "Please shutdown Steam if it is running" HOT 3
- [REQUEST] Make this program scan subfolders? HOT 1
- Battle.net parser doesn't see Diablo IV or Diablo II HOT 1
- [REQUEST] custom titles HOT 1
- [REQUEST] per parser artwork language options HOT 7
- [REQUEST] option to keep original title when fixing match HOT 2
- [REQUEST] Let us see the file name of a game in the Parse page HOT 1
- [BUG] No games on view games page even after adding to steam and refreshing HOT 2
- [REQUEST] Seperate file for user-defined customVariables HOT 2
- [BUG]Why the "Force download presets" button which in settings is disabled? (version:2.4.29) HOT 1
- [REQUEST] Add additional scrapers HOT 6
- [BUG] Unable to Launch Ryujinx games with apostrophe in names
- [REQUEST] Parsing of GOG games installed directly instead of via GOG Galaxy HOT 3
- How do I downgrade to before all the controller layouts were unified? HOT 1
- Only English language is available in the Settings, with no other language options. HOT 1
- Use icon artwork when creating desktop shortcuts from Steam
- Fatal error occurred in preview (Flatpak SRM failing to follow symlinks) HOT 1
- [BUG] EA Desktop parser failed with fatal error: TypeError: Cannot read properties of undefined (reading 'tagName') HOT 6
- [BUG] Adding to library via CLI stuck HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from steam-rom-manager.