scottrice / ice Goto Github PK
View Code? Open in Web Editor NEWApplication to automatically add ROMs to Steam
Home Page: http://scottrice.github.io/Ice/
License: MIT License
Application to automatically add ROMs to Steam
Home Page: http://scottrice.github.io/Ice/
License: MIT License
Mostly a usability issue. Noticed this while setting up the final fantasy games. I had them all in numerical values, but consolegrid had them in roman numerals. The search API on consolegrid couldn't distinguish that those are the same.
Problem could be tackled either client or server side.
Ice wont work if Steam is open, and I can mention it again and again, but not everyone will read what I write (in fact, most WONT read what I write). So stop Ice from running if Steam is currently running.
If an N64 game is run by someone who has never used Project64 before, a bunch of things happen. Most notably, their 'first use' wizard pops up and the user has to choose a language etc.
I need to streamline this process. I will try to set up defaults that Ice can use and have those entered into the registry if those values don't already exist (aka, if the first time the user uses Project64 is with Ice, then I will handle setting defaults. If the user has run Project64 before, then I won't do anything).
Would be great if this could run on Linux.
suggestion: use Libretro for emulators
Even though my main use case is with an Xbox 360 controller, I shouldn't ignore Wii games. There is no reason someone couldn't have a wiimote sitting next to their 360 controller in case they start playing Wii games. I should reenable adding Wii ROMs.
Set the input settings of the emulators based on what the user entered in controls.txt.
Search the user's filesystem for the Steam Installation Location. This is mainly a problem on Windows, when Steam stores the userdata directory INSIDE their install directory. For Mac, the userdata directory is always in the same location. Linux I am unsure of.
Set up Ice to pull artwork from a predetermined website. Maybe make the website something that is configurable?
When #27 is completed, the list of emulators will be determined at runtime. Things determined at runtime can have errors. Problems with configuration, problems with loading, etc.
The bottleneck of this process is the supported consoles array. This array is created when console.py is imported, not when any of its code is run. Because of this, throwing a ConfigError doesnt get caught by my main try/except in ice.py.
supported_consoles
should be created at runtime to allow us to throw errors and such.
Currently, the download location for emulators is set in the python file itself, and is a constant. The relative location of the executable inside the zip file is also a constant. Move these into config.txt, and let the user pick where to download them.
I think these should be set on a per emulator basis, so config.txt would have something like...
# The path components of relative-exe-path should be separated by commas, so
# Winbsnes\bsnes.exe
# should be represented as
# Winbsnes,bsnes.exe
[Windows-bsnes]
location=http://somewhere.com
relative-exe-path=Winbsnes,bsnes.exe
Ice was built with an Xbox 360 controller in mind. It is possible though that the user will want to use other controllers, and so I should let them download 'patches' that will update all of the emulators to use the correct control setup.
This will be difficult with something like Project64, which stores it's data in the registry. I also don't know how I will deal with emulators that keep it in a file. Maybe I can write some small scripts to go find and replace the text?
According to a tip on Reddit (thanks Conk1!), Steam stores the path of the exe in the registry at
HKEY_CURRENT_USER\Software\Valve\Steam in a key called SteamPath. Use that instead of making the user do it.
Instruct the user (somewhere) the Ice needs to have steam_installation_location set.
Add a configuration file for Ice. There should be two files,
I'm assuming this has to do with the registry, but during set_control_scheme, Project64 should also have its 'fullscreen' value set to true.
Currently, when the user hasn't set a correct Steam Location in config.txt (normally because they don't know they have to do that), it will show up as an error.
Having an error display for any user that has a non-default steam location seems like a pretty bad user experience. As such, I would like this message to not show up as an error.
Right after Ice downloads Project64, it tells me:
[10/03/13 15:35:46] There was a problem with '[Windows Emulators] N64' in config.txt
[10/03/13 15:35:46] Could not load emulator. Check your spelling, and make sure the emulator is supported for your console
I cannot get past this, I have tried reinstalling ice several times.
Encountered this error with both the windows binary and running source:
[10/03/13 03:31:17] 'NoneType' object has no attribute 'exe'
Traceback (most recent call last):
File "ice.py", line 50, in
main()
File "ice.py", line 36, in main
rom_manager = IceROMManager(shortcuts_manager)
File "C:\Users\Meryl\Desktop\Ice-master\ice\rom_manager.py", line 49, in init
if self.is_managed_by_ice(shortcut):
File "C:\Users\Meryl\Desktop\Ice-master\ice\rom_manager.py", line 61, in is_managed_by_ice
return filesystem_helper.app_data_directory() in shortcut.exe
AttributeError: 'NoneType' object has no attribute 'exe'
Running on Windows 8.
Few other users on Reddit with the same issue: http://www.reddit.com/r/Steam/comments/1nmee5/was_looking_for_a_romemulator_frontend_for_steam/cck0b97
I have tried to get it operating but all i ever see is command prompt blink on quickly and then disappear just as quickly, i have set the roms up properly, and as far as i can tell it should work but when i open up steam it doesn't have the games added.
How do i get the ice.exe to operate correctly?
sorry for noob.
Some ROMs contain region information at the end of the filename. For example, downloading Fire Emblem Path of Radiance might show up as something like
The filename shouldn't change, but in Steam it should show up as
Right now it just says "Go to the provider and upload an image". I know what the provider is, I should tell the user. That way they dont have to go to the config file to figure out what website to use.
Before trying to download all of those images, check to see if the Grid Image Source is valid. I define a valid source as once that responds to requests. I dont know if I could ping the URL or something, but that would be ideal.
If the source isnt valid, dont bother attempting to download grid images.
Dolphin's default save location is on my desktop. This is an inconvenience for me, but for other people, it would end up creating all of the subfolders (including a 'Scott.Scott-PC' folder inside of 'Users'). This is not visible at first, but could be EXTREMELY confusing for people. Plus, I'm sure people who delete it would be pretty pissed when they lose their save files.
For example, in config.txt you could have an 'emulators' section. This would let you specify which emulator the user wants to use for a system.
Example config.txt contents
[Emulators]
# Available Emulators: Nestopia, bsnes
NES=Nestopia
# Available Emulators: ZSNES, bsnes
SNES=ZSNES
etc...
Repo needs to have information like 'Requires a version of python' in the README.
I store the EXE and the emulators on Dropbox right now. That doesn't scale well. Switch to a real file hosting service instead.
So I can now put the ROMs into their respectable folders in the ROMs folder which was generated by Ice. However whenever I try to re-run ice it doesn't say adding or anything and it doesn't download grid images either.
I get his when I run Ice.Py
http://i.imgur.com/ZYEFIoj.png
It pops up and closes real quick before i can read the problem and it doesn't create a folder
Python returns an error when working with particularly large filesets (over 1000).
error: maximum recursion depth exceeded while calling a python object
There is a limit on how far recursion can run in python (default is 1000).
I believe this is happening while it's parsing the steam shortcuts.
You can set recursion limit with sys.setrecursionlimit however a method that doesn't need this to be set would probably be best.
When I run Ice it adds all the .bst's (bsnes save states) in the SNES folder as shortcuts to Steam as if they are SNES games. So every time I run Ice, I then have to go a delete all the extra gamename-1, gamename-2 shortcuts in Steam.
May be an enhancement to SteamShortcutsManager, but if the file doesnt exist, we should not throw an error.
Retried the newest version, but I'm having a trouble with the last emulator.
[10/03/13 12:08:17] =========================Starting Ice
[10/03/13 12:08:17] Downloading http://consolegrid.com/ice_emulators/Winbsnes.zip
[10/03/13 12:08:19] Finished downloading http://consolegrid.com/ice_emulators/Winbsnes.zip
[10/03/13 12:08:19] Unzipping c:\users\brad\appdata\local\temp\tmpsm2ua6.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:19] Found zip file Winbsnes.zip
[10/03/13 12:08:19] Downloading http://consolegrid.com/ice_emulators/WinProject64.zip
[10/03/13 12:08:22] Finished downloading http://consolegrid.com/ice_emulators/WinProject64.zip
[10/03/13 12:08:22] Unzipping c:\users\brad\appdata\local\temp\tmpktq8u7.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:22] Downloading http://consolegrid.com/ice_emulators/WinDolphin.zip
[10/03/13 12:08:33] Finished downloading http://consolegrid.com/ice_emulators/WinDolphin.zip
[10/03/13 12:08:33] Unzipping c:\users\brad\appdata\local\temp\tmppaxhkm.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:35] Configuration missing key for Wii on Windows
[10/03/13 12:08:35] Downloading http://consolegrid.com/ice_emulators/WinePSXe.zip
[10/03/13 12:08:36] Finished downloading http://consolegrid.com/ice_emulators/WinePSXe.zip
[10/03/13 12:08:36] Unzipping c:\users\brad\appdata\local\temp\tmphiz3x3.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:36] Downloading http://consolegrid.com/ice_emulators/WinPCSX2.zip
[10/03/13 12:08:45] Finished downloading http://consolegrid.com/ice_emulators/WinPCSX2.zip
[10/03/13 12:08:45] Unzipping c:\users\brad\appdata\local\temp\tmp7dtjot.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:45] Downloading http://consolegrid.com/ice_emulators/WinGens.zip
[10/03/13 12:08:49] Finished downloading http://consolegrid.com/ice_emulators/WinGens.zip
[10/03/13 12:08:49] Unzipping c:\users\brad\appdata\local\temp\tmpdgv4dh.zip to C:\Users\Brad\AppData\Local\Scott Rice\Ice\Emulators
[10/03/13 12:08:50] No user supplied name for Dreamcast
[10/03/13 12:08:50] Found zip file Winbsnes.zip
[10/03/13 12:08:50] !!!Error was Users' fault. Don't worry about it
[10/03/13 12:08:50] There was a problem with '[Windows Emulators] GBA' in config.txt
[10/03/13 12:08:50] Could not load emulator. Check your spelling, and make sure the emulator is supported for your console
[10/03/13 12:08:50] !!!
[Storage]
[Grid Images]
[Windows Emulators]
[OSX Emulators]
[MacSnes9x]
download-location=http://consolegrid.com/ice_emulators/MacSnes9x.zip
relative-exe-path=MacSnes9x/Snes9x.app
[MacMednafen]
download-location=http://consolegrid.com/ice_emulators/MacMednafen.zip
relative-exe-path=MacMednafen/mednafen
[Winbsnes]
download-location=http://consolegrid.com/ice_emulators/Winbsnes.zip
relative-exe-path=Winbsnes\bsnes.exe
[WinProject64]
download-location=http://consolegrid.com/ice_emulators/WinProject64.zip
relative-exe-path=WinProject64\Project64-launcher.exe
[WinDolphin]
download-location=http://consolegrid.com/ice_emulators/WinDolphin.zip
relative-exe-path=Dolphin\Dolphin.exe
[WinePSXe]
download-location=http://consolegrid.com/ice_emulators/WinePSXe.zip
relative-exe-path=WinePSXe\ePSXe.exe
[WinPCSX2]
download-location=http://consolegrid.com/ice_emulators/WinPCSX2.zip
relative-exe-path=WinPCSX2\pcsx2-launcher.exe
[WinGens]
download-location=http://consolegrid.com/ice_emulators/WinGens.zip
relative-exe-path=WinGens\gens-launcher.exe
[WinVisualBoyAdvance]
download-location=http://consolegrid.com/ice_emulators/WinVisualBoyAdvance.zip
relative-exe-path=WinVisualBoyAdvance\VisualBoyAdvance.exeyAdvance.exe
When I try to run ice.exe, the following log is produced:
[10/03/13 11:48:26] Downloading https://dl.dropbox.com/u/2862706/ice_emulators/Winbsnes.zip
[10/03/13 11:48:27] Finished downloading https://dl.dropbox.com/u/2862706/ice_emulators/Winbsnes.zip
[10/03/13 11:48:27] Unzipping d:\temp\tmpe8mh8m.zip to C:\Users\Eric\AppData\Local\Scott Rice\Ice\Emulators
The file downloaded is only 1 KB and is never actually unzipped correctly.
It appears at this point that ice.exe terminates and does not continue operating successfully. No ROMs are scanned for and nothing is added to Steam upon starting it again.
I have tried to get it operating but all i ever see is command prompt blink on quickly and then disappear just as quickly, i have set the roms up properly, and as far as i can tell it should work but when i open up steam it doesn't have the games added.
How do i get the ice.exe to operate correctly?
sorry for noob.
Command line programs are fine for now, but I should really get a UI set up. For end users, opening an exe that just brings up the command prompt looks really shitty, and the command prompt can sometimes do a really bad job of displaying text. To start, the UI will probably just be another way to display the same text output that the command line does, but it will give me something to build off of if I ever want to make a full UI.
Space on the C drive can be tight (especially for people like Dave with SSDs), and forcing them to put their (potentially) multi-gigabyte ROM library on there isn't fair. Allow the user to choose their ROM library location.
The one 'true' way of exiting Ice emulators is the escape key. Anything else and I don't guarantee the experience.
Make this known to the user somehow. I think the README would be the best bet.
I also plan on having a JoyToKey configuration file set up for Xbox 360 controllers included when I distribute Ice. It will be up to the user to get their hands on JoyToKey though.
You market Ice as "easy to use" and requiring only one or two small configuration steps to get working. However, there is a great deal of ambiguity in how Ice works and how it's supposed to be configured.
For example:
"Using Ice:
That's all we get when it comes to actually making the program work.
What is the "correct directory" for each console? How can I know these names? Is it Game Boy, Gameboy, or GB? What about Game Boy Color, is that a different handheld?
Do we put the ROMs inside the folder ourselves, or does Ice scan for them and move the ROMs around? Does it search only the ROMs folder or the entire computer? This is unclear.
In config.txt it's stated that Ice will create a ROMs folder inside a specified directory. But in my testing, the directory was never created at all. Even when I manually created a ROMs directory, the program did not function.
Going on from 3, what exactly is the point of specifying and having Ice create a ROMs folder if the user has to manually put the ROMs into the correct location and sub-directories anyway?
Looking through some of the config files, I notice references to locations that I used in testing (like Dolphin has the location of the memory card set to C:\Users\Scott.Scott-PC..., which is clearly not ideal).
Test these emulators on machines other than my own, or hell even on other users on my own machine. I need to make sure the games save correctly.
Sometimes I dont want to bother trying to download images. There should be a way to turn this off.
My suggestion would be to make it so that if the Grid Image Source is blank in config.txt
, then skip the step.
ice_logging currently relies on filesystem_helper. That means if I can't log things from filesystem_helper because importing ice_logging from filesystem_helper and import filesystem_helper from ice_logging will cause all SORTS of trouble.
Remove this, so I can log things in peace.
Initial setup ran ok as far as I can tell. I placed the PS1 and PS2 bios in the respective rom folders and 1 ps2 iso in the ps2 rom folder. Upon running Ice again, I get the following:
(begin output)
=========================Starting Ice
An Error has occurred:
global name 'log_file' is not defined
Close the window, or hit enter to exit...
(end output)
Running Windows 7 Ultimate
When Ice is first run, display a message to the users where the ROMs directory is.
Project 64 doesn't work when you download it because one of the settings isn't set via the .reg file.
The 'Game Device' should be set to 'Xbox 360 Controller' (this will obviously change with different controllers
When Ice runs, it appears to create and use the following folder:
C:\Users\Username\AppData\Local\Scott Rice\Ice\Emulators
I am not a fan of programs cluttering up the Users folder with data, without being expressly made aware of it.
Furthermore, having the program extracted to one drive (i.e. D:) only to have it decide to use the system drive (C:) for some things, without alerting the user or even offering the choice to use another directory, is ridiculous.
There should be a configuration option to specify a working directory. Additionally, I think it would be better for ice.exe to use the same directory it is located in, rather than the Users directory, unless it is impossible to do so due to insufficient permissions.
The readme starts with this text:
"Setup:
Make sure that "[Steam] Location" in config.txt is correctly set to your Steam
installation directory.
Run Ice for the first time to add your ROMs directory and to download the
emulators."
However, there is no line in config.txt to specify the Steam location by default. Therefore your program is unusable for new users.
Example
func = platform_specific(windows=func_win, osx=func_osx, linux=func_linux)
Bnes doesn't like .SMC files. not one bit.
But after converting them to .SFC files, which Bsnes should be able to read, ICE won't load them into my steam.
what do?
Currently, I need to tell people where the log file is, which is definitely not great cause its in a hidden folder. Make a way for Ice to copy the log file to the desktop so they can send it to me.
That way when someone says something like "X doesnt work" and I thought I fixed X, I can tell whether it is still broken or if someone is just not running the version that includes the fix.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.