Main > Driving & Racing Cabinets
Mame hacks that make driving games play better with mouse/spinner/360wheel
geecab:
>>the steering wheel is configured to Paddle Analog and shows up as Mouse X
Should be fine.
>>I must have compiled Mame correctly as it works, which maybe leaves my hacked ioport.c file as the culprit? i'll double check it, but if you've got one you can post that would be great!
OK, I've zipped up the exe I compiled and my ioport.c. The zipped file is called build_0145_outrun.zip and you can download it here:
http://www11.zippyshare.com/v/73958392/file.html
Hope this helps! :)
huwman:
Thanks so much!! I've just been playing Outrun on my Chase HQ cab. Steering is perfect!
If you ever get a chance to look at SCI please let me know. I'll do whatever I can to help, but as you can probably gather, I'm a total novice! This really should be implemented in MAME as it improves the experience of playing these games so much.
Thanks again!
geecab:
Excellent stuff huwman, really glad you've got things going! I'll have a look at SCI next weekend as I quite intrigued as to what it does differently to the others.
>>This really should be implemented in MAME as it improves the experience of playing these games so much.
Cool, I agree too :) I think I'll try and come up with the cleaner solution for it at some point, making it work in the latest version of mame too (ioport.c stuff changed quite significantly in v0147, which is why I've just stuck to editing the old v0145 source), then submit it to the mame team and see what they say.
huwman:
Yes, it's great being able to play some other games properly, after all the money I've spent on Jpacs and optipacs etc!!
I've tried messing around with the dipswitches on SCI in MAME, as there are options for 360 or 270 wheels, but it doesnt seem to make a difference. I also tried Superchase Criminal Termination, as its part of the same series, and that has the same problem.
But Chase HQ works fine, and so does Power Drift!
Thanks again, and I'm looking forward to hearing if you can make any progress with SCI!
geecab:
I think I've got SCI working now. Outrun etc uses IPT_PADDLE for the steering. SCI uses IPT_AD_STICK_X. So I hacked the apply_analog_min_max function in ioport.c some more. In the apply_analog_min_max function, I now check for both types of steering methods (IPT_PADDLE or IPT_AD_STICK_X), so you should be able to run Outrun or SCI with the same exe and the steering will work as expected.
Here what my apply_analog_min_max function looks like now (there just one line that is different from the original outrun hack):
--- Code: ---INT32 spin_history = 0;
INLINE INT32 apply_analog_min_max(const analog_field_state *analog, INT32 value)
{
/* take the analog minimum and maximum values and apply the inverse of the */
/* sensitivity so that we can clamp against them before applying sensitivity */
INT32 adjmin = APPLY_INVERSE_SENSITIVITY(analog->minimum, analog->sensitivity);
INT32 adjmax = APPLY_INVERSE_SENSITIVITY(analog->maximum, analog->sensitivity);
/* for absolute devices, clamp to the bounds absolutely */
if (!analog->wraps)
{
if((analog->field->type == IPT_PADDLE) || (analog->field->type == IPT_AD_STICK_X))
{
value = value + spin_history;
spin_history = 0;
if(value > adjmax)
{
spin_history = value - adjmax;
value = adjmax;
}
else if(value < adjmin)
{
spin_history = value - adjmin;
value = adjmin;
}
}
else
{
if (value > adjmax)
value = adjmax;
else if (value < adjmin)
value = adjmin;
}
}
/* for relative devices, wrap around when we go past the edge */
else
{
INT32 range = adjmax - adjmin;
/* rolls to other end when 1 position past end. */
value = (value - adjmin) % range;
if (value < 0)
value += range;
value += adjmin;
}
return value;
}
--- End code ---
Anyways, I've zipped up the exe I compiled, and my ioport.c. The zipped file is called build_0145_sci.zip and you can download it here:
http://www7.zippyshare.com/v/18199545/file.html
Hope this helps! :)
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version