Build Your Own Arcade Controls Forum
Main => Software Forum => Topic started by: retango on May 21, 2015, 08:19:08 am
-
Hi!
I share a script I made for Rocket Launcher / HyperLaunch that programs UGC files to Ultimarc's UltraStik 360 Joysticks before launching a Rom. It uses the User Function feature of RL / HL.
UltraStik 360 Programmer
You can define a different UGC file for each Rom or System. It also programs the Joysticks when you exit a Rom, allowing you to define a UGC file for the Front-end. UltraStik 360 Programmer can replace LedBlinky if you are using it only to program you U360s (as I was doing!)
UGC files (UltraStik Game Configuration) tells the UltraMap.exe program which maps to download to which joysticks (numbered 1 to 4). For example, 4-way.ugc tells UltraMap to program the 4-way Map (4-way.um, located in the Maps subfolder of the UltraMap program folder) to both joysticks 1 and 2. In this pack I include 6 UGC files: 2-way, 2-way-vertical, 4-way, 4-way-diagonal, 8-way, analog
With the UltraStick 360 Programmer, you can specify a system (MAME, Nintendo Entertainment System, Atari 2600, etc..) to use a different UGC file per Rom (a "Per Rom System"), or to use the same UGC file for all roms. I include UGC files for most MAME games in the default ini file, with the default as 8-way. I also include some special UltraMap Maps, in order for the 2-way UGCs (left & right and up & down) to still work with Hyperpause (see below)
Installation
* Copy "User Functions.ahk" to the "Rocket Launcher\Lib" (or "HyperLaunch\Lib") folder. WARNING: If you have other User Functions already programmed in User Functions.ahk, do not overwrite your file. You should edit it and add the code provided here.
* Copy "UltraStik 360 Programmer.ini" to the "Rocket Launcher\Lib" (or "HyperLaunch\Lib") folder
* Edit "UltraStik 360 Programmer.ini" to specify the location of the UltraMap software (in the UltraMapExe key). If you don't have it installed, please download it from http://www.ultimarc.com/ultrastik_prog.html (http://www.ultimarc.com/ultrastik_prog.html) and install it. By default, it installs itself in C:\Program Files (x86)\UltraMap.
* Copy the provided UGC files to the UltraMap program folder (in the same folder where UltraMap.exe is in). Also copy the Maps that are in the Maps folder to your UltraMap/Maps folder. Feel free to modify these UGC files with the UltraMap software.
That's it, enjoy! You can further edit the ini file to better suit your needs:
Ini File
In the ini file (UltraStik 360 Programmer.ini, located in Rocket Launcher\Lib) you define a global default UGC (typically 8-way). This UGC is used when there is no specified UGC for either the System or the Rom.
In the [PerRomSystems] section of the ini file, enter "System Name"=true for systems that can have a different UGC files for each Rom. (e.g. MAME=true). If a system is a PerRomSystem, the script looks for a specific UGC for each Rom. If it does not find it, it looks for a default system UGC in the [Systems] section. And if it does not find it either, it uses de global default UGC.
In the [Systems] section, enter the ugc file for each system (without quotes and without the .ugc extension, e.g. Nintendo Entertainment System=8-way). If the current System is a Per Rom System, this UGC will be used as default when no rom UGC is specified. If the current system is not a Per Rom System, this UGC will be loaded for all roms of the system. If a system is not specified in this section, UltraStik 360 Programmer will use the global default. The system FrontEnd is the system name assigned to the front end. This UGC is loaded each time you exit a rom.
In the [Roms] section, enter the UGC file for each rom, for all PerRomSystems (without quotes and without the .ugc extension, e.g. invaders=2-way). If a rom is not specified, the script will use the UGC given in Systems, or the global default.
Note: Pause / HyperPause
UltraStik 360 Programmer does not work with Pause. When you enter Pause, the Rom / System UGC does not change. This might bring problems with the default 2-way mappings that UltraMap installs, since you lack 2 directions. As a fix, I created 2 new Maps: "2-Way, Mostly Left & Right.um" and "2-Way, Mostly Up & Down.um", with the corresponding 2 UGC files: 2-way.ugc and 2-way vertical.ugc. These maps are mostly 2-way, but keep a 4-way functionality for Pause.
Credits: I used most of the rom UGC configs prepared by EMDB for HyperMap (http://forum.arcadecontrols.com/inde...,134128.0.html (http://forum.arcadecontrols.com/inde...,134128.0.html)), and took the main idea of this Programmer from byancey at this forum (http://forum.arcadecontrols.com/inde...tml#msg1483682 (http://forum.arcadecontrols.com/inde...tml#msg1483682)). Thanks to both!
-
I am using this.. and loving it..
-
I have been using this for a week now, works great. Thank you!! :applaud:
-
Very simple to install and edit, and absolutely thankful!
TIP: I noticed that the default 8-way map on Ultrastik lends to mistakes in fighting games, like SF2 and MK. I created a "8-way Hard Diagonal" map, basically editing the 8-way Easy Diagonal map, and it has been a godsend. In the diagonal corners, just make three arrows in a line, surrounded by stickys.
-
TIP: I noticed that the default 8-way map on Ultrastik lends to mistakes in fighting games, like SF2 and MK. I created a "8-way Hard Diagonal" map, basically editing the 8-way Easy Diagonal map, and it has been a godsend. In the diagonal corners, just make three arrows in a line, surrounded by stickys.
I am having this same problem. Can you post the files that you changed?
-
All I did was create a new map in Ultramap. Take the 8-way easy diagonal, and instead of multiple diagonal arrows in each corner, just make them all blank except the top left, middle, bottom right, and the respective corners for the other three. Does that make sense?
\## ##/
#\# #/#
##\ /##
Sent from my iPhone using Tapatalk
-
Love this app, made the Ultrastiks so much easier to work with.
I have a question. Does your app only program Player 1 and 2 sticks? I have four on my CP, and I was looking to change the map for 3 and 4 for certain games. I assume the map coded in the ini is laid out to all of the sticks. Is there a way to code one map to P1, and another to P3?
Thanks!
-
Edit - I didn't realize that the 8-way config covers all the games I thought were missing. This is just what I needed. In fact, Andy ought to link to this from the U360 page, because it would save him some emails. Thanks to all!
-
Is anyone running this script with Hyperspin 1.4? For some reason, it's not working for me, nor is it making an error log. .exe path is correct, .ini file is in the same folder as the .ahk, but the maps don't change. I can manually run a command line and change maps just fine. I even tried running the .ahk with Event Dispatcher System, since I am already using it to run HyperMarquee. It seems like the problem for me is in the .ahk.
-
I'm using 1.4 as well with no issues. Where are you sending the exe command from?
Sent from my iPhone using Tapatalk
-
I'm using 1.4 as well with no issues. Where are you sending the exe command from?
Sent from my iPhone using Tapatalk
The User Functions.ahk and Programmer.ini file are in /lib. My Ultramap exe is in A:\Ultramap, and the path to it is set in the .ini file.
-
But what do you use to execute it?
In my HyperHQ, I have Mame to send the parameter -ctrlr CRG_MyRemap when it's executed. That way you'll see it in the log. RL night not be sending the command to the Exe.
Sent from my iPhone using Tapatalk
-
I'm not in front of my cab but I can give you exact details when I see it in front of me
Sent from my iPhone using Tapatalk
-
But what do you use to execute it?
In my HyperHQ, I have Mame to send the parameter -ctrlr CRG_MyRemap when it's executed. That way you'll see it in the log. RL night not be sending the command to the Exe.
Sent from my iPhone using Tapatalk
Ok, my thinking was that User Functions.ahk was always run with Hyperspin. I didn't know there was a command needed. When I tried to run the ahk with EDS, I used (to be best of my ability to recall without looking at it) ControllerConfig(system, game). Was the MAME command covered in the first post or the readme file?
-
The Remap exe has to be sent command parameters for the program to work. I have to look at my cab to give you complete details. But if you try the CRG_REMAP command explained in the read me, execute it from HyperHQ, that should send the command to Mame to run the game with the specific controller setup
Sent from my iPhone using Tapatalk
-
The Remap exe has to be sent command parameters for the program to work. I have to look at my cab to give you complete details. But if you try the CRG_REMAP command explained in the read me, execute it from HyperHQ, that should send the command to Mame to run the game with the specific controller setup
Sent from my iPhone using Tapatalk
Let me know. I see no mention of CRG_REMAP in the readme, or this thread?
-
Okay Im an idiot. I was confusing CtrlRemap with Ultrastik Programmer.
So ignore that CRG_MyRemap stuff.
My .ini file is in LIB folder of Rocketlauncher. My exe path is set to UltraMap.exe in a full path.
can you post your User Functions.ahk code? That might help.
-
Okay Im an idiot. I was confusing CtrlRemap with Ultrastik Programmer.
So ignore that CRG_MyRemap stuff.
My .ini file is in LIB folder of Rocketlauncher. My exe path is set to UltraMap.exe in a full path.
can you post your User Functions.ahk code? That might help.
Sure:
StartGlobalUserFeatures(){
Log("StartGlobalUserFeatures - Starting")
Global systemName, romName
ProgramUltraStik360(systemName, romName)
Log("StartGlobalUserFeatures - Ending")
}
; Use this function to define any code you may need to stop or clean up in every module on exit
StopGlobalUserFeatures(){
Log("StopGlobalUserFeatures - Starting")
ProgramUltraStik360("FrontEnd","Rom")
Log("StopGlobalUserFeatures - Ending")
}
ProgramUltraStik360(systemName, romName)
{
;SplitPath, A_LineFile, , iniPath ;should work, but doesn't!
iniPath :=A_ScriptDir . "\lib"
iniFile=%iniPath%\UltraStik 360 Programmer.ini
IfNotExist, %iniFile%
Log("UltraStik 360 Programmer ini file not found: " . iniFile . ". Please put the ""UltraStik 360 Programmer.ini"" file in the ""Rocket Launcher\lib"" folder.")
IniRead, UltraMapExe, %iniFile%, Settings, UltraMapExe, C:\Program Files (x86)\UltraMap\UltraMap.exe
IfNotExist, %UltraMapExe%
{
Log("UltraMap Script could not find Ultramap.exe not found: " . UltraMapExe . ". Please check path in the ini file. Exiting UltraMap Script.")
Return
}
SplitPath, UltraMapExe, , ugcPath
IniRead, ugcGlobalDefault, %iniFile%, Settings, ugcGlobalDefault
If (ugcGlobalDefault="ERROR")
{
ugcGlobalDefault=8-way
logText:=logText . "ugcGlobalDefault not found in ini file. Using 8-way as Global Default. "
}
IniRead, IsPerRom, %iniFile%, PerRomSystems, %systemName%
If (%IsPerRom%)
{
IniRead, ugc, %iniFile%, Roms, %romName%
If (ugc="ERROR")
{
IniRead, ugc, %iniFile%, Systems, %systemName%
If (ugc="ERROR")
{
ugc:= ugcGlobalDefault
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". No rom nor system UGC found in the ini file, using global default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". Rom UGC not found in the ini file, using system default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". Rom UGC found in the ini file: " . ugc
}
Else
{
IniRead, ugc, %iniFile%, Systems, %systemName%
If (ugc="ERROR")
{
ugc:= ugcGlobalDefault
logText:=logText . " System is " systemName . ", a system that uses the same UGC file for all roms. System UGC not found in ini file, using global default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses the same UGC file for all roms. System UGC found in ini file: " . ugc
}
IfNotExist, %ugcPath%\%ugc%.ugc
{
Log("UltraStik 360 Programmer- UGC file not found: " . ugcPath . "\" . ugc . ".ugc. Exiting UltraMap Script. " . logText)
Return
}
Run, %UltraMapExe% %ugcPath%\%ugc%.ugc /logerrors %ugcPath%\UltraMapLog.log
Log("UltraStik 360 Programmer loaded """ . ugc . ".ugc"". " . logText)
}
-
Strange, my code has two extra components for StartPauseUserFeatures. Here is mine.
StartGlobalUserFeatures(){
Log("StartGlobalUserFeatures - Starting")
Global systemName, romName
ProgramUltraStik360(systemName, romName)
Log("StartGlobalUserFeatures - Ending")
}
; Use this function to define any code you may need to stop or clean up in every module on exit
StopGlobalUserFeatures(){
Log("StopGlobalUserFeatures - Starting")
ProgramUltraStik360("FrontEnd","Rom")
Log("StopGlobalUserFeatures - Ending")
}
; Use this function to define any code you want to run before Pause starts
StartPauseUserFeatures(){
Log("StartPauseUserFeatures - Starting")
ProgramUltraStik360("Pause","Rom")
Log("StartPauseUserFeatures - Ending")
}
; Use this function to define any code you may need to stop or clean up after Pause ends
StopPauseUserFeatures(){
Log("StopPauseUserFeatures - Starting")
Global systemName, romName
ProgramUltraStik360(systemName, romName)
Log("StopPauseUserFeatures - Ending")
}
ProgramUltraStik360(systemName, romName)
{
;SplitPath, A_LineFile, , iniPath ;should work, but doesn't!
iniPath :=A_ScriptDir . "\lib"
iniFile=%iniPath%\UltraStik 360 Programmer.ini
IfNotExist, %iniFile%
Log("UltraStik 360 Programmer ini file not found: " . iniFile . ". Please put the ""UltraStik 360 Programmer.ini"" file in the ""Rocket Launcher\lib"" folder.")
IniRead, UltraMapExe, %iniFile%, Settings, UltraMapExe, C:\Users\MCP\Desktop\Program Files\UltraMap\UltraMap.exe
IfNotExist, %UltraMapExe%
{
Log("UltraMap Script could not find Ultramap.exe not found: " . UltraMapExe . ". Please check path in the ini file. Exiting UltraMap Script.")
Return
}
SplitPath, UltraMapExe, , ugcPath
IniRead, ugcGlobalDefault, %iniFile%, Settings, ugcGlobalDefault
If (ugcGlobalDefault="ERROR")
{
ugcGlobalDefault=8-way
logText:=logText . "ugcGlobalDefault not found in ini file. Using 8-way as Global Default. "
}
IniRead, IsPerRom, %iniFile%, PerRomSystems, %systemName%
If (%IsPerRom%)
{
IniRead, ugc, %iniFile%, Roms, %romName%
If (ugc="ERROR")
{
IniRead, ugc, %iniFile%, Systems, %systemName%
If (ugc="ERROR")
{
ugc:= ugcGlobalDefault
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". No rom nor system UGC found in the ini file, using global default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". Rom UGC not found in the ini file, using system default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses a UGC file per rom. Rom is " . romName . ". Rom UGC found in the ini file: " . ugc
}
Else
{
IniRead, ugc, %iniFile%, Systems, %systemName%
If (ugc="ERROR")
{
ugc:= ugcGlobalDefault
logText:=logText . " System is " systemName . ", a system that uses the same UGC file for all roms. System UGC not found in ini file, using global default: " . ugc
}
Else
logText:=logText . " System is " systemName . ", a system that uses the same UGC file for all roms. System UGC found in ini file: " . ugc
}
IfNotExist, %ugcPath%\%ugc%.ugc
{
Log("UltraStik 360 Programmer- UGC file not found: " . ugcPath . "\" . ugc . ".ugc. Exiting UltraMap Script. " . logText)
Return
}
Run, %UltraMapExe% %ugcPath%\%ugc%.ugc /logerrors %ugcPath%\UltraMapLog.log
Log("UltraStik 360 Programmer loaded """ . ugc . ".ugc"". " . logText)
}
-
Strange, my code has two extra components for StartPauseUserFeatures. Here is mine.
I tried your code, but still no luck. I notice that the .ahk file has commands to put a log file in the Hypermap directory, but there is no file there after running Hyperspin.
There also is no mention of the .ahk file running in the Hyperspin log. Can you run Hyperspin, run a game, exit, and post a log file? That's \Hyperspin\log.txt
-
Ok, I made some progress. Disregard my last post. First I turned on RocketLauncher logging:
1.Open RocketLauncherUI and browse to the General Settings then RocketLauncher tab
2.Click the Logging Level drop down list
3.Select troubleshooting
4.Next time you launch a game with RocketLauncher, the generated log found at RocketLauncher\RocketLauncher.log will contain all your troubleshooting info.
RocketLauncher logging showed me that the .ahk is definitely launched, and configured correctly.
Here is what I think the problem is: The 'Front End' 4-way map is getting loaded at the wrong time, and replacing the map that is supposed to be for the game.
Test: Put berzerk=2-way in your Ultrastik Programmer.ini file. Run Hyperspin and play Berzerk. If the programmer is working correctly, you should only be able to go 2 ways in Berzerk. What I found is that I could move in 4 directions. Berzerk is actually a default 8-way game. Diagonals don't work. Let me know what happens if you do the same test.
-
It turns out that the script is working correctly. The first reason I thought it wasn't working is that my Q-bert directionals are wrong for some reason, even when the 4-way diagonal map is loaded. Then, when I tested, I assumed that the 2-way map was actually 2-way only, and it isn't. As mentioned, retango made a 'mostly' 2-way map and put that in the ugc file. Now I understand how everything works, and I have to figure out WTH is going on with Q-bert.
-
For Qbert I modified the four way diagonal map, and changed the inputs in Mame to correlate with them. Glad to hear it's working
Sent from my iPhone using Tapatalk
-
For Qbert I modified the four way diagonal map, and changed the inputs in Mame to correlate with them. Glad to hear it's working
Sent from my iPhone using Tapatalk
Yes, that's essentially it. I didn't modify the 4-way diagonal map, but I re-map my MAME controls for Q-bert. Now that I got that right, it's fine. MAME has to be told that you're hitting Joystick Up and Joystick Right at the same time, for each directional.
-
Hey guys - sorry to dig up an old thread but I am having some issues with this plugin - I think.
I set it up exactly as stated and have ultramap working and the programmer pointed to the correct directory.
Everything seems to be running normal - at least im not getting any errors. I played ms pac and I guess its 4 way....but I played sinistar and I KNOW its in 8 way mode. I checked the rom its running against the "list" - and its showing set to analog.
Is there some change in rocket launcher I have to make? I just copied the files as instructed. I dont even know if its running the ahk is being ran.
help??
Thanks!
-
Update - I dont think the ahk is running - I changed the controls to 2 way and still had 8 way stick in sinistar. I verified all my directories are correct but rocket launcher isnt running the ahk.
-
Is it showing in the log? RL now can change maps easily so I stopped using Ultrastik Programmer.
Sent from my iPhone using Tapatalk
-
Yeah, More trouble - I had someone set up RL for me last year when I "started" my MAME project. It asked me to update - which I did after my posts - now its not loading mame - So I guess I have to actually what RL and EDS do.
I liked the ""simpler" times when all you needed was a front end and just map the positions - 4 programs to launch mame (and the extras) is overwhelming.
Thanks
-
....and exactly HOW do you use RL to select the stick profiles without using Ultrastik programmer?
-
I'm not sure why people still insist on using UltraMap when there is the UltraStik SDK (http://www.ultimarc.com/UltraStikSDK.zip).
-
Do you happen to have a tutorial on how to use this? Im not a programmer so everything in this folder kinda doesnt make sense to me. Id use it If I could figure out how to apply it.
Thanks!
PS - have you updated the Mamecompiler64 yet?
-
Thanks, I see this thread is over a year old, but can anyone help with getting this to run on Launchbox?